diff --git a/dist/contracts.d.ts b/dist/contracts.d.ts new file mode 100644 index 0000000..ea8bc92 --- /dev/null +++ b/dist/contracts.d.ts @@ -0,0 +1 @@ +export * from '@tornado/contracts'; diff --git a/dist/tornadoContracts.umd.js b/dist/tornadoContracts.umd.js new file mode 100644 index 0000000..3e489e6 --- /dev/null +++ b/dist/tornadoContracts.umd.js @@ -0,0 +1,34748 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["TornadoContracts"] = factory(); + else + root["TornadoContracts"] = factory(); +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AdminUpgradeableProxy__factory: () => (/* reexport */ AdminUpgradeableProxy__factory), + Aggregator__factory: () => (/* reexport */ Aggregator__factory), + AirdropMock__factory: () => (/* reexport */ AirdropMock__factory), + Airdrop__factory: () => (/* reexport */ Airdrop__factory), + BadRecipient__factory: () => (/* reexport */ BadRecipient__factory), + CTornado__factory: () => (/* reexport */ CTornado__factory), + Configuration__factory: () => (/* reexport */ Configuration__factory), + Core__factory: () => (/* reexport */ Core__factory), + Delegation__factory: () => (/* reexport */ Delegation__factory), + Deployer__factory: () => (/* reexport */ Deployer__factory), + DummySecond__factory: () => (/* reexport */ DummySecond__factory), + Dummy__factory: () => (/* reexport */ Dummy__factory), + ENSMock__factory: () => (/* reexport */ ENSMock__factory), + ENS__factory: () => (/* reexport */ ENS__factory), + ERC20Basic__factory: () => (/* reexport */ ERC20Basic__factory), + ERC20Burnable__factory: () => (/* reexport */ ERC20Burnable__factory), + ERC20Mock__factory: () => (/* reexport */ ERC20Mock__factory), + ERC20Permit__factory: () => (/* reexport */ ERC20Permit__factory), + ERC20Tornado__factory: () => (/* reexport */ ERC20Tornado__factory), + ERC20__factory: () => (/* reexport */ ERC20__factory), + ETHTornado__factory: () => (/* reexport */ ETHTornado__factory), + Echoer__factory: () => (/* reexport */ Echoer__factory), + EnsResolve__factory: () => (/* reexport */ EnsResolve__factory), + FeeManager__factory: () => (/* reexport */ FeeManager__factory), + GasCompensationVault__factory: () => (/* reexport */ GasCompensationVault__factory), + GasCompensator__factory: () => (/* reexport */ GasCompensator__factory), + GovernanceAggregator__factory: () => (/* reexport */ GovernanceAggregator__factory), + GovernanceExploitPatchUpgrade__factory: () => (/* reexport */ GovernanceExploitPatchUpgrade__factory), + GovernanceGasUpgrade__factory: () => (/* reexport */ GovernanceGasUpgrade__factory), + GovernanceProposalStateUpgrade__factory: () => (/* reexport */ GovernanceProposalStateUpgrade__factory), + GovernanceStakingUpgrade__factory: () => (/* reexport */ GovernanceStakingUpgrade__factory), + GovernanceVaultUpgrade__factory: () => (/* reexport */ GovernanceVaultUpgrade__factory), + Governance__factory: () => (/* reexport */ Governance__factory), + IDeployer__factory: () => (/* reexport */ IDeployer__factory$1), + IENSRegistry__factory: () => (/* reexport */ IENSRegistry__factory), + IENSResolver__factory: () => (/* reexport */ IENSResolver__factory), + IENS__factory: () => (/* reexport */ IENS__factory), + IERC1155Errors__factory: () => (/* reexport */ IERC1155Errors__factory), + IERC20Decimals__factory: () => (/* reexport */ IERC20Decimals__factory), + IERC20Errors__factory: () => (/* reexport */ IERC20Errors__factory), + IERC20Metadata__factory: () => (/* reexport */ IERC20Metadata__factory), + IERC20__factory: () => (/* reexport */ IERC20__factory$1), + IERC721Errors__factory: () => (/* reexport */ IERC721Errors__factory), + IFeeManager__factory: () => (/* reexport */ IFeeManager__factory), + IGasCompensationVault__factory: () => (/* reexport */ IGasCompensationVault__factory), + IGovernance__factory: () => (/* reexport */ IGovernance__factory), + IHasher__factory: () => (/* reexport */ IHasher__factory), + IMetamorphicContractFactory__factory: () => (/* reexport */ IMetamorphicContractFactory__factory), + IProxy__factory: () => (/* reexport */ IProxy__factory), + IRelayerRegistry__factory: () => (/* reexport */ IRelayerRegistry__factory), + ITornadoGovernance__factory: () => (/* reexport */ ITornadoGovernance__factory), + ITornadoInstance__factory: () => (/* reexport */ ITornadoInstance__factory$1), + ITornadoRouter__factory: () => (/* reexport */ ITornadoRouter__factory), + ITornadoStakingRewards__factory: () => (/* reexport */ ITornadoStakingRewards__factory), + ITornadoVault__factory: () => (/* reexport */ ITornadoVault__factory$1), + IUSDT__factory: () => (/* reexport */ IUSDT__factory), + IUniswapV3Factory__factory: () => (/* reexport */ IUniswapV3Factory__factory), + IUniswapV3PoolActions__factory: () => (/* reexport */ IUniswapV3PoolActions__factory), + IUniswapV3PoolDerivedState__factory: () => (/* reexport */ IUniswapV3PoolDerivedState__factory), + IUniswapV3PoolEvents__factory: () => (/* reexport */ IUniswapV3PoolEvents__factory), + IUniswapV3PoolImmutables__factory: () => (/* reexport */ IUniswapV3PoolImmutables__factory), + IUniswapV3PoolOwnerActions__factory: () => (/* reexport */ IUniswapV3PoolOwnerActions__factory), + IUniswapV3PoolState__factory: () => (/* reexport */ IUniswapV3PoolState__factory), + IUniswapV3Pool__factory: () => (/* reexport */ IUniswapV3Pool__factory), + IVerifier__factory: () => (/* reexport */ IVerifier__factory), + InitialProposal__factory: () => (/* reexport */ InitialProposal__factory), + InstanceRegistry__factory: () => (/* reexport */ InstanceRegistry__factory), + LoopbackProxy__factory: () => (/* reexport */ LoopbackProxy__factory), + MaliciousProposal__factory: () => (/* reexport */ MaliciousProposal__factory), + MerkleTreeWithHistoryMock__factory: () => (/* reexport */ MerkleTreeWithHistoryMock__factory), + MerkleTreeWithHistory__factory: () => (/* reexport */ MerkleTreeWithHistory__factory), + MockGovernance__factory: () => (/* reexport */ MockGovernance__factory), + NewImplementation__factory: () => (/* reexport */ NewImplementation__factory), + Ownable__factory: () => (/* reexport */ Ownable__factory), + PatchProposal__factory: () => (/* reexport */ PatchProposal__factory), + Pausable__factory: () => (/* reexport */ Pausable__factory), + ProposalStateChangeGovernance__factory: () => (/* reexport */ ProposalStateChangeGovernance__factory), + ProposalUpgrade__factory: () => (/* reexport */ ProposalUpgrade__factory), + Proposal__factory: () => (/* reexport */ Proposal__factory), + Proxy__factory: () => (/* reexport */ Proxy__factory), + RelayerAggregator__factory: () => (/* reexport */ RelayerAggregator__factory), + RelayerRegistry__factory: () => (/* reexport */ RelayerRegistry__factory), + Resolver__factory: () => (/* reexport */ Resolver__factory), + TORNMock__factory: () => (/* reexport */ TORNMock__factory), + TORN__factory: () => (/* reexport */ TORN__factory), + TestnetAdminProxy__factory: () => (/* reexport */ TestnetAdminProxy__factory), + TestnetFeeManager__factory: () => (/* reexport */ TestnetFeeManager__factory), + TestnetGovernanceProxy__factory: () => (/* reexport */ TestnetGovernanceProxy__factory), + Timestamp__factory: () => (/* reexport */ Timestamp__factory), + TornadoProxyLight__factory: () => (/* reexport */ TornadoProxyLight__factory), + TornadoRouter__factory: () => (/* reexport */ TornadoRouter__factory), + TornadoStakingRewards__factory: () => (/* reexport */ TornadoStakingRewards__factory), + TornadoVault__factory: () => (/* reexport */ TornadoVault__factory), + Tornado__factory: () => (/* reexport */ Tornado__factory), + TransparentUpgradeableProxy__factory: () => (/* reexport */ TransparentUpgradeableProxy__factory), + UpgradeableProxy__factory: () => (/* reexport */ UpgradeableProxy__factory), + Verifier__factory: () => (/* reexport */ Verifier__factory), + VestingMock__factory: () => (/* reexport */ VestingMock__factory), + Vesting__factory: () => (/* reexport */ Vesting__factory), + VoucherMock__factory: () => (/* reexport */ VoucherMock__factory), + Voucher__factory: () => (/* reexport */ Voucher__factory), + factories: () => (/* reexport */ index) +}); + +;// ./node_modules/ethers/node_modules/@noble/hashes/esm/_assert.js +function number(n) { + if (!Number.isSafeInteger(n) || n < 0) + throw new Error(`Wrong positive integer: ${n}`); +} +function bool(b) { + if (typeof b !== 'boolean') + throw new Error(`Expected boolean, not ${b}`); +} +function bytes(b, ...lengths) { + if (!(b instanceof Uint8Array)) + throw new Error('Expected Uint8Array'); + if (lengths.length > 0 && !lengths.includes(b.length)) + throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`); +} +function hash(hash) { + if (typeof hash !== 'function' || typeof hash.create !== 'function') + throw new Error('Hash should be wrapped by utils.wrapConstructor'); + number(hash.outputLen); + number(hash.blockLen); +} +function exists(instance, checkFinished = true) { + if (instance.destroyed) + throw new Error('Hash instance has been destroyed'); + if (checkFinished && instance.finished) + throw new Error('Hash#digest() has already been called'); +} +function output(out, instance) { + bytes(out); + const min = instance.outputLen; + if (out.length < min) { + throw new Error(`digestInto() expects output buffer of length at least ${min}`); + } +} + +const assert = { number, bool, bytes, hash, exists, output }; +/* harmony default export */ const _assert = ((/* unused pure expression or super */ null && (assert))); +//# sourceMappingURL=_assert.js.map +;// ./node_modules/ethers/node_modules/@noble/hashes/esm/_u64.js +const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1); +const _32n = /* @__PURE__ */ BigInt(32); +// We are not using BigUint64Array, because they are extremely slow as per 2022 +function fromBig(n, le = false) { + if (le) + return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) }; + return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; +} +function split(lst, le = false) { + let Ah = new Uint32Array(lst.length); + let Al = new Uint32Array(lst.length); + for (let i = 0; i < lst.length; i++) { + const { h, l } = fromBig(lst[i], le); + [Ah[i], Al[i]] = [h, l]; + } + return [Ah, Al]; +} +const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0); +// for Shift in [0, 32) +const shrSH = (h, _l, s) => h >>> s; +const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in [1, 32) +const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s)); +const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32)); +const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s)); +// Right rotate for shift===32 (just swaps l&h) +const rotr32H = (_h, l) => l; +const rotr32L = (h, _l) => h; +// Left rotate for Shift in [1, 32) +const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s)); +const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s)); +// Left rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s)); +const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s)); +// JS uses 32-bit signed integers for bitwise operations which means we cannot +// simple take carry out of low bit sum by shift, we need to use division. +function add(Ah, Al, Bh, Bl) { + const l = (Al >>> 0) + (Bl >>> 0); + return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 }; +} +// Addition with more than 2 elements +const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); +const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0; +const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0); +const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0; +const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0); +const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0; +// prettier-ignore + +// prettier-ignore +const u64 = { + fromBig, split, toBig, + shrSH, shrSL, + rotrSH, rotrSL, rotrBH, rotrBL, + rotr32H, rotr32L, + rotlSH, rotlSL, rotlBH, rotlBL, + add, add3L, add3H, add4L, add4H, add5H, add5L, +}; +/* harmony default export */ const _u64 = ((/* unused pure expression or super */ null && (u64))); +//# sourceMappingURL=_u64.js.map +;// ./node_modules/ethers/node_modules/@noble/hashes/esm/utils.js +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+. +// node.js versions earlier than v19 don't declare it in global scope. +// For node.js, package.json#exports field mapping rewrites import +// from `crypto` to `cryptoNode`, which imports native module. +// Makes the utils un-importable in browsers without a bundler. +// Once node.js 18 is deprecated, we can just drop the import. + +const u8a = (a) => a instanceof Uint8Array; +// Cast array to different type +const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength); +const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +// Cast array to view +const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength); +// The rotate right (circular right shift) operation for uint32 +const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift); +// big-endian hardware is rare. Just in case someone still decides to run hashes: +// early-throw an error because we don't support BE yet. +const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44; +if (!isLE) + throw new Error('Non little-endian hardware is not supported'); +const hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0')); +/** + * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123' + */ +function bytesToHex(bytes) { + if (!u8a(bytes)) + throw new Error('Uint8Array expected'); + // pre-caching improves the speed 6x + let hex = ''; + for (let i = 0; i < bytes.length; i++) { + hex += hexes[bytes[i]]; + } + return hex; +} +/** + * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23]) + */ +function hexToBytes(hex) { + if (typeof hex !== 'string') + throw new Error('hex string expected, got ' + typeof hex); + const len = hex.length; + if (len % 2) + throw new Error('padded hex string expected, got unpadded hex of length ' + len); + const array = new Uint8Array(len / 2); + for (let i = 0; i < array.length; i++) { + const j = i * 2; + const hexByte = hex.slice(j, j + 2); + const byte = Number.parseInt(hexByte, 16); + if (Number.isNaN(byte) || byte < 0) + throw new Error('Invalid byte sequence'); + array[i] = byte; + } + return array; +} +// There is no setImmediate in browser and setTimeout is slow. +// call of async fn will return Promise, which will be fullfiled only on +// next scheduler queue processing step and this is exactly what we need. +const nextTick = async () => { }; +// Returns control to thread each 'tick' ms to avoid blocking +async function asyncLoop(iters, tick, cb) { + let ts = Date.now(); + for (let i = 0; i < iters; i++) { + cb(i); + // Date.now() is not monotonic, so in case if clock goes backwards we return return control too + const diff = Date.now() - ts; + if (diff >= 0 && diff < tick) + continue; + await nextTick(); + ts += diff; + } +} +/** + * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99]) + */ +function utf8ToBytes(str) { + if (typeof str !== 'string') + throw new Error(`utf8ToBytes expected string, got ${typeof str}`); + return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809 +} +/** + * Normalizes (non-hex) string or Uint8Array to Uint8Array. + * Warning: when Uint8Array is passed, it would NOT get copied. + * Keep in mind for future mutable operations. + */ +function toBytes(data) { + if (typeof data === 'string') + data = utf8ToBytes(data); + if (!u8a(data)) + throw new Error(`expected Uint8Array, got ${typeof data}`); + return data; +} +/** + * Copies several Uint8Arrays into one. + */ +function concatBytes(...arrays) { + const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0)); + let pad = 0; // walk through each item, ensure they have proper type + arrays.forEach((a) => { + if (!u8a(a)) + throw new Error('Uint8Array expected'); + r.set(a, pad); + pad += a.length; + }); + return r; +} +// For runtime check if class implements interface +class Hash { + // Safe version that clones internal state + clone() { + return this._cloneInto(); + } +} +const toStr = {}.toString; +function checkOpts(defaults, opts) { + if (opts !== undefined && toStr.call(opts) !== '[object Object]') + throw new Error('Options should be object or undefined'); + const merged = Object.assign(defaults, opts); + return merged; +} +function wrapConstructor(hashCons) { + const hashC = (msg) => hashCons().update(toBytes(msg)).digest(); + const tmp = hashCons(); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = () => hashCons(); + return hashC; +} +function wrapConstructorWithOpts(hashCons) { + const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); + const tmp = hashCons({}); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = (opts) => hashCons(opts); + return hashC; +} +function utils_wrapXOFConstructorWithOpts(hashCons) { + const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); + const tmp = hashCons({}); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = (opts) => hashCons(opts); + return hashC; +} +/** + * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS. + */ +function randomBytes(bytesLength = 32) { + if (crypto && typeof crypto.getRandomValues === 'function') { + return crypto.getRandomValues(new Uint8Array(bytesLength)); + } + throw new Error('crypto.getRandomValues must be defined'); +} +//# sourceMappingURL=utils.js.map +;// ./node_modules/ethers/node_modules/@noble/hashes/esm/sha3.js + + + +// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size. +// It's called a sponge function. +// Various per round constants calculations +const [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []]; +const _0n = /* @__PURE__ */ BigInt(0); +const _1n = /* @__PURE__ */ BigInt(1); +const _2n = /* @__PURE__ */ BigInt(2); +const _7n = /* @__PURE__ */ BigInt(7); +const _256n = /* @__PURE__ */ BigInt(256); +const _0x71n = /* @__PURE__ */ BigInt(0x71); +for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) { + // Pi + [x, y] = [y, (2 * x + 3 * y) % 5]; + SHA3_PI.push(2 * (5 * y + x)); + // Rotational + SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64); + // Iota + let t = _0n; + for (let j = 0; j < 7; j++) { + R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n; + if (R & _2n) + t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n); + } + _SHA3_IOTA.push(t); +} +const [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true); +// Left rotation (without 0, 32, 64) +const rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s)); +const rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s)); +// Same as keccakf1600, but allows to skip some rounds +function keccakP(s, rounds = 24) { + const B = new Uint32Array(5 * 2); + // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js) + for (let round = 24 - rounds; round < 24; round++) { + // Theta θ + for (let x = 0; x < 10; x++) + B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; + for (let x = 0; x < 10; x += 2) { + const idx1 = (x + 8) % 10; + const idx0 = (x + 2) % 10; + const B0 = B[idx0]; + const B1 = B[idx0 + 1]; + const Th = rotlH(B0, B1, 1) ^ B[idx1]; + const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; + for (let y = 0; y < 50; y += 10) { + s[x + y] ^= Th; + s[x + y + 1] ^= Tl; + } + } + // Rho (ρ) and Pi (π) + let curH = s[2]; + let curL = s[3]; + for (let t = 0; t < 24; t++) { + const shift = SHA3_ROTL[t]; + const Th = rotlH(curH, curL, shift); + const Tl = rotlL(curH, curL, shift); + const PI = SHA3_PI[t]; + curH = s[PI]; + curL = s[PI + 1]; + s[PI] = Th; + s[PI + 1] = Tl; + } + // Chi (χ) + for (let y = 0; y < 50; y += 10) { + for (let x = 0; x < 10; x++) + B[x] = s[y + x]; + for (let x = 0; x < 10; x++) + s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; + } + // Iota (ι) + s[0] ^= SHA3_IOTA_H[round]; + s[1] ^= SHA3_IOTA_L[round]; + } + B.fill(0); +} +class Keccak extends Hash { + // NOTE: we accept arguments in bytes instead of bits here. + constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { + super(); + this.blockLen = blockLen; + this.suffix = suffix; + this.outputLen = outputLen; + this.enableXOF = enableXOF; + this.rounds = rounds; + this.pos = 0; + this.posOut = 0; + this.finished = false; + this.destroyed = false; + // Can be passed from user as dkLen + number(outputLen); + // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes + if (0 >= this.blockLen || this.blockLen >= 200) + throw new Error('Sha3 supports only keccak-f1600 function'); + this.state = new Uint8Array(200); + this.state32 = u32(this.state); + } + keccak() { + keccakP(this.state32, this.rounds); + this.posOut = 0; + this.pos = 0; + } + update(data) { + exists(this); + const { blockLen, state } = this; + data = toBytes(data); + const len = data.length; + for (let pos = 0; pos < len;) { + const take = Math.min(blockLen - this.pos, len - pos); + for (let i = 0; i < take; i++) + state[this.pos++] ^= data[pos++]; + if (this.pos === blockLen) + this.keccak(); + } + return this; + } + finish() { + if (this.finished) + return; + this.finished = true; + const { state, suffix, pos, blockLen } = this; + // Do the padding + state[pos] ^= suffix; + if ((suffix & 0x80) !== 0 && pos === blockLen - 1) + this.keccak(); + state[blockLen - 1] ^= 0x80; + this.keccak(); + } + writeInto(out) { + exists(this, false); + bytes(out); + this.finish(); + const bufferOut = this.state; + const { blockLen } = this; + for (let pos = 0, len = out.length; pos < len;) { + if (this.posOut >= blockLen) + this.keccak(); + const take = Math.min(blockLen - this.posOut, len - pos); + out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos); + this.posOut += take; + pos += take; + } + return out; + } + xofInto(out) { + // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF + if (!this.enableXOF) + throw new Error('XOF is not possible for this instance'); + return this.writeInto(out); + } + xof(bytes) { + number(bytes); + return this.xofInto(new Uint8Array(bytes)); + } + digestInto(out) { + output(out, this); + if (this.finished) + throw new Error('digest() was already called'); + this.writeInto(out); + this.destroy(); + return out; + } + digest() { + return this.digestInto(new Uint8Array(this.outputLen)); + } + destroy() { + this.destroyed = true; + this.state.fill(0); + } + _cloneInto(to) { + const { blockLen, suffix, outputLen, rounds, enableXOF } = this; + to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); + to.state32.set(this.state32); + to.pos = this.pos; + to.posOut = this.posOut; + to.finished = this.finished; + to.rounds = rounds; + // Suffix can change in cSHAKE + to.suffix = suffix; + to.outputLen = outputLen; + to.enableXOF = enableXOF; + to.destroyed = this.destroyed; + return to; + } +} +const gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen)); +const sha3_224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x06, 144, 224 / 8))); +/** + * SHA3-256 hash function + * @param message - that would be hashed + */ +const sha3_256 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x06, 136, 256 / 8))); +const sha3_384 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x06, 104, 384 / 8))); +const sha3_512 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x06, 72, 512 / 8))); +const keccak_224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x01, 144, 224 / 8))); +/** + * keccak-256 hash function. Different from SHA3-256. + * @param message - that would be hashed + */ +const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8); +const keccak_384 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x01, 104, 384 / 8))); +const keccak_512 = /* @__PURE__ */ (/* unused pure expression or super */ null && (gen(0x01, 72, 512 / 8))); +const genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)); +const shake128 = /* @__PURE__ */ (/* unused pure expression or super */ null && (genShake(0x1f, 168, 128 / 8))); +const shake256 = /* @__PURE__ */ (/* unused pure expression or super */ null && (genShake(0x1f, 136, 256 / 8))); +//# sourceMappingURL=sha3.js.map +;// ./node_modules/ethers/lib.esm/_version.js +/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */ +/** + * The current version of Ethers. + */ +const version = "6.13.2"; +//# sourceMappingURL=_version.js.map +;// ./node_modules/ethers/lib.esm/utils/properties.js +/** + * Property helper functions. + * + * @_subsection api/utils:Properties [about-properties] + */ +function checkType(value, type, name) { + const types = type.split("|").map(t => t.trim()); + for (let i = 0; i < types.length; i++) { + switch (type) { + case "any": + return; + case "bigint": + case "boolean": + case "number": + case "string": + if (typeof (value) === type) { + return; + } + } + } + const error = new Error(`invalid value for type ${type}`); + error.code = "INVALID_ARGUMENT"; + error.argument = `value.${name}`; + error.value = value; + throw error; +} +/** + * Resolves to a new object that is a copy of %%value%%, but with all + * values resolved. + */ +async function resolveProperties(value) { + const keys = Object.keys(value); + const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); + return results.reduce((accum, v, index) => { + accum[keys[index]] = v; + return accum; + }, {}); +} +/** + * Assigns the %%values%% to %%target%% as read-only values. + * + * It %%types%% is specified, the values are checked. + */ +function properties_defineProperties(target, values, types) { + for (let key in values) { + let value = values[key]; + const type = (types ? types[key] : null); + if (type) { + checkType(value, type, key); + } + Object.defineProperty(target, key, { enumerable: true, value, writable: false }); + } +} +//# sourceMappingURL=properties.js.map +;// ./node_modules/ethers/lib.esm/utils/errors.js +/** + * All errors in ethers include properties to ensure they are both + * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``). + * + * The [[isError]] function can be used to check the error ``code`` and + * provide a type guard for the properties present on that error interface. + * + * @_section: api/utils/errors:Errors [about-errors] + */ + + +function stringify(value) { + if (value == null) { + return "null"; + } + if (Array.isArray(value)) { + return "[ " + (value.map(stringify)).join(", ") + " ]"; + } + if (value instanceof Uint8Array) { + const HEX = "0123456789abcdef"; + let result = "0x"; + for (let i = 0; i < value.length; i++) { + result += HEX[value[i] >> 4]; + result += HEX[value[i] & 0xf]; + } + return result; + } + if (typeof (value) === "object" && typeof (value.toJSON) === "function") { + return stringify(value.toJSON()); + } + switch (typeof (value)) { + case "boolean": + case "symbol": + return value.toString(); + case "bigint": + return BigInt(value).toString(); + case "number": + return (value).toString(); + case "string": + return JSON.stringify(value); + case "object": { + const keys = Object.keys(value); + keys.sort(); + return "{ " + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(", ") + " }"; + } + } + return `[ COULD NOT SERIALIZE ]`; +} +/** + * Returns true if the %%error%% matches an error thrown by ethers + * that matches the error %%code%%. + * + * In TypeScript environments, this can be used to check that %%error%% + * matches an EthersError type, which means the expected properties will + * be set. + * + * @See [ErrorCodes](api:ErrorCode) + * @example + * try { + * // code.... + * } catch (e) { + * if (isError(e, "CALL_EXCEPTION")) { + * // The Type Guard has validated this object + * console.log(e.data); + * } + * } + */ +function isError(error, code) { + return (error && error.code === code); +} +/** + * Returns true if %%error%% is a [[CallExceptionError]. + */ +function isCallException(error) { + return isError(error, "CALL_EXCEPTION"); +} +/** + * Returns a new Error configured to the format ethers emits errors, with + * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties + * for the corresponding EthersError. + * + * Each error in ethers includes the version of ethers, a + * machine-readable [[ErrorCode]], and depending on %%code%%, additional + * required properties. The error message will also include the %%message%%, + * ethers version, %%code%% and all additional properties, serialized. + */ +function makeError(message, code, info) { + let shortMessage = message; + { + const details = []; + if (info) { + if ("message" in info || "code" in info || "name" in info) { + throw new Error(`value will overwrite populated values: ${stringify(info)}`); + } + for (const key in info) { + if (key === "shortMessage") { + continue; + } + const value = (info[key]); + // try { + details.push(key + "=" + stringify(value)); + // } catch (error: any) { + // console.log("MMM", error.message); + // details.push(key + "=[could not serialize object]"); + // } + } + } + details.push(`code=${code}`); + details.push(`version=${version}`); + if (details.length) { + message += " (" + details.join(", ") + ")"; + } + } + let error; + switch (code) { + case "INVALID_ARGUMENT": + error = new TypeError(message); + break; + case "NUMERIC_FAULT": + case "BUFFER_OVERRUN": + error = new RangeError(message); + break; + default: + error = new Error(message); + } + properties_defineProperties(error, { code }); + if (info) { + Object.assign(error, info); + } + if (error.shortMessage == null) { + properties_defineProperties(error, { shortMessage }); + } + return error; +} +/** + * Throws an EthersError with %%message%%, %%code%% and additional error + * %%info%% when %%check%% is falsish.. + * + * @see [[api:makeError]] + */ +function errors_assert(check, message, code, info) { + if (!check) { + throw makeError(message, code, info); + } +} +/** + * A simple helper to simply ensuring provided arguments match expected + * constraints, throwing if not. + * + * In TypeScript environments, the %%check%% has been asserted true, so + * any further code does not need additional compile-time checks. + */ +function errors_assertArgument(check, message, name, value) { + errors_assert(check, message, "INVALID_ARGUMENT", { argument: name, value: value }); +} +function assertArgumentCount(count, expectedCount, message) { + if (message == null) { + message = ""; + } + if (message) { + message = ": " + message; + } + errors_assert(count >= expectedCount, "missing arguemnt" + message, "MISSING_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + errors_assert(count <= expectedCount, "too many arguments" + message, "UNEXPECTED_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); +} +const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => { + try { + // General test for normalize + /* c8 ignore start */ + if ("test".normalize(form) !== "test") { + throw new Error("bad"); + } + ; + /* c8 ignore stop */ + if (form === "NFD") { + const check = String.fromCharCode(0xe9).normalize("NFD"); + const expected = String.fromCharCode(0x65, 0x0301); + /* c8 ignore start */ + if (check !== expected) { + throw new Error("broken"); + } + /* c8 ignore stop */ + } + accum.push(form); + } + catch (error) { } + return accum; +}, []); +/** + * Throws if the normalization %%form%% is not supported. + */ +function assertNormalize(form) { + errors_assert(_normalizeForms.indexOf(form) >= 0, "platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { + operation: "String.prototype.normalize", info: { form } + }); +} +/** + * Many classes use file-scoped values to guard the constructor, + * making it effectively private. This facilitates that pattern + * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%, + * throwing if not, indicating the %%className%% if provided. + */ +function assertPrivate(givenGuard, guard, className) { + if (className == null) { + className = ""; + } + if (givenGuard !== guard) { + let method = className, operation = "new"; + if (className) { + method += "."; + operation += " " + className; + } + errors_assert(false, `private constructor; use ${method}from* methods`, "UNSUPPORTED_OPERATION", { + operation + }); + } +} +//# sourceMappingURL=errors.js.map +;// ./node_modules/ethers/lib.esm/utils/data.js +/** + * Some data helpers. + * + * + * @_subsection api/utils:Data Helpers [about-data] + */ + +function _getBytes(value, name, copy) { + if (value instanceof Uint8Array) { + if (copy) { + return new Uint8Array(value); + } + return value; + } + if (typeof (value) === "string" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) { + const result = new Uint8Array((value.length - 2) / 2); + let offset = 2; + for (let i = 0; i < result.length; i++) { + result[i] = parseInt(value.substring(offset, offset + 2), 16); + offset += 2; + } + return result; + } + errors_assertArgument(false, "invalid BytesLike value", name || "value", value); +} +/** + * Get a typed Uint8Array for %%value%%. If already a Uint8Array + * the original %%value%% is returned; if a copy is required use + * [[getBytesCopy]]. + * + * @see: getBytesCopy + */ +function data_getBytes(value, name) { + return _getBytes(value, name, false); +} +/** + * Get a typed Uint8Array for %%value%%, creating a copy if necessary + * to prevent any modifications of the returned value from being + * reflected elsewhere. + * + * @see: getBytes + */ +function getBytesCopy(value, name) { + return _getBytes(value, name, true); +} +/** + * Returns true if %%value%% is a valid [[HexString]]. + * + * If %%length%% is ``true`` or a //number//, it also checks that + * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//) + * bytes of data (e.g. ``0x1234`` is 2 bytes). + */ +function isHexString(value, length) { + if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { + return false; + } + if (typeof (length) === "number" && value.length !== 2 + 2 * length) { + return false; + } + if (length === true && (value.length % 2) !== 0) { + return false; + } + return true; +} +/** + * Returns true if %%value%% is a valid representation of arbitrary + * data (i.e. a valid [[DataHexString]] or a Uint8Array). + */ +function data_isBytesLike(value) { + return (isHexString(value, true) || (value instanceof Uint8Array)); +} +const HexCharacters = "0123456789abcdef"; +/** + * Returns a [[DataHexString]] representation of %%data%%. + */ +function data_hexlify(data) { + const bytes = data_getBytes(data); + let result = "0x"; + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i]; + result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; + } + return result; +} +/** + * Returns a [[DataHexString]] by concatenating all values + * within %%data%%. + */ +function data_concat(datas) { + return "0x" + datas.map((d) => data_hexlify(d).substring(2)).join(""); +} +/** + * Returns the length of %%data%%, in bytes. + */ +function dataLength(data) { + if (isHexString(data, true)) { + return (data.length - 2) / 2; + } + return data_getBytes(data).length; +} +/** + * Returns a [[DataHexString]] by slicing %%data%% from the %%start%% + * offset to the %%end%% offset. + * + * By default %%start%% is 0 and %%end%% is the length of %%data%%. + */ +function data_dataSlice(data, start, end) { + const bytes = data_getBytes(data); + if (end != null && end > bytes.length) { + errors_assert(false, "cannot slice beyond data bounds", "BUFFER_OVERRUN", { + buffer: bytes, length: bytes.length, offset: end + }); + } + return data_hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end)); +} +/** + * Return the [[DataHexString]] result by stripping all **leading** + ** zero bytes from %%data%%. + */ +function stripZerosLeft(data) { + let bytes = data_hexlify(data).substring(2); + while (bytes.startsWith("00")) { + bytes = bytes.substring(2); + } + return "0x" + bytes; +} +function zeroPad(data, length, left) { + const bytes = data_getBytes(data); + errors_assert(length >= bytes.length, "padding exceeds data length", "BUFFER_OVERRUN", { + buffer: new Uint8Array(bytes), + length: length, + offset: length + 1 + }); + const result = new Uint8Array(length); + result.fill(0); + if (left) { + result.set(bytes, length - bytes.length); + } + else { + result.set(bytes, 0); + } + return data_hexlify(result); +} +/** + * Return the [[DataHexString]] of %%data%% padded on the **left** + * to %%length%% bytes. + * + * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is + * thrown. + * + * This pads data the same as **values** are in Solidity + * (e.g. ``uint128``). + */ +function zeroPadValue(data, length) { + return zeroPad(data, length, true); +} +/** + * Return the [[DataHexString]] of %%data%% padded on the **right** + * to %%length%% bytes. + * + * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is + * thrown. + * + * This pads data the same as **bytes** are in Solidity + * (e.g. ``bytes16``). + */ +function zeroPadBytes(data, length) { + return zeroPad(data, length, false); +} +//# sourceMappingURL=data.js.map +;// ./node_modules/ethers/lib.esm/crypto/keccak.js +/** + * Cryptographic hashing functions + * + * @_subsection: api/crypto:Hash Functions [about-crypto-hashing] + */ + + +let locked = false; +const _keccak256 = function (data) { + return keccak_256(data); +}; +let __keccak256 = _keccak256; +/** + * Compute the cryptographic KECCAK256 hash of %%data%%. + * + * The %%data%% **must** be a data representation, to compute the + * hash of UTF-8 data use the [[id]] function. + * + * @returns DataHexstring + * @example: + * keccak256("0x") + * //_result: + * + * keccak256("0x1337") + * //_result: + * + * keccak256(new Uint8Array([ 0x13, 0x37 ])) + * //_result: + * + * // Strings are assumed to be DataHexString, otherwise it will + * // throw. To hash UTF-8 data, see the note above. + * keccak256("Hello World") + * //_error: + */ +function keccak_keccak256(_data) { + const data = data_getBytes(_data, "data"); + return data_hexlify(__keccak256(data)); +} +keccak_keccak256._ = _keccak256; +keccak_keccak256.lock = function () { locked = true; }; +keccak_keccak256.register = function (func) { + if (locked) { + throw new TypeError("keccak256 is locked"); + } + __keccak256 = func; +}; +Object.freeze(keccak_keccak256); +//# sourceMappingURL=keccak.js.map +;// ./node_modules/ethers/lib.esm/utils/utf8.js +/** + * Using strings in Ethereum (or any security-basd system) requires + * additional care. These utilities attempt to mitigate some of the + * safety issues as well as provide the ability to recover and analyse + * strings. + * + * @_subsection api/utils:Strings and UTF-8 [about-strings] + */ + + +function errorFunc(reason, offset, bytes, output, badCodepoint) { + errors_assertArgument(false, `invalid codepoint at offset ${offset}; ${reason}`, "bytes", bytes); +} +function ignoreFunc(reason, offset, bytes, output, badCodepoint) { + // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes + if (reason === "BAD_PREFIX" || reason === "UNEXPECTED_CONTINUE") { + let i = 0; + for (let o = offset + 1; o < bytes.length; o++) { + if (bytes[o] >> 6 !== 0x02) { + break; + } + i++; + } + return i; + } + // This byte runs us past the end of the string, so just jump to the end + // (but the first byte was read already read and therefore skipped) + if (reason === "OVERRUN") { + return bytes.length - offset - 1; + } + // Nothing to skip + return 0; +} +function replaceFunc(reason, offset, bytes, output, badCodepoint) { + // Overlong representations are otherwise "valid" code points; just non-deistingtished + if (reason === "OVERLONG") { + errors_assertArgument(typeof (badCodepoint) === "number", "invalid bad code point for replacement", "badCodepoint", badCodepoint); + output.push(badCodepoint); + return 0; + } + // Put the replacement character into the output + output.push(0xfffd); + // Otherwise, process as if ignoring errors + return ignoreFunc(reason, offset, bytes, output, badCodepoint); +} +/** + * A handful of popular, built-in UTF-8 error handling strategies. + * + * **``"error"``** - throws on ANY illegal UTF-8 sequence or + * non-canonical (overlong) codepoints (this is the default) + * + * **``"ignore"``** - silently drops any illegal UTF-8 sequence + * and accepts non-canonical (overlong) codepoints + * + * **``"replace"``** - replace any illegal UTF-8 sequence with the + * UTF-8 replacement character (i.e. ``"\\ufffd"``) and accepts + * non-canonical (overlong) codepoints + * + * @returns: Record<"error" | "ignore" | "replace", Utf8ErrorFunc> + */ +const Utf8ErrorFuncs = Object.freeze({ + error: errorFunc, + ignore: ignoreFunc, + replace: replaceFunc +}); +// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 +function getUtf8CodePoints(_bytes, onError) { + if (onError == null) { + onError = Utf8ErrorFuncs.error; + } + const bytes = data_getBytes(_bytes, "bytes"); + const result = []; + let i = 0; + // Invalid bytes are ignored + while (i < bytes.length) { + const c = bytes[i++]; + // 0xxx xxxx + if (c >> 7 === 0) { + result.push(c); + continue; + } + // Multibyte; how many bytes left for this character? + let extraLength = null; + let overlongMask = null; + // 110x xxxx 10xx xxxx + if ((c & 0xe0) === 0xc0) { + extraLength = 1; + overlongMask = 0x7f; + // 1110 xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf0) === 0xe0) { + extraLength = 2; + overlongMask = 0x7ff; + // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf8) === 0xf0) { + extraLength = 3; + overlongMask = 0xffff; + } + else { + if ((c & 0xc0) === 0x80) { + i += onError("UNEXPECTED_CONTINUE", i - 1, bytes, result); + } + else { + i += onError("BAD_PREFIX", i - 1, bytes, result); + } + continue; + } + // Do we have enough bytes in our data? + if (i - 1 + extraLength >= bytes.length) { + i += onError("OVERRUN", i - 1, bytes, result); + continue; + } + // Remove the length prefix from the char + let res = c & ((1 << (8 - extraLength - 1)) - 1); + for (let j = 0; j < extraLength; j++) { + let nextChar = bytes[i]; + // Invalid continuation byte + if ((nextChar & 0xc0) != 0x80) { + i += onError("MISSING_CONTINUE", i, bytes, result); + res = null; + break; + } + ; + res = (res << 6) | (nextChar & 0x3f); + i++; + } + // See above loop for invalid continuation byte + if (res === null) { + continue; + } + // Maximum code point + if (res > 0x10ffff) { + i += onError("OUT_OF_RANGE", i - 1 - extraLength, bytes, result, res); + continue; + } + // Reserved for UTF-16 surrogate halves + if (res >= 0xd800 && res <= 0xdfff) { + i += onError("UTF16_SURROGATE", i - 1 - extraLength, bytes, result, res); + continue; + } + // Check for overlong sequences (more bytes than needed) + if (res <= overlongMask) { + i += onError("OVERLONG", i - 1 - extraLength, bytes, result, res); + continue; + } + result.push(res); + } + return result; +} +// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +/** + * Returns the UTF-8 byte representation of %%str%%. + * + * If %%form%% is specified, the string is normalized. + */ +function toUtf8Bytes(str, form) { + errors_assertArgument(typeof (str) === "string", "invalid string value", "str", str); + if (form != null) { + assertNormalize(form); + str = str.normalize(form); + } + let result = []; + for (let i = 0; i < str.length; i++) { + const c = str.charCodeAt(i); + if (c < 0x80) { + result.push(c); + } + else if (c < 0x800) { + result.push((c >> 6) | 0xc0); + result.push((c & 0x3f) | 0x80); + } + else if ((c & 0xfc00) == 0xd800) { + i++; + const c2 = str.charCodeAt(i); + errors_assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00), "invalid surrogate pair", "str", str); + // Surrogate Pair + const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + result.push((pair >> 18) | 0xf0); + result.push(((pair >> 12) & 0x3f) | 0x80); + result.push(((pair >> 6) & 0x3f) | 0x80); + result.push((pair & 0x3f) | 0x80); + } + else { + result.push((c >> 12) | 0xe0); + result.push(((c >> 6) & 0x3f) | 0x80); + result.push((c & 0x3f) | 0x80); + } + } + return new Uint8Array(result); +} +; +//export +function _toUtf8String(codePoints) { + return codePoints.map((codePoint) => { + if (codePoint <= 0xffff) { + return String.fromCharCode(codePoint); + } + codePoint -= 0x10000; + return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00)); + }).join(""); +} +/** + * Returns the string represented by the UTF-8 data %%bytes%%. + * + * When %%onError%% function is specified, it is called on UTF-8 + * errors allowing recovery using the [[Utf8ErrorFunc]] API. + * (default: [error](Utf8ErrorFuncs)) + */ +function toUtf8String(bytes, onError) { + return _toUtf8String(getUtf8CodePoints(bytes, onError)); +} +/** + * Returns the UTF-8 code-points for %%str%%. + * + * If %%form%% is specified, the string is normalized. + */ +function toUtf8CodePoints(str, form) { + return getUtf8CodePoints(toUtf8Bytes(str, form)); +} +//# sourceMappingURL=utf8.js.map +;// ./node_modules/ethers/lib.esm/hash/id.js + + +/** + * A simple hashing function which operates on UTF-8 strings to + * compute an 32-byte identifier. + * + * This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes + * the [[keccak256]]. + * + * @example: + * id("hello world") + * //_result: + */ +function id(value) { + return keccak_keccak256(toUtf8Bytes(value)); +} +//# sourceMappingURL=id.js.map +;// ./node_modules/ethers/lib.esm/utils/maths.js +/** + * Some mathematic operations. + * + * @_subsection: api/utils:Math Helpers [about-maths] + */ + + +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1; +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; +/** + * Convert %%value%% from a twos-compliment representation of %%width%% + * bits to its value. + * + * If the highest bit is ``1``, the result will be negative. + */ +function fromTwos(_value, _width) { + const value = getUint(_value, "value"); + const width = BigInt(getNumber(_width, "width")); + errors_assert((value >> width) === BN_0, "overflow", "NUMERIC_FAULT", { + operation: "fromTwos", fault: "overflow", value: _value + }); + // Top bit set; treat as a negative value + if (value >> (width - BN_1)) { + const mask = (BN_1 << width) - BN_1; + return -(((~value) & mask) + BN_1); + } + return value; +} +/** + * Convert %%value%% to a twos-compliment representation of + * %%width%% bits. + * + * The result will always be positive. + */ +function toTwos(_value, _width) { + let value = getBigInt(_value, "value"); + const width = BigInt(getNumber(_width, "width")); + const limit = (BN_1 << (width - BN_1)); + if (value < BN_0) { + value = -value; + errors_assert(value <= limit, "too low", "NUMERIC_FAULT", { + operation: "toTwos", fault: "overflow", value: _value + }); + const mask = (BN_1 << width) - BN_1; + return ((~value) & mask) + BN_1; + } + else { + errors_assert(value < limit, "too high", "NUMERIC_FAULT", { + operation: "toTwos", fault: "overflow", value: _value + }); + } + return value; +} +/** + * Mask %%value%% with a bitmask of %%bits%% ones. + */ +function mask(_value, _bits) { + const value = getUint(_value, "value"); + const bits = BigInt(getNumber(_bits, "bits")); + return value & ((BN_1 << bits) - BN_1); +} +/** + * Gets a BigInt from %%value%%. If it is an invalid value for + * a BigInt, then an ArgumentError will be thrown for %%name%%. + */ +function getBigInt(value, name) { + switch (typeof (value)) { + case "bigint": return value; + case "number": + errors_assertArgument(Number.isInteger(value), "underflow", name || "value", value); + errors_assertArgument(value >= -maxValue && value <= maxValue, "overflow", name || "value", value); + return BigInt(value); + case "string": + try { + if (value === "") { + throw new Error("empty string"); + } + if (value[0] === "-" && value[1] !== "-") { + return -BigInt(value.substring(1)); + } + return BigInt(value); + } + catch (e) { + errors_assertArgument(false, `invalid BigNumberish string: ${e.message}`, name || "value", value); + } + } + errors_assertArgument(false, "invalid BigNumberish value", name || "value", value); +} +/** + * Returns %%value%% as a bigint, validating it is valid as a bigint + * value and that it is positive. + */ +function getUint(value, name) { + const result = getBigInt(value, name); + errors_assert(result >= BN_0, "unsigned value cannot be negative", "NUMERIC_FAULT", { + fault: "overflow", operation: "getUint", value + }); + return result; +} +const Nibbles = "0123456789abcdef"; +/* + * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it + * is treated as Big Endian data. + */ +function toBigInt(value) { + if (value instanceof Uint8Array) { + let result = "0x0"; + for (const v of value) { + result += Nibbles[v >> 4]; + result += Nibbles[v & 0x0f]; + } + return BigInt(result); + } + return getBigInt(value); +} +/** + * Gets a //number// from %%value%%. If it is an invalid value for + * a //number//, then an ArgumentError will be thrown for %%name%%. + */ +function getNumber(value, name) { + switch (typeof (value)) { + case "bigint": + errors_assertArgument(value >= -maxValue && value <= maxValue, "overflow", name || "value", value); + return Number(value); + case "number": + errors_assertArgument(Number.isInteger(value), "underflow", name || "value", value); + errors_assertArgument(value >= -maxValue && value <= maxValue, "overflow", name || "value", value); + return value; + case "string": + try { + if (value === "") { + throw new Error("empty string"); + } + return getNumber(BigInt(value), name); + } + catch (e) { + errors_assertArgument(false, `invalid numeric string: ${e.message}`, name || "value", value); + } + } + errors_assertArgument(false, "invalid numeric value", name || "value", value); +} +/** + * Converts %%value%% to a number. If %%value%% is a Uint8Array, it + * is treated as Big Endian data. Throws if the value is not safe. + */ +function toNumber(value) { + return getNumber(toBigInt(value)); +} +/** + * Converts %%value%% to a Big Endian hexstring, optionally padded to + * %%width%% bytes. + */ +function toBeHex(_value, _width) { + const value = getUint(_value, "value"); + let result = value.toString(16); + if (_width == null) { + // Ensure the value is of even length + if (result.length % 2) { + result = "0" + result; + } + } + else { + const width = getNumber(_width, "width"); + errors_assert(width * 2 >= result.length, `value exceeds width (${width} bytes)`, "NUMERIC_FAULT", { + operation: "toBeHex", + fault: "overflow", + value: _value + }); + // Pad the value to the required width + while (result.length < (width * 2)) { + result = "0" + result; + } + } + return "0x" + result; +} +/** + * Converts %%value%% to a Big Endian Uint8Array. + */ +function toBeArray(_value) { + const value = getUint(_value, "value"); + if (value === BN_0) { + return new Uint8Array([]); + } + let hex = value.toString(16); + if (hex.length % 2) { + hex = "0" + hex; + } + const result = new Uint8Array(hex.length / 2); + for (let i = 0; i < result.length; i++) { + const offset = i * 2; + result[i] = parseInt(hex.substring(offset, offset + 2), 16); + } + return result; +} +/** + * Returns a [[HexString]] for %%value%% safe to use as a //Quantity//. + * + * A //Quantity// does not have and leading 0 values unless the value is + * the literal value `0x0`. This is most commonly used for JSSON-RPC + * numeric values. + */ +function toQuantity(value) { + let result = hexlify(isBytesLike(value) ? value : toBeArray(value)).substring(2); + while (result.startsWith("0")) { + result = result.substring(1); + } + if (result === "") { + result = "0"; + } + return "0x" + result; +} +//# sourceMappingURL=maths.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/abstract-coder.js + +/** + * @_ignore: + */ +const WordSize = 32; +const Padding = new Uint8Array(WordSize); +// Properties used to immediate pass through to the underlying object +// - `then` is used to detect if an object is a Promise for await +const passProperties = ["then"]; +const _guard = {}; +const resultNames = new WeakMap(); +function getNames(result) { + return resultNames.get(result); +} +function setNames(result, names) { + resultNames.set(result, names); +} +function throwError(name, error) { + const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`); + wrapped.error = error; + throw wrapped; +} +function toObject(names, items, deep) { + if (names.indexOf(null) >= 0) { + return items.map((item, index) => { + if (item instanceof Result) { + return toObject(getNames(item), item, deep); + } + return item; + }); + } + return names.reduce((accum, name, index) => { + let item = items.getValue(name); + if (!(name in accum)) { + if (deep && item instanceof Result) { + item = toObject(getNames(item), item, deep); + } + accum[name] = item; + } + return accum; + }, {}); +} +/** + * A [[Result]] is a sub-class of Array, which allows accessing any + * of its values either positionally by its index or, if keys are + * provided by its name. + * + * @_docloc: api/abi + */ +class Result extends Array { + // No longer used; but cannot be removed as it will remove the + // #private field from the .d.ts which may break backwards + // compatibility + #names; + /** + * @private + */ + constructor(...args) { + // To properly sub-class Array so the other built-in + // functions work, the constructor has to behave fairly + // well. So, in the event we are created via fromItems() + // we build the read-only Result object we want, but on + // any other input, we use the default constructor + // constructor(guard: any, items: Array, keys?: Array); + const guard = args[0]; + let items = args[1]; + let names = (args[2] || []).slice(); + let wrap = true; + if (guard !== _guard) { + items = args; + names = []; + wrap = false; + } + // Can't just pass in ...items since an array of length 1 + // is a special case in the super. + super(items.length); + items.forEach((item, index) => { this[index] = item; }); + // Find all unique keys + const nameCounts = names.reduce((accum, name) => { + if (typeof (name) === "string") { + accum.set(name, (accum.get(name) || 0) + 1); + } + return accum; + }, (new Map())); + // Remove any key thats not unique + setNames(this, Object.freeze(items.map((item, index) => { + const name = names[index]; + if (name != null && nameCounts.get(name) === 1) { + return name; + } + return null; + }))); + // Dummy operations to prevent TypeScript from complaining + this.#names = []; + if (this.#names == null) { + void (this.#names); + } + if (!wrap) { + return; + } + // A wrapped Result is immutable + Object.freeze(this); + // Proxy indices and names so we can trap deferred errors + const proxy = new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof (prop) === "string") { + // Index accessor + if (prop.match(/^[0-9]+$/)) { + const index = getNumber(prop, "%index"); + if (index < 0 || index >= this.length) { + throw new RangeError("out of result range"); + } + const item = target[index]; + if (item instanceof Error) { + throwError(`index ${index}`, item); + } + return item; + } + // Pass important checks (like `then` for Promise) through + if (passProperties.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + const value = target[prop]; + if (value instanceof Function) { + // Make sure functions work with private variables + // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding + return function (...args) { + return value.apply((this === receiver) ? target : this, args); + }; + } + else if (!(prop in target)) { + // Possible name accessor + return target.getValue.apply((this === receiver) ? target : this, [prop]); + } + } + return Reflect.get(target, prop, receiver); + } + }); + setNames(proxy, getNames(this)); + return proxy; + } + /** + * Returns the Result as a normal Array. If %%deep%%, any children + * which are Result objects are also converted to a normal Array. + * + * This will throw if there are any outstanding deferred + * errors. + */ + toArray(deep) { + const result = []; + this.forEach((item, index) => { + if (item instanceof Error) { + throwError(`index ${index}`, item); + } + if (deep && item instanceof Result) { + item = item.toArray(deep); + } + result.push(item); + }); + return result; + } + /** + * Returns the Result as an Object with each name-value pair. If + * %%deep%%, any children which are Result objects are also + * converted to an Object. + * + * This will throw if any value is unnamed, or if there are + * any outstanding deferred errors. + */ + toObject(deep) { + const names = getNames(this); + return names.reduce((accum, name, index) => { + errors_assert(name != null, `value at index ${index} unnamed`, "UNSUPPORTED_OPERATION", { + operation: "toObject()" + }); + return toObject(names, this, deep); + }, {}); + } + /** + * @_ignore + */ + slice(start, end) { + if (start == null) { + start = 0; + } + if (start < 0) { + start += this.length; + if (start < 0) { + start = 0; + } + } + if (end == null) { + end = this.length; + } + if (end < 0) { + end += this.length; + if (end < 0) { + end = 0; + } + } + if (end > this.length) { + end = this.length; + } + const _names = getNames(this); + const result = [], names = []; + for (let i = start; i < end; i++) { + result.push(this[i]); + names.push(_names[i]); + } + return new Result(_guard, result, names); + } + /** + * @_ignore + */ + filter(callback, thisArg) { + const _names = getNames(this); + const result = [], names = []; + for (let i = 0; i < this.length; i++) { + const item = this[i]; + if (item instanceof Error) { + throwError(`index ${i}`, item); + } + if (callback.call(thisArg, item, i, this)) { + result.push(item); + names.push(_names[i]); + } + } + return new Result(_guard, result, names); + } + /** + * @_ignore + */ + map(callback, thisArg) { + const result = []; + for (let i = 0; i < this.length; i++) { + const item = this[i]; + if (item instanceof Error) { + throwError(`index ${i}`, item); + } + result.push(callback.call(thisArg, item, i, this)); + } + return result; + } + /** + * Returns the value for %%name%%. + * + * Since it is possible to have a key whose name conflicts with + * a method on a [[Result]] or its superclass Array, or any + * JavaScript keyword, this ensures all named values are still + * accessible by name. + */ + getValue(name) { + const index = getNames(this).indexOf(name); + if (index === -1) { + return undefined; + } + const value = this[index]; + if (value instanceof Error) { + throwError(`property ${JSON.stringify(name)}`, value.error); + } + return value; + } + /** + * Creates a new [[Result]] for %%items%% with each entry + * also accessible by its corresponding name in %%keys%%. + */ + static fromItems(items, keys) { + return new Result(_guard, items, keys); + } +} +/** + * Returns all errors found in a [[Result]]. + * + * Since certain errors encountered when creating a [[Result]] do + * not impact the ability to continue parsing data, they are + * deferred until they are actually accessed. Hence a faulty string + * in an Event that is never used does not impact the program flow. + * + * However, sometimes it may be useful to access, identify or + * validate correctness of a [[Result]]. + * + * @_docloc api/abi + */ +function checkResultErrors(result) { + // Find the first error (if any) + const errors = []; + const checkErrors = function (path, object) { + if (!Array.isArray(object)) { + return; + } + for (let key in object) { + const childPath = path.slice(); + childPath.push(key); + try { + checkErrors(childPath, object[key]); + } + catch (error) { + errors.push({ path: childPath, error: error }); + } + } + }; + checkErrors([], result); + return errors; +} +function getValue(value) { + let bytes = toBeArray(value); + errors_assert(bytes.length <= WordSize, "value out-of-bounds", "BUFFER_OVERRUN", { buffer: bytes, length: WordSize, offset: bytes.length }); + if (bytes.length !== WordSize) { + bytes = getBytesCopy(data_concat([Padding.slice(bytes.length % WordSize), bytes])); + } + return bytes; +} +/** + * @_ignore + */ +class Coder { + // The coder name: + // - address, uint256, tuple, array, etc. + name; + // The fully expanded type, including composite types: + // - address, uint256, tuple(address,bytes), uint256[3][4][], etc. + type; + // The localName bound in the signature, in this example it is "baz": + // - tuple(address foo, uint bar) baz + localName; + // Whether this type is dynamic: + // - Dynamic: bytes, string, address[], tuple(boolean[]), etc. + // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8) + dynamic; + constructor(name, type, localName, dynamic) { + properties_defineProperties(this, { name, type, localName, dynamic }, { + name: "string", type: "string", localName: "string", dynamic: "boolean" + }); + } + _throwError(message, value) { + errors_assertArgument(false, message, this.localName, value); + } +} +/** + * @_ignore + */ +class Writer { + // An array of WordSize lengthed objects to concatenation + #data; + #dataLength; + constructor() { + this.#data = []; + this.#dataLength = 0; + } + get data() { + return data_concat(this.#data); + } + get length() { return this.#dataLength; } + #writeData(data) { + this.#data.push(data); + this.#dataLength += data.length; + return data.length; + } + appendWriter(writer) { + return this.#writeData(getBytesCopy(writer.data)); + } + // Arrayish item; pad on the right to *nearest* WordSize + writeBytes(value) { + let bytes = getBytesCopy(value); + const paddingOffset = bytes.length % WordSize; + if (paddingOffset) { + bytes = getBytesCopy(data_concat([bytes, Padding.slice(paddingOffset)])); + } + return this.#writeData(bytes); + } + // Numeric item; pad on the left *to* WordSize + writeValue(value) { + return this.#writeData(getValue(value)); + } + // Inserts a numeric place-holder, returning a callback that can + // be used to asjust the value later + writeUpdatableValue() { + const offset = this.#data.length; + this.#data.push(Padding); + this.#dataLength += WordSize; + return (value) => { + this.#data[offset] = getValue(value); + }; + } +} +/** + * @_ignore + */ +class Reader { + // Allows incomplete unpadded data to be read; otherwise an error + // is raised if attempting to overrun the buffer. This is required + // to deal with an old Solidity bug, in which event data for + // external (not public thoguh) was tightly packed. + allowLoose; + #data; + #offset; + #bytesRead; + #parent; + #maxInflation; + constructor(data, allowLoose, maxInflation) { + properties_defineProperties(this, { allowLoose: !!allowLoose }); + this.#data = getBytesCopy(data); + this.#bytesRead = 0; + this.#parent = null; + this.#maxInflation = (maxInflation != null) ? maxInflation : 1024; + this.#offset = 0; + } + get data() { return data_hexlify(this.#data); } + get dataLength() { return this.#data.length; } + get consumed() { return this.#offset; } + get bytes() { return new Uint8Array(this.#data); } + #incrementBytesRead(count) { + if (this.#parent) { + return this.#parent.#incrementBytesRead(count); + } + this.#bytesRead += count; + // Check for excessive inflation (see: #4537) + errors_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", { + buffer: getBytesCopy(this.#data), offset: this.#offset, + length: count, info: { + bytesRead: this.#bytesRead, + dataLength: this.dataLength + } + }); + } + #peekBytes(offset, length, loose) { + let alignedLength = Math.ceil(length / WordSize) * WordSize; + if (this.#offset + alignedLength > this.#data.length) { + if (this.allowLoose && loose && this.#offset + length <= this.#data.length) { + alignedLength = length; + } + else { + errors_assert(false, "data out-of-bounds", "BUFFER_OVERRUN", { + buffer: getBytesCopy(this.#data), + length: this.#data.length, + offset: this.#offset + alignedLength + }); + } + } + return this.#data.slice(this.#offset, this.#offset + alignedLength); + } + // Create a sub-reader with the same underlying data, but offset + subReader(offset) { + const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation); + reader.#parent = this; + return reader; + } + // Read bytes + readBytes(length, loose) { + let bytes = this.#peekBytes(0, length, !!loose); + this.#incrementBytesRead(length); + this.#offset += bytes.length; + // @TODO: Make sure the length..end bytes are all 0? + return bytes.slice(0, length); + } + // Read a numeric values + readValue() { + return toBigInt(this.readBytes(WordSize)); + } + readIndex() { + return toNumber(this.readBytes(WordSize)); + } +} +//# sourceMappingURL=abstract-coder.js.map +;// ./node_modules/ethers/lib.esm/address/address.js + + +const address_BN_0 = BigInt(0); +const BN_36 = BigInt(36); +function getChecksumAddress(address) { + // if (!isHexString(address, 20)) { + // logger.throwArgumentError("invalid address", "address", address); + // } + address = address.toLowerCase(); + const chars = address.substring(2).split(""); + const expanded = new Uint8Array(40); + for (let i = 0; i < 40; i++) { + expanded[i] = chars[i].charCodeAt(0); + } + const hashed = data_getBytes(keccak_keccak256(expanded)); + for (let i = 0; i < 40; i += 2) { + if ((hashed[i >> 1] >> 4) >= 8) { + chars[i] = chars[i].toUpperCase(); + } + if ((hashed[i >> 1] & 0x0f) >= 8) { + chars[i + 1] = chars[i + 1].toUpperCase(); + } + } + return "0x" + chars.join(""); +} +// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number +// Create lookup table +const ibanLookup = {}; +for (let i = 0; i < 10; i++) { + ibanLookup[String(i)] = String(i); +} +for (let i = 0; i < 26; i++) { + ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); +} +// How many decimal digits can we process? (for 64-bit float, this is 15) +// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER)); +const safeDigits = 15; +function ibanChecksum(address) { + address = address.toUpperCase(); + address = address.substring(4) + address.substring(0, 2) + "00"; + let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join(""); + // Javascript can handle integers safely up to 15 (decimal) digits + while (expanded.length >= safeDigits) { + let block = expanded.substring(0, safeDigits); + expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); + } + let checksum = String(98 - (parseInt(expanded, 10) % 97)); + while (checksum.length < 2) { + checksum = "0" + checksum; + } + return checksum; +} +; +const Base36 = (function () { + ; + const result = {}; + for (let i = 0; i < 36; i++) { + const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i]; + result[key] = BigInt(i); + } + return result; +})(); +function fromBase36(value) { + value = value.toLowerCase(); + let result = address_BN_0; + for (let i = 0; i < value.length; i++) { + result = result * BN_36 + Base36[value[i]]; + } + return result; +} +/** + * Returns a normalized and checksumed address for %%address%%. + * This accepts non-checksum addresses, checksum addresses and + * [[getIcapAddress]] formats. + * + * The checksum in Ethereum uses the capitalization (upper-case + * vs lower-case) of the characters within an address to encode + * its checksum, which offers, on average, a checksum of 15-bits. + * + * If %%address%% contains both upper-case and lower-case, it is + * assumed to already be a checksum address and its checksum is + * validated, and if the address fails its expected checksum an + * error is thrown. + * + * If you wish the checksum of %%address%% to be ignore, it should + * be converted to lower-case (i.e. ``.toLowercase()``) before + * being passed in. This should be a very rare situation though, + * that you wish to bypass the safegaurds in place to protect + * against an address that has been incorrectly copied from another + * source. + * + * @example: + * // Adds the checksum (via upper-casing specific letters) + * getAddress("0x8ba1f109551bd432803012645ac136ddd64dba72") + * //_result: + * + * // Converts ICAP address and adds checksum + * getAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36"); + * //_result: + * + * // Throws an error if an address contains mixed case, + * // but the checksum fails + * getAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72") + * //_error: + */ +function address_getAddress(address) { + errors_assertArgument(typeof (address) === "string", "invalid address", "address", address); + if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { + // Missing the 0x prefix + if (!address.startsWith("0x")) { + address = "0x" + address; + } + const result = getChecksumAddress(address); + // It is a checksummed address with a bad checksum + errors_assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address, "bad address checksum", "address", address); + return result; + } + // Maybe ICAP? (we only support direct mode) + if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { + // It is an ICAP address with a bad checksum + errors_assertArgument(address.substring(2, 4) === ibanChecksum(address), "bad icap checksum", "address", address); + let result = fromBase36(address.substring(4)).toString(16); + while (result.length < 40) { + result = "0" + result; + } + return getChecksumAddress("0x" + result); + } + errors_assertArgument(false, "invalid address", "address", address); +} +/** + * The [ICAP Address format](link-icap) format is an early checksum + * format which attempts to be compatible with the banking + * industry [IBAN format](link-wiki-iban) for bank accounts. + * + * It is no longer common or a recommended format. + * + * @example: + * getIcapAddress("0x8ba1f109551bd432803012645ac136ddd64dba72"); + * //_result: + * + * getIcapAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36"); + * //_result: + * + * // Throws an error if the ICAP checksum is wrong + * getIcapAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37"); + * //_error: + */ +function getIcapAddress(address) { + //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase(); + let base36 = BigInt(address_getAddress(address)).toString(36).toUpperCase(); + while (base36.length < 30) { + base36 = "0" + base36; + } + return "XE" + ibanChecksum("XE00" + base36) + base36; +} +//# sourceMappingURL=address.js.map +;// ./node_modules/ethers/lib.esm/abi/typed.js +/** + * A Typed object allows a value to have its type explicitly + * specified. + * + * For example, in Solidity, the value ``45`` could represent a + * ``uint8`` or a ``uint256``. The value ``0x1234`` could represent + * a ``bytes2`` or ``bytes``. + * + * Since JavaScript has no meaningful way to explicitly inform any + * APIs which what the type is, this allows transparent interoperation + * with Soldity. + * + * @_subsection: api/abi:Typed Values + */ + +const _gaurd = {}; +function n(value, width) { + let signed = false; + if (width < 0) { + signed = true; + width *= -1; + } + // @TODO: Check range is valid for value + return new Typed(_gaurd, `${signed ? "" : "u"}int${width}`, value, { signed, width }); +} +function b(value, size) { + // @TODO: Check range is valid for value + return new Typed(_gaurd, `bytes${(size) ? size : ""}`, value, { size }); +} +const _typedSymbol = Symbol.for("_ethers_typed"); +/** + * The **Typed** class to wrap values providing explicit type information. + */ +class Typed { + /** + * The type, as a Solidity-compatible type. + */ + type; + /** + * The actual value. + */ + value; + #options; + /** + * @_ignore: + */ + _typedSymbol; + /** + * @_ignore: + */ + constructor(gaurd, type, value, options) { + if (options == null) { + options = null; + } + assertPrivate(_gaurd, gaurd, "Typed"); + properties_defineProperties(this, { _typedSymbol, type, value }); + this.#options = options; + // Check the value is valid + this.format(); + } + /** + * Format the type as a Human-Readable type. + */ + format() { + if (this.type === "array") { + throw new Error(""); + } + else if (this.type === "dynamicArray") { + throw new Error(""); + } + else if (this.type === "tuple") { + return `tuple(${this.value.map((v) => v.format()).join(",")})`; + } + return this.type; + } + /** + * The default value returned by this type. + */ + defaultValue() { + return 0; + } + /** + * The minimum value for numeric types. + */ + minValue() { + return 0; + } + /** + * The maximum value for numeric types. + */ + maxValue() { + return 0; + } + /** + * Returns ``true`` and provides a type guard is this is a [[TypedBigInt]]. + */ + isBigInt() { + return !!(this.type.match(/^u?int[0-9]+$/)); + } + /** + * Returns ``true`` and provides a type guard is this is a [[TypedData]]. + */ + isData() { + return this.type.startsWith("bytes"); + } + /** + * Returns ``true`` and provides a type guard is this is a [[TypedString]]. + */ + isString() { + return (this.type === "string"); + } + /** + * Returns the tuple name, if this is a tuple. Throws otherwise. + */ + get tupleName() { + if (this.type !== "tuple") { + throw TypeError("not a tuple"); + } + return this.#options; + } + // Returns the length of this type as an array + // - `null` indicates the length is unforced, it could be dynamic + // - `-1` indicates the length is dynamic + // - any other value indicates it is a static array and is its length + /** + * Returns the length of the array type or ``-1`` if it is dynamic. + * + * Throws if the type is not an array. + */ + get arrayLength() { + if (this.type !== "array") { + throw TypeError("not an array"); + } + if (this.#options === true) { + return -1; + } + if (this.#options === false) { + return (this.value).length; + } + return null; + } + /** + * Returns a new **Typed** of %%type%% with the %%value%%. + */ + static from(type, value) { + return new Typed(_gaurd, type, value); + } + /** + * Return a new ``uint8`` type for %%v%%. + */ + static uint8(v) { return n(v, 8); } + /** + * Return a new ``uint16`` type for %%v%%. + */ + static uint16(v) { return n(v, 16); } + /** + * Return a new ``uint24`` type for %%v%%. + */ + static uint24(v) { return n(v, 24); } + /** + * Return a new ``uint32`` type for %%v%%. + */ + static uint32(v) { return n(v, 32); } + /** + * Return a new ``uint40`` type for %%v%%. + */ + static uint40(v) { return n(v, 40); } + /** + * Return a new ``uint48`` type for %%v%%. + */ + static uint48(v) { return n(v, 48); } + /** + * Return a new ``uint56`` type for %%v%%. + */ + static uint56(v) { return n(v, 56); } + /** + * Return a new ``uint64`` type for %%v%%. + */ + static uint64(v) { return n(v, 64); } + /** + * Return a new ``uint72`` type for %%v%%. + */ + static uint72(v) { return n(v, 72); } + /** + * Return a new ``uint80`` type for %%v%%. + */ + static uint80(v) { return n(v, 80); } + /** + * Return a new ``uint88`` type for %%v%%. + */ + static uint88(v) { return n(v, 88); } + /** + * Return a new ``uint96`` type for %%v%%. + */ + static uint96(v) { return n(v, 96); } + /** + * Return a new ``uint104`` type for %%v%%. + */ + static uint104(v) { return n(v, 104); } + /** + * Return a new ``uint112`` type for %%v%%. + */ + static uint112(v) { return n(v, 112); } + /** + * Return a new ``uint120`` type for %%v%%. + */ + static uint120(v) { return n(v, 120); } + /** + * Return a new ``uint128`` type for %%v%%. + */ + static uint128(v) { return n(v, 128); } + /** + * Return a new ``uint136`` type for %%v%%. + */ + static uint136(v) { return n(v, 136); } + /** + * Return a new ``uint144`` type for %%v%%. + */ + static uint144(v) { return n(v, 144); } + /** + * Return a new ``uint152`` type for %%v%%. + */ + static uint152(v) { return n(v, 152); } + /** + * Return a new ``uint160`` type for %%v%%. + */ + static uint160(v) { return n(v, 160); } + /** + * Return a new ``uint168`` type for %%v%%. + */ + static uint168(v) { return n(v, 168); } + /** + * Return a new ``uint176`` type for %%v%%. + */ + static uint176(v) { return n(v, 176); } + /** + * Return a new ``uint184`` type for %%v%%. + */ + static uint184(v) { return n(v, 184); } + /** + * Return a new ``uint192`` type for %%v%%. + */ + static uint192(v) { return n(v, 192); } + /** + * Return a new ``uint200`` type for %%v%%. + */ + static uint200(v) { return n(v, 200); } + /** + * Return a new ``uint208`` type for %%v%%. + */ + static uint208(v) { return n(v, 208); } + /** + * Return a new ``uint216`` type for %%v%%. + */ + static uint216(v) { return n(v, 216); } + /** + * Return a new ``uint224`` type for %%v%%. + */ + static uint224(v) { return n(v, 224); } + /** + * Return a new ``uint232`` type for %%v%%. + */ + static uint232(v) { return n(v, 232); } + /** + * Return a new ``uint240`` type for %%v%%. + */ + static uint240(v) { return n(v, 240); } + /** + * Return a new ``uint248`` type for %%v%%. + */ + static uint248(v) { return n(v, 248); } + /** + * Return a new ``uint256`` type for %%v%%. + */ + static uint256(v) { return n(v, 256); } + /** + * Return a new ``uint256`` type for %%v%%. + */ + static uint(v) { return n(v, 256); } + /** + * Return a new ``int8`` type for %%v%%. + */ + static int8(v) { return n(v, -8); } + /** + * Return a new ``int16`` type for %%v%%. + */ + static int16(v) { return n(v, -16); } + /** + * Return a new ``int24`` type for %%v%%. + */ + static int24(v) { return n(v, -24); } + /** + * Return a new ``int32`` type for %%v%%. + */ + static int32(v) { return n(v, -32); } + /** + * Return a new ``int40`` type for %%v%%. + */ + static int40(v) { return n(v, -40); } + /** + * Return a new ``int48`` type for %%v%%. + */ + static int48(v) { return n(v, -48); } + /** + * Return a new ``int56`` type for %%v%%. + */ + static int56(v) { return n(v, -56); } + /** + * Return a new ``int64`` type for %%v%%. + */ + static int64(v) { return n(v, -64); } + /** + * Return a new ``int72`` type for %%v%%. + */ + static int72(v) { return n(v, -72); } + /** + * Return a new ``int80`` type for %%v%%. + */ + static int80(v) { return n(v, -80); } + /** + * Return a new ``int88`` type for %%v%%. + */ + static int88(v) { return n(v, -88); } + /** + * Return a new ``int96`` type for %%v%%. + */ + static int96(v) { return n(v, -96); } + /** + * Return a new ``int104`` type for %%v%%. + */ + static int104(v) { return n(v, -104); } + /** + * Return a new ``int112`` type for %%v%%. + */ + static int112(v) { return n(v, -112); } + /** + * Return a new ``int120`` type for %%v%%. + */ + static int120(v) { return n(v, -120); } + /** + * Return a new ``int128`` type for %%v%%. + */ + static int128(v) { return n(v, -128); } + /** + * Return a new ``int136`` type for %%v%%. + */ + static int136(v) { return n(v, -136); } + /** + * Return a new ``int144`` type for %%v%%. + */ + static int144(v) { return n(v, -144); } + /** + * Return a new ``int52`` type for %%v%%. + */ + static int152(v) { return n(v, -152); } + /** + * Return a new ``int160`` type for %%v%%. + */ + static int160(v) { return n(v, -160); } + /** + * Return a new ``int168`` type for %%v%%. + */ + static int168(v) { return n(v, -168); } + /** + * Return a new ``int176`` type for %%v%%. + */ + static int176(v) { return n(v, -176); } + /** + * Return a new ``int184`` type for %%v%%. + */ + static int184(v) { return n(v, -184); } + /** + * Return a new ``int92`` type for %%v%%. + */ + static int192(v) { return n(v, -192); } + /** + * Return a new ``int200`` type for %%v%%. + */ + static int200(v) { return n(v, -200); } + /** + * Return a new ``int208`` type for %%v%%. + */ + static int208(v) { return n(v, -208); } + /** + * Return a new ``int216`` type for %%v%%. + */ + static int216(v) { return n(v, -216); } + /** + * Return a new ``int224`` type for %%v%%. + */ + static int224(v) { return n(v, -224); } + /** + * Return a new ``int232`` type for %%v%%. + */ + static int232(v) { return n(v, -232); } + /** + * Return a new ``int240`` type for %%v%%. + */ + static int240(v) { return n(v, -240); } + /** + * Return a new ``int248`` type for %%v%%. + */ + static int248(v) { return n(v, -248); } + /** + * Return a new ``int256`` type for %%v%%. + */ + static int256(v) { return n(v, -256); } + /** + * Return a new ``int256`` type for %%v%%. + */ + static int(v) { return n(v, -256); } + /** + * Return a new ``bytes1`` type for %%v%%. + */ + static bytes1(v) { return b(v, 1); } + /** + * Return a new ``bytes2`` type for %%v%%. + */ + static bytes2(v) { return b(v, 2); } + /** + * Return a new ``bytes3`` type for %%v%%. + */ + static bytes3(v) { return b(v, 3); } + /** + * Return a new ``bytes4`` type for %%v%%. + */ + static bytes4(v) { return b(v, 4); } + /** + * Return a new ``bytes5`` type for %%v%%. + */ + static bytes5(v) { return b(v, 5); } + /** + * Return a new ``bytes6`` type for %%v%%. + */ + static bytes6(v) { return b(v, 6); } + /** + * Return a new ``bytes7`` type for %%v%%. + */ + static bytes7(v) { return b(v, 7); } + /** + * Return a new ``bytes8`` type for %%v%%. + */ + static bytes8(v) { return b(v, 8); } + /** + * Return a new ``bytes9`` type for %%v%%. + */ + static bytes9(v) { return b(v, 9); } + /** + * Return a new ``bytes10`` type for %%v%%. + */ + static bytes10(v) { return b(v, 10); } + /** + * Return a new ``bytes11`` type for %%v%%. + */ + static bytes11(v) { return b(v, 11); } + /** + * Return a new ``bytes12`` type for %%v%%. + */ + static bytes12(v) { return b(v, 12); } + /** + * Return a new ``bytes13`` type for %%v%%. + */ + static bytes13(v) { return b(v, 13); } + /** + * Return a new ``bytes14`` type for %%v%%. + */ + static bytes14(v) { return b(v, 14); } + /** + * Return a new ``bytes15`` type for %%v%%. + */ + static bytes15(v) { return b(v, 15); } + /** + * Return a new ``bytes16`` type for %%v%%. + */ + static bytes16(v) { return b(v, 16); } + /** + * Return a new ``bytes17`` type for %%v%%. + */ + static bytes17(v) { return b(v, 17); } + /** + * Return a new ``bytes18`` type for %%v%%. + */ + static bytes18(v) { return b(v, 18); } + /** + * Return a new ``bytes19`` type for %%v%%. + */ + static bytes19(v) { return b(v, 19); } + /** + * Return a new ``bytes20`` type for %%v%%. + */ + static bytes20(v) { return b(v, 20); } + /** + * Return a new ``bytes21`` type for %%v%%. + */ + static bytes21(v) { return b(v, 21); } + /** + * Return a new ``bytes22`` type for %%v%%. + */ + static bytes22(v) { return b(v, 22); } + /** + * Return a new ``bytes23`` type for %%v%%. + */ + static bytes23(v) { return b(v, 23); } + /** + * Return a new ``bytes24`` type for %%v%%. + */ + static bytes24(v) { return b(v, 24); } + /** + * Return a new ``bytes25`` type for %%v%%. + */ + static bytes25(v) { return b(v, 25); } + /** + * Return a new ``bytes26`` type for %%v%%. + */ + static bytes26(v) { return b(v, 26); } + /** + * Return a new ``bytes27`` type for %%v%%. + */ + static bytes27(v) { return b(v, 27); } + /** + * Return a new ``bytes28`` type for %%v%%. + */ + static bytes28(v) { return b(v, 28); } + /** + * Return a new ``bytes29`` type for %%v%%. + */ + static bytes29(v) { return b(v, 29); } + /** + * Return a new ``bytes30`` type for %%v%%. + */ + static bytes30(v) { return b(v, 30); } + /** + * Return a new ``bytes31`` type for %%v%%. + */ + static bytes31(v) { return b(v, 31); } + /** + * Return a new ``bytes32`` type for %%v%%. + */ + static bytes32(v) { return b(v, 32); } + /** + * Return a new ``address`` type for %%v%%. + */ + static address(v) { return new Typed(_gaurd, "address", v); } + /** + * Return a new ``bool`` type for %%v%%. + */ + static bool(v) { return new Typed(_gaurd, "bool", !!v); } + /** + * Return a new ``bytes`` type for %%v%%. + */ + static bytes(v) { return new Typed(_gaurd, "bytes", v); } + /** + * Return a new ``string`` type for %%v%%. + */ + static string(v) { return new Typed(_gaurd, "string", v); } + /** + * Return a new ``array`` type for %%v%%, allowing %%dynamic%% length. + */ + static array(v, dynamic) { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "array", v, dynamic); + } + /** + * Return a new ``tuple`` type for %%v%%, with the optional %%name%%. + */ + static tuple(v, name) { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "tuple", v, name); + } + /** + * Return a new ``uint8`` type for %%v%%. + */ + static overrides(v) { + return new Typed(_gaurd, "overrides", Object.assign({}, v)); + } + /** + * Returns true only if %%value%% is a [[Typed]] instance. + */ + static isTyped(value) { + return (value + && typeof (value) === "object" + && "_typedSymbol" in value + && value._typedSymbol === _typedSymbol); + } + /** + * If the value is a [[Typed]] instance, validates the underlying value + * and returns it, otherwise returns value directly. + * + * This is useful for functions that with to accept either a [[Typed]] + * object or values. + */ + static dereference(value, type) { + if (Typed.isTyped(value)) { + if (value.type !== type) { + throw new Error(`invalid type: expecetd ${type}, got ${value.type}`); + } + return value.value; + } + return value; + } +} +//# sourceMappingURL=typed.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/address.js + + + + +/** + * @_ignore + */ +class AddressCoder extends Coder { + constructor(localName) { + super("address", "address", localName, false); + } + defaultValue() { + return "0x0000000000000000000000000000000000000000"; + } + encode(writer, _value) { + let value = Typed.dereference(_value, "string"); + try { + value = address_getAddress(value); + } + catch (error) { + return this._throwError(error.message, _value); + } + return writer.writeValue(value); + } + decode(reader) { + return address_getAddress(toBeHex(reader.readValue(), 20)); + } +} +//# sourceMappingURL=address.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/anonymous.js + +/** + * Clones the functionality of an existing Coder, but without a localName + * + * @_ignore + */ +class AnonymousCoder extends Coder { + coder; + constructor(coder) { + super(coder.name, coder.type, "_", coder.dynamic); + this.coder = coder; + } + defaultValue() { + return this.coder.defaultValue(); + } + encode(writer, value) { + return this.coder.encode(writer, value); + } + decode(reader) { + return this.coder.decode(reader); + } +} +//# sourceMappingURL=anonymous.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/array.js + + + + +/** + * @_ignore + */ +function pack(writer, coders, values) { + let arrayValues = []; + if (Array.isArray(values)) { + arrayValues = values; + } + else if (values && typeof (values) === "object") { + let unique = {}; + arrayValues = coders.map((coder) => { + const name = coder.localName; + errors_assert(name, "cannot encode object for signature with missing names", "INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values }); + errors_assert(!unique[name], "cannot encode object for signature with duplicate names", "INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values }); + unique[name] = true; + return values[name]; + }); + } + else { + errors_assertArgument(false, "invalid tuple value", "tuple", values); + } + errors_assertArgument(coders.length === arrayValues.length, "types/value length mismatch", "tuple", values); + let staticWriter = new Writer(); + let dynamicWriter = new Writer(); + let updateFuncs = []; + coders.forEach((coder, index) => { + let value = arrayValues[index]; + if (coder.dynamic) { + // Get current dynamic offset (for the future pointer) + let dynamicOffset = dynamicWriter.length; + // Encode the dynamic value into the dynamicWriter + coder.encode(dynamicWriter, value); + // Prepare to populate the correct offset once we are done + let updateFunc = staticWriter.writeUpdatableValue(); + updateFuncs.push((baseOffset) => { + updateFunc(baseOffset + dynamicOffset); + }); + } + else { + coder.encode(staticWriter, value); + } + }); + // Backfill all the dynamic offsets, now that we know the static length + updateFuncs.forEach((func) => { func(staticWriter.length); }); + let length = writer.appendWriter(staticWriter); + length += writer.appendWriter(dynamicWriter); + return length; +} +/** + * @_ignore + */ +function unpack(reader, coders) { + let values = []; + let keys = []; + // A reader anchored to this base + let baseReader = reader.subReader(0); + coders.forEach((coder) => { + let value = null; + if (coder.dynamic) { + let offset = reader.readIndex(); + let offsetReader = baseReader.subReader(offset); + try { + value = coder.decode(offsetReader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + else { + try { + value = coder.decode(reader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + if (value == undefined) { + throw new Error("investigate"); + } + values.push(value); + keys.push(coder.localName || null); + }); + return Result.fromItems(values, keys); +} +/** + * @_ignore + */ +class ArrayCoder extends Coder { + coder; + length; + constructor(coder, length, localName) { + const type = (coder.type + "[" + (length >= 0 ? length : "") + "]"); + const dynamic = (length === -1 || coder.dynamic); + super("array", type, localName, dynamic); + properties_defineProperties(this, { coder, length }); + } + defaultValue() { + // Verifies the child coder is valid (even if the array is dynamic or 0-length) + const defaultChild = this.coder.defaultValue(); + const result = []; + for (let i = 0; i < this.length; i++) { + result.push(defaultChild); + } + return result; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "array"); + if (!Array.isArray(value)) { + this._throwError("expected array value", value); + } + let count = this.length; + if (count === -1) { + count = value.length; + writer.writeValue(value.length); + } + assertArgumentCount(value.length, count, "coder array" + (this.localName ? (" " + this.localName) : "")); + let coders = []; + for (let i = 0; i < value.length; i++) { + coders.push(this.coder); + } + return pack(writer, coders, value); + } + decode(reader) { + let count = this.length; + if (count === -1) { + count = reader.readIndex(); + // Check that there is *roughly* enough data to ensure + // stray random data is not being read as a length. Each + // slot requires at least 32 bytes for their value (or 32 + // bytes as a link to the data). This could use a much + // tighter bound, but we are erroring on the side of safety. + errors_assert(count * WordSize <= reader.dataLength, "insufficient data length", "BUFFER_OVERRUN", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength }); + } + let coders = []; + for (let i = 0; i < count; i++) { + coders.push(new AnonymousCoder(this.coder)); + } + return unpack(reader, coders); + } +} +//# sourceMappingURL=array.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/boolean.js + + +/** + * @_ignore + */ +class BooleanCoder extends Coder { + constructor(localName) { + super("bool", "bool", localName, false); + } + defaultValue() { + return false; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "bool"); + return writer.writeValue(value ? 1 : 0); + } + decode(reader) { + return !!reader.readValue(); + } +} +//# sourceMappingURL=boolean.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/bytes.js + + +/** + * @_ignore + */ +class DynamicBytesCoder extends Coder { + constructor(type, localName) { + super(type, type, localName, true); + } + defaultValue() { + return "0x"; + } + encode(writer, value) { + value = getBytesCopy(value); + let length = writer.writeValue(value.length); + length += writer.writeBytes(value); + return length; + } + decode(reader) { + return reader.readBytes(reader.readIndex(), true); + } +} +/** + * @_ignore + */ +class BytesCoder extends DynamicBytesCoder { + constructor(localName) { + super("bytes", localName); + } + decode(reader) { + return data_hexlify(super.decode(reader)); + } +} +//# sourceMappingURL=bytes.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/fixed-bytes.js + + + +/** + * @_ignore + */ +class FixedBytesCoder extends Coder { + size; + constructor(size, localName) { + let name = "bytes" + String(size); + super(name, name, localName, false); + properties_defineProperties(this, { size }, { size: "number" }); + } + defaultValue() { + return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); + } + encode(writer, _value) { + let data = getBytesCopy(Typed.dereference(_value, this.type)); + if (data.length !== this.size) { + this._throwError("incorrect data length", _value); + } + return writer.writeBytes(data); + } + decode(reader) { + return data_hexlify(reader.readBytes(this.size)); + } +} +//# sourceMappingURL=fixed-bytes.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/null.js + +const Empty = new Uint8Array([]); +/** + * @_ignore + */ +class NullCoder extends Coder { + constructor(localName) { + super("null", "", localName, false); + } + defaultValue() { + return null; + } + encode(writer, value) { + if (value != null) { + this._throwError("not null", value); + } + return writer.writeBytes(Empty); + } + decode(reader) { + reader.readBytes(0); + return null; + } +} +//# sourceMappingURL=null.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/number.js + + + +const number_BN_0 = BigInt(0); +const number_BN_1 = BigInt(1); +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +/** + * @_ignore + */ +class NumberCoder extends Coder { + size; + signed; + constructor(size, signed, localName) { + const name = ((signed ? "int" : "uint") + (size * 8)); + super(name, name, localName, false); + properties_defineProperties(this, { size, signed }, { size: "number", signed: "boolean" }); + } + defaultValue() { + return 0; + } + encode(writer, _value) { + let value = getBigInt(Typed.dereference(_value, this.type)); + // Check bounds are safe for encoding + let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8); + if (this.signed) { + let bounds = mask(maxUintValue, (this.size * 8) - 1); + if (value > bounds || value < -(bounds + number_BN_1)) { + this._throwError("value out-of-bounds", _value); + } + value = toTwos(value, 8 * WordSize); + } + else if (value < number_BN_0 || value > mask(maxUintValue, this.size * 8)) { + this._throwError("value out-of-bounds", _value); + } + return writer.writeValue(value); + } + decode(reader) { + let value = mask(reader.readValue(), this.size * 8); + if (this.signed) { + value = fromTwos(value, this.size * 8); + } + return value; + } +} +//# sourceMappingURL=number.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/string.js + + + +/** + * @_ignore + */ +class StringCoder extends DynamicBytesCoder { + constructor(localName) { + super("string", localName); + } + defaultValue() { + return ""; + } + encode(writer, _value) { + return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string"))); + } + decode(reader) { + return toUtf8String(super.decode(reader)); + } +} +//# sourceMappingURL=string.js.map +;// ./node_modules/ethers/lib.esm/abi/coders/tuple.js + + + + +/** + * @_ignore + */ +class TupleCoder extends Coder { + coders; + constructor(coders, localName) { + let dynamic = false; + const types = []; + coders.forEach((coder) => { + if (coder.dynamic) { + dynamic = true; + } + types.push(coder.type); + }); + const type = ("tuple(" + types.join(",") + ")"); + super("tuple", type, localName, dynamic); + properties_defineProperties(this, { coders: Object.freeze(coders.slice()) }); + } + defaultValue() { + const values = []; + this.coders.forEach((coder) => { + values.push(coder.defaultValue()); + }); + // We only output named properties for uniquely named coders + const uniqueNames = this.coders.reduce((accum, coder) => { + const name = coder.localName; + if (name) { + if (!accum[name]) { + accum[name] = 0; + } + accum[name]++; + } + return accum; + }, {}); + // Add named values + this.coders.forEach((coder, index) => { + let name = coder.localName; + if (!name || uniqueNames[name] !== 1) { + return; + } + if (name === "length") { + name = "_length"; + } + if (values[name] != null) { + return; + } + values[name] = values[index]; + }); + return Object.freeze(values); + } + encode(writer, _value) { + const value = Typed.dereference(_value, "tuple"); + return pack(writer, this.coders, value); + } + decode(reader) { + return unpack(reader, this.coders); + } +} +//# sourceMappingURL=tuple.js.map +;// ./node_modules/ethers/lib.esm/abi/fragments.js +/** + * A fragment is a single item from an ABI, which may represent any of: + * + * - [Functions](FunctionFragment) + * - [Events](EventFragment) + * - [Constructors](ConstructorFragment) + * - Custom [Errors](ErrorFragment) + * - [Fallback or Receive](FallbackFragment) functions + * + * @_subsection api/abi/abi-coder:Fragments [about-fragments] + */ + + +; +// [ "a", "b" ] => { "a": 1, "b": 1 } +function setify(items) { + const result = new Set(); + items.forEach((k) => result.add(k)); + return Object.freeze(result); +} +const _kwVisibDeploy = "external public payable override"; +const KwVisibDeploy = setify(_kwVisibDeploy.split(" ")); +// Visibility Keywords +const _kwVisib = "constant external internal payable private public pure view override"; +const KwVisib = setify(_kwVisib.split(" ")); +const _kwTypes = "constructor error event fallback function receive struct"; +const KwTypes = setify(_kwTypes.split(" ")); +const _kwModifiers = "calldata memory storage payable indexed"; +const KwModifiers = setify(_kwModifiers.split(" ")); +const _kwOther = "tuple returns"; +// All Keywords +const _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(" "); +const Keywords = setify(_keywords.split(" ")); +// Single character tokens +const SimpleTokens = { + "(": "OPEN_PAREN", ")": "CLOSE_PAREN", + "[": "OPEN_BRACKET", "]": "CLOSE_BRACKET", + ",": "COMMA", "@": "AT" +}; +// Parser regexes to consume the next token +const regexWhitespacePrefix = new RegExp("^(\\s*)"); +const regexNumberPrefix = new RegExp("^([0-9]+)"); +const regexIdPrefix = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"); +// Parser regexs to check validity +const regexId = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$"); +const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$"); +class TokenString { + #offset; + #tokens; + get offset() { return this.#offset; } + get length() { return this.#tokens.length - this.#offset; } + constructor(tokens) { + this.#offset = 0; + this.#tokens = tokens.slice(); + } + clone() { return new TokenString(this.#tokens); } + reset() { this.#offset = 0; } + #subTokenString(from = 0, to = 0) { + return new TokenString(this.#tokens.slice(from, to).map((t) => { + return Object.freeze(Object.assign({}, t, { + match: (t.match - from), + linkBack: (t.linkBack - from), + linkNext: (t.linkNext - from), + })); + })); + } + // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens + popKeyword(allowed) { + const top = this.peek(); + if (top.type !== "KEYWORD" || !allowed.has(top.text)) { + throw new Error(`expected keyword ${top.text}`); + } + return this.pop().text; + } + // Pops and returns the value of the next token if it is `type`; throws if out of tokens + popType(type) { + if (this.peek().type !== type) { + const top = this.peek(); + throw new Error(`expected ${type}; got ${top.type} ${JSON.stringify(top.text)}`); + } + return this.pop().text; + } + // Pops and returns a "(" TOKENS ")" + popParen() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = this.#subTokenString(this.#offset + 1, top.match + 1); + this.#offset = top.match + 1; + return result; + } + // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")" + popParams() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = []; + while (this.#offset < top.match - 1) { + const link = this.peek().linkNext; + result.push(this.#subTokenString(this.#offset + 1, link)); + this.#offset = link; + } + this.#offset = top.match + 1; + return result; + } + // Returns the top Token, throwing if out of tokens + peek() { + if (this.#offset >= this.#tokens.length) { + throw new Error("out-of-bounds"); + } + return this.#tokens[this.#offset]; + } + // Returns the next value, if it is a keyword in `allowed` + peekKeyword(allowed) { + const top = this.peekType("KEYWORD"); + return (top != null && allowed.has(top)) ? top : null; + } + // Returns the value of the next token if it is `type` + peekType(type) { + if (this.length === 0) { + return null; + } + const top = this.peek(); + return (top.type === type) ? top.text : null; + } + // Returns the next token; throws if out of tokens + pop() { + const result = this.peek(); + this.#offset++; + return result; + } + toString() { + const tokens = []; + for (let i = this.#offset; i < this.#tokens.length; i++) { + const token = this.#tokens[i]; + tokens.push(`${token.type}:${token.text}`); + } + return ``; + } +} +function lex(text) { + const tokens = []; + const throwError = (message) => { + const token = (offset < text.length) ? JSON.stringify(text[offset]) : "$EOI"; + throw new Error(`invalid token ${token} at ${offset}: ${message}`); + }; + let brackets = []; + let commas = []; + let offset = 0; + while (offset < text.length) { + // Strip off any leading whitespace + let cur = text.substring(offset); + let match = cur.match(regexWhitespacePrefix); + if (match) { + offset += match[1].length; + cur = text.substring(offset); + } + const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 }; + tokens.push(token); + let type = (SimpleTokens[cur[0]] || ""); + if (type) { + token.type = type; + token.text = cur[0]; + offset++; + if (type === "OPEN_PAREN") { + brackets.push(tokens.length - 1); + commas.push(tokens.length - 1); + } + else if (type == "CLOSE_PAREN") { + if (brackets.length === 0) { + throwError("no matching open bracket"); + } + token.match = brackets.pop(); + (tokens[token.match]).match = tokens.length - 1; + token.depth--; + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + } + else if (type === "COMMA") { + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + commas.push(tokens.length - 1); + } + else if (type === "OPEN_BRACKET") { + token.type = "BRACKET"; + } + else if (type === "CLOSE_BRACKET") { + // Remove the CLOSE_BRACKET + let suffix = tokens.pop().text; + if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") { + const value = tokens.pop().text; + suffix = value + suffix; + (tokens[tokens.length - 1]).value = getNumber(value); + } + if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") { + throw new Error("missing opening bracket"); + } + (tokens[tokens.length - 1]).text += suffix; + } + continue; + } + match = cur.match(regexIdPrefix); + if (match) { + token.text = match[1]; + offset += token.text.length; + if (Keywords.has(token.text)) { + token.type = "KEYWORD"; + continue; + } + if (token.text.match(regexType)) { + token.type = "TYPE"; + continue; + } + token.type = "ID"; + continue; + } + match = cur.match(regexNumberPrefix); + if (match) { + token.text = match[1]; + token.type = "NUMBER"; + offset += token.text.length; + continue; + } + throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`); + } + return new TokenString(tokens.map((t) => Object.freeze(t))); +} +// Check only one of `allowed` is in `set` +function allowSingle(set, allowed) { + let included = []; + for (const key in allowed.keys()) { + if (set.has(key)) { + included.push(key); + } + } + if (included.length > 1) { + throw new Error(`conflicting types: ${included.join(", ")}`); + } +} +// Functions to process a Solidity Signature TokenString from left-to-right for... +// ...the name with an optional type, returning the name +function consumeName(type, tokens) { + if (tokens.peekKeyword(KwTypes)) { + const keyword = tokens.pop().text; + if (keyword !== type) { + throw new Error(`expected ${type}, got ${keyword}`); + } + } + return tokens.popType("ID"); +} +// ...all keywords matching allowed, returning the keywords +function consumeKeywords(tokens, allowed) { + const keywords = new Set(); + while (true) { + const keyword = tokens.peekType("KEYWORD"); + if (keyword == null || (allowed && !allowed.has(keyword))) { + break; + } + tokens.pop(); + if (keywords.has(keyword)) { + throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`); + } + keywords.add(keyword); + } + return Object.freeze(keywords); +} +// ...all visibility keywords, returning the coalesced mutability +function consumeMutability(tokens) { + let modifiers = consumeKeywords(tokens, KwVisib); + // Detect conflicting modifiers + allowSingle(modifiers, setify("constant payable nonpayable".split(" "))); + allowSingle(modifiers, setify("pure view payable nonpayable".split(" "))); + // Process mutability states + if (modifiers.has("view")) { + return "view"; + } + if (modifiers.has("pure")) { + return "pure"; + } + if (modifiers.has("payable")) { + return "payable"; + } + if (modifiers.has("nonpayable")) { + return "nonpayable"; + } + // Process legacy `constant` last + if (modifiers.has("constant")) { + return "view"; + } + return "nonpayable"; +} +// ...a parameter list, returning the ParamType list +function consumeParams(tokens, allowIndexed) { + return tokens.popParams().map((t) => ParamType.from(t, allowIndexed)); +} +// ...a gas limit, returning a BigNumber or null if none +function consumeGas(tokens) { + if (tokens.peekType("AT")) { + tokens.pop(); + if (tokens.peekType("NUMBER")) { + return getBigInt(tokens.pop().text); + } + throw new Error("invalid gas"); + } + return null; +} +function consumeEoi(tokens) { + if (tokens.length) { + throw new Error(`unexpected tokens at offset ${tokens.offset}: ${tokens.toString()}`); + } +} +const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/); +function verifyBasicType(type) { + const match = type.match(regexType); + errors_assertArgument(match, "invalid type", "type", type); + if (type === "uint") { + return "uint256"; + } + if (type === "int") { + return "int256"; + } + if (match[2]) { + // bytesXX + const length = parseInt(match[2]); + errors_assertArgument(length !== 0 && length <= 32, "invalid bytes length", "type", type); + } + else if (match[3]) { + // intXX or uintXX + const size = parseInt(match[3]); + errors_assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, "invalid numeric width", "type", type); + } + return type; +} +// Make the Fragment constructors effectively private +const fragments_guard = {}; +const internal = Symbol.for("_ethers_internal"); +const ParamTypeInternal = "_ParamTypeInternal"; +const ErrorFragmentInternal = "_ErrorInternal"; +const EventFragmentInternal = "_EventInternal"; +const ConstructorFragmentInternal = "_ConstructorInternal"; +const FallbackFragmentInternal = "_FallbackInternal"; +const FunctionFragmentInternal = "_FunctionInternal"; +const StructFragmentInternal = "_StructInternal"; +/** + * Each input and output of a [[Fragment]] is an Array of **ParamType**. + */ +class ParamType { + /** + * The local name of the parameter (or ``""`` if unbound) + */ + name; + /** + * The fully qualified type (e.g. ``"address"``, ``"tuple(address)"``, + * ``"uint256[3][]"``) + */ + type; + /** + * The base type (e.g. ``"address"``, ``"tuple"``, ``"array"``) + */ + baseType; + /** + * True if the parameters is indexed. + * + * For non-indexable types this is ``null``. + */ + indexed; + /** + * The components for the tuple. + * + * For non-tuple types this is ``null``. + */ + components; + /** + * The array length, or ``-1`` for dynamic-lengthed arrays. + * + * For non-array types this is ``null``. + */ + arrayLength; + /** + * The type of each child in the array. + * + * For non-array types this is ``null``. + */ + arrayChildren; + /** + * @private + */ + constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) { + assertPrivate(guard, fragments_guard, "ParamType"); + Object.defineProperty(this, internal, { value: ParamTypeInternal }); + if (components) { + components = Object.freeze(components.slice()); + } + if (baseType === "array") { + if (arrayLength == null || arrayChildren == null) { + throw new Error(""); + } + } + else if (arrayLength != null || arrayChildren != null) { + throw new Error(""); + } + if (baseType === "tuple") { + if (components == null) { + throw new Error(""); + } + } + else if (components != null) { + throw new Error(""); + } + properties_defineProperties(this, { + name, type, baseType, indexed, components, arrayLength, arrayChildren + }); + } + /** + * Return a string representation of this type. + * + * For example, + * + * ``sighash" => "(uint256,address)"`` + * + * ``"minimal" => "tuple(uint256,address) indexed"`` + * + * ``"full" => "tuple(uint256 foo, address bar) indexed baz"`` + */ + format(format) { + if (format == null) { + format = "sighash"; + } + if (format === "json") { + const name = this.name || ""; + if (this.isArray()) { + const result = JSON.parse(this.arrayChildren.format("json")); + result.name = name; + result.type += `[${(this.arrayLength < 0 ? "" : String(this.arrayLength))}]`; + return JSON.stringify(result); + } + const result = { + type: ((this.baseType === "tuple") ? "tuple" : this.type), + name + }; + if (typeof (this.indexed) === "boolean") { + result.indexed = this.indexed; + } + if (this.isTuple()) { + result.components = this.components.map((c) => JSON.parse(c.format(format))); + } + return JSON.stringify(result); + } + let result = ""; + // Array + if (this.isArray()) { + result += this.arrayChildren.format(format); + result += `[${(this.arrayLength < 0 ? "" : String(this.arrayLength))}]`; + } + else { + if (this.isTuple()) { + result += "(" + this.components.map((comp) => comp.format(format)).join((format === "full") ? ", " : ",") + ")"; + } + else { + result += this.type; + } + } + if (format !== "sighash") { + if (this.indexed === true) { + result += " indexed"; + } + if (format === "full" && this.name) { + result += " " + this.name; + } + } + return result; + } + /** + * Returns true if %%this%% is an Array type. + * + * This provides a type gaurd ensuring that [[arrayChildren]] + * and [[arrayLength]] are non-null. + */ + isArray() { + return (this.baseType === "array"); + } + /** + * Returns true if %%this%% is a Tuple type. + * + * This provides a type gaurd ensuring that [[components]] + * is non-null. + */ + isTuple() { + return (this.baseType === "tuple"); + } + /** + * Returns true if %%this%% is an Indexable type. + * + * This provides a type gaurd ensuring that [[indexed]] + * is non-null. + */ + isIndexable() { + return (this.indexed != null); + } + /** + * Walks the **ParamType** with %%value%%, calling %%process%% + * on each type, destructing the %%value%% recursively. + */ + walk(value, process) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invalid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const _this = this; + return value.map((v) => (_this.arrayChildren.walk(v, process))); + } + if (this.isTuple()) { + if (!Array.isArray(value)) { + throw new Error("invalid tuple value"); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + const _this = this; + return value.map((v, i) => (_this.components[i].walk(v, process))); + } + return process(this.type, value); + } + #walkAsync(promises, value, process, setValue) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invalid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const childType = this.arrayChildren; + const result = value.slice(); + result.forEach((value, index) => { + childType.#walkAsync(promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + if (this.isTuple()) { + const components = this.components; + // Convert the object into an array + let result; + if (Array.isArray(value)) { + result = value.slice(); + } + else { + if (value == null || typeof (value) !== "object") { + throw new Error("invalid tuple value"); + } + result = components.map((param) => { + if (!param.name) { + throw new Error("cannot use object value with unnamed components"); + } + if (!(param.name in value)) { + throw new Error(`missing value for component ${param.name}`); + } + return value[param.name]; + }); + } + if (result.length !== this.components.length) { + throw new Error("array is wrong length"); + } + result.forEach((value, index) => { + components[index].#walkAsync(promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + const result = process(this.type, value); + if (result.then) { + promises.push((async function () { setValue(await result); })()); + } + else { + setValue(result); + } + } + /** + * Walks the **ParamType** with %%value%%, asynchronously calling + * %%process%% on each type, destructing the %%value%% recursively. + * + * This can be used to resolve ENS names by walking and resolving each + * ``"address"`` type. + */ + async walkAsync(value, process) { + const promises = []; + const result = [value]; + this.#walkAsync(promises, value, process, (value) => { + result[0] = value; + }); + if (promises.length) { + await Promise.all(promises); + } + return result[0]; + } + /** + * Creates a new **ParamType** for %%obj%%. + * + * If %%allowIndexed%% then the ``indexed`` keyword is permitted, + * otherwise the ``indexed`` keyword will throw an error. + */ + static from(obj, allowIndexed) { + if (ParamType.isParamType(obj)) { + return obj; + } + if (typeof (obj) === "string") { + try { + return ParamType.from(lex(obj), allowIndexed); + } + catch (error) { + errors_assertArgument(false, "invalid param type", "obj", obj); + } + } + else if (obj instanceof TokenString) { + let type = "", baseType = ""; + let comps = null; + if (consumeKeywords(obj, setify(["tuple"])).has("tuple") || obj.peekType("OPEN_PAREN")) { + // Tuple + baseType = "tuple"; + comps = obj.popParams().map((t) => ParamType.from(t)); + type = `tuple(${comps.map((c) => c.format()).join(",")})`; + } + else { + // Normal + type = verifyBasicType(obj.popType("TYPE")); + baseType = type; + } + // Check for Array + let arrayChildren = null; + let arrayLength = null; + while (obj.length && obj.peekType("BRACKET")) { + const bracket = obj.pop(); //arrays[i]; + arrayChildren = new ParamType(fragments_guard, "", type, baseType, null, comps, arrayLength, arrayChildren); + arrayLength = bracket.value; + type += bracket.text; + baseType = "array"; + comps = null; + } + let indexed = null; + const keywords = consumeKeywords(obj, KwModifiers); + if (keywords.has("indexed")) { + if (!allowIndexed) { + throw new Error(""); + } + indexed = true; + } + const name = (obj.peekType("ID") ? obj.pop().text : ""); + if (obj.length) { + throw new Error("leftover tokens"); + } + return new ParamType(fragments_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren); + } + const name = obj.name; + errors_assertArgument(!name || (typeof (name) === "string" && name.match(regexId)), "invalid name", "obj.name", name); + let indexed = obj.indexed; + if (indexed != null) { + errors_assertArgument(allowIndexed, "parameter cannot be indexed", "obj.indexed", obj.indexed); + indexed = !!indexed; + } + let type = obj.type; + let arrayMatch = type.match(regexArrayType); + if (arrayMatch) { + const arrayLength = parseInt(arrayMatch[2] || "-1"); + const arrayChildren = ParamType.from({ + type: arrayMatch[1], + components: obj.components + }); + return new ParamType(fragments_guard, name || "", type, "array", indexed, null, arrayLength, arrayChildren); + } + if (type === "tuple" || type.startsWith("tuple(" /* fix: ) */) || type.startsWith("(" /* fix: ) */)) { + const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null; + const tuple = new ParamType(fragments_guard, name || "", type, "tuple", indexed, comps, null, null); + // @TODO: use lexer to validate and normalize type + return tuple; + } + type = verifyBasicType(obj.type); + return new ParamType(fragments_guard, name || "", type, type, indexed, null, null, null); + } + /** + * Returns true if %%value%% is a **ParamType**. + */ + static isParamType(value) { + return (value && value[internal] === ParamTypeInternal); + } +} +/** + * An abstract class to represent An individual fragment from a parse ABI. + */ +class Fragment { + /** + * The type of the fragment. + */ + type; + /** + * The inputs for the fragment. + */ + inputs; + /** + * @private + */ + constructor(guard, type, inputs) { + assertPrivate(guard, fragments_guard, "Fragment"); + inputs = Object.freeze(inputs.slice()); + properties_defineProperties(this, { type, inputs }); + } + /** + * Creates a new **Fragment** for %%obj%%, wich can be any supported + * ABI frgament type. + */ + static from(obj) { + if (typeof (obj) === "string") { + // Try parsing JSON... + try { + Fragment.from(JSON.parse(obj)); + } + catch (e) { } + // ...otherwise, use the human-readable lexer + return Fragment.from(lex(obj)); + } + if (obj instanceof TokenString) { + // Human-readable ABI (already lexed) + const type = obj.peekKeyword(KwTypes); + switch (type) { + case "constructor": return ConstructorFragment.from(obj); + case "error": return ErrorFragment.from(obj); + case "event": return EventFragment.from(obj); + case "fallback": + case "receive": + return FallbackFragment.from(obj); + case "function": return FunctionFragment.from(obj); + case "struct": return StructFragment.from(obj); + } + } + else if (typeof (obj) === "object") { + // JSON ABI + switch (obj.type) { + case "constructor": return ConstructorFragment.from(obj); + case "error": return ErrorFragment.from(obj); + case "event": return EventFragment.from(obj); + case "fallback": + case "receive": + return FallbackFragment.from(obj); + case "function": return FunctionFragment.from(obj); + case "struct": return StructFragment.from(obj); + } + errors_assert(false, `unsupported type: ${obj.type}`, "UNSUPPORTED_OPERATION", { + operation: "Fragment.from" + }); + } + errors_assertArgument(false, "unsupported frgament object", "obj", obj); + } + /** + * Returns true if %%value%% is a [[ConstructorFragment]]. + */ + static isConstructor(value) { + return ConstructorFragment.isFragment(value); + } + /** + * Returns true if %%value%% is an [[ErrorFragment]]. + */ + static isError(value) { + return ErrorFragment.isFragment(value); + } + /** + * Returns true if %%value%% is an [[EventFragment]]. + */ + static isEvent(value) { + return EventFragment.isFragment(value); + } + /** + * Returns true if %%value%% is a [[FunctionFragment]]. + */ + static isFunction(value) { + return FunctionFragment.isFragment(value); + } + /** + * Returns true if %%value%% is a [[StructFragment]]. + */ + static isStruct(value) { + return StructFragment.isFragment(value); + } +} +/** + * An abstract class to represent An individual fragment + * which has a name from a parse ABI. + */ +class NamedFragment extends Fragment { + /** + * The name of the fragment. + */ + name; + /** + * @private + */ + constructor(guard, type, name, inputs) { + super(guard, type, inputs); + errors_assertArgument(typeof (name) === "string" && name.match(regexId), "invalid identifier", "name", name); + inputs = Object.freeze(inputs.slice()); + properties_defineProperties(this, { name }); + } +} +function joinParams(format, params) { + return "(" + params.map((p) => p.format(format)).join((format === "full") ? ", " : ",") + ")"; +} +/** + * A Fragment which represents a //Custom Error//. + */ +class ErrorFragment extends NamedFragment { + /** + * @private + */ + constructor(guard, name, inputs) { + super(guard, "error", name, inputs); + Object.defineProperty(this, internal, { value: ErrorFragmentInternal }); + } + /** + * The Custom Error selector. + */ + get selector() { + return id(this.format("sighash")).substring(0, 10); + } + /** + * Returns a string representation of this fragment as %%format%%. + */ + format(format) { + if (format == null) { + format = "sighash"; + } + if (format === "json") { + return JSON.stringify({ + type: "error", + name: this.name, + inputs: this.inputs.map((input) => JSON.parse(input.format(format))), + }); + } + const result = []; + if (format !== "sighash") { + result.push("error"); + } + result.push(this.name + joinParams(format, this.inputs)); + return result.join(" "); + } + /** + * Returns a new **ErrorFragment** for %%obj%%. + */ + static from(obj) { + if (ErrorFragment.isFragment(obj)) { + return obj; + } + if (typeof (obj) === "string") { + return ErrorFragment.from(lex(obj)); + } + else if (obj instanceof TokenString) { + const name = consumeName("error", obj); + const inputs = consumeParams(obj); + consumeEoi(obj); + return new ErrorFragment(fragments_guard, name, inputs); + } + return new ErrorFragment(fragments_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []); + } + /** + * Returns ``true`` and provides a type guard if %%value%% is an + * **ErrorFragment**. + */ + static isFragment(value) { + return (value && value[internal] === ErrorFragmentInternal); + } +} +/** + * A Fragment which represents an Event. + */ +class EventFragment extends NamedFragment { + /** + * Whether this event is anonymous. + */ + anonymous; + /** + * @private + */ + constructor(guard, name, inputs, anonymous) { + super(guard, "event", name, inputs); + Object.defineProperty(this, internal, { value: EventFragmentInternal }); + properties_defineProperties(this, { anonymous }); + } + /** + * The Event topic hash. + */ + get topicHash() { + return id(this.format("sighash")); + } + /** + * Returns a string representation of this event as %%format%%. + */ + format(format) { + if (format == null) { + format = "sighash"; + } + if (format === "json") { + return JSON.stringify({ + type: "event", + anonymous: this.anonymous, + name: this.name, + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = []; + if (format !== "sighash") { + result.push("event"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== "sighash" && this.anonymous) { + result.push("anonymous"); + } + return result.join(" "); + } + /** + * Return the topic hash for an event with %%name%% and %%params%%. + */ + static getTopicHash(name, params) { + params = (params || []).map((p) => ParamType.from(p)); + const fragment = new EventFragment(fragments_guard, name, params, false); + return fragment.topicHash; + } + /** + * Returns a new **EventFragment** for %%obj%%. + */ + static from(obj) { + if (EventFragment.isFragment(obj)) { + return obj; + } + if (typeof (obj) === "string") { + try { + return EventFragment.from(lex(obj)); + } + catch (error) { + errors_assertArgument(false, "invalid event fragment", "obj", obj); + } + } + else if (obj instanceof TokenString) { + const name = consumeName("event", obj); + const inputs = consumeParams(obj, true); + const anonymous = !!consumeKeywords(obj, setify(["anonymous"])).has("anonymous"); + consumeEoi(obj); + return new EventFragment(fragments_guard, name, inputs, anonymous); + } + return new EventFragment(fragments_guard, obj.name, obj.inputs ? obj.inputs.map((p) => ParamType.from(p, true)) : [], !!obj.anonymous); + } + /** + * Returns ``true`` and provides a type guard if %%value%% is an + * **EventFragment**. + */ + static isFragment(value) { + return (value && value[internal] === EventFragmentInternal); + } +} +/** + * A Fragment which represents a constructor. + */ +class ConstructorFragment extends Fragment { + /** + * Whether the constructor can receive an endowment. + */ + payable; + /** + * The recommended gas limit for deployment or ``null``. + */ + gas; + /** + * @private + */ + constructor(guard, type, inputs, payable, gas) { + super(guard, type, inputs); + Object.defineProperty(this, internal, { value: ConstructorFragmentInternal }); + properties_defineProperties(this, { payable, gas }); + } + /** + * Returns a string representation of this constructor as %%format%%. + */ + format(format) { + errors_assert(format != null && format !== "sighash", "cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { operation: "format(sighash)" }); + if (format === "json") { + return JSON.stringify({ + type: "constructor", + stateMutability: (this.payable ? "payable" : "undefined"), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = [`constructor${joinParams(format, this.inputs)}`]; + if (this.payable) { + result.push("payable"); + } + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + return result.join(" "); + } + /** + * Returns a new **ConstructorFragment** for %%obj%%. + */ + static from(obj) { + if (ConstructorFragment.isFragment(obj)) { + return obj; + } + if (typeof (obj) === "string") { + try { + return ConstructorFragment.from(lex(obj)); + } + catch (error) { + errors_assertArgument(false, "invalid constuctor fragment", "obj", obj); + } + } + else if (obj instanceof TokenString) { + consumeKeywords(obj, setify(["constructor"])); + const inputs = consumeParams(obj); + const payable = !!consumeKeywords(obj, KwVisibDeploy).has("payable"); + const gas = consumeGas(obj); + consumeEoi(obj); + return new ConstructorFragment(fragments_guard, "constructor", inputs, payable, gas); + } + return new ConstructorFragment(fragments_guard, "constructor", obj.inputs ? obj.inputs.map(ParamType.from) : [], !!obj.payable, (obj.gas != null) ? obj.gas : null); + } + /** + * Returns ``true`` and provides a type guard if %%value%% is a + * **ConstructorFragment**. + */ + static isFragment(value) { + return (value && value[internal] === ConstructorFragmentInternal); + } +} +/** + * A Fragment which represents a method. + */ +class FallbackFragment extends Fragment { + /** + * If the function can be sent value during invocation. + */ + payable; + constructor(guard, inputs, payable) { + super(guard, "fallback", inputs); + Object.defineProperty(this, internal, { value: FallbackFragmentInternal }); + properties_defineProperties(this, { payable }); + } + /** + * Returns a string representation of this fallback as %%format%%. + */ + format(format) { + const type = ((this.inputs.length === 0) ? "receive" : "fallback"); + if (format === "json") { + const stateMutability = (this.payable ? "payable" : "nonpayable"); + return JSON.stringify({ type, stateMutability }); + } + return `${type}()${this.payable ? " payable" : ""}`; + } + /** + * Returns a new **FallbackFragment** for %%obj%%. + */ + static from(obj) { + if (FallbackFragment.isFragment(obj)) { + return obj; + } + if (typeof (obj) === "string") { + try { + return FallbackFragment.from(lex(obj)); + } + catch (error) { + errors_assertArgument(false, "invalid fallback fragment", "obj", obj); + } + } + else if (obj instanceof TokenString) { + const errorObj = obj.toString(); + const topIsValid = obj.peekKeyword(setify(["fallback", "receive"])); + errors_assertArgument(topIsValid, "type must be fallback or receive", "obj", errorObj); + const type = obj.popKeyword(setify(["fallback", "receive"])); + // receive() + if (type === "receive") { + const inputs = consumeParams(obj); + errors_assertArgument(inputs.length === 0, `receive cannot have arguments`, "obj.inputs", inputs); + consumeKeywords(obj, setify(["payable"])); + consumeEoi(obj); + return new FallbackFragment(fragments_guard, [], true); + } + // fallback() [payable] + // fallback(bytes) [payable] returns (bytes) + let inputs = consumeParams(obj); + if (inputs.length) { + errors_assertArgument(inputs.length === 1 && inputs[0].type === "bytes", "invalid fallback inputs", "obj.inputs", inputs.map((i) => i.format("minimal")).join(", ")); + } + else { + inputs = [ParamType.from("bytes")]; + } + const mutability = consumeMutability(obj); + errors_assertArgument(mutability === "nonpayable" || mutability === "payable", "fallback cannot be constants", "obj.stateMutability", mutability); + if (consumeKeywords(obj, setify(["returns"])).has("returns")) { + const outputs = consumeParams(obj); + errors_assertArgument(outputs.length === 1 && outputs[0].type === "bytes", "invalid fallback outputs", "obj.outputs", outputs.map((i) => i.format("minimal")).join(", ")); + } + consumeEoi(obj); + return new FallbackFragment(fragments_guard, inputs, mutability === "payable"); + } + if (obj.type === "receive") { + return new FallbackFragment(fragments_guard, [], true); + } + if (obj.type === "fallback") { + const inputs = [ParamType.from("bytes")]; + const payable = (obj.stateMutability === "payable"); + return new FallbackFragment(fragments_guard, inputs, payable); + } + errors_assertArgument(false, "invalid fallback description", "obj", obj); + } + /** + * Returns ``true`` and provides a type guard if %%value%% is a + * **FallbackFragment**. + */ + static isFragment(value) { + return (value && value[internal] === FallbackFragmentInternal); + } +} +/** + * A Fragment which represents a method. + */ +class FunctionFragment extends NamedFragment { + /** + * If the function is constant (e.g. ``pure`` or ``view`` functions). + */ + constant; + /** + * The returned types for the result of calling this function. + */ + outputs; + /** + * The state mutability (e.g. ``payable``, ``nonpayable``, ``view`` + * or ``pure``) + */ + stateMutability; + /** + * If the function can be sent value during invocation. + */ + payable; + /** + * The recommended gas limit to send when calling this function. + */ + gas; + /** + * @private + */ + constructor(guard, name, stateMutability, inputs, outputs, gas) { + super(guard, "function", name, inputs); + Object.defineProperty(this, internal, { value: FunctionFragmentInternal }); + outputs = Object.freeze(outputs.slice()); + const constant = (stateMutability === "view" || stateMutability === "pure"); + const payable = (stateMutability === "payable"); + properties_defineProperties(this, { constant, gas, outputs, payable, stateMutability }); + } + /** + * The Function selector. + */ + get selector() { + return id(this.format("sighash")).substring(0, 10); + } + /** + * Returns a string representation of this function as %%format%%. + */ + format(format) { + if (format == null) { + format = "sighash"; + } + if (format === "json") { + return JSON.stringify({ + type: "function", + name: this.name, + constant: this.constant, + stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))), + outputs: this.outputs.map((o) => JSON.parse(o.format(format))), + }); + } + const result = []; + if (format !== "sighash") { + result.push("function"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== "sighash") { + if (this.stateMutability !== "nonpayable") { + result.push(this.stateMutability); + } + if (this.outputs && this.outputs.length) { + result.push("returns"); + result.push(joinParams(format, this.outputs)); + } + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + } + return result.join(" "); + } + /** + * Return the selector for a function with %%name%% and %%params%%. + */ + static getSelector(name, params) { + params = (params || []).map((p) => ParamType.from(p)); + const fragment = new FunctionFragment(fragments_guard, name, "view", params, [], null); + return fragment.selector; + } + /** + * Returns a new **FunctionFragment** for %%obj%%. + */ + static from(obj) { + if (FunctionFragment.isFragment(obj)) { + return obj; + } + if (typeof (obj) === "string") { + try { + return FunctionFragment.from(lex(obj)); + } + catch (error) { + errors_assertArgument(false, "invalid function fragment", "obj", obj); + } + } + else if (obj instanceof TokenString) { + const name = consumeName("function", obj); + const inputs = consumeParams(obj); + const mutability = consumeMutability(obj); + let outputs = []; + if (consumeKeywords(obj, setify(["returns"])).has("returns")) { + outputs = consumeParams(obj); + } + const gas = consumeGas(obj); + consumeEoi(obj); + return new FunctionFragment(fragments_guard, name, mutability, inputs, outputs, gas); + } + let stateMutability = obj.stateMutability; + // Use legacy Solidity ABI logic if stateMutability is missing + if (stateMutability == null) { + stateMutability = "payable"; + if (typeof (obj.constant) === "boolean") { + stateMutability = "view"; + if (!obj.constant) { + stateMutability = "payable"; + if (typeof (obj.payable) === "boolean" && !obj.payable) { + stateMutability = "nonpayable"; + } + } + } + else if (typeof (obj.payable) === "boolean" && !obj.payable) { + stateMutability = "nonpayable"; + } + } + // @TODO: verifyState for stateMutability (e.g. throw if + // payable: false but stateMutability is "nonpayable") + return new FunctionFragment(fragments_guard, obj.name, stateMutability, obj.inputs ? obj.inputs.map(ParamType.from) : [], obj.outputs ? obj.outputs.map(ParamType.from) : [], (obj.gas != null) ? obj.gas : null); + } + /** + * Returns ``true`` and provides a type guard if %%value%% is a + * **FunctionFragment**. + */ + static isFragment(value) { + return (value && value[internal] === FunctionFragmentInternal); + } +} +/** + * A Fragment which represents a structure. + */ +class StructFragment extends NamedFragment { + /** + * @private + */ + constructor(guard, name, inputs) { + super(guard, "struct", name, inputs); + Object.defineProperty(this, internal, { value: StructFragmentInternal }); + } + /** + * Returns a string representation of this struct as %%format%%. + */ + format() { + throw new Error("@TODO"); + } + /** + * Returns a new **StructFragment** for %%obj%%. + */ + static from(obj) { + if (typeof (obj) === "string") { + try { + return StructFragment.from(lex(obj)); + } + catch (error) { + errors_assertArgument(false, "invalid struct fragment", "obj", obj); + } + } + else if (obj instanceof TokenString) { + const name = consumeName("struct", obj); + const inputs = consumeParams(obj); + consumeEoi(obj); + return new StructFragment(fragments_guard, name, inputs); + } + return new StructFragment(fragments_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []); + } + // @TODO: fix this return type + /** + * Returns ``true`` and provides a type guard if %%value%% is a + * **StructFragment**. + */ + static isFragment(value) { + return (value && value[internal] === StructFragmentInternal); + } +} +//# sourceMappingURL=fragments.js.map +;// ./node_modules/ethers/lib.esm/abi/abi-coder.js +/** + * When sending values to or receiving values from a [[Contract]], the + * data is generally encoded using the [ABI standard](link-solc-abi). + * + * The AbiCoder provides a utility to encode values to ABI data and + * decode values from ABI data. + * + * Most of the time, developers should favour the [[Contract]] class, + * which further abstracts a lot of the finer details of ABI data. + * + * @_section api/abi/abi-coder:ABI Encoding + */ +// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI + + + + + + + + + + + + + + +// https://docs.soliditylang.org/en/v0.8.17/control-structures.html +const PanicReasons = new Map(); +PanicReasons.set(0x00, "GENERIC_PANIC"); +PanicReasons.set(0x01, "ASSERT_FALSE"); +PanicReasons.set(0x11, "OVERFLOW"); +PanicReasons.set(0x12, "DIVIDE_BY_ZERO"); +PanicReasons.set(0x21, "ENUM_RANGE_ERROR"); +PanicReasons.set(0x22, "BAD_STORAGE_DATA"); +PanicReasons.set(0x31, "STACK_UNDERFLOW"); +PanicReasons.set(0x32, "ARRAY_RANGE_ERROR"); +PanicReasons.set(0x41, "OUT_OF_MEMORY"); +PanicReasons.set(0x51, "UNINITIALIZED_FUNCTION_CALL"); +const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); +const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); +let defaultCoder = null; +let defaultMaxInflation = 1024; +function getBuiltinCallException(action, tx, data, abiCoder) { + let message = "missing revert data"; + let reason = null; + const invocation = null; + let revert = null; + if (data) { + message = "execution reverted"; + const bytes = data_getBytes(data); + data = data_hexlify(data); + if (bytes.length === 0) { + message += " (no data present; likely require(false) occurred"; + reason = "require(false)"; + } + else if (bytes.length % 32 !== 4) { + message += " (could not decode reason; invalid data length)"; + } + else if (data_hexlify(bytes.slice(0, 4)) === "0x08c379a0") { + // Error(string) + try { + reason = abiCoder.decode(["string"], bytes.slice(4))[0]; + revert = { + signature: "Error(string)", + name: "Error", + args: [reason] + }; + message += `: ${JSON.stringify(reason)}`; + } + catch (error) { + message += " (could not decode reason; invalid string data)"; + } + } + else if (data_hexlify(bytes.slice(0, 4)) === "0x4e487b71") { + // Panic(uint256) + try { + const code = Number(abiCoder.decode(["uint256"], bytes.slice(4))[0]); + revert = { + signature: "Panic(uint256)", + name: "Panic", + args: [code] + }; + reason = `Panic due to ${PanicReasons.get(code) || "UNKNOWN"}(${code})`; + message += `: ${reason}`; + } + catch (error) { + message += " (could not decode panic code)"; + } + } + else { + message += " (unknown custom error)"; + } + } + const transaction = { + to: (tx.to ? address_getAddress(tx.to) : null), + data: (tx.data || "0x") + }; + if (tx.from) { + transaction.from = address_getAddress(tx.from); + } + return makeError(message, "CALL_EXCEPTION", { + action, data, reason, transaction, invocation, revert + }); +} +/** + * The **AbiCoder** is a low-level class responsible for encoding JavaScript + * values into binary data and decoding binary data into JavaScript values. + */ +class AbiCoder { + #getCoder(param) { + if (param.isArray()) { + return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name); + } + if (param.isTuple()) { + return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name); + } + switch (param.baseType) { + case "address": + return new AddressCoder(param.name); + case "bool": + return new BooleanCoder(param.name); + case "string": + return new StringCoder(param.name); + case "bytes": + return new BytesCoder(param.name); + case "": + return new NullCoder(param.name); + } + // u?int[0-9]* + let match = param.type.match(paramTypeNumber); + if (match) { + let size = parseInt(match[2] || "256"); + errors_assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, "invalid " + match[1] + " bit length", "param", param); + return new NumberCoder(size / 8, (match[1] === "int"), param.name); + } + // bytes[0-9]+ + match = param.type.match(paramTypeBytes); + if (match) { + let size = parseInt(match[1]); + errors_assertArgument(size !== 0 && size <= 32, "invalid bytes length", "param", param); + return new FixedBytesCoder(size, param.name); + } + errors_assertArgument(false, "invalid type", "type", param.type); + } + /** + * Get the default values for the given %%types%%. + * + * For example, a ``uint`` is by default ``0`` and ``bool`` + * is by default ``false``. + */ + getDefaultValue(types) { + const coders = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.defaultValue(); + } + /** + * Encode the %%values%% as the %%types%% into ABI data. + * + * @returns DataHexstring + */ + encode(types, values) { + assertArgumentCount(values.length, types.length, "types/values length mismatch"); + const coders = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = (new TupleCoder(coders, "_")); + const writer = new Writer(); + coder.encode(writer, values); + return writer.data; + } + /** + * Decode the ABI %%data%% as the %%types%% into values. + * + * If %%loose%% decoding is enabled, then strict padding is + * not enforced. Some older versions of Solidity incorrectly + * padded event data emitted from ``external`` functions. + */ + decode(types, data, loose) { + const coders = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.decode(new Reader(data, loose, defaultMaxInflation)); + } + static _setDefaultMaxInflation(value) { + errors_assertArgument(typeof (value) === "number" && Number.isInteger(value), "invalid defaultMaxInflation factor", "value", value); + defaultMaxInflation = value; + } + /** + * Returns the shared singleton instance of a default [[AbiCoder]]. + * + * On the first call, the instance is created internally. + */ + static defaultAbiCoder() { + if (defaultCoder == null) { + defaultCoder = new AbiCoder(); + } + return defaultCoder; + } + /** + * Returns an ethers-compatible [[CallExceptionError]] Error for the given + * result %%data%% for the [[CallExceptionAction]] %%action%% against + * the Transaction %%tx%%. + */ + static getBuiltinCallException(action, tx, data) { + return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder()); + } +} +//# sourceMappingURL=abi-coder.js.map +;// ./node_modules/ethers/lib.esm/abi/interface.js +/** + * The Interface class is a low-level class that accepts an + * ABI and provides all the necessary functionality to encode + * and decode paramaters to and results from methods, events + * and errors. + * + * It also provides several convenience methods to automatically + * search and find matching transactions and events to parse them. + * + * @_subsection api/abi:Interfaces [interfaces] + */ + + + + + + + + +/** + * When using the [[Interface-parseLog]] to automatically match a Log to its event + * for parsing, a **LogDescription** is returned. + */ +class LogDescription { + /** + * The matching fragment for the ``topic0``. + */ + fragment; + /** + * The name of the Event. + */ + name; + /** + * The full Event signature. + */ + signature; + /** + * The topic hash for the Event. + */ + topic; + /** + * The arguments passed into the Event with ``emit``. + */ + args; + /** + * @_ignore: + */ + constructor(fragment, topic, args) { + const name = fragment.name, signature = fragment.format(); + properties_defineProperties(this, { + fragment, name, signature, topic, args + }); + } +} +/** + * When using the [[Interface-parseTransaction]] to automatically match + * a transaction data to its function for parsing, + * a **TransactionDescription** is returned. + */ +class TransactionDescription { + /** + * The matching fragment from the transaction ``data``. + */ + fragment; + /** + * The name of the Function from the transaction ``data``. + */ + name; + /** + * The arguments passed to the Function from the transaction ``data``. + */ + args; + /** + * The full Function signature from the transaction ``data``. + */ + signature; + /** + * The selector for the Function from the transaction ``data``. + */ + selector; + /** + * The ``value`` (in wei) from the transaction. + */ + value; + /** + * @_ignore: + */ + constructor(fragment, selector, args, value) { + const name = fragment.name, signature = fragment.format(); + properties_defineProperties(this, { + fragment, name, args, signature, selector, value + }); + } +} +/** + * When using the [[Interface-parseError]] to automatically match an + * error for a call result for parsing, an **ErrorDescription** is returned. + */ +class ErrorDescription { + /** + * The matching fragment. + */ + fragment; + /** + * The name of the Error. + */ + name; + /** + * The arguments passed to the Error with ``revert``. + */ + args; + /** + * The full Error signature. + */ + signature; + /** + * The selector for the Error. + */ + selector; + /** + * @_ignore: + */ + constructor(fragment, selector, args) { + const name = fragment.name, signature = fragment.format(); + properties_defineProperties(this, { + fragment, name, args, signature, selector + }); + } +} +/** + * An **Indexed** is used as a value when a value that does not + * fit within a topic (i.e. not a fixed-length, 32-byte type). It + * is the ``keccak256`` of the value, and used for types such as + * arrays, tuples, bytes and strings. + */ +class Indexed { + /** + * The ``keccak256`` of the value logged. + */ + hash; + /** + * @_ignore: + */ + _isIndexed; + /** + * Returns ``true`` if %%value%% is an **Indexed**. + * + * This provides a Type Guard for property access. + */ + static isIndexed(value) { + return !!(value && value._isIndexed); + } + /** + * @_ignore: + */ + constructor(hash) { + properties_defineProperties(this, { hash, _isIndexed: true }); + } +} +// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require +const interface_PanicReasons = { + "0": "generic panic", + "1": "assert(false)", + "17": "arithmetic overflow", + "18": "division or modulo by zero", + "33": "enum overflow", + "34": "invalid encoded storage byte array accessed", + "49": "out-of-bounds array access; popping on an empty array", + "50": "out-of-bounds access of an array or bytesN", + "65": "out of memory", + "81": "uninitialized function", +}; +const BuiltinErrors = { + "0x08c379a0": { + signature: "Error(string)", + name: "Error", + inputs: ["string"], + reason: (message) => { + return `reverted with reason string ${JSON.stringify(message)}`; + } + }, + "0x4e487b71": { + signature: "Panic(uint256)", + name: "Panic", + inputs: ["uint256"], + reason: (code) => { + let reason = "unknown panic code"; + if (code >= 0 && code <= 0xff && interface_PanicReasons[code.toString()]) { + reason = interface_PanicReasons[code.toString()]; + } + return `reverted with panic code 0x${code.toString(16)} (${reason})`; + } + } +}; +/** + * An Interface abstracts many of the low-level details for + * encoding and decoding the data on the blockchain. + * + * An ABI provides information on how to encode data to send to + * a Contract, how to decode the results and events and how to + * interpret revert errors. + * + * The ABI can be specified by [any supported format](InterfaceAbi). + */ +class Interface { + /** + * All the Contract ABI members (i.e. methods, events, errors, etc). + */ + fragments; + /** + * The Contract constructor. + */ + deploy; + /** + * The Fallback method, if any. + */ + fallback; + /** + * If receiving ether is supported. + */ + receive; + #errors; + #events; + #functions; + // #structs: Map; + #abiCoder; + /** + * Create a new Interface for the %%fragments%%. + */ + constructor(fragments) { + let abi = []; + if (typeof (fragments) === "string") { + abi = JSON.parse(fragments); + } + else { + abi = fragments; + } + this.#functions = new Map(); + this.#errors = new Map(); + this.#events = new Map(); + // this.#structs = new Map(); + const frags = []; + for (const a of abi) { + try { + frags.push(Fragment.from(a)); + } + catch (error) { + console.log(`[Warning] Invalid Fragment ${JSON.stringify(a)}:`, error.message); + } + } + properties_defineProperties(this, { + fragments: Object.freeze(frags) + }); + let fallback = null; + let receive = false; + this.#abiCoder = this.getAbiCoder(); + // Add all fragments by their signature + this.fragments.forEach((fragment, index) => { + let bucket; + switch (fragment.type) { + case "constructor": + if (this.deploy) { + console.log("duplicate definition - constructor"); + return; + } + //checkNames(fragment, "input", fragment.inputs); + properties_defineProperties(this, { deploy: fragment }); + return; + case "fallback": + if (fragment.inputs.length === 0) { + receive = true; + } + else { + errors_assertArgument(!fallback || fragment.payable !== fallback.payable, "conflicting fallback fragments", `fragments[${index}]`, fragment); + fallback = fragment; + receive = fallback.payable; + } + return; + case "function": + //checkNames(fragment, "input", fragment.inputs); + //checkNames(fragment, "output", (fragment).outputs); + bucket = this.#functions; + break; + case "event": + //checkNames(fragment, "input", fragment.inputs); + bucket = this.#events; + break; + case "error": + bucket = this.#errors; + break; + default: + return; + } + // Two identical entries; ignore it + const signature = fragment.format(); + if (bucket.has(signature)) { + return; + } + bucket.set(signature, fragment); + }); + // If we do not have a constructor add a default + if (!this.deploy) { + properties_defineProperties(this, { + deploy: ConstructorFragment.from("constructor()") + }); + } + properties_defineProperties(this, { fallback, receive }); + } + /** + * Returns the entire Human-Readable ABI, as an array of + * signatures, optionally as %%minimal%% strings, which + * removes parameter names and unneceesary spaces. + */ + format(minimal) { + const format = (minimal ? "minimal" : "full"); + const abi = this.fragments.map((f) => f.format(format)); + return abi; + } + /** + * Return the JSON-encoded ABI. This is the format Solidiy + * returns. + */ + formatJson() { + const abi = this.fragments.map((f) => f.format("json")); + // We need to re-bundle the JSON fragments a bit + return JSON.stringify(abi.map((j) => JSON.parse(j))); + } + /** + * The ABI coder that will be used to encode and decode binary + * data. + */ + getAbiCoder() { + return AbiCoder.defaultAbiCoder(); + } + // Find a function definition by any means necessary (unless it is ambiguous) + #getFunction(key, values, forceUnique) { + // Selector + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of this.#functions.values()) { + if (selector === fragment.selector) { + return fragment; + } + } + return null; + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of this.#functions) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + const lastValue = (values.length > 0) ? values[values.length - 1] : null; + let valueLength = values.length; + let allowOptions = true; + if (Typed.isTyped(lastValue) && lastValue.type === "overrides") { + allowOptions = false; + valueLength--; + } + // Remove all matches that don't have a compatible length. The args + // may contain an overrides, so the match may have n or n - 1 parameters + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs.length; + if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // We are past the inputs + if (j >= inputs.length) { + if (values[j].type === "overrides") { + continue; + } + matching.splice(i, 1); + break; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + // We found a single matching signature with an overrides, but the + // last value is something that cannot possibly be an options + if (matching.length === 1 && values && values.length !== matching[0].inputs.length) { + const lastArg = values[values.length - 1]; + if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== "object") { + matching.splice(0, 1); + } + } + if (matching.length === 0) { + return null; + } + if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + errors_assertArgument(false, `ambiguous function description (i.e. matches ${matchStr})`, "key", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = this.#functions.get(FunctionFragment.from(key).format()); + if (result) { + return result; + } + return null; + } + /** + * Get the function name for %%key%%, which may be a function selector, + * function name or function signature that belongs to the ABI. + */ + getFunctionName(key) { + const fragment = this.#getFunction(key, null, false); + errors_assertArgument(fragment, "no matching function", "key", key); + return fragment.name; + } + /** + * Returns true if %%key%% (a function selector, function name or + * function signature) is present in the ABI. + * + * In the case of a function name, the name may be ambiguous, so + * accessing the [[FunctionFragment]] may require refinement. + */ + hasFunction(key) { + return !!this.#getFunction(key, null, false); + } + /** + * Get the [[FunctionFragment]] for %%key%%, which may be a function + * selector, function name or function signature that belongs to the ABI. + * + * If %%values%% is provided, it will use the Typed API to handle + * ambiguous cases where multiple functions match by name. + * + * If the %%key%% and %%values%% do not refine to a single function in + * the ABI, this will throw. + */ + getFunction(key, values) { + return this.#getFunction(key, values || null, true); + } + /** + * Iterate over all functions, calling %%callback%%, sorted by their name. + */ + forEachFunction(callback) { + const names = Array.from(this.#functions.keys()); + names.sort((a, b) => a.localeCompare(b)); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + callback((this.#functions.get(name)), i); + } + } + // Find an event definition by any means necessary (unless it is ambiguous) + #getEvent(key, values, forceUnique) { + // EventTopic + if (isHexString(key)) { + const eventTopic = key.toLowerCase(); + for (const fragment of this.#events.values()) { + if (eventTopic === fragment.topicHash) { + return fragment; + } + } + return null; + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of this.#events) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + // Remove all matches that don't have a compatible length. + for (let i = matching.length - 1; i >= 0; i--) { + if (matching[i].inputs.length < values.length) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + if (matching.length === 0) { + return null; + } + if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + errors_assertArgument(false, `ambiguous event description (i.e. matches ${matchStr})`, "key", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = this.#events.get(EventFragment.from(key).format()); + if (result) { + return result; + } + return null; + } + /** + * Get the event name for %%key%%, which may be a topic hash, + * event name or event signature that belongs to the ABI. + */ + getEventName(key) { + const fragment = this.#getEvent(key, null, false); + errors_assertArgument(fragment, "no matching event", "key", key); + return fragment.name; + } + /** + * Returns true if %%key%% (an event topic hash, event name or + * event signature) is present in the ABI. + * + * In the case of an event name, the name may be ambiguous, so + * accessing the [[EventFragment]] may require refinement. + */ + hasEvent(key) { + return !!this.#getEvent(key, null, false); + } + /** + * Get the [[EventFragment]] for %%key%%, which may be a topic hash, + * event name or event signature that belongs to the ABI. + * + * If %%values%% is provided, it will use the Typed API to handle + * ambiguous cases where multiple events match by name. + * + * If the %%key%% and %%values%% do not refine to a single event in + * the ABI, this will throw. + */ + getEvent(key, values) { + return this.#getEvent(key, values || null, true); + } + /** + * Iterate over all events, calling %%callback%%, sorted by their name. + */ + forEachEvent(callback) { + const names = Array.from(this.#events.keys()); + names.sort((a, b) => a.localeCompare(b)); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + callback((this.#events.get(name)), i); + } + } + /** + * Get the [[ErrorFragment]] for %%key%%, which may be an error + * selector, error name or error signature that belongs to the ABI. + * + * If %%values%% is provided, it will use the Typed API to handle + * ambiguous cases where multiple errors match by name. + * + * If the %%key%% and %%values%% do not refine to a single error in + * the ABI, this will throw. + */ + getError(key, values) { + if (isHexString(key)) { + const selector = key.toLowerCase(); + if (BuiltinErrors[selector]) { + return ErrorFragment.from(BuiltinErrors[selector].signature); + } + for (const fragment of this.#errors.values()) { + if (selector === fragment.selector) { + return fragment; + } + } + return null; + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of this.#errors) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (matching.length === 0) { + if (key === "Error") { + return ErrorFragment.from("error Error(string)"); + } + if (key === "Panic") { + return ErrorFragment.from("error Panic(uint256)"); + } + return null; + } + else if (matching.length > 1) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + errors_assertArgument(false, `ambiguous error description (i.e. ${matchStr})`, "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + key = ErrorFragment.from(key).format(); + if (key === "Error(string)") { + return ErrorFragment.from("error Error(string)"); + } + if (key === "Panic(uint256)") { + return ErrorFragment.from("error Panic(uint256)"); + } + const result = this.#errors.get(key); + if (result) { + return result; + } + return null; + } + /** + * Iterate over all errors, calling %%callback%%, sorted by their name. + */ + forEachError(callback) { + const names = Array.from(this.#errors.keys()); + names.sort((a, b) => a.localeCompare(b)); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + callback((this.#errors.get(name)), i); + } + } + // Get the 4-byte selector used by Solidity to identify a function + /* +getSelector(fragment: ErrorFragment | FunctionFragment): string { + if (typeof(fragment) === "string") { + const matches: Array = [ ]; + + try { matches.push(this.getFunction(fragment)); } catch (error) { } + try { matches.push(this.getError(fragment)); } catch (_) { } + + if (matches.length === 0) { + logger.throwArgumentError("unknown fragment", "key", fragment); + } else if (matches.length > 1) { + logger.throwArgumentError("ambiguous fragment matches function and error", "key", fragment); + } + + fragment = matches[0]; + } + + return dataSlice(id(fragment.format()), 0, 4); +} + */ + // Get the 32-byte topic hash used by Solidity to identify an event + /* + getEventTopic(fragment: EventFragment): string { + //if (typeof(fragment) === "string") { fragment = this.getEvent(eventFragment); } + return id(fragment.format()); + } + */ + _decodeParams(params, data) { + return this.#abiCoder.decode(params, data); + } + _encodeParams(params, values) { + return this.#abiCoder.encode(params, values); + } + /** + * Encodes a ``tx.data`` object for deploying the Contract with + * the %%values%% as the constructor arguments. + */ + encodeDeploy(values) { + return this._encodeParams(this.deploy.inputs, values || []); + } + /** + * Decodes the result %%data%% (e.g. from an ``eth_call``) for the + * specified error (see [[getError]] for valid values for + * %%key%%). + * + * Most developers should prefer the [[parseCallResult]] method instead, + * which will automatically detect a ``CALL_EXCEPTION`` and throw the + * corresponding error. + */ + decodeErrorResult(fragment, data) { + if (typeof (fragment) === "string") { + const f = this.getError(fragment); + errors_assertArgument(f, "unknown error", "fragment", fragment); + fragment = f; + } + errors_assertArgument(data_dataSlice(data, 0, 4) === fragment.selector, `data signature does not match error ${fragment.name}.`, "data", data); + return this._decodeParams(fragment.inputs, data_dataSlice(data, 4)); + } + /** + * Encodes the transaction revert data for a call result that + * reverted from the the Contract with the sepcified %%error%% + * (see [[getError]] for valid values for %%fragment%%) with the %%values%%. + * + * This is generally not used by most developers, unless trying to mock + * a result from a Contract. + */ + encodeErrorResult(fragment, values) { + if (typeof (fragment) === "string") { + const f = this.getError(fragment); + errors_assertArgument(f, "unknown error", "fragment", fragment); + fragment = f; + } + return data_concat([ + fragment.selector, + this._encodeParams(fragment.inputs, values || []) + ]); + } + /** + * Decodes the %%data%% from a transaction ``tx.data`` for + * the function specified (see [[getFunction]] for valid values + * for %%fragment%%). + * + * Most developers should prefer the [[parseTransaction]] method + * instead, which will automatically detect the fragment. + */ + decodeFunctionData(fragment, data) { + if (typeof (fragment) === "string") { + const f = this.getFunction(fragment); + errors_assertArgument(f, "unknown function", "fragment", fragment); + fragment = f; + } + errors_assertArgument(data_dataSlice(data, 0, 4) === fragment.selector, `data signature does not match function ${fragment.name}.`, "data", data); + return this._decodeParams(fragment.inputs, data_dataSlice(data, 4)); + } + /** + * Encodes the ``tx.data`` for a transaction that calls the function + * specified (see [[getFunction]] for valid values for %%fragment%%) with + * the %%values%%. + */ + encodeFunctionData(fragment, values) { + if (typeof (fragment) === "string") { + const f = this.getFunction(fragment); + errors_assertArgument(f, "unknown function", "fragment", fragment); + fragment = f; + } + return data_concat([ + fragment.selector, + this._encodeParams(fragment.inputs, values || []) + ]); + } + /** + * Decodes the result %%data%% (e.g. from an ``eth_call``) for the + * specified function (see [[getFunction]] for valid values for + * %%key%%). + * + * Most developers should prefer the [[parseCallResult]] method instead, + * which will automatically detect a ``CALL_EXCEPTION`` and throw the + * corresponding error. + */ + decodeFunctionResult(fragment, data) { + if (typeof (fragment) === "string") { + const f = this.getFunction(fragment); + errors_assertArgument(f, "unknown function", "fragment", fragment); + fragment = f; + } + let message = "invalid length for result data"; + const bytes = getBytesCopy(data); + if ((bytes.length % 32) === 0) { + try { + return this.#abiCoder.decode(fragment.outputs, bytes); + } + catch (error) { + message = "could not decode result data"; + } + } + // Call returned data with no error, but the data is junk + errors_assert(false, message, "BAD_DATA", { + value: data_hexlify(bytes), + info: { method: fragment.name, signature: fragment.format() } + }); + } + makeError(_data, tx) { + const data = data_getBytes(_data, "data"); + const error = AbiCoder.getBuiltinCallException("call", tx, data); + // Not a built-in error; try finding a custom error + const customPrefix = "execution reverted (unknown custom error)"; + if (error.message.startsWith(customPrefix)) { + const selector = data_hexlify(data.slice(0, 4)); + const ef = this.getError(selector); + if (ef) { + try { + const args = this.#abiCoder.decode(ef.inputs, data.slice(4)); + error.revert = { + name: ef.name, signature: ef.format(), args + }; + error.reason = error.revert.signature; + error.message = `execution reverted: ${error.reason}`; + } + catch (e) { + error.message = `execution reverted (coult not decode custom error)`; + } + } + } + // Add the invocation, if available + const parsed = this.parseTransaction(tx); + if (parsed) { + error.invocation = { + method: parsed.name, + signature: parsed.signature, + args: parsed.args + }; + } + return error; + } + /** + * Encodes the result data (e.g. from an ``eth_call``) for the + * specified function (see [[getFunction]] for valid values + * for %%fragment%%) with %%values%%. + * + * This is generally not used by most developers, unless trying to mock + * a result from a Contract. + */ + encodeFunctionResult(fragment, values) { + if (typeof (fragment) === "string") { + const f = this.getFunction(fragment); + errors_assertArgument(f, "unknown function", "fragment", fragment); + fragment = f; + } + return data_hexlify(this.#abiCoder.encode(fragment.outputs, values || [])); + } + /* + spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> { + const promises: Array> = [ ]; + const process = function(type: ParamType, value: any): any { + if (type.baseType === "array") { + return descend(type.child + } + if (type. === "address") { + } + }; + + const descend = function (inputs: Array, values: ReadonlyArray) { + if (inputs.length !== values.length) { throw new Error("length mismatch"); } + + }; + + const result: Array = [ ]; + values.forEach((value, index) => { + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + } + */ + // Create the filter for the event with search criteria (e.g. for eth_filterLog) + encodeFilterTopics(fragment, values) { + if (typeof (fragment) === "string") { + const f = this.getEvent(fragment); + errors_assertArgument(f, "unknown event", "eventFragment", fragment); + fragment = f; + } + errors_assert(values.length <= fragment.inputs.length, `too many arguments for ${fragment.format()}`, "UNEXPECTED_ARGUMENT", { count: values.length, expectedCount: fragment.inputs.length }); + const topics = []; + if (!fragment.anonymous) { + topics.push(fragment.topicHash); + } + // @TODO: Use the coders for this; to properly support tuples, etc. + const encodeTopic = (param, value) => { + if (param.type === "string") { + return id(value); + } + else if (param.type === "bytes") { + return keccak_keccak256(data_hexlify(value)); + } + if (param.type === "bool" && typeof (value) === "boolean") { + value = (value ? "0x01" : "0x00"); + } + else if (param.type.match(/^u?int/)) { + value = toBeHex(value); // @TODO: Should this toTwos?? + } + else if (param.type.match(/^bytes/)) { + value = zeroPadBytes(value, 32); + } + else if (param.type === "address") { + // Check addresses are valid + this.#abiCoder.encode(["address"], [value]); + } + return zeroPadValue(data_hexlify(value), 32); + }; + values.forEach((value, index) => { + const param = fragment.inputs[index]; + if (!param.indexed) { + errors_assertArgument(value == null, "cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); + return; + } + if (value == null) { + topics.push(null); + } + else if (param.baseType === "array" || param.baseType === "tuple") { + errors_assertArgument(false, "filtering with tuples or arrays not supported", ("contract." + param.name), value); + } + else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } + else { + topics.push(encodeTopic(param, value)); + } + }); + // Trim off trailing nulls + while (topics.length && topics[topics.length - 1] === null) { + topics.pop(); + } + return topics; + } + encodeEventLog(fragment, values) { + if (typeof (fragment) === "string") { + const f = this.getEvent(fragment); + errors_assertArgument(f, "unknown event", "eventFragment", fragment); + fragment = f; + } + const topics = []; + const dataTypes = []; + const dataValues = []; + if (!fragment.anonymous) { + topics.push(fragment.topicHash); + } + errors_assertArgument(values.length === fragment.inputs.length, "event arguments/values mismatch", "values", values); + fragment.inputs.forEach((param, index) => { + const value = values[index]; + if (param.indexed) { + if (param.type === "string") { + topics.push(id(value)); + } + else if (param.type === "bytes") { + topics.push(keccak_keccak256(value)); + } + else if (param.baseType === "tuple" || param.baseType === "array") { + // @TODO + throw new Error("not implemented"); + } + else { + topics.push(this.#abiCoder.encode([param.type], [value])); + } + } + else { + dataTypes.push(param); + dataValues.push(value); + } + }); + return { + data: this.#abiCoder.encode(dataTypes, dataValues), + topics: topics + }; + } + // Decode a filter for the event and the search criteria + decodeEventLog(fragment, data, topics) { + if (typeof (fragment) === "string") { + const f = this.getEvent(fragment); + errors_assertArgument(f, "unknown event", "eventFragment", fragment); + fragment = f; + } + if (topics != null && !fragment.anonymous) { + const eventTopic = fragment.topicHash; + errors_assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic, "fragment/topic mismatch", "topics[0]", topics[0]); + topics = topics.slice(1); + } + const indexed = []; + const nonIndexed = []; + const dynamic = []; + fragment.inputs.forEach((param, index) => { + if (param.indexed) { + if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { + indexed.push(ParamType.from({ type: "bytes32", name: param.name })); + dynamic.push(true); + } + else { + indexed.push(param); + dynamic.push(false); + } + } + else { + nonIndexed.push(param); + dynamic.push(false); + } + }); + const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, data_concat(topics)) : null; + const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true); + //const result: (Array & { [ key: string ]: any }) = [ ]; + const values = []; + const keys = []; + let nonIndexedIndex = 0, indexedIndex = 0; + fragment.inputs.forEach((param, index) => { + let value = null; + if (param.indexed) { + if (resultIndexed == null) { + value = new Indexed(null); + } + else if (dynamic[index]) { + value = new Indexed(resultIndexed[indexedIndex++]); + } + else { + try { + value = resultIndexed[indexedIndex++]; + } + catch (error) { + value = error; + } + } + } + else { + try { + value = resultNonIndexed[nonIndexedIndex++]; + } + catch (error) { + value = error; + } + } + values.push(value); + keys.push(param.name || null); + }); + return Result.fromItems(values, keys); + } + /** + * Parses a transaction, finding the matching function and extracts + * the parameter values along with other useful function details. + * + * If the matching function cannot be found, return null. + */ + parseTransaction(tx) { + const data = data_getBytes(tx.data, "tx.data"); + const value = getBigInt((tx.value != null) ? tx.value : 0, "tx.value"); + const fragment = this.getFunction(data_hexlify(data.slice(0, 4))); + if (!fragment) { + return null; + } + const args = this.#abiCoder.decode(fragment.inputs, data.slice(4)); + return new TransactionDescription(fragment, fragment.selector, args, value); + } + parseCallResult(data) { + throw new Error("@TODO"); + } + /** + * Parses a receipt log, finding the matching event and extracts + * the parameter values along with other useful event details. + * + * If the matching event cannot be found, returns null. + */ + parseLog(log) { + const fragment = this.getEvent(log.topics[0]); + if (!fragment || fragment.anonymous) { + return null; + } + // @TODO: If anonymous, and the only method, and the input count matches, should we parse? + // Probably not, because just because it is the only event in the ABI does + // not mean we have the full ABI; maybe just a fragment? + return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics)); + } + /** + * Parses a revert data, finding the matching error and extracts + * the parameter values along with other useful error details. + * + * If the matching error cannot be found, returns null. + */ + parseError(data) { + const hexData = data_hexlify(data); + const fragment = this.getError(data_dataSlice(hexData, 0, 4)); + if (!fragment) { + return null; + } + const args = this.#abiCoder.decode(fragment.inputs, data_dataSlice(hexData, 4)); + return new ErrorDescription(fragment, fragment.selector, args); + } + /** + * Creates a new [[Interface]] from the ABI %%value%%. + * + * The %%value%% may be provided as an existing [[Interface]] object, + * a JSON-encoded ABI or any Human-Readable ABI format. + */ + static from(value) { + // Already an Interface, which is immutable + if (value instanceof Interface) { + return value; + } + // JSON + if (typeof (value) === "string") { + return new Interface(JSON.parse(value)); + } + // An Interface; possibly from another v6 instance + if (typeof (value.formatJson) === "function") { + return new Interface(value.formatJson()); + } + // A legacy Interface; from an older version + if (typeof (value.format) === "function") { + return new Interface(value.format("json")); + } + // Array of fragments + return new Interface(value); + } +} +//# sourceMappingURL=interface.js.map +;// ./node_modules/ethers/lib.esm/address/checks.js + + +/** + * Returns true if %%value%% is an object which implements the + * [[Addressable]] interface. + * + * @example: + * // Wallets and AbstractSigner sub-classes + * isAddressable(Wallet.createRandom()) + * //_result: + * + * // Contracts + * contract = new Contract("dai.tokens.ethers.eth", [ ], provider) + * isAddressable(contract) + * //_result: + */ +function isAddressable(value) { + return (value && typeof (value.getAddress) === "function"); +} +/** + * Returns true if %%value%% is a valid address. + * + * @example: + * // Valid address + * isAddress("0x8ba1f109551bD432803012645Ac136ddd64DBA72") + * //_result: + * + * // Valid ICAP address + * isAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36") + * //_result: + * + * // Invalid checksum + * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBa72") + * //_result: + * + * // Invalid ICAP checksum + * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72") + * //_result: + * + * // Not an address (an ENS name requires a provided and an + * // asynchronous API to access) + * isAddress("ricmoo.eth") + * //_result: + */ +function isAddress(value) { + try { + getAddress(value); + return true; + } + catch (error) { } + return false; +} +async function checkAddress(target, promise) { + const result = await promise; + if (result == null || result === "0x0000000000000000000000000000000000000000") { + errors_assert(typeof (target) !== "string", "unconfigured name", "UNCONFIGURED_NAME", { value: target }); + errors_assertArgument(false, "invalid AddressLike value; did not resolve to a value address", "target", target); + } + return address_getAddress(result); +} +/** + * Resolves to an address for the %%target%%, which may be any + * supported address type, an [[Addressable]] or a Promise which + * resolves to an address. + * + * If an ENS name is provided, but that name has not been correctly + * configured a [[UnconfiguredNameError]] is thrown. + * + * @example: + * addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" + * + * // Addresses are return synchronously + * resolveAddress(addr, provider) + * //_result: + * + * // Address promises are resolved asynchronously + * resolveAddress(Promise.resolve(addr)) + * //_result: + * + * // ENS names are resolved asynchronously + * resolveAddress("dai.tokens.ethers.eth", provider) + * //_result: + * + * // Addressable objects are resolved asynchronously + * contract = new Contract(addr, [ ]) + * resolveAddress(contract, provider) + * //_result: + * + * // Unconfigured ENS names reject + * resolveAddress("nothing-here.ricmoo.eth", provider) + * //_error: + * + * // ENS names require a NameResolver object passed in + * // (notice the provider was omitted) + * resolveAddress("nothing-here.ricmoo.eth") + * //_error: + */ +function resolveAddress(target, resolver) { + if (typeof (target) === "string") { + if (target.match(/^0x[0-9a-f]{40}$/i)) { + return address_getAddress(target); + } + errors_assert(resolver != null, "ENS resolution requires a provider", "UNSUPPORTED_OPERATION", { operation: "resolveName" }); + return checkAddress(target, resolver.resolveName(target)); + } + else if (isAddressable(target)) { + return checkAddress(target, target.getAddress()); + } + else if (target && typeof (target.then) === "function") { + return checkAddress(target, target); + } + errors_assertArgument(false, "unsupported addressable value", "target", target); +} +//# sourceMappingURL=checks.js.map +;// ./node_modules/ethers/lib.esm/transaction/accesslist.js + + +function accessSetify(addr, storageKeys) { + return { + address: address_getAddress(addr), + storageKeys: storageKeys.map((storageKey, index) => { + errors_assertArgument(isHexString(storageKey, 32), "invalid slot", `storageKeys[${index}]`, storageKey); + return storageKey.toLowerCase(); + }) + }; +} +/** + * Returns a [[AccessList]] from any ethers-supported access-list structure. + */ +function accessListify(value) { + if (Array.isArray(value)) { + return value.map((set, index) => { + if (Array.isArray(set)) { + errors_assertArgument(set.length === 2, "invalid slot set", `value[${index}]`, set); + return accessSetify(set[0], set[1]); + } + errors_assertArgument(set != null && typeof (set) === "object", "invalid address-slot set", "value", value); + return accessSetify(set.address, set.storageKeys); + }); + } + errors_assertArgument(value != null && typeof (value) === "object", "invalid access list", "value", value); + const result = Object.keys(value).map((addr) => { + const storageKeys = value[addr].reduce((accum, storageKey) => { + accum[storageKey] = true; + return accum; + }, {}); + return accessSetify(addr, Object.keys(storageKeys).sort()); + }); + result.sort((a, b) => (a.address.localeCompare(b.address))); + return result; +} +//# sourceMappingURL=accesslist.js.map +;// ./node_modules/ethers/lib.esm/providers/provider.js +//import { resolveAddress } from "@ethersproject/address"; + + +const provider_BN_0 = BigInt(0); +// ----------------------- +function provider_getValue(value) { + if (value == null) { + return null; + } + return value; +} +function toJson(value) { + if (value == null) { + return null; + } + return value.toString(); +} +// @TODO? implements Required +/** + * A **FeeData** wraps all the fee-related values associated with + * the network. + */ +class FeeData { + /** + * The gas price for legacy networks. + */ + gasPrice; + /** + * The maximum fee to pay per gas. + * + * The base fee per gas is defined by the network and based on + * congestion, increasing the cost during times of heavy load + * and lowering when less busy. + * + * The actual fee per gas will be the base fee for the block + * and the priority fee, up to the max fee per gas. + * + * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559)) + */ + maxFeePerGas; + /** + * The additional amout to pay per gas to encourage a validator + * to include the transaction. + * + * The purpose of this is to compensate the validator for the + * adjusted risk for including a given transaction. + * + * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559)) + */ + maxPriorityFeePerGas; + /** + * Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and + * %%maxPriorityFeePerGas%%. + */ + constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) { + defineProperties(this, { + gasPrice: provider_getValue(gasPrice), + maxFeePerGas: provider_getValue(maxFeePerGas), + maxPriorityFeePerGas: provider_getValue(maxPriorityFeePerGas) + }); + } + /** + * Returns a JSON-friendly value. + */ + toJSON() { + const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this; + return { + _type: "FeeData", + gasPrice: toJson(gasPrice), + maxFeePerGas: toJson(maxFeePerGas), + maxPriorityFeePerGas: toJson(maxPriorityFeePerGas), + }; + } +} +; +/** + * Returns a copy of %%req%% with all properties coerced to their strict + * types. + */ +function copyRequest(req) { + const result = {}; + // These could be addresses, ENS names or Addressables + if (req.to) { + result.to = req.to; + } + if (req.from) { + result.from = req.from; + } + if (req.data) { + result.data = data_hexlify(req.data); + } + const bigIntKeys = "chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value".split(/,/); + for (const key of bigIntKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = getBigInt(req[key], `request.${key}`); + } + const numberKeys = "type,nonce".split(/,/); + for (const key of numberKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = getNumber(req[key], `request.${key}`); + } + if (req.accessList) { + result.accessList = accessListify(req.accessList); + } + if ("blockTag" in req) { + result.blockTag = req.blockTag; + } + if ("enableCcipRead" in req) { + result.enableCcipRead = !!req.enableCcipRead; + } + if ("customData" in req) { + result.customData = req.customData; + } + if ("blobVersionedHashes" in req && req.blobVersionedHashes) { + result.blobVersionedHashes = req.blobVersionedHashes.slice(); + } + if ("kzg" in req) { + result.kzg = req.kzg; + } + if ("blobs" in req && req.blobs) { + result.blobs = req.blobs.map((b) => { + if (data_isBytesLike(b)) { + return data_hexlify(b); + } + return Object.assign({}, b); + }); + } + return result; +} +/** + * A **Block** represents the data associated with a full block on + * Ethereum. + */ +class Block { + /** + * The provider connected to the block used to fetch additional details + * if necessary. + */ + provider; + /** + * The block number, sometimes called the block height. This is a + * sequential number that is one higher than the parent block. + */ + number; + /** + * The block hash. + * + * This hash includes all properties, so can be safely used to identify + * an exact set of block properties. + */ + hash; + /** + * The timestamp for this block, which is the number of seconds since + * epoch that this block was included. + */ + timestamp; + /** + * The block hash of the parent block. + */ + parentHash; + /** + * The hash tree root of the parent beacon block for the given + * execution block. See [[link-eip-4788]]. + */ + parentBeaconBlockRoot; + /** + * The nonce. + * + * On legacy networks, this is the random number inserted which + * permitted the difficulty target to be reached. + */ + nonce; + /** + * The difficulty target. + * + * On legacy networks, this is the proof-of-work target required + * for a block to meet the protocol rules to be included. + * + * On modern networks, this is a random number arrived at using + * randao. @TODO: Find links? + */ + difficulty; + /** + * The total gas limit for this block. + */ + gasLimit; + /** + * The total gas used in this block. + */ + gasUsed; + /** + * The root hash for the global state after applying changes + * in this block. + */ + stateRoot; + /** + * The hash of the transaction receipts trie. + */ + receiptsRoot; + /** + * The total amount of blob gas consumed by the transactions + * within the block. See [[link-eip-4844]]. + */ + blobGasUsed; + /** + * The running total of blob gas consumed in excess of the + * target, prior to the block. See [[link-eip-4844]]. + */ + excessBlobGas; + /** + * The miner coinbase address, wihch receives any subsidies for + * including this block. + */ + miner; + /** + * The latest RANDAO mix of the post beacon state of + * the previous block. + */ + prevRandao; + /** + * Any extra data the validator wished to include. + */ + extraData; + /** + * The base fee per gas that all transactions in this block were + * charged. + * + * This adjusts after each block, depending on how congested the network + * is. + */ + baseFeePerGas; + #transactions; + /** + * Create a new **Block** object. + * + * This should generally not be necessary as the unless implementing a + * low-level library. + */ + constructor(block, provider) { + this.#transactions = block.transactions.map((tx) => { + if (typeof (tx) !== "string") { + return new TransactionResponse(tx, provider); + } + return tx; + }); + properties_defineProperties(this, { + provider, + hash: provider_getValue(block.hash), + number: block.number, + timestamp: block.timestamp, + parentHash: block.parentHash, + parentBeaconBlockRoot: block.parentBeaconBlockRoot, + nonce: block.nonce, + difficulty: block.difficulty, + gasLimit: block.gasLimit, + gasUsed: block.gasUsed, + blobGasUsed: block.blobGasUsed, + excessBlobGas: block.excessBlobGas, + miner: block.miner, + prevRandao: provider_getValue(block.prevRandao), + extraData: block.extraData, + baseFeePerGas: provider_getValue(block.baseFeePerGas), + stateRoot: block.stateRoot, + receiptsRoot: block.receiptsRoot, + }); + } + /** + * Returns the list of transaction hashes, in the order + * they were executed within the block. + */ + get transactions() { + return this.#transactions.map((tx) => { + if (typeof (tx) === "string") { + return tx; + } + return tx.hash; + }); + } + /** + * Returns the complete transactions, in the order they + * were executed within the block. + * + * This is only available for blocks which prefetched + * transactions, by passing ``true`` to %%prefetchTxs%% + * into [[Provider-getBlock]]. + */ + get prefetchedTransactions() { + const txs = this.#transactions.slice(); + // Doesn't matter... + if (txs.length === 0) { + return []; + } + // Make sure we prefetched the transactions + errors_assert(typeof (txs[0]) === "object", "transactions were not prefetched with block request", "UNSUPPORTED_OPERATION", { + operation: "transactionResponses()" + }); + return txs; + } + /** + * Returns a JSON-friendly value. + */ + toJSON() { + const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, prevRandao, nonce, number, parentHash, parentBeaconBlockRoot, stateRoot, receiptsRoot, timestamp, transactions } = this; + return { + _type: "Block", + baseFeePerGas: toJson(baseFeePerGas), + difficulty: toJson(difficulty), + extraData, + gasLimit: toJson(gasLimit), + gasUsed: toJson(gasUsed), + blobGasUsed: toJson(this.blobGasUsed), + excessBlobGas: toJson(this.excessBlobGas), + hash, miner, prevRandao, nonce, number, parentHash, timestamp, + parentBeaconBlockRoot, stateRoot, receiptsRoot, + transactions, + }; + } + [Symbol.iterator]() { + let index = 0; + const txs = this.transactions; + return { + next: () => { + if (index < this.length) { + return { + value: txs[index++], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + /** + * The number of transactions in this block. + */ + get length() { return this.#transactions.length; } + /** + * The [[link-js-date]] this block was included at. + */ + get date() { + if (this.timestamp == null) { + return null; + } + return new Date(this.timestamp * 1000); + } + /** + * Get the transaction at %%indexe%% within this block. + */ + async getTransaction(indexOrHash) { + // Find the internal value by its index or hash + let tx = undefined; + if (typeof (indexOrHash) === "number") { + tx = this.#transactions[indexOrHash]; + } + else { + const hash = indexOrHash.toLowerCase(); + for (const v of this.#transactions) { + if (typeof (v) === "string") { + if (v !== hash) { + continue; + } + tx = v; + break; + } + else { + if (v.hash === hash) { + continue; + } + tx = v; + break; + } + } + } + if (tx == null) { + throw new Error("no such tx"); + } + if (typeof (tx) === "string") { + return (await this.provider.getTransaction(tx)); + } + else { + return tx; + } + } + /** + * If a **Block** was fetched with a request to include the transactions + * this will allow synchronous access to those transactions. + * + * If the transactions were not prefetched, this will throw. + */ + getPrefetchedTransaction(indexOrHash) { + const txs = this.prefetchedTransactions; + if (typeof (indexOrHash) === "number") { + return txs[indexOrHash]; + } + indexOrHash = indexOrHash.toLowerCase(); + for (const tx of txs) { + if (tx.hash === indexOrHash) { + return tx; + } + } + errors_assertArgument(false, "no matching transaction", "indexOrHash", indexOrHash); + } + /** + * Returns true if this block been mined. This provides a type guard + * for all properties on a [[MinedBlock]]. + */ + isMined() { return !!this.hash; } + /** + * Returns true if this block is an [[link-eip-2930]] block. + */ + isLondon() { + return !!this.baseFeePerGas; + } + /** + * @_ignore: + */ + orphanedEvent() { + if (!this.isMined()) { + throw new Error(""); + } + return createOrphanedBlockFilter(this); + } +} +////////////////////// +// Log +/** + * A **Log** in Ethereum represents an event that has been included in a + * transaction using the ``LOG*`` opcodes, which are most commonly used by + * Solidity's emit for announcing events. + */ +class Log { + /** + * The provider connected to the log used to fetch additional details + * if necessary. + */ + provider; + /** + * The transaction hash of the transaction this log occurred in. Use the + * [[Log-getTransaction]] to get the [[TransactionResponse]]. + */ + transactionHash; + /** + * The block hash of the block this log occurred in. Use the + * [[Log-getBlock]] to get the [[Block]]. + */ + blockHash; + /** + * The block number of the block this log occurred in. It is preferred + * to use the [[Block-hash]] when fetching the related [[Block]], + * since in the case of an orphaned block, the block at that height may + * have changed. + */ + blockNumber; + /** + * If the **Log** represents a block that was removed due to an orphaned + * block, this will be true. + * + * This can only happen within an orphan event listener. + */ + removed; + /** + * The address of the contract that emitted this log. + */ + address; + /** + * The data included in this log when it was emitted. + */ + data; + /** + * The indexed topics included in this log when it was emitted. + * + * All topics are included in the bloom filters, so they can be + * efficiently filtered using the [[Provider-getLogs]] method. + */ + topics; + /** + * The index within the block this log occurred at. This is generally + * not useful to developers, but can be used with the various roots + * to proof inclusion within a block. + */ + index; + /** + * The index within the transaction of this log. + */ + transactionIndex; + /** + * @_ignore: + */ + constructor(log, provider) { + this.provider = provider; + const topics = Object.freeze(log.topics.slice()); + properties_defineProperties(this, { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + removed: log.removed, + address: log.address, + data: log.data, + topics, + index: log.index, + transactionIndex: log.transactionIndex, + }); + } + /** + * Returns a JSON-compatible object. + */ + toJSON() { + const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this; + return { + _type: "log", + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + }; + } + /** + * Returns the block that this log occurred in. + */ + async getBlock() { + const block = await this.provider.getBlock(this.blockHash); + errors_assert(!!block, "failed to find transaction", "UNKNOWN_ERROR", {}); + return block; + } + /** + * Returns the transaction that this log occurred in. + */ + async getTransaction() { + const tx = await this.provider.getTransaction(this.transactionHash); + errors_assert(!!tx, "failed to find transaction", "UNKNOWN_ERROR", {}); + return tx; + } + /** + * Returns the transaction receipt fot the transaction that this + * log occurred in. + */ + async getTransactionReceipt() { + const receipt = await this.provider.getTransactionReceipt(this.transactionHash); + errors_assert(!!receipt, "failed to find transaction receipt", "UNKNOWN_ERROR", {}); + return receipt; + } + /** + * @_ignore: + */ + removedEvent() { + return createRemovedLogFilter(this); + } +} +////////////////////// +// Transaction Receipt +/* +export interface LegacyTransactionReceipt { + byzantium: false; + status: null; + root: string; +} + +export interface ByzantiumTransactionReceipt { + byzantium: true; + status: number; + root: null; +} +*/ +/** + * A **TransactionReceipt** includes additional information about a + * transaction that is only available after it has been mined. + */ +class TransactionReceipt { + /** + * The provider connected to the log used to fetch additional details + * if necessary. + */ + provider; + /** + * The address the transaction was sent to. + */ + to; + /** + * The sender of the transaction. + */ + from; + /** + * The address of the contract if the transaction was directly + * responsible for deploying one. + * + * This is non-null **only** if the ``to`` is empty and the ``data`` + * was successfully executed as initcode. + */ + contractAddress; + /** + * The transaction hash. + */ + hash; + /** + * The index of this transaction within the block transactions. + */ + index; + /** + * The block hash of the [[Block]] this transaction was included in. + */ + blockHash; + /** + * The block number of the [[Block]] this transaction was included in. + */ + blockNumber; + /** + * The bloom filter bytes that represent all logs that occurred within + * this transaction. This is generally not useful for most developers, + * but can be used to validate the included logs. + */ + logsBloom; + /** + * The actual amount of gas used by this transaction. + * + * When creating a transaction, the amount of gas that will be used can + * only be approximated, but the sender must pay the gas fee for the + * entire gas limit. After the transaction, the difference is refunded. + */ + gasUsed; + /** + * The gas used for BLObs. See [[link-eip-4844]]. + */ + blobGasUsed; + /** + * The amount of gas used by all transactions within the block for this + * and all transactions with a lower ``index``. + * + * This is generally not useful for developers but can be used to + * validate certain aspects of execution. + */ + cumulativeGasUsed; + /** + * The actual gas price used during execution. + * + * Due to the complexity of [[link-eip-1559]] this value can only + * be caluclated after the transaction has been mined, snce the base + * fee is protocol-enforced. + */ + gasPrice; + /** + * The price paid per BLOB in gas. See [[link-eip-4844]]. + */ + blobGasPrice; + /** + * The [[link-eip-2718]] transaction type. + */ + type; + //readonly byzantium!: boolean; + /** + * The status of this transaction, indicating success (i.e. ``1``) or + * a revert (i.e. ``0``). + * + * This is available in post-byzantium blocks, but some backends may + * backfill this value. + */ + status; + /** + * The root hash of this transaction. + * + * This is no present and was only included in pre-byzantium blocks, but + * could be used to validate certain parts of the receipt. + */ + root; + #logs; + /** + * @_ignore: + */ + constructor(tx, provider) { + this.#logs = Object.freeze(tx.logs.map((log) => { + return new Log(log, provider); + })); + let gasPrice = provider_BN_0; + if (tx.effectiveGasPrice != null) { + gasPrice = tx.effectiveGasPrice; + } + else if (tx.gasPrice != null) { + gasPrice = tx.gasPrice; + } + properties_defineProperties(this, { + provider, + to: tx.to, + from: tx.from, + contractAddress: tx.contractAddress, + hash: tx.hash, + index: tx.index, + blockHash: tx.blockHash, + blockNumber: tx.blockNumber, + logsBloom: tx.logsBloom, + gasUsed: tx.gasUsed, + cumulativeGasUsed: tx.cumulativeGasUsed, + blobGasUsed: tx.blobGasUsed, + gasPrice, + blobGasPrice: tx.blobGasPrice, + type: tx.type, + //byzantium: tx.byzantium, + status: tx.status, + root: tx.root + }); + } + /** + * The logs for this transaction. + */ + get logs() { return this.#logs; } + /** + * Returns a JSON-compatible representation. + */ + toJSON() { + const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, //byzantium, + status, root } = this; + return { + _type: "TransactionReceipt", + blockHash, blockNumber, + //byzantium, + contractAddress, + cumulativeGasUsed: toJson(this.cumulativeGasUsed), + from, + gasPrice: toJson(this.gasPrice), + blobGasUsed: toJson(this.blobGasUsed), + blobGasPrice: toJson(this.blobGasPrice), + gasUsed: toJson(this.gasUsed), + hash, index, logs, logsBloom, root, status, to + }; + } + /** + * @_ignore: + */ + get length() { return this.logs.length; } + [Symbol.iterator]() { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { value: this.logs[index++], done: false }; + } + return { value: undefined, done: true }; + } + }; + } + /** + * The total fee for this transaction, in wei. + */ + get fee() { + return this.gasUsed * this.gasPrice; + } + /** + * Resolves to the block this transaction occurred in. + */ + async getBlock() { + const block = await this.provider.getBlock(this.blockHash); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + /** + * Resolves to the transaction this transaction occurred in. + */ + async getTransaction() { + const tx = await this.provider.getTransaction(this.hash); + if (tx == null) { + throw new Error("TODO"); + } + return tx; + } + /** + * Resolves to the return value of the execution of this transaction. + * + * Support for this feature is limited, as it requires an archive node + * with the ``debug_`` or ``trace_`` API enabled. + */ + async getResult() { + return (await this.provider.getTransactionResult(this.hash)); + } + /** + * Resolves to the number of confirmations this transaction has. + */ + async confirmations() { + return (await this.provider.getBlockNumber()) - this.blockNumber + 1; + } + /** + * @_ignore: + */ + removedEvent() { + return createRemovedTransactionFilter(this); + } + /** + * @_ignore: + */ + reorderedEvent(other) { + errors_assert(!other || other.isMined(), "unmined 'other' transction cannot be orphaned", "UNSUPPORTED_OPERATION", { operation: "reorderedEvent(other)" }); + return createReorderedTransactionFilter(this, other); + } +} +/** + * A **TransactionResponse** includes all properties about a transaction + * that was sent to the network, which may or may not be included in a + * block. + * + * The [[TransactionResponse-isMined]] can be used to check if the + * transaction has been mined as well as type guard that the otherwise + * possibly ``null`` properties are defined. + */ +class TransactionResponse { + /** + * The provider this is connected to, which will influence how its + * methods will resolve its async inspection methods. + */ + provider; + /** + * The block number of the block that this transaction was included in. + * + * This is ``null`` for pending transactions. + */ + blockNumber; + /** + * The blockHash of the block that this transaction was included in. + * + * This is ``null`` for pending transactions. + */ + blockHash; + /** + * The index within the block that this transaction resides at. + */ + index; + /** + * The transaction hash. + */ + hash; + /** + * The [[link-eip-2718]] transaction envelope type. This is + * ``0`` for legacy transactions types. + */ + type; + /** + * The receiver of this transaction. + * + * If ``null``, then the transaction is an initcode transaction. + * This means the result of executing the [[data]] will be deployed + * as a new contract on chain (assuming it does not revert) and the + * address may be computed using [[getCreateAddress]]. + */ + to; + /** + * The sender of this transaction. It is implicitly computed + * from the transaction pre-image hash (as the digest) and the + * [[signature]] using ecrecover. + */ + from; + /** + * The nonce, which is used to prevent replay attacks and offer + * a method to ensure transactions from a given sender are explicitly + * ordered. + * + * When sending a transaction, this must be equal to the number of + * transactions ever sent by [[from]]. + */ + nonce; + /** + * The maximum units of gas this transaction can consume. If execution + * exceeds this, the entries transaction is reverted and the sender + * is charged for the full amount, despite not state changes being made. + */ + gasLimit; + /** + * The gas price can have various values, depending on the network. + * + * In modern networks, for transactions that are included this is + * the //effective gas price// (the fee per gas that was actually + * charged), while for transactions that have not been included yet + * is the [[maxFeePerGas]]. + * + * For legacy transactions, or transactions on legacy networks, this + * is the fee that will be charged per unit of gas the transaction + * consumes. + */ + gasPrice; + /** + * The maximum priority fee (per unit of gas) to allow a + * validator to charge the sender. This is inclusive of the + * [[maxFeeFeePerGas]]. + */ + maxPriorityFeePerGas; + /** + * The maximum fee (per unit of gas) to allow this transaction + * to charge the sender. + */ + maxFeePerGas; + /** + * The [[link-eip-4844]] max fee per BLOb gas. + */ + maxFeePerBlobGas; + /** + * The data. + */ + data; + /** + * The value, in wei. Use [[formatEther]] to format this value + * as ether. + */ + value; + /** + * The chain ID. + */ + chainId; + /** + * The signature. + */ + signature; + /** + * The [[link-eip-2930]] access list for transaction types that + * support it, otherwise ``null``. + */ + accessList; + /** + * The [[link-eip-4844]] BLOb versioned hashes. + */ + blobVersionedHashes; + #startBlock; + /** + * @_ignore: + */ + constructor(tx, provider) { + this.provider = provider; + this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null; + this.blockHash = (tx.blockHash != null) ? tx.blockHash : null; + this.hash = tx.hash; + this.index = tx.index; + this.type = tx.type; + this.from = tx.from; + this.to = tx.to || null; + this.gasLimit = tx.gasLimit; + this.nonce = tx.nonce; + this.data = tx.data; + this.value = tx.value; + this.gasPrice = tx.gasPrice; + this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null; + this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null; + this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas : null; + this.chainId = tx.chainId; + this.signature = tx.signature; + this.accessList = (tx.accessList != null) ? tx.accessList : null; + this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes : null; + this.#startBlock = -1; + } + /** + * Returns a JSON-compatible representation of this transaction. + */ + toJSON() { + const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList, blobVersionedHashes } = this; + return { + _type: "TransactionResponse", + accessList, blockNumber, blockHash, + blobVersionedHashes, + chainId: toJson(this.chainId), + data, from, + gasLimit: toJson(this.gasLimit), + gasPrice: toJson(this.gasPrice), + hash, + maxFeePerGas: toJson(this.maxFeePerGas), + maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas), + maxFeePerBlobGas: toJson(this.maxFeePerBlobGas), + nonce, signature, to, index, type, + value: toJson(this.value), + }; + } + /** + * Resolves to the Block that this transaction was included in. + * + * This will return null if the transaction has not been included yet. + */ + async getBlock() { + let blockNumber = this.blockNumber; + if (blockNumber == null) { + const tx = await this.getTransaction(); + if (tx) { + blockNumber = tx.blockNumber; + } + } + if (blockNumber == null) { + return null; + } + const block = this.provider.getBlock(blockNumber); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + /** + * Resolves to this transaction being re-requested from the + * provider. This can be used if you have an unmined transaction + * and wish to get an up-to-date populated instance. + */ + async getTransaction() { + return this.provider.getTransaction(this.hash); + } + /** + * Resolve to the number of confirmations this transaction has. + */ + async confirmations() { + if (this.blockNumber == null) { + const { tx, blockNumber } = await resolveProperties({ + tx: this.getTransaction(), + blockNumber: this.provider.getBlockNumber() + }); + // Not mined yet... + if (tx == null || tx.blockNumber == null) { + return 0; + } + return blockNumber - tx.blockNumber + 1; + } + const blockNumber = await this.provider.getBlockNumber(); + return blockNumber - this.blockNumber + 1; + } + /** + * Resolves once this transaction has been mined and has + * %%confirms%% blocks including it (default: ``1``) with an + * optional %%timeout%%. + * + * This can resolve to ``null`` only if %%confirms%% is ``0`` + * and the transaction has not been mined, otherwise this will + * wait until enough confirmations have completed. + */ + async wait(_confirms, _timeout) { + const confirms = (_confirms == null) ? 1 : _confirms; + const timeout = (_timeout == null) ? 0 : _timeout; + let startBlock = this.#startBlock; + let nextScan = -1; + let stopScanning = (startBlock === -1) ? true : false; + const checkReplacement = async () => { + // Get the current transaction count for this sender + if (stopScanning) { + return null; + } + const { blockNumber, nonce } = await resolveProperties({ + blockNumber: this.provider.getBlockNumber(), + nonce: this.provider.getTransactionCount(this.from) + }); + // No transaction or our nonce has not been mined yet; but we + // can start scanning later when we do start + if (nonce < this.nonce) { + startBlock = blockNumber; + return; + } + // We were mined; no replacement + if (stopScanning) { + return null; + } + const mined = await this.getTransaction(); + if (mined && mined.blockNumber != null) { + return; + } + // We were replaced; start scanning for that transaction + // Starting to scan; look back a few extra blocks for safety + if (nextScan === -1) { + nextScan = startBlock - 3; + if (nextScan < this.#startBlock) { + nextScan = this.#startBlock; + } + } + while (nextScan <= blockNumber) { + // Get the next block to scan + if (stopScanning) { + return null; + } + const block = await this.provider.getBlock(nextScan, true); + // This should not happen; but we'll try again shortly + if (block == null) { + return; + } + // We were mined; no replacement + for (const hash of block) { + if (hash === this.hash) { + return; + } + } + // Search for the transaction that replaced us + for (let i = 0; i < block.length; i++) { + const tx = await block.getTransaction(i); + if (tx.from === this.from && tx.nonce === this.nonce) { + // Get the receipt + if (stopScanning) { + return null; + } + const receipt = await this.provider.getTransactionReceipt(tx.hash); + // This should not happen; but we'll try again shortly + if (receipt == null) { + return; + } + // We will retry this on the next block (this case could be optimized) + if ((blockNumber - receipt.blockNumber + 1) < confirms) { + return; + } + // The reason we were replaced + let reason = "replaced"; + if (tx.data === this.data && tx.to === this.to && tx.value === this.value) { + reason = "repriced"; + } + else if (tx.data === "0x" && tx.from === tx.to && tx.value === provider_BN_0) { + reason = "cancelled"; + } + errors_assert(false, "transaction was replaced", "TRANSACTION_REPLACED", { + cancelled: (reason === "replaced" || reason === "cancelled"), + reason, + replacement: tx.replaceableTransaction(startBlock), + hash: tx.hash, + receipt + }); + } + } + nextScan++; + } + return; + }; + const checkReceipt = (receipt) => { + if (receipt == null || receipt.status !== 0) { + return receipt; + } + errors_assert(false, "transaction execution reverted", "CALL_EXCEPTION", { + action: "sendTransaction", + data: null, reason: null, invocation: null, revert: null, + transaction: { + to: receipt.to, + from: receipt.from, + data: "" // @TODO: in v7, split out sendTransaction properties + }, receipt + }); + }; + const receipt = await this.provider.getTransactionReceipt(this.hash); + if (confirms === 0) { + return checkReceipt(receipt); + } + if (receipt) { + if ((await receipt.confirmations()) >= confirms) { + return checkReceipt(receipt); + } + } + else { + // Check for a replacement; throws if a replacement was found + await checkReplacement(); + // Allow null only when the confirms is 0 + if (confirms === 0) { + return null; + } + } + const waiter = new Promise((resolve, reject) => { + // List of things to cancel when we have a result (one way or the other) + const cancellers = []; + const cancel = () => { cancellers.forEach((c) => c()); }; + // On cancel, stop scanning for replacements + cancellers.push(() => { stopScanning = true; }); + // Set up any timeout requested + if (timeout > 0) { + const timer = setTimeout(() => { + cancel(); + reject(makeError("wait for transaction timeout", "TIMEOUT")); + }, timeout); + cancellers.push(() => { clearTimeout(timer); }); + } + const txListener = async (receipt) => { + // Done; return it! + if ((await receipt.confirmations()) >= confirms) { + cancel(); + try { + resolve(checkReceipt(receipt)); + } + catch (error) { + reject(error); + } + } + }; + cancellers.push(() => { this.provider.off(this.hash, txListener); }); + this.provider.on(this.hash, txListener); + // We support replacement detection; start checking + if (startBlock >= 0) { + const replaceListener = async () => { + try { + // Check for a replacement; this throws only if one is found + await checkReplacement(); + } + catch (error) { + // We were replaced (with enough confirms); re-throw the error + if (isError(error, "TRANSACTION_REPLACED")) { + cancel(); + reject(error); + return; + } + } + // Rescheudle a check on the next block + if (!stopScanning) { + this.provider.once("block", replaceListener); + } + }; + cancellers.push(() => { this.provider.off("block", replaceListener); }); + this.provider.once("block", replaceListener); + } + }); + return await waiter; + } + /** + * Returns ``true`` if this transaction has been included. + * + * This is effective only as of the time the TransactionResponse + * was instantiated. To get up-to-date information, use + * [[getTransaction]]. + * + * This provides a Type Guard that this transaction will have + * non-null property values for properties that are null for + * unmined transactions. + */ + isMined() { + return (this.blockHash != null); + } + /** + * Returns true if the transaction is a legacy (i.e. ``type == 0``) + * transaction. + * + * This provides a Type Guard that this transaction will have + * the ``null``-ness for hardfork-specific properties set correctly. + */ + isLegacy() { + return (this.type === 0); + } + /** + * Returns true if the transaction is a Berlin (i.e. ``type == 1``) + * transaction. See [[link-eip-2070]]. + * + * This provides a Type Guard that this transaction will have + * the ``null``-ness for hardfork-specific properties set correctly. + */ + isBerlin() { + return (this.type === 1); + } + /** + * Returns true if the transaction is a London (i.e. ``type == 2``) + * transaction. See [[link-eip-1559]]. + * + * This provides a Type Guard that this transaction will have + * the ``null``-ness for hardfork-specific properties set correctly. + */ + isLondon() { + return (this.type === 2); + } + /** + * Returns true if hte transaction is a Cancun (i.e. ``type == 3``) + * transaction. See [[link-eip-4844]]. + */ + isCancun() { + return (this.type === 3); + } + /** + * Returns a filter which can be used to listen for orphan events + * that evict this transaction. + */ + removedEvent() { + errors_assert(this.isMined(), "unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { operation: "removeEvent()" }); + return createRemovedTransactionFilter(this); + } + /** + * Returns a filter which can be used to listen for orphan events + * that re-order this event against %%other%%. + */ + reorderedEvent(other) { + errors_assert(this.isMined(), "unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { operation: "removeEvent()" }); + errors_assert(!other || other.isMined(), "unmined 'other' transaction canot be orphaned", "UNSUPPORTED_OPERATION", { operation: "removeEvent()" }); + return createReorderedTransactionFilter(this, other); + } + /** + * Returns a new TransactionResponse instance which has the ability to + * detect (and throw an error) if the transaction is replaced, which + * will begin scanning at %%startBlock%%. + * + * This should generally not be used by developers and is intended + * primarily for internal use. Setting an incorrect %%startBlock%% can + * have devastating performance consequences if used incorrectly. + */ + replaceableTransaction(startBlock) { + errors_assertArgument(Number.isInteger(startBlock) && startBlock >= 0, "invalid startBlock", "startBlock", startBlock); + const tx = new TransactionResponse(this, this.provider); + tx.#startBlock = startBlock; + return tx; + } +} +function createOrphanedBlockFilter(block) { + return { orphan: "drop-block", hash: block.hash, number: block.number }; +} +function createReorderedTransactionFilter(tx, other) { + return { orphan: "reorder-transaction", tx, other }; +} +function createRemovedTransactionFilter(tx) { + return { orphan: "drop-transaction", tx }; +} +function createRemovedLogFilter(log) { + return { orphan: "drop-log", log: { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + address: log.address, + data: log.data, + topics: Object.freeze(log.topics.slice()), + index: log.index + } }; +} +//# sourceMappingURL=provider.js.map +;// ./node_modules/ethers/lib.esm/utils/events.js +/** + * Events allow for applications to use the observer pattern, which + * allows subscribing and publishing events, outside the normal + * execution paths. + * + * @_section api/utils/events:Events [about-events] + */ + +/** + * When an [[EventEmitterable]] triggers a [[Listener]], the + * callback always ahas one additional argument passed, which is + * an **EventPayload**. + */ +class EventPayload { + /** + * The event filter. + */ + filter; + /** + * The **EventEmitterable**. + */ + emitter; + #listener; + /** + * Create a new **EventPayload** for %%emitter%% with + * the %%listener%% and for %%filter%%. + */ + constructor(emitter, listener, filter) { + this.#listener = listener; + properties_defineProperties(this, { emitter, filter }); + } + /** + * Unregister the triggered listener for future events. + */ + async removeListener() { + if (this.#listener == null) { + return; + } + await this.emitter.off(this.filter, this.#listener); + } +} +//# sourceMappingURL=events.js.map +;// ./node_modules/ethers/lib.esm/contract/wrappers.js +// import from provider.ts instead of index.ts to prevent circular dep +// from EtherscanProvider + + +/** + * An **EventLog** contains additional properties parsed from the [[Log]]. + */ +class EventLog extends Log { + /** + * The Contract Interface. + */ + interface; + /** + * The matching event. + */ + fragment; + /** + * The parsed arguments passed to the event by ``emit``. + */ + args; + /** + * @_ignore: + */ + constructor(log, iface, fragment) { + super(log, log.provider); + const args = iface.decodeEventLog(fragment, log.data, log.topics); + properties_defineProperties(this, { args, fragment, interface: iface }); + } + /** + * The name of the event. + */ + get eventName() { return this.fragment.name; } + /** + * The signature of the event. + */ + get eventSignature() { return this.fragment.format(); } +} +/** + * An **EventLog** contains additional properties parsed from the [[Log]]. + */ +class UndecodedEventLog extends Log { + /** + * The error encounted when trying to decode the log. + */ + error; + /** + * @_ignore: + */ + constructor(log, error) { + super(log, log.provider); + properties_defineProperties(this, { error }); + } +} +/** + * A **ContractTransactionReceipt** includes the parsed logs from a + * [[TransactionReceipt]]. + */ +class ContractTransactionReceipt extends TransactionReceipt { + #iface; + /** + * @_ignore: + */ + constructor(iface, provider, tx) { + super(tx, provider); + this.#iface = iface; + } + /** + * The parsed logs for any [[Log]] which has a matching event in the + * Contract ABI. + */ + get logs() { + return super.logs.map((log) => { + const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]) : null; + if (fragment) { + try { + return new EventLog(log, this.#iface, fragment); + } + catch (error) { + return new UndecodedEventLog(log, error); + } + } + return log; + }); + } +} +/** + * A **ContractTransactionResponse** will return a + * [[ContractTransactionReceipt]] when waited on. + */ +class ContractTransactionResponse extends TransactionResponse { + #iface; + /** + * @_ignore: + */ + constructor(iface, provider, tx) { + super(tx, provider); + this.#iface = iface; + } + /** + * Resolves once this transaction has been mined and has + * %%confirms%% blocks including it (default: ``1``) with an + * optional %%timeout%%. + * + * This can resolve to ``null`` only if %%confirms%% is ``0`` + * and the transaction has not been mined, otherwise this will + * wait until enough confirmations have completed. + */ + async wait(confirms, timeout) { + const receipt = await super.wait(confirms, timeout); + if (receipt == null) { + return null; + } + return new ContractTransactionReceipt(this.#iface, this.provider, receipt); + } +} +/** + * A **ContractUnknownEventPayload** is included as the last parameter to + * Contract Events when the event does not match any events in the ABI. + */ +class ContractUnknownEventPayload extends EventPayload { + /** + * The log with no matching events. + */ + log; + /** + * @_event: + */ + constructor(contract, listener, filter, log) { + super(contract, listener, filter); + properties_defineProperties(this, { log }); + } + /** + * Resolves to the block the event occured in. + */ + async getBlock() { + return await this.log.getBlock(); + } + /** + * Resolves to the transaction the event occured in. + */ + async getTransaction() { + return await this.log.getTransaction(); + } + /** + * Resolves to the transaction receipt the event occured in. + */ + async getTransactionReceipt() { + return await this.log.getTransactionReceipt(); + } +} +/** + * A **ContractEventPayload** is included as the last parameter to + * Contract Events when the event is known. + */ +class ContractEventPayload extends ContractUnknownEventPayload { + /** + * @_ignore: + */ + constructor(contract, listener, filter, fragment, _log) { + super(contract, listener, filter, new EventLog(_log, contract.interface, fragment)); + const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics); + properties_defineProperties(this, { args, fragment }); + } + /** + * The event name. + */ + get eventName() { + return this.fragment.name; + } + /** + * The event signature. + */ + get eventSignature() { + return this.fragment.format(); + } +} +//# sourceMappingURL=wrappers.js.map +;// ./node_modules/ethers/lib.esm/contract/contract.js + + +// import from provider.ts instead of index.ts to prevent circular dep +// from EtherscanProvider + + + +const contract_BN_0 = BigInt(0); +function canCall(value) { + return (value && typeof (value.call) === "function"); +} +function canEstimate(value) { + return (value && typeof (value.estimateGas) === "function"); +} +function canResolve(value) { + return (value && typeof (value.resolveName) === "function"); +} +function canSend(value) { + return (value && typeof (value.sendTransaction) === "function"); +} +function getResolver(value) { + if (value != null) { + if (canResolve(value)) { + return value; + } + if (value.provider) { + return value.provider; + } + } + return undefined; +} +class PreparedTopicFilter { + #filter; + fragment; + constructor(contract, fragment, args) { + properties_defineProperties(this, { fragment }); + if (fragment.inputs.length < args.length) { + throw new Error("too many arguments"); + } + // Recursively descend into args and resolve any addresses + const runner = getRunner(contract.runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + this.#filter = (async function () { + const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => { + const arg = args[index]; + if (arg == null) { + return null; + } + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { + if (Array.isArray(value)) { + return Promise.all(value.map((v) => resolveAddress(v, resolver))); + } + return resolveAddress(value, resolver); + } + return value; + }); + })); + return contract.interface.encodeFilterTopics(fragment, resolvedArgs); + })(); + } + getTopicFilter() { + return this.#filter; + } +} +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> { +function getRunner(value, feature) { + if (value == null) { + return null; + } + if (typeof (value[feature]) === "function") { + return value; + } + if (value.provider && typeof (value.provider[feature]) === "function") { + return value.provider; + } + return null; +} +function getProvider(value) { + if (value == null) { + return null; + } + return value.provider || null; +} +/** + * @_ignore: + */ +async function copyOverrides(arg, allowed) { + // Make sure the overrides passed in are a valid overrides object + const _overrides = Typed.dereference(arg, "overrides"); + errors_assertArgument(typeof (_overrides) === "object", "invalid overrides parameter", "overrides", arg); + // Create a shallow copy (we'll deep-ify anything needed during normalizing) + const overrides = copyRequest(_overrides); + errors_assertArgument(overrides.to == null || (allowed || []).indexOf("to") >= 0, "cannot override to", "overrides.to", overrides.to); + errors_assertArgument(overrides.data == null || (allowed || []).indexOf("data") >= 0, "cannot override data", "overrides.data", overrides.data); + // Resolve any from + if (overrides.from) { + overrides.from = overrides.from; + } + return overrides; +} +/** + * @_ignore: + */ +async function resolveArgs(_runner, inputs, args) { + // Recursively descend into args and resolve any addresses + const runner = getRunner(_runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + return await Promise.all(inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + value = Typed.dereference(value, type); + if (type === "address") { + return resolveAddress(value, resolver); + } + return value; + }); + })); +} +function buildWrappedFallback(contract) { + const populateTransaction = async function (overrides) { + // If an overrides was passed in, copy it and normalize the values + const tx = (await copyOverrides(overrides, ["data"])); + tx.to = await contract.getAddress(); + if (tx.from) { + tx.from = await resolveAddress(tx.from, getResolver(contract.runner)); + } + const iface = contract.interface; + const noValue = (getBigInt((tx.value || contract_BN_0), "overrides.value") === contract_BN_0); + const noData = ((tx.data || "0x") === "0x"); + if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) { + errors_assertArgument(false, "cannot send data to receive or send value to non-payable fallback", "overrides", overrides); + } + errors_assertArgument(iface.fallback || noData, "cannot send data to receive-only contract", "overrides.data", tx.data); + // Only allow payable contracts to set non-zero value + const payable = iface.receive || (iface.fallback && iface.fallback.payable); + errors_assertArgument(payable || noValue, "cannot send value to non-payable fallback", "overrides.value", tx.value); + // Only allow fallback contracts to set non-empty data + errors_assertArgument(iface.fallback || noData, "cannot send data to receive-only contract", "overrides.data", tx.data); + return tx; + }; + const staticCall = async function (overrides) { + const runner = getRunner(contract.runner, "call"); + errors_assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" }); + const tx = await populateTransaction(overrides); + try { + return await runner.call(tx); + } + catch (error) { + if (isCallException(error) && error.data) { + throw contract.interface.makeError(error.data, tx); + } + throw error; + } + }; + const send = async function (overrides) { + const runner = contract.runner; + errors_assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" }); + const tx = await runner.sendTransaction(await populateTransaction(overrides)); + const provider = getProvider(contract.runner); + // @TODO: the provider can be null; make a custom dummy provider that will throw a + // meaningful error + return new ContractTransactionResponse(contract.interface, provider, tx); + }; + const estimateGas = async function (overrides) { + const runner = getRunner(contract.runner, "estimateGas"); + errors_assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" }); + return await runner.estimateGas(await populateTransaction(overrides)); + }; + const method = async (overrides) => { + return await send(overrides); + }; + properties_defineProperties(method, { + _contract: contract, + estimateGas, + populateTransaction, + send, staticCall + }); + return method; +} +function buildWrappedMethod(contract, key) { + const getFragment = function (...args) { + const fragment = contract.interface.getFunction(key, args); + errors_assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", { + operation: "fragment", + info: { key, args } + }); + return fragment; + }; + const populateTransaction = async function (...args) { + const fragment = getFragment(...args); + // If an overrides was passed in, copy it and normalize the values + let overrides = {}; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + if (overrides.from) { + overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner)); + } + } + if (fragment.inputs.length !== args.length) { + throw new Error("internal error: fragment inputs doesn't match arguments; should not happen"); + } + const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args); + return Object.assign({}, overrides, await resolveProperties({ + to: contract.getAddress(), + data: contract.interface.encodeFunctionData(fragment, resolvedArgs) + })); + }; + const staticCall = async function (...args) { + const result = await staticCallResult(...args); + if (result.length === 1) { + return result[0]; + } + return result; + }; + const send = async function (...args) { + const runner = contract.runner; + errors_assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" }); + const tx = await runner.sendTransaction(await populateTransaction(...args)); + const provider = getProvider(contract.runner); + // @TODO: the provider can be null; make a custom dummy provider that will throw a + // meaningful error + return new ContractTransactionResponse(contract.interface, provider, tx); + }; + const estimateGas = async function (...args) { + const runner = getRunner(contract.runner, "estimateGas"); + errors_assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" }); + return await runner.estimateGas(await populateTransaction(...args)); + }; + const staticCallResult = async function (...args) { + const runner = getRunner(contract.runner, "call"); + errors_assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" }); + const tx = await populateTransaction(...args); + let result = "0x"; + try { + result = await runner.call(tx); + } + catch (error) { + if (isCallException(error) && error.data) { + throw contract.interface.makeError(error.data, tx); + } + throw error; + } + const fragment = getFragment(...args); + return contract.interface.decodeFunctionResult(fragment, result); + }; + const method = async (...args) => { + const fragment = getFragment(...args); + if (fragment.constant) { + return await staticCall(...args); + } + return await send(...args); + }; + properties_defineProperties(method, { + name: contract.interface.getFunctionName(key), + _contract: contract, _key: key, + getFragment, + estimateGas, + populateTransaction, + send, staticCall, staticCallResult, + }); + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + Object.defineProperty(method, "fragment", { + configurable: false, + enumerable: true, + get: () => { + const fragment = contract.interface.getFunction(key); + errors_assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", { + operation: "fragment", + info: { key } + }); + return fragment; + } + }); + return method; +} +function buildWrappedEvent(contract, key) { + const getFragment = function (...args) { + const fragment = contract.interface.getEvent(key, args); + errors_assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", { + operation: "fragment", + info: { key, args } + }); + return fragment; + }; + const method = function (...args) { + return new PreparedTopicFilter(contract, getFragment(...args), args); + }; + properties_defineProperties(method, { + name: contract.interface.getEventName(key), + _contract: contract, _key: key, + getFragment + }); + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + Object.defineProperty(method, "fragment", { + configurable: false, + enumerable: true, + get: () => { + const fragment = contract.interface.getEvent(key); + errors_assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", { + operation: "fragment", + info: { key } + }); + return fragment; + } + }); + return method; +} +// The combination of TypeScrype, Private Fields and Proxies makes +// the world go boom; so we hide variables with some trickery keeping +// a symbol attached to each BaseContract which its sub-class (even +// via a Proxy) can reach and use to look up its internal values. +const contract_internal = Symbol.for("_ethersInternal_contract"); +const internalValues = new WeakMap(); +function setInternal(contract, values) { + internalValues.set(contract[contract_internal], values); +} +function getInternal(contract) { + return internalValues.get(contract[contract_internal]); +} +function isDeferred(value) { + return (value && typeof (value) === "object" && ("getTopicFilter" in value) && + (typeof (value.getTopicFilter) === "function") && value.fragment); +} +async function getSubInfo(contract, event) { + let topics; + let fragment = null; + // Convert named events to topicHash and get the fragment for + // events which need deconstructing. + if (Array.isArray(event)) { + const topicHashify = function (name) { + if (isHexString(name, 32)) { + return name; + } + const fragment = contract.interface.getEvent(name); + errors_assertArgument(fragment, "unknown fragment", "name", name); + return fragment.topicHash; + }; + // Array of Topics and Names; e.g. `[ "0x1234...89ab", "Transfer(address)" ]` + topics = event.map((e) => { + if (e == null) { + return null; + } + if (Array.isArray(e)) { + return e.map(topicHashify); + } + return topicHashify(e); + }); + } + else if (event === "*") { + topics = [null]; + } + else if (typeof (event) === "string") { + if (isHexString(event, 32)) { + // Topic Hash + topics = [event]; + } + else { + // Name or Signature; e.g. `"Transfer", `"Transfer(address)"` + fragment = contract.interface.getEvent(event); + errors_assertArgument(fragment, "unknown fragment", "event", event); + topics = [fragment.topicHash]; + } + } + else if (isDeferred(event)) { + // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)` + topics = await event.getTopicFilter(); + } + else if ("fragment" in event) { + // ContractEvent; e.g. `contract.filter.Transfer` + fragment = event.fragment; + topics = [fragment.topicHash]; + } + else { + errors_assertArgument(false, "unknown event name", "event", event); + } + // Normalize topics and sort TopicSets + topics = topics.map((t) => { + if (t == null) { + return null; + } + if (Array.isArray(t)) { + const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values()); + if (items.length === 1) { + return items[0]; + } + items.sort(); + return items; + } + return t.toLowerCase(); + }); + const tag = topics.map((t) => { + if (t == null) { + return "null"; + } + if (Array.isArray(t)) { + return t.join("|"); + } + return t; + }).join("&"); + return { fragment, tag, topics }; +} +async function hasSub(contract, event) { + const { subs } = getInternal(contract); + return subs.get((await getSubInfo(contract, event)).tag) || null; +} +async function getSub(contract, operation, event) { + // Make sure our runner can actually subscribe to events + const provider = getProvider(contract.runner); + errors_assert(provider, "contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { operation }); + const { fragment, tag, topics } = await getSubInfo(contract, event); + const { addr, subs } = getInternal(contract); + let sub = subs.get(tag); + if (!sub) { + const address = (addr ? addr : contract); + const filter = { address, topics }; + const listener = (log) => { + let foundFragment = fragment; + if (foundFragment == null) { + try { + foundFragment = contract.interface.getEvent(log.topics[0]); + } + catch (error) { } + } + // If fragment is null, we do not deconstruct the args to emit + if (foundFragment) { + const _foundFragment = foundFragment; + const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics) : []; + emit(contract, event, args, (listener) => { + return new ContractEventPayload(contract, listener, event, _foundFragment, log); + }); + } + else { + emit(contract, event, [], (listener) => { + return new ContractUnknownEventPayload(contract, listener, event, log); + }); + } + }; + let starting = []; + const start = () => { + if (starting.length) { + return; + } + starting.push(provider.on(filter, listener)); + }; + const stop = async () => { + if (starting.length == 0) { + return; + } + let started = starting; + starting = []; + await Promise.all(started); + provider.off(filter, listener); + }; + sub = { tag, listeners: [], start, stop }; + subs.set(tag, sub); + } + return sub; +} +// We use this to ensure one emit resolves before firing the next to +// ensure correct ordering (note this cannot throw and just adds the +// notice to the event queu using setTimeout). +let lastEmit = Promise.resolve(); +async function _emit(contract, event, args, payloadFunc) { + await lastEmit; + const sub = await hasSub(contract, event); + if (!sub) { + return false; + } + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const passArgs = Array.from(args); + if (payloadFunc) { + passArgs.push(payloadFunc(once ? null : listener)); + } + try { + listener.call(contract, ...passArgs); + } + catch (error) { } + return !once; + }); + if (sub.listeners.length === 0) { + sub.stop(); + getInternal(contract).subs.delete(sub.tag); + } + return (count > 0); +} +async function emit(contract, event, args, payloadFunc) { + try { + await lastEmit; + } + catch (error) { } + const resultPromise = _emit(contract, event, args, payloadFunc); + lastEmit = resultPromise; + return await resultPromise; +} +const contract_passProperties = ["then"]; +class BaseContract { + /** + * The target to connect to. + * + * This can be an address, ENS name or any [[Addressable]], such as + * another contract. To get the resovled address, use the ``getAddress`` + * method. + */ + target; + /** + * The contract Interface. + */ + interface; + /** + * The connected runner. This is generally a [[Provider]] or a + * [[Signer]], which dictates what operations are supported. + * + * For example, a **Contract** connected to a [[Provider]] may + * only execute read-only operations. + */ + runner; + /** + * All the Events available on this contract. + */ + filters; + /** + * @_ignore: + */ + [contract_internal]; + /** + * The fallback or receive function if any. + */ + fallback; + /** + * Creates a new contract connected to %%target%% with the %%abi%% and + * optionally connected to a %%runner%% to perform operations on behalf + * of. + */ + constructor(target, abi, runner, _deployTx) { + errors_assertArgument(typeof (target) === "string" || isAddressable(target), "invalid value for Contract target", "target", target); + if (runner == null) { + runner = null; + } + const iface = Interface.from(abi); + properties_defineProperties(this, { target, runner, interface: iface }); + Object.defineProperty(this, contract_internal, { value: {} }); + let addrPromise; + let addr = null; + let deployTx = null; + if (_deployTx) { + const provider = getProvider(runner); + // @TODO: the provider can be null; make a custom dummy provider that will throw a + // meaningful error + deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx); + } + let subs = new Map(); + // Resolve the target as the address + if (typeof (target) === "string") { + if (isHexString(target)) { + addr = target; + addrPromise = Promise.resolve(target); + } + else { + const resolver = getRunner(runner, "resolveName"); + if (!canResolve(resolver)) { + throw makeError("contract runner does not support name resolution", "UNSUPPORTED_OPERATION", { + operation: "resolveName" + }); + } + addrPromise = resolver.resolveName(target).then((addr) => { + if (addr == null) { + throw makeError("an ENS name used for a contract target must be correctly configured", "UNCONFIGURED_NAME", { + value: target + }); + } + getInternal(this).addr = addr; + return addr; + }); + } + } + else { + addrPromise = target.getAddress().then((addr) => { + if (addr == null) { + throw new Error("TODO"); + } + getInternal(this).addr = addr; + return addr; + }); + } + // Set our private values + setInternal(this, { addrPromise, addr, deployTx, subs }); + // Add the event filters + const filters = new Proxy({}, { + get: (target, prop, receiver) => { + // Pass important checks (like `then` for Promise) through + if (typeof (prop) === "symbol" || contract_passProperties.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + try { + return this.getEvent(prop); + } + catch (error) { + if (!isError(error, "INVALID_ARGUMENT") || error.argument !== "key") { + throw error; + } + } + return undefined; + }, + has: (target, prop) => { + // Pass important checks (like `then` for Promise) through + if (contract_passProperties.indexOf(prop) >= 0) { + return Reflect.has(target, prop); + } + return Reflect.has(target, prop) || this.interface.hasEvent(String(prop)); + } + }); + properties_defineProperties(this, { filters }); + properties_defineProperties(this, { + fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)) : null) + }); + // Return a Proxy that will respond to functions + return new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof (prop) === "symbol" || prop in target || contract_passProperties.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + // Undefined properties should return undefined + try { + return target.getFunction(prop); + } + catch (error) { + if (!isError(error, "INVALID_ARGUMENT") || error.argument !== "key") { + throw error; + } + } + return undefined; + }, + has: (target, prop) => { + if (typeof (prop) === "symbol" || prop in target || contract_passProperties.indexOf(prop) >= 0) { + return Reflect.has(target, prop); + } + return target.interface.hasFunction(prop); + } + }); + } + /** + * Return a new Contract instance with the same target and ABI, but + * a different %%runner%%. + */ + connect(runner) { + return new BaseContract(this.target, this.interface, runner); + } + /** + * Return a new Contract instance with the same ABI and runner, but + * a different %%target%%. + */ + attach(target) { + return new BaseContract(target, this.interface, this.runner); + } + /** + * Return the resolved address of this Contract. + */ + async getAddress() { return await getInternal(this).addrPromise; } + /** + * Return the deployed bytecode or null if no bytecode is found. + */ + async getDeployedCode() { + const provider = getProvider(this.runner); + errors_assert(provider, "runner does not support .provider", "UNSUPPORTED_OPERATION", { operation: "getDeployedCode" }); + const code = await provider.getCode(await this.getAddress()); + if (code === "0x") { + return null; + } + return code; + } + /** + * Resolve to this Contract once the bytecode has been deployed, or + * resolve immediately if already deployed. + */ + async waitForDeployment() { + // We have the deployement transaction; just use that (throws if deployement fails) + const deployTx = this.deploymentTransaction(); + if (deployTx) { + await deployTx.wait(); + return this; + } + // Check for code + const code = await this.getDeployedCode(); + if (code != null) { + return this; + } + // Make sure we can subscribe to a provider event + const provider = getProvider(this.runner); + errors_assert(provider != null, "contract runner does not support .provider", "UNSUPPORTED_OPERATION", { operation: "waitForDeployment" }); + return new Promise((resolve, reject) => { + const checkCode = async () => { + try { + const code = await this.getDeployedCode(); + if (code != null) { + return resolve(this); + } + provider.once("block", checkCode); + } + catch (error) { + reject(error); + } + }; + checkCode(); + }); + } + /** + * Return the transaction used to deploy this contract. + * + * This is only available if this instance was returned from a + * [[ContractFactory]]. + */ + deploymentTransaction() { + return getInternal(this).deployTx; + } + /** + * Return the function for a given name. This is useful when a contract + * method name conflicts with a JavaScript name such as ``prototype`` or + * when using a Contract programatically. + */ + getFunction(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + const func = buildWrappedMethod(this, key); + return func; + } + /** + * Return the event for a given name. This is useful when a contract + * event name conflicts with a JavaScript name such as ``prototype`` or + * when using a Contract programatically. + */ + getEvent(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + return buildWrappedEvent(this, key); + } + /** + * @_ignore: + */ + async queryTransaction(hash) { + throw new Error("@TODO"); + } + /* + // @TODO: this is a non-backwards compatible change, but will be added + // in v7 and in a potential SmartContract class in an upcoming + // v6 release + async getTransactionReceipt(hash: string): Promise { + const provider = getProvider(this.runner); + assert(provider, "contract runner does not have a provider", + "UNSUPPORTED_OPERATION", { operation: "queryTransaction" }); + + const receipt = await provider.getTransactionReceipt(hash); + if (receipt == null) { return null; } + + return new ContractTransactionReceipt(this.interface, provider, receipt); + } + */ + /** + * Provide historic access to event data for %%event%% in the range + * %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``"latest"``) + * inclusive. + */ + async queryFilter(event, fromBlock, toBlock) { + if (fromBlock == null) { + fromBlock = 0; + } + if (toBlock == null) { + toBlock = "latest"; + } + const { addr, addrPromise } = getInternal(this); + const address = (addr ? addr : (await addrPromise)); + const { fragment, topics } = await getSubInfo(this, event); + const filter = { address, topics, fromBlock, toBlock }; + const provider = getProvider(this.runner); + errors_assert(provider, "contract runner does not have a provider", "UNSUPPORTED_OPERATION", { operation: "queryFilter" }); + return (await provider.getLogs(filter)).map((log) => { + let foundFragment = fragment; + if (foundFragment == null) { + try { + foundFragment = this.interface.getEvent(log.topics[0]); + } + catch (error) { } + } + if (foundFragment) { + try { + return new EventLog(log, this.interface, foundFragment); + } + catch (error) { + return new UndecodedEventLog(log, error); + } + } + return new Log(log, provider); + }); + } + /** + * Add an event %%listener%% for the %%event%%. + */ + async on(event, listener) { + const sub = await getSub(this, "on", event); + sub.listeners.push({ listener, once: false }); + sub.start(); + return this; + } + /** + * Add an event %%listener%% for the %%event%%, but remove the listener + * after it is fired once. + */ + async once(event, listener) { + const sub = await getSub(this, "once", event); + sub.listeners.push({ listener, once: true }); + sub.start(); + return this; + } + /** + * Emit an %%event%% calling all listeners with %%args%%. + * + * Resolves to ``true`` if any listeners were called. + */ + async emit(event, ...args) { + return await emit(this, event, args, null); + } + /** + * Resolves to the number of listeners of %%event%% or the total number + * of listeners if unspecified. + */ + async listenerCount(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return 0; + } + return sub.listeners.length; + } + const { subs } = getInternal(this); + let total = 0; + for (const { listeners } of subs.values()) { + total += listeners.length; + } + return total; + } + /** + * Resolves to the listeners subscribed to %%event%% or all listeners + * if unspecified. + */ + async listeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return []; + } + return sub.listeners.map(({ listener }) => listener); + } + const { subs } = getInternal(this); + let result = []; + for (const { listeners } of subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + /** + * Remove the %%listener%% from the listeners for %%event%% or remove + * all listeners if unspecified. + */ + async off(event, listener) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { + sub.listeners.splice(index, 1); + } + } + if (listener == null || sub.listeners.length === 0) { + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + return this; + } + /** + * Remove all the listeners for %%event%% or remove all listeners if + * unspecified. + */ + async removeAllListeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + else { + const { subs } = getInternal(this); + for (const { tag, stop } of subs.values()) { + stop(); + subs.delete(tag); + } + } + return this; + } + /** + * Alias for [on]. + */ + async addListener(event, listener) { + return await this.on(event, listener); + } + /** + * Alias for [off]. + */ + async removeListener(event, listener) { + return await this.off(event, listener); + } + /** + * Create a new Class for the %%abi%%. + */ + static buildClass(abi) { + class CustomContract extends BaseContract { + constructor(address, runner = null) { + super(address, abi, runner); + } + } + return CustomContract; + } + ; + /** + * Create a new BaseContract with a specified Interface. + */ + static from(target, abi, runner) { + if (runner == null) { + runner = null; + } + const contract = new this(target, abi, runner); + return contract; + } +} +function _ContractBase() { + return BaseContract; +} +/** + * A [[BaseContract]] with no type guards on its methods or events. + */ +class Contract extends _ContractBase() { +} +//# sourceMappingURL=contract.js.map +;// ./node_modules/ethers/lib.esm/utils/rlp-encode.js +//See: https://github.com/ethereum/wiki/wiki/RLP + +function arrayifyInteger(value) { + const result = []; + while (value) { + result.unshift(value & 0xff); + value >>= 8; + } + return result; +} +function _encode(object) { + if (Array.isArray(object)) { + let payload = []; + object.forEach(function (child) { + payload = payload.concat(_encode(child)); + }); + if (payload.length <= 55) { + payload.unshift(0xc0 + payload.length); + return payload; + } + const length = arrayifyInteger(payload.length); + length.unshift(0xf7 + length.length); + return length.concat(payload); + } + const data = Array.prototype.slice.call(data_getBytes(object, "object")); + if (data.length === 1 && data[0] <= 0x7f) { + return data; + } + else if (data.length <= 55) { + data.unshift(0x80 + data.length); + return data; + } + const length = arrayifyInteger(data.length); + length.unshift(0xb7 + length.length); + return length.concat(data); +} +const nibbles = "0123456789abcdef"; +/** + * Encodes %%object%% as an RLP-encoded [[DataHexString]]. + */ +function encodeRlp(object) { + let result = "0x"; + for (const v of _encode(object)) { + result += nibbles[v >> 4]; + result += nibbles[v & 0xf]; + } + return result; +} +//# sourceMappingURL=rlp-encode.js.map +;// ./node_modules/ethers/lib.esm/address/contract-address.js + + + +// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed +/** + * Returns the address that would result from a ``CREATE`` for %%tx%%. + * + * This can be used to compute the address a contract will be + * deployed to by an EOA when sending a deployment transaction (i.e. + * when the ``to`` address is ``null``). + * + * This can also be used to compute the address a contract will be + * deployed to by a contract, by using the contract's address as the + * ``to`` and the contract's nonce. + * + * @example + * from = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"; + * nonce = 5; + * + * getCreateAddress({ from, nonce }); + * //_result: + */ +function getCreateAddress(tx) { + const from = address_getAddress(tx.from); + const nonce = getBigInt(tx.nonce, "tx.nonce"); + let nonceHex = nonce.toString(16); + if (nonceHex === "0") { + nonceHex = "0x"; + } + else if (nonceHex.length % 2) { + nonceHex = "0x0" + nonceHex; + } + else { + nonceHex = "0x" + nonceHex; + } + return address_getAddress(data_dataSlice(keccak_keccak256(encodeRlp([from, nonceHex])), 12)); +} +/** + * Returns the address that would result from a ``CREATE2`` operation + * with the given %%from%%, %%salt%% and %%initCodeHash%%. + * + * To compute the %%initCodeHash%% from a contract's init code, use + * the [[keccak256]] function. + * + * For a quick overview and example of ``CREATE2``, see [[link-ricmoo-wisps]]. + * + * @example + * // The address of the contract + * from = "0x8ba1f109551bD432803012645Ac136ddd64DBA72" + * + * // The salt + * salt = id("HelloWorld") + * + * // The hash of the initCode + * initCode = "0x6394198df16000526103ff60206004601c335afa6040516060f3"; + * initCodeHash = keccak256(initCode) + * + * getCreate2Address(from, salt, initCodeHash) + * //_result: + */ +function getCreate2Address(_from, _salt, _initCodeHash) { + const from = getAddress(_from); + const salt = getBytes(_salt, "salt"); + const initCodeHash = getBytes(_initCodeHash, "initCodeHash"); + assertArgument(salt.length === 32, "salt must be 32 bytes", "salt", _salt); + assertArgument(initCodeHash.length === 32, "initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash); + return getAddress(dataSlice(keccak256(concat(["0xff", from, salt, initCodeHash])), 12)); +} +//# sourceMappingURL=contract-address.js.map +;// ./node_modules/ethers/lib.esm/contract/factory.js + + + + +// A = Arguments to the constructor +// I = Interface of deployed contracts +/** + * A **ContractFactory** is used to deploy a Contract to the blockchain. + */ +class ContractFactory { + /** + * The Contract Interface. + */ + interface; + /** + * The Contract deployment bytecode. Often called the initcode. + */ + bytecode; + /** + * The ContractRunner to deploy the Contract as. + */ + runner; + /** + * Create a new **ContractFactory** with %%abi%% and %%bytecode%%, + * optionally connected to %%runner%%. + * + * The %%bytecode%% may be the ``bytecode`` property within the + * standard Solidity JSON output. + */ + constructor(abi, bytecode, runner) { + const iface = Interface.from(abi); + // Dereference Solidity bytecode objects and allow a missing `0x`-prefix + if (bytecode instanceof Uint8Array) { + bytecode = data_hexlify(data_getBytes(bytecode)); + } + else { + if (typeof (bytecode) === "object") { + bytecode = bytecode.object; + } + if (!bytecode.startsWith("0x")) { + bytecode = "0x" + bytecode; + } + bytecode = data_hexlify(data_getBytes(bytecode)); + } + properties_defineProperties(this, { + bytecode, interface: iface, runner: (runner || null) + }); + } + attach(target) { + return new BaseContract(target, this.interface, this.runner); + } + /** + * Resolves to the transaction to deploy the contract, passing %%args%% + * into the constructor. + */ + async getDeployTransaction(...args) { + let overrides = {}; + const fragment = this.interface.deploy; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + if (fragment.inputs.length !== args.length) { + throw new Error("incorrect number of arguments to constructor"); + } + const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args); + const data = data_concat([this.bytecode, this.interface.encodeDeploy(resolvedArgs)]); + return Object.assign({}, overrides, { data }); + } + /** + * Resolves to the Contract deployed by passing %%args%% into the + * constructor. + * + * This will resolve to the Contract before it has been deployed to the + * network, so the [[BaseContract-waitForDeployment]] should be used before + * sending any transactions to it. + */ + async deploy(...args) { + const tx = await this.getDeployTransaction(...args); + errors_assert(this.runner && typeof (this.runner.sendTransaction) === "function", "factory runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + const sentTx = await this.runner.sendTransaction(tx); + const address = getCreateAddress(sentTx); + return new BaseContract(address, this.interface, this.runner, sentTx); + } + /** + * Return a new **ContractFactory** with the same ABI and bytecode, + * but connected to %%runner%%. + */ + connect(runner) { + return new ContractFactory(this.interface, this.bytecode, runner); + } + /** + * Create a new **ContractFactory** from the standard Solidity JSON output. + */ + static fromSolidity(output, runner) { + errors_assertArgument(output != null, "bad compiler output", "output", output); + if (typeof (output) === "string") { + output = JSON.parse(output); + } + const abi = output.abi; + let bytecode = ""; + if (output.bytecode) { + bytecode = output.bytecode; + } + else if (output.evm && output.evm.bytecode) { + bytecode = output.evm.bytecode; + } + return new this(abi, bytecode, runner); + } +} +//# sourceMappingURL=factory.js.map +;// ./node_modules/@tornado/contracts/dist/index.mjs + + +const _abi$1H = [ + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ERC1155InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC1155InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "idsLength", + type: "uint256" + }, + { + internalType: "uint256", + name: "valuesLength", + type: "uint256" + } + ], + name: "ERC1155InvalidArrayLength", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "ERC1155InvalidOperator", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC1155InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC1155InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "ERC1155MissingApprovalForAll", + type: "error" + } +]; +class IERC1155Errors__factory { + static createInterface() { + return new Interface(_abi$1H); + } + static connect(address, runner) { + return new Contract(address, _abi$1H, runner); + } +} +IERC1155Errors__factory.abi = _abi$1H; + +const _abi$1G = [ + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientAllowance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC20InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC20InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC20InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "ERC20InvalidSpender", + type: "error" + } +]; +class IERC20Errors__factory { + static createInterface() { + return new Interface(_abi$1G); + } + static connect(address, runner) { + return new Contract(address, _abi$1G, runner); + } +} +IERC20Errors__factory.abi = _abi$1G; + +const _abi$1F = [ + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "ERC721IncorrectOwner", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ERC721InsufficientApproval", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC721InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "ERC721InvalidOperator", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "ERC721InvalidOwner", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC721InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC721InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ERC721NonexistentToken", + type: "error" + } +]; +class IERC721Errors__factory { + static createInterface() { + return new Interface(_abi$1F); + } + static connect(address, runner) { + return new Contract(address, _abi$1F, runner); + } +} +IERC721Errors__factory.abi = _abi$1F; + +var index$T = /*#__PURE__*/Object.freeze({ + __proto__: null, + IERC1155Errors__factory: IERC1155Errors__factory, + IERC20Errors__factory: IERC20Errors__factory, + IERC721Errors__factory: IERC721Errors__factory +}); + +var index$S = /*#__PURE__*/Object.freeze({ + __proto__: null, + draftIerc6093Sol: index$T +}); + +const _abi$1E = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IERC20Metadata__factory { + static createInterface() { + return new Interface(_abi$1E); + } + static connect(address, runner) { + return new Contract(address, _abi$1E, runner); + } +} +IERC20Metadata__factory.abi = _abi$1E; + +var index$R = /*#__PURE__*/Object.freeze({ + __proto__: null, + IERC20Metadata__factory: IERC20Metadata__factory +}); + +const _abi$1D = [ + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientAllowance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC20InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC20InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC20InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "ERC20InvalidSpender", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +let ERC20__factory$1 = class ERC20__factory { + static createInterface() { + return new Interface(_abi$1D); + } + static connect(address, runner) { + return new Contract(address, _abi$1D, runner); + } +}; +ERC20__factory$1.abi = _abi$1D; + +const _abi$1C = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +let IERC20__factory$2 = class IERC20__factory { + static createInterface() { + return new Interface(_abi$1C); + } + static connect(address, runner) { + return new Contract(address, _abi$1C, runner); + } +}; +IERC20__factory$2.abi = _abi$1C; + +var index$Q = /*#__PURE__*/Object.freeze({ + __proto__: null, + ERC20__factory: ERC20__factory$1, + IERC20__factory: IERC20__factory$2, + extensions: index$R +}); + +var index$P = /*#__PURE__*/Object.freeze({ + __proto__: null, + erc20: index$Q +}); + +var index$O = /*#__PURE__*/Object.freeze({ + __proto__: null, + interfaces: index$S, + token: index$P +}); + +const _abi$1B = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class Ownable__factory { + static createInterface() { + return new Interface(_abi$1B); + } + static connect(address, runner) { + return new Contract(address, _abi$1B, runner); + } +} +Ownable__factory.abi = _abi$1B; + +var index$N = /*#__PURE__*/Object.freeze({ + __proto__: null, + Ownable__factory: Ownable__factory +}); + +const _abi$1A = [ + { + stateMutability: "payable", + type: "fallback" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +class Proxy__factory { + static createInterface() { + return new Interface(_abi$1A); + } + static connect(address, runner) { + return new Contract(address, _abi$1A, runner); + } +} +Proxy__factory.abi = _abi$1A; + +const _abi$1z = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "address", + name: "_admin", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$V = "0x60806040526040516108dc3803806108dc8339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508290506100ee826101bf565b8051156101a6576000826001600160a01b0316826040518082805190602001908083835b602083106101315780518252601f199092019160209182019101610112565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610191576040519150601f19603f3d011682016040523d82523d6000602084013e610196565b606091505b50509050806101a457600080fd5b505b506101ae9050565b6101b782610231565b50505061025b565b6101d28161025560201b6103b41760201c565b61020d5760405162461bcd60e51b81526004018080602001828103825260368152602001806108a66036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61063c8061026a6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a815260200180610555603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260428152602001806105c56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603681526020018061058f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212200bf5c74f32000c92994fb0de053047d19f9c526eb1b1953df8bcb7d7e0df8d2864736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$V = (xs) => xs.length > 1; +class TransparentUpgradeableProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$V(args)) { + super(...args); + } else { + super(_abi$1z, _bytecode$V, args[0]); + } + } + getDeployTransaction(_logic, _admin, _data, overrides) { + return super.getDeployTransaction(_logic, _admin, _data, overrides || {}); + } + deploy(_logic, _admin, _data, overrides) { + return super.deploy(_logic, _admin, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1z); + } + static connect(address, runner) { + return new Contract( + address, + _abi$1z, + runner + ); + } +} +TransparentUpgradeableProxy__factory.bytecode = _bytecode$V; +TransparentUpgradeableProxy__factory.abi = _abi$1z; + +const _abi$1y = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$U = "0x60806040526040516103123803806103128339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ec826101ab565b8051156101a4576000826001600160a01b0316826040518082805190602001908083835b6020831061012f5780518252601f199092019160209182019101610110565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461018f576040519150601f19603f3d011682016040523d82523d6000602084013e610194565b606091505b50509050806101a257600080fd5b505b5050610223565b6101be8161021d60201b6100271760201c565b6101f95760405162461bcd60e51b81526004018080602001828103825260368152602001806102dc6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b151590565b60ab806102316000396000f3fe608060405236601057600e6013565b005b600e5b60196025565b60256021602d565b6052565b565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156070573d6000f35b3d6000fdfea2646970667358221220621b7042bfb847b4073a3c58bdbea5295ce2e761b4e2307ca010caaac996d80c64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$U = (xs) => xs.length > 1; +class UpgradeableProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$U(args)) { + super(...args); + } else { + super(_abi$1y, _bytecode$U, args[0]); + } + } + getDeployTransaction(_logic, _data, overrides) { + return super.getDeployTransaction(_logic, _data, overrides || {}); + } + deploy(_logic, _data, overrides) { + return super.deploy(_logic, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1y); + } + static connect(address, runner) { + return new Contract(address, _abi$1y, runner); + } +} +UpgradeableProxy__factory.bytecode = _bytecode$U; +UpgradeableProxy__factory.abi = _abi$1y; + +var index$M = /*#__PURE__*/Object.freeze({ + __proto__: null, + Proxy__factory: Proxy__factory, + TransparentUpgradeableProxy__factory: TransparentUpgradeableProxy__factory, + UpgradeableProxy__factory: UpgradeableProxy__factory +}); + +const _abi$1x = [ + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "symbol", + type: "string" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$T = "0x608060405234801561001057600080fd5b5060405162000c6238038062000c628339818101604052604081101561003557600080fd5b810190808051604051939291908464010000000082111561005557600080fd5b90830190602082018581111561006a57600080fd5b825164010000000081118282018810171561008457600080fd5b82525081516020918201929091019080838360005b838110156100b1578181015183820152602001610099565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b506040526020018051604051939291908464010000000082111561010157600080fd5b90830190602082018581111561011657600080fd5b825164010000000081118282018810171561013057600080fd5b82525081516020918201929091019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b50604052505082516101a4915060039060208501906101cd565b5080516101b89060049060208401906101cd565b50506005805460ff1916601217905550610260565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061020e57805160ff191683800117855561023b565b8280016001018555821561023b579182015b8281111561023b578251825591602001919060010190610220565b5061024792915061024b565b5090565b5b80821115610247576000815560010161024c565b6109f280620002706000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103f9565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610402565b6101736004803603602081101561021b57600080fd5b50356001600160a01b0316610450565b6100b661046b565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104cc565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610534565b610173600480360360408110156102a157600080fd5b506001600160a01b0381358116916020013516610548565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610573565b8484610577565b50600192915050565b60025490565b600061037f848484610663565b6103ef8461038b610573565b6103ea85604051806060016040528060288152602001610927602891396001600160a01b038a166000908152600160205260408120906103c9610573565b6001600160a01b0316815260208101919091526040016000205491906107be565b610577565b5060019392505050565b60055460ff1690565b600061036361040f610573565b846103ea8560016000610420610573565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610855565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104d9610573565b846103ea856040518060600160405280602581526020016109986025913960016000610503610573565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906107be565b6000610363610541610573565b8484610663565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105bc5760405162461bcd60e51b81526004018080602001828103825260248152602001806109746024913960400191505060405180910390fd5b6001600160a01b0382166106015760405162461bcd60e51b81526004018080602001828103825260228152602001806108df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106a85760405162461bcd60e51b815260040180806020018281038252602581526020018061094f6025913960400191505060405180910390fd5b6001600160a01b0382166106ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806108bc6023913960400191505060405180910390fd5b6106f88383836108b6565b61073581604051806060016040528060268152602001610901602691396001600160a01b03861660009081526020819052604090205491906107be565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107649082610855565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561084d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108125781810151838201526020016107fa565b50505050905090810190601f16801561083f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220347718b9db0288208ab5957df73278c6f781963df0e13918151971217fc2827964736f6c634300060c0033"; +const isSuperArgs$T = (xs) => xs.length > 1; +class ERC20__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$T(args)) { + super(...args); + } else { + super(_abi$1x, _bytecode$T, args[0]); + } + } + getDeployTransaction(name, symbol, overrides) { + return super.getDeployTransaction(name, symbol, overrides || {}); + } + deploy(name, symbol, overrides) { + return super.deploy(name, symbol, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1x); + } + static connect(address, runner) { + return new Contract(address, _abi$1x, runner); + } +} +ERC20__factory.bytecode = _bytecode$T; +ERC20__factory.abi = _abi$1x; + +const _abi$1w = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burnFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class ERC20Burnable__factory { + static createInterface() { + return new Interface(_abi$1w); + } + static connect(address, runner) { + return new Contract(address, _abi$1w, runner); + } +} +ERC20Burnable__factory.abi = _abi$1w; + +const _abi$1v = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +let IERC20__factory$1 = class IERC20__factory { + static createInterface() { + return new Interface(_abi$1v); + } + static connect(address, runner) { + return new Contract(address, _abi$1v, runner); + } +}; +IERC20__factory$1.abi = _abi$1v; + +var index$L = /*#__PURE__*/Object.freeze({ + __proto__: null, + ERC20Burnable__factory: ERC20Burnable__factory, + ERC20__factory: ERC20__factory, + IERC20__factory: IERC20__factory$1 +}); + +var index$K = /*#__PURE__*/Object.freeze({ + __proto__: null, + erc20: index$L +}); + +const _abi$1u = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Paused", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Unpaused", + type: "event" + }, + { + inputs: [], + name: "paused", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; +class Pausable__factory { + static createInterface() { + return new Interface(_abi$1u); + } + static connect(address, runner) { + return new Contract(address, _abi$1u, runner); + } +} +Pausable__factory.abi = _abi$1u; + +var index$J = /*#__PURE__*/Object.freeze({ + __proto__: null, + Pausable__factory: Pausable__factory +}); + +var index$I = /*#__PURE__*/Object.freeze({ + __proto__: null, + access: index$N, + proxy: index$M, + token: index$K, + utils: index$J +}); + +var index$H = /*#__PURE__*/Object.freeze({ + __proto__: null, + contracts: index$O, + contractsV3: index$I +}); + +const _abi$1t = [ + { + inputs: [ + { + internalType: "uint256", + name: "in_xL", + type: "uint256" + }, + { + internalType: "uint256", + name: "in_xR", + type: "uint256" + } + ], + name: "MiMCSponge", + outputs: [ + { + internalType: "uint256", + name: "xL", + type: "uint256" + }, + { + internalType: "uint256", + name: "xR", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + } +]; +class IHasher__factory { + static createInterface() { + return new Interface(_abi$1t); + } + static connect(address, runner) { + return new Contract(address, _abi$1t, runner); + } +} +IHasher__factory.abi = _abi$1t; + +const _abi$1s = [ + { + inputs: [ + { + internalType: "uint32", + name: "_levels", + type: "uint32" + }, + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$S = "0x60c0604052600380546001600160401b031916905534801561002057600080fd5b50604051610a10380380610a1083398101604081905261003f91610385565b60008263ffffffff16116100a65760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106100fc5760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015260640161009d565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101845763ffffffff8116600090815260016020908152604080832085905590829052902082905561017a8383806101b8565b9150600101610137565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55506103f89050565b60006000805160206109f083398151915283106102175760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161009d565b6000805160206109f0833981519152821061027e5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161009d565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f191906103d4565b90925090506000805160206109f083398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a91906103d4565b509695505050505050565b6000806040838503121561039857600080fd5b825163ffffffff811681146103ac57600080fd5b60208401519092506001600160a01b03811681146103c957600080fd5b809150509250929050565b600080604083850312156103e757600080fd5b505080516020909101519092909150565b60805160a0516105d361041d60003960006101010152600061020f01526105d36000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063c2b40ae41161008c578063ec73295911610066578063ec732959146101e3578063ed33639f1461020a578063f178e47c14610249578063fc7e9c6f1461026957600080fd5b8063c2b40ae41461019b578063cd87a3b4146101bb578063e8295588146101c357600080fd5b8063414a37ba146100d45780634ecf518b146100fc5780636d9833e3146101385780638ea3099e1461015b57806390eeb02b1461016e578063ba70f7571461017e575b600080fd5b6100e960008051602061057e83398151915281565b6040519081526020015b60405180910390f35b6101237f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016100f3565b61014b6101463660046104d1565b610281565b60405190151581526020016100f3565b6100e96101693660046104ea565b6102ff565b6003546101239063ffffffff1681565b60035463ffffffff166000908152600260205260409020546100e9565b6100e96101a93660046104d1565b60026020526000908152604090205481565b610123601e81565b6100e96101d13660046104d1565b60016020526000908152604090205481565b6100e97f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6102317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100f3565b6100e96102573660046104d1565b60006020819052908152604090205481565b60035461012390640100000000900463ffffffff1681565b600081810361029257506000919050565b60035463ffffffff16805b63ffffffff811660009081526002602052604090205484036102c3575060019392505050565b8063ffffffff166000036102d55750601e5b806102df8161052b565b9150508163ffffffff168163ffffffff160361029d575060009392505050565b600060008051602061057e83398151915283106103635760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064015b60405180910390fd5b60008051602061057e83398151915282106103ca5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161035a565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d9190610559565b909250905060008051602061057e83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190610559565b509695505050505050565b6000602082840312156104e357600080fd5b5035919050565b6000806000606084860312156104ff57600080fd5b83356001600160a01b038116811461051657600080fd5b95602085013595506040909401359392505050565b600063ffffffff82168061054f57634e487b7160e01b600052601160045260246000fd5b6000190192915050565b6000806040838503121561056c57600080fd5b50508051602090910151909290915056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208761f09aabb074ee2c2a755f38291cbc57ea6dac47bc37dfa948986c4481869c64736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; +const isSuperArgs$S = (xs) => xs.length > 1; +class MerkleTreeWithHistory__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$S(args)) { + super(...args); + } else { + super(_abi$1s, _bytecode$S, args[0]); + } + } + getDeployTransaction(_levels, _hasher, overrides) { + return super.getDeployTransaction(_levels, _hasher, overrides || {}); + } + deploy(_levels, _hasher, overrides) { + return super.deploy(_levels, _hasher, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1s); + } + static connect(address, runner) { + return new Contract( + address, + _abi$1s, + runner + ); + } +} +MerkleTreeWithHistory__factory.bytecode = _bytecode$S; +MerkleTreeWithHistory__factory.abi = _abi$1s; + +var index$G = /*#__PURE__*/Object.freeze({ + __proto__: null, + IHasher__factory: IHasher__factory, + MerkleTreeWithHistory__factory: MerkleTreeWithHistory__factory +}); + +const _abi$1r = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [], + name: "_totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "who", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class ERC20Basic__factory { + static createInterface() { + return new Interface(_abi$1r); + } + static connect(address, runner) { + return new Contract(address, _abi$1r, runner); + } +} +ERC20Basic__factory.abi = _abi$1r; + +const _abi$1q = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [], + name: "_totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "who", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IUSDT__factory { + static createInterface() { + return new Interface(_abi$1q); + } + static connect(address, runner) { + return new Contract(address, _abi$1q, runner); + } +} +IUSDT__factory.abi = _abi$1q; + +var index$F = /*#__PURE__*/Object.freeze({ + __proto__: null, + ERC20Basic__factory: ERC20Basic__factory, + IUSDT__factory: IUSDT__factory +}); + +const _abi$1p = [ + { + stateMutability: "nonpayable", + type: "fallback" + } +]; +const _bytecode$R = "0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea264697066735822122034c2432feedadd0f30a6f66555381c20922b6ab7c9b3ede4c27896b23e802a8264736f6c63430008190033"; +const isSuperArgs$R = (xs) => xs.length > 1; +class BadRecipient__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$R(args)) { + super(...args); + } else { + super(_abi$1p, _bytecode$R, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1p); + } + static connect(address, runner) { + return new Contract(address, _abi$1p, runner); + } +} +BadRecipient__factory.bytecode = _bytecode$R; +BadRecipient__factory.abi = _abi$1p; + +const _abi$1o = [ + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientAllowance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC20InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC20InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC20InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "ERC20InvalidSpender", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$Q = "0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610113565b50600461006a8282610113565b5050506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010e576000816000526020600020601f850160051c810160208610156100eb5750805b601f850160051c820191505b8181101561010a578281556001016100f7565b5050505b505050565b81516001600160401b0381111561012c5761012c610072565b6101408161013a8454610088565b846100c2565b602080601f831160018114610175576000841561015d5750858301515b600019600386901b1c1916600185901b17855561010a565b600085815260208120601f198616915b828110156101a457888601518255948401946001909101908401610185565b50858210156101c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610785806101e16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea264697066735822122058942fcc650d3670455590fabbf6c5726b3ae7df7b57e75bc02cb2c66259d45b64736f6c63430008190033"; +const isSuperArgs$Q = (xs) => xs.length > 1; +class ERC20Mock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$Q(args)) { + super(...args); + } else { + super(_abi$1o, _bytecode$Q, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1o); + } + static connect(address, runner) { + return new Contract(address, _abi$1o, runner); + } +} +ERC20Mock__factory.bytecode = _bytecode$Q; +ERC20Mock__factory.abi = _abi$1o; + +const _abi$1n = [ + { + inputs: [ + { + internalType: "bytes", + name: "_initCode", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_salt", + type: "bytes32" + } + ], + name: "deploy", + outputs: [ + { + internalType: "address payable", + name: "createdContract", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +let IDeployer__factory$1 = class IDeployer__factory { + static createInterface() { + return new Interface(_abi$1n); + } + static connect(address, runner) { + return new Contract(address, _abi$1n, runner); + } +}; +IDeployer__factory$1.abi = _abi$1n; + +const _abi$1m = [ + { + inputs: [ + { + internalType: "uint32", + name: "_treeLevels", + type: "uint32" + }, + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_leaf", + type: "bytes32" + } + ], + name: "insert", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$P = "0x60c0604052600380546001600160401b031916905534801561002057600080fd5b50604051610e3c380380610e3c83398101604081905261003f91610389565b818160008263ffffffff16116100a85760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106100fe5760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015260640161009f565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101865763ffffffff8116600090815260016020908152604080832085905590829052902082905561017c8383806101bc565b9150600101610139565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55506103fc92505050565b6000600080516020610e1c833981519152831061021b5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161009f565b600080516020610e1c83398151915282106102825760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161009f565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f591906103d8565b9092509050600080516020610e1c83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa15801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e91906103d8565b509695505050505050565b6000806040838503121561039c57600080fd5b825163ffffffff811681146103b057600080fd5b60208401519092506001600160a01b03811681146103cd57600080fd5b809150509250929050565b600080604083850312156103eb57600080fd5b505080516020909101519092909150565b60805160a0516109e6610436600039600081816101310152818161052701526105c901526000818161023f015261066101526109e66000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063c2b40ae41161008c578063ec73295911610066578063ec73295914610213578063ed33639f1461023a578063f178e47c14610279578063fc7e9c6f1461029957600080fd5b8063c2b40ae4146101cb578063cd87a3b4146101eb578063e8295588146101f357600080fd5b80636d9833e3116100c85780636d9833e3146101685780638ea3099e1461018b57806390eeb02b1461019e578063ba70f757146101ae57600080fd5b80632d287e43146100ef578063414a37ba146101045780634ecf518b1461012c575b600080fd5b6101026100fd36600461072c565b6102b1565b005b61011960008051602061099183398151915281565b6040519081526020015b60405180910390f35b6101537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610123565b61017b61017636600461072c565b6102be565b6040519015158152602001610123565b610119610199366004610745565b61033c565b6003546101539063ffffffff1681565b60035463ffffffff16600090815260026020526040902054610119565b6101196101d936600461072c565b60026020526000908152604090205481565b610153601e81565b61011961020136600461072c565b60016020526000908152604090205481565b6101197f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6102617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610123565b61011961028736600461072c565b60006020819052908152604090205481565b60035461015390640100000000900463ffffffff1681565b6102ba8161050e565b5050565b60008181036102cf57506000919050565b60035463ffffffff16805b63ffffffff81166000908152600260205260409020548403610300575060019392505050565b8063ffffffff166000036103125750601e5b8061031c8161079c565b9150508163ffffffff168163ffffffff16036102da575060009392505050565b600060008051602061099183398151915283106103a05760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064015b60405180910390fd5b60008051602061099183398151915282106104075760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610397565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a91906107bc565b909250905060008051602061099183398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156104df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050391906107bc565b509695505050505050565b600354600090640100000000900463ffffffff1661054d7f00000000000000000000000000000000000000000000000000000000000000006002610909565b63ffffffff168163ffffffff16036105c05760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610397565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561069e57610606600286610926565b63ffffffff166000036106405763ffffffff811660009081526001602090815260408083205491839052909120859055849350915061065c565b63ffffffff811660009081526020819052604090205492508391505b6106877f0000000000000000000000000000000000000000000000000000000000000000848461033c565b9350610694600286610949565b94506001016105c7565b50600354600090601e906106b99063ffffffff16600161096c565b6106c39190610926565b6003805463ffffffff191663ffffffff8316908117909155600090815260026020526040902085905590506106f986600161096c565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b60006020828403121561073e57600080fd5b5035919050565b60008060006060848603121561075a57600080fd5b83356001600160a01b038116811461077157600080fd5b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806107b2576107b2610786565b6000190192915050565b600080604083850312156107cf57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b600181815b80851115610833578163ffffffff0482111561081957610819610786565b8085161561082657918102915b93841c93908002906107fb565b509250929050565b60008261084a57506001610903565b8161085757506000610903565b816001811461086d5760028114610877576108a8565b6001915050610903565b60ff84111561088857610888610786565b6001841b915063ffffffff8211156108a2576108a2610786565b50610903565b5060208310610133831016604e8410600b84101617156108df575081810a63ffffffff8111156108da576108da610786565b610903565b6108e983836107f6565b8063ffffffff048211156108ff576108ff610786565b0290505b92915050565b600063ffffffff61091e81851682851661083b565b949350505050565b600063ffffffff8084168061093d5761093d6107e0565b92169190910692915050565b600063ffffffff80841680610960576109606107e0565b92169190910492915050565b63ffffffff81811683821601908082111561098957610989610786565b509291505056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220157f8209ab2f77037d0684fb5023c7036cedb727123539b4e3a1f03c335900f264736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; +const isSuperArgs$P = (xs) => xs.length > 1; +class MerkleTreeWithHistoryMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$P(args)) { + super(...args); + } else { + super(_abi$1m, _bytecode$P, args[0]); + } + } + getDeployTransaction(_treeLevels, _hasher, overrides) { + return super.getDeployTransaction(_treeLevels, _hasher, overrides || {}); + } + deploy(_treeLevels, _hasher, overrides) { + return super.deploy(_treeLevels, _hasher, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1m); + } + static connect(address, runner) { + return new Contract( + address, + _abi$1m, + runner + ); + } +} +MerkleTreeWithHistoryMock__factory.bytecode = _bytecode$P; +MerkleTreeWithHistoryMock__factory.abi = _abi$1m; + +var index$E = /*#__PURE__*/Object.freeze({ + __proto__: null, + BadRecipient__factory: BadRecipient__factory, + ERC20Mock__factory: ERC20Mock__factory, + IDeployer__factory: IDeployer__factory$1, + MerkleTreeWithHistoryMock__factory: MerkleTreeWithHistoryMock__factory, + iusdtSol: index$F +}); + +const _abi$1l = [ + { + inputs: [ + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "uint256[6]", + name: "_input", + type: "uint256[6]" + } + ], + name: "verifyProof", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IVerifier__factory { + static createInterface() { + return new Interface(_abi$1l); + } + static connect(address, runner) { + return new Contract(address, _abi$1l, runner); + } +} +IVerifier__factory.abi = _abi$1l; + +const _abi$1k = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "commitment", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint32", + name: "leafIndex", + type: "uint32" + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "fee", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "commitments", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + } + ], + name: "isSpent", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_nullifierHashes", + type: "bytes32[]" + } + ], + name: "isSpentArray", + outputs: [ + { + internalType: "bool[]", + name: "spent", + type: "bool[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "nullifierHashes", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "verifier", + outputs: [ + { + internalType: "contract IVerifier", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +class Tornado__factory { + static createInterface() { + return new Interface(_abi$1k); + } + static connect(address, runner) { + return new Contract(address, _abi$1k, runner); + } +} +Tornado__factory.abi = _abi$1k; + +var index$D = /*#__PURE__*/Object.freeze({ + __proto__: null, + IVerifier__factory: IVerifier__factory, + Tornado__factory: Tornado__factory +}); + +const _abi$1j = [ + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "recipient", + type: "address" + }, + { + internalType: "address payable", + name: "relayer", + type: "address" + }, + { + internalType: "uint256", + name: "fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + } +]; +let ITornadoInstance__factory$1 = class ITornadoInstance__factory { + static createInterface() { + return new Interface(_abi$1j); + } + static connect(address, runner) { + return new Contract(address, _abi$1j, runner); + } +}; +ITornadoInstance__factory$1.abi = _abi$1j; + +const _abi$1i = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "bytes", + name: "encryptedNote", + type: "bytes" + } + ], + name: "EncryptedNote", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "_encryptedNotes", + type: "bytes[]" + } + ], + name: "backupNotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_tornado", + type: "address" + }, + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + }, + { + internalType: "bytes", + name: "_encryptedNote", + type: "bytes" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_tornado", + type: "address" + }, + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + } +]; +const _bytecode$O = "0x608060405234801561001057600080fd5b506104f6806100206000396000f3fe6080604052600436106100345760003560e01c806313d98d13146100395780636485ba2a1461004e578063b438689f1461006e575b600080fd5b61004c6100473660046102c7565b610081565b005b34801561005a57600080fd5b5061004c610069366004610258565b61012a565b61004c61007c366004610321565b610198565b60405163b214faa560e01b81526001600160a01b0385169063b214faa59034906100af9087906004016103ec565b6000604051808303818588803b1580156100c857600080fd5b505af11580156100dc573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008838360405161011c9291906103f5565b60405180910390a250505050565b60005b8181101561019357337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061016357fe5b90506020028101906101759190610463565b6040516101839291906103f5565b60405180910390a260010161012d565b505050565b6040516310d056db60e11b81526001600160a01b038a16906321a0adb69034906101d4908c908c908c908c908c908c908c908c90600401610411565b6000604051808303818588803b1580156101ed57600080fd5b505af1158015610201573d6000803e3d6000fd5b5050505050505050505050505050565b60008083601f840112610222578182fd5b50813567ffffffffffffffff811115610239578182fd5b60208301915083602082850101111561025157600080fd5b9250929050565b6000806020838503121561026a578182fd5b823567ffffffffffffffff80821115610281578384fd5b818501915085601f830112610294578384fd5b8135818111156102a2578485fd5b86602080830285010111156102b5578485fd5b60209290920196919550909350505050565b600080600080606085870312156102dc578182fd5b84356102e7816104a8565b935060208501359250604085013567ffffffffffffffff811115610309578283fd5b61031587828801610211565b95989497509550505050565b60008060008060008060008060006101008a8c03121561033f578485fd5b893561034a816104a8565b985060208a013567ffffffffffffffff811115610365578586fd5b6103718c828d01610211565b90995097505060408a0135955060608a0135945060808a0135610393816104a8565b935060a08a01356103a3816104a8565b8093505060c08a0135915060e08a013590509295985092959850929598565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b90815260200190565b6000602082526104096020830184866103c2565b949350505050565b600060e0825261042560e083018a8c6103c2565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b6000808335601e19843603018112610479578283fd5b83018035915067ffffffffffffffff821115610493578283fd5b60200191503681900382131561025157600080fd5b6001600160a01b03811681146104bd57600080fd5b5056fea2646970667358221220a833625c5e7cc02dff95b380fd1e6d47b08cffea90c70cfe6739960deee47b8364736f6c634300060c0033"; +const isSuperArgs$O = (xs) => xs.length > 1; +class TornadoProxyLight__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$O(args)) { + super(...args); + } else { + super(_abi$1i, _bytecode$O, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1i); + } + static connect(address, runner) { + return new Contract(address, _abi$1i, runner); + } +} +TornadoProxyLight__factory.bytecode = _bytecode$O; +TornadoProxyLight__factory.abi = _abi$1i; + +var index$C = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoInstance__factory: ITornadoInstance__factory$1, + TornadoProxyLight__factory: TornadoProxyLight__factory +}); + +const _abi$1h = [ + { + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IERC20__factory { + static createInterface() { + return new Interface(_abi$1h); + } + static connect(address, runner) { + return new Contract(address, _abi$1h, runner); + } +} +IERC20__factory.abi = _abi$1h; + +var index$B = /*#__PURE__*/Object.freeze({ + __proto__: null, + IERC20__factory: IERC20__factory +}); + +const _abi$1g = [ + { + inputs: [ + { + internalType: "contract IVerifier", + name: "_verifier", + type: "address" + }, + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "uint256", + name: "_denomination", + type: "uint256" + }, + { + internalType: "uint32", + name: "_merkleTreeHeight", + type: "uint32" + }, + { + internalType: "contract IERC20", + name: "_token", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "commitment", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint32", + name: "leafIndex", + type: "uint32" + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "fee", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "commitments", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + } + ], + name: "isSpent", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_nullifierHashes", + type: "bytes32[]" + } + ], + name: "isSpentArray", + outputs: [ + { + internalType: "bool[]", + name: "spent", + type: "bool[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "nullifierHashes", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "verifier", + outputs: [ + { + internalType: "contract IVerifier", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$N = "0x610120604052600380546001600160401b031916905534801561002157600080fd5b50604051611db8380380611db883398101604081905261004091610420565b84848484808360008263ffffffff16116100ad5760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101035760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a4565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff16101561018b5763ffffffff8116600090815260016020908152604080832085905590829052902082905561018183838061023b565b915060010161013e565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816102195760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a4565b506001600160a01b0392831660c05260e052501661010052506104b892505050565b6000600080516020611d98833981519152831061029a5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a4565b600080516020611d9883398151915282106103015760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a4565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103749190610494565b9092509050600080516020611d9883398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd9190610494565b509695505050505050565b6001600160a01b038116811461041d57600080fd5b50565b600080600080600060a0868803121561043857600080fd5b855161044381610408565b602087015190955061045481610408565b60408701516060880151919550935063ffffffff8116811461047557600080fd5b608087015190925061048681610408565b809150509295509295909350565b600080604083850312156104a757600080fd5b505080516020909101519092909150565b60805160a05160c05160e05161010051611856610542600039600081816104ca01528181610cfa01528181610d34015261108e0152600081816102bb0152818161056f01528181610ccc01526110b20152600081816101a601526106d801526000818161022201528181610e150152610eb70152600081816104690152610f4f01526118566000f3fe6080604052600436106101355760003560e01c8063b214faa5116100ab578063e82955881161006f578063e8295588146103f6578063ec73295914610423578063ed33639f14610457578063f178e47c1461048b578063fc0c546a146104b8578063fc7e9c6f146104ec57600080fd5b8063b214faa514610347578063ba70f7571461035a578063c2b40ae414610384578063cd87a3b4146103b1578063e5285dcc146103c657600080fd5b80636d9833e3116100fd5780636d9833e314610259578063839df945146102795780638bca6d16146102a95780638ea3099e146102dd57806390eeb02b146102fd5780639fa12d0b1461031a57600080fd5b806317cc915c1461013a57806321a0adb61461017f5780632b7ac3f314610194578063414a37ba146101e05780634ecf518b14610210575b600080fd5b34801561014657600080fd5b5061016a61015536600461131d565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61019261018d36600461135e565b610511565b005b3480156101a057600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610176565b3480156101ec57600080fd5b5061020260008051602061180183398151915281565b604051908152602001610176565b34801561021c57600080fd5b506102447f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610176565b34801561026557600080fd5b5061016a61027436600461131d565b61081c565b34801561028557600080fd5b5061016a61029436600461131d565b60066020526000908152604090205460ff1681565b3480156102b557600080fd5b506102027f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e957600080fd5b506102026102f8366004611414565b61089a565b34801561030957600080fd5b506003546102449063ffffffff1681565b34801561032657600080fd5b5061033a610335366004611449565b610a67565b60405161017691906114be565b61019261035536600461131d565b610b23565b34801561036657600080fd5b5060035463ffffffff16600090815260026020526040902054610202565b34801561039057600080fd5b5061020261039f36600461131d565b60026020526000908152604090205481565b3480156103bd57600080fd5b50610244601e81565b3480156103d257600080fd5b5061016a6103e136600461131d565b60009081526005602052604090205460ff1690565b34801561040257600080fd5b5061020261041136600461131d565b60016020526000908152604090205481565b34801561042f57600080fd5b506102027f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561046357600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b506102026104a636600461131d565b60006020819052908152604090205481565b3480156104c457600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b5060035461024490640100000000900463ffffffff1681565b6002600454036105685760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156105dd5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015260640161055f565b60008581526005602052604090205460ff161561063c5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015260640161055f565b6106458661081c565b6106915760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015260640161055f565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f991610711918c918c91600401611504565b6020604051808303816000875af1158015610730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107549190611562565b6107995760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015260640161055f565b6000858152600560205260409020805460ff191660011790556107be84848484610c5a565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b600081810361082d57506000919050565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054840361085e575060019392505050565b8063ffffffff166000036108705750601e5b8061087a816115a1565b9150508163ffffffff168163ffffffff1603610838575060009392505050565b600060008051602061180183398151915283106108f95760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161055f565b60008051602061180183398151915282106109605760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161055f565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906115c1565b909250905060008051602061180183398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5c91906115c1565b509695505050505050565b60608167ffffffffffffffff811115610a8257610a826115fb565b604051908082528060200260200182016040528015610aab578160200160208202803683370190505b50905060005b82811015610b1c57610aea848483818110610ace57610ace611611565b9050602002013560009081526005602052604090205460ff1690565b15610b14576001828281518110610b0357610b03611611565b911515602092830291909101909101525b600101610ab1565b5092915050565b600260045403610b755760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055f565b600260045560008181526006602052604090205460ff1615610be35760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b606482015260840161055f565b6000610bee82610dfc565b6000838152600660205260409020805460ff191660011790559050610c1161101a565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b803414610cc25760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b606482015260840161055f565b610d2184610cf0847f0000000000000000000000000000000000000000000000000000000000000000611627565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906110d8565b8115610d5b57610d5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684846110d8565b8015610df6576000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050905080610df4576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015610df2573d6000803e3d6000fd5b505b505b50505050565b600354600090640100000000900463ffffffff16610e3b7f00000000000000000000000000000000000000000000000000000000000000006002611751565b63ffffffff168163ffffffff1603610eae5760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b606482015260840161055f565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015610f8c57610ef460028661176e565b63ffffffff16600003610f2e5763ffffffff8116600090815260016020908152604080832054918390529091208590558493509150610f4a565b63ffffffff811660009081526020819052604090205492508391505b610f757f0000000000000000000000000000000000000000000000000000000000000000848461089a565b9350610f82600286611791565b9450600101610eb5565b50600354600090601e90610fa79063ffffffff1660016117b4565b610fb1919061176e565b6003805463ffffffff191663ffffffff831690811790915560009081526002602052604090208590559050610fe78660016117b4565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b34156110815760405162461bcd60e51b815260206004820152603060248201527f4554482076616c756520697320737570706f73656420746f206265203020666f60448201526f7220455243323020696e7374616e636560801b606482015260840161055f565b6110d66001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f00000000000000000000000000000000000000000000000000000000000000006111f1565b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161113491906117d1565b6000604051808303816000865af19150503d8060008114611171576040519150601f19603f3d011682016040523d82523d6000602084013e611176565b606091505b50915091508161118857805181602001fd5b805115806111a55750808060200190518101906111a59190611562565b610df45760405162461bcd60e51b815260206004820152601e60248201527f5361666545524332303a20736166655472616e73666572206661696c65640000604482015260640161055f565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161125591906117d1565b6000604051808303816000865af19150503d8060008114611292576040519150601f19603f3d011682016040523d82523d6000602084013e611297565b606091505b5091509150816112a957805181602001fd5b805115806112c65750808060200190518101906112c69190611562565b610df25760405162461bcd60e51b815260206004820152602260248201527f5361666545524332303a20736166655472616e7366657246726f6d206661696c604482015261195960f21b606482015260840161055f565b60006020828403121561132f57600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b50565b803561135981611336565b919050565b60008060008060008060008060e0898b03121561137a57600080fd5b883567ffffffffffffffff8082111561139257600080fd5b818b0191508b601f8301126113a657600080fd5b8135818111156113b557600080fd5b8c60208285010111156113c757600080fd5b60209283019a509850508901359550604089013594506113e960608a0161134e565b93506113f760808a0161134e565b925060a0890135915060c089013590509295985092959890939650565b60008060006060848603121561142957600080fd5b833561143481611336565b95602085013595506040909401359392505050565b6000806020838503121561145c57600080fd5b823567ffffffffffffffff8082111561147457600080fd5b818501915085601f83011261148857600080fd5b81358181111561149757600080fd5b8660208260051b85010111156114ac57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156114f85783511515835292840192918401916001016114da565b50909695505050505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b600681101561155657815183529183019190830190600101611539565b50505050949350505050565b60006020828403121561157457600080fd5b8151801515811461158457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806115b7576115b761158b565b6000190192915050565b600080604083850312156115d457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8181038181111561163a5761163a61158b565b92915050565b600181815b8085111561167d578163ffffffff048211156116635761166361158b565b8085161561167057918102915b93841c9390800290611645565b509250929050565b6000826116945750600161163a565b816116a15750600061163a565b81600181146116b757600281146116c1576116f2565b600191505061163a565b60ff8411156116d2576116d261158b565b6001841b915063ffffffff8211156116ec576116ec61158b565b5061163a565b5060208310610133831016604e8410600b8410161715611729575081810a63ffffffff8111156117245761172461158b565b61163a565b6117338383611640565b8063ffffffff048211156117495761174961158b565b029392505050565b600063ffffffff611766818516828516611685565b949350505050565b600063ffffffff80841680611785576117856115e5565b92169190910692915050565b600063ffffffff808416806117a8576117a86115e5565b92169190910492915050565b63ffffffff818116838216019080821115610b1c57610b1c61158b565b6000825160005b818110156117f257602081860181015185830152016117d8565b50600092019182525091905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207a10ff661aea94ed5894f53cfa2fee06318fa49138057f7bd1b36d8fe228d9da64736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; +const isSuperArgs$N = (xs) => xs.length > 1; +class ERC20Tornado__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$N(args)) { + super(...args); + } else { + super(_abi$1g, _bytecode$N, args[0]); + } + } + getDeployTransaction(_verifier, _hasher, _denomination, _merkleTreeHeight, _token, overrides) { + return super.getDeployTransaction( + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + _token, + overrides || {} + ); + } + deploy(_verifier, _hasher, _denomination, _merkleTreeHeight, _token, overrides) { + return super.deploy( + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + _token, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1g); + } + static connect(address, runner) { + return new Contract(address, _abi$1g, runner); + } +} +ERC20Tornado__factory.bytecode = _bytecode$N; +ERC20Tornado__factory.abi = _abi$1g; + +const _abi$1f = [ + { + inputs: [ + { + internalType: "contract IVerifier", + name: "_verifier", + type: "address" + }, + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "uint256", + name: "_denomination", + type: "uint256" + }, + { + internalType: "uint32", + name: "_merkleTreeHeight", + type: "uint32" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "commitment", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint32", + name: "leafIndex", + type: "uint32" + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "fee", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "commitments", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + } + ], + name: "isSpent", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_nullifierHashes", + type: "bytes32[]" + } + ], + name: "isSpentArray", + outputs: [ + { + internalType: "bool[]", + name: "spent", + type: "bool[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "nullifierHashes", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "verifier", + outputs: [ + { + internalType: "contract IVerifier", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$M = "0x610100604052600380546001600160401b031916905534801561002157600080fd5b50604051611b68380380611b688339810160408190526100409161041b565b83838383808360008263ffffffff16116100ad5760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101035760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a4565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff16101561018b5763ffffffff81166000908152600160209081526040808320859055908290529020829055610181838380610236565b915060010161013e565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816102195760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a4565b506001600160a01b0390921660c0525060e0525061049d92505050565b6000600080516020611b4883398151915283106102955760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a4565b600080516020611b4883398151915282106102fc5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a4565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa15801561034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036f9190610479565b9092509050600080516020611b4883398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f89190610479565b509695505050505050565b6001600160a01b038116811461041857600080fd5b50565b6000806000806080858703121561043157600080fd5b845161043c81610403565b602086015190945061044d81610403565b60408601516060870151919450925063ffffffff8116811461046e57600080fd5b939692955090935050565b6000806040838503121561048c57600080fd5b505080516020909101519092909150565b60805160a05160c05160e051611641610507600039600081816102b00152818161053001528181610d0401526110a201526000818161019b015261069901526000818161021701528181610e9b0152610f3d01526000818161045e0152610fd501526116416000f3fe60806040526004361061012a5760003560e01c80639fa12d0b116100ab578063e5285dcc1161006f578063e5285dcc146103bb578063e8295588146103eb578063ec73295914610418578063ed33639f1461044c578063f178e47c14610480578063fc7e9c6f146104ad57600080fd5b80639fa12d0b1461030f578063b214faa51461033c578063ba70f7571461034f578063c2b40ae414610379578063cd87a3b4146103a657600080fd5b80636d9833e3116100f25780636d9833e31461024e578063839df9451461026e5780638bca6d161461029e5780638ea3099e146102d257806390eeb02b146102f257600080fd5b806317cc915c1461012f57806321a0adb6146101745780632b7ac3f314610189578063414a37ba146101d55780634ecf518b14610205575b600080fd5b34801561013b57600080fd5b5061015f61014a366004611137565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610187610182366004611178565b6104d2565b005b34801561019557600080fd5b506101bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161016b565b3480156101e157600080fd5b506101f76000805160206115ec83398151915281565b60405190815260200161016b565b34801561021157600080fd5b506102397f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161016b565b34801561025a57600080fd5b5061015f610269366004611137565b6107dd565b34801561027a57600080fd5b5061015f610289366004611137565b60066020526000908152604090205460ff1681565b3480156102aa57600080fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506101f76102ed36600461122e565b61085b565b3480156102fe57600080fd5b506003546102399063ffffffff1681565b34801561031b57600080fd5b5061032f61032a366004611263565b610a28565b60405161016b91906112d8565b61018761034a366004611137565b610ae4565b34801561035b57600080fd5b5060035463ffffffff166000908152600260205260409020546101f7565b34801561038557600080fd5b506101f7610394366004611137565b60026020526000908152604090205481565b3480156103b257600080fd5b50610239601e81565b3480156103c757600080fd5b5061015f6103d6366004611137565b60009081526005602052604090205460ff1690565b3480156103f757600080fd5b506101f7610406366004611137565b60016020526000908152604090205481565b34801561042457600080fd5b506101f77f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561045857600080fd5b506101bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b506101f761049b366004611137565b60006020819052908152604090205481565b3480156104b957600080fd5b5060035461023990640100000000900463ffffffff1681565b6002600454036105295760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f000000000000000000000000000000000000000000000000000000000000000082111561059e5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c75650000000000006044820152606401610520565b60008581526005602052604090205460ff16156105fd5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e74006044820152606401610520565b610606866107dd565b6106525760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610520565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f9916106d2918c918c9160040161131e565b6020604051808303816000875af11580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610715919061137c565b61075a5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610520565b6000858152600560205260409020805460ff1916600117905561077f84848484610c1b565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b60008181036107ee57506000919050565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054840361081f575060019392505050565b8063ffffffff166000036108315750601e5b8061083b816113bb565b9150508163ffffffff168163ffffffff16036107f9575060009392505050565b60006000805160206115ec83398151915283106108ba5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c646044820152606401610520565b6000805160206115ec83398151915282106109215760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610520565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099491906113db565b90925090506000805160206115ec83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d91906113db565b509695505050505050565b60608167ffffffffffffffff811115610a4357610a43611415565b604051908082528060200260200182016040528015610a6c578160200160208202803683370190505b50905060005b82811015610add57610aab848483818110610a8f57610a8f61142b565b9050602002013560009081526005602052604090205460ff1690565b15610ad5576001828281518110610ac457610ac461142b565b911515602092830291909101909101525b600101610a72565b5092915050565b600260045403610b365760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610520565b600260045560008181526006602052604090205460ff1615610ba45760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b6064820152608401610520565b6000610baf82610e82565b6000838152600660205260409020805460ff191660011790559050610bd26110a0565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b3415610c875760405162461bcd60e51b815260206004820152603560248201527f4d6573736167652076616c756520697320737570706f73656420746f206265206044820152747a65726f20666f722045544820696e7374616e636560581b6064820152608401610520565b8015610cf25760405162461bcd60e51b815260206004820152603460248201527f526566756e642076616c756520697320737570706f73656420746f206265207a60448201527365726f20666f722045544820696e7374616e636560601b6064820152608401610520565b60006001600160a01b038516610d28847f0000000000000000000000000000000000000000000000000000000000000000611441565b604051600081818185875af1925050503d8060008114610d64576040519150601f19603f3d011682016040523d82523d6000602084013e610d69565b606091505b5050905080610dc85760405162461bcd60e51b815260206004820152602560248201527f7061796d656e7420746f205f726563697069656e7420646964206e6f7420676f604482015264207468727560d81b6064820152608401610520565b8215610e7b576040516001600160a01b038516908490600081818185875af1925050503d8060008114610e17576040519150601f19603f3d011682016040523d82523d6000602084013e610e1c565b606091505b50508091505080610e7b5760405162461bcd60e51b815260206004820152602360248201527f7061796d656e7420746f205f72656c6179657220646964206e6f7420676f207460448201526268727560e81b6064820152608401610520565b5050505050565b600354600090640100000000900463ffffffff16610ec17f0000000000000000000000000000000000000000000000000000000000000000600261156b565b63ffffffff168163ffffffff1603610f345760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610520565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561101257610f7a600286611588565b63ffffffff16600003610fb45763ffffffff8116600090815260016020908152604080832054918390529091208590558493509150610fd0565b63ffffffff811660009081526020819052604090205492508391505b610ffb7f0000000000000000000000000000000000000000000000000000000000000000848461085b565b93506110086002866115ab565b9450600101610f3b565b50600354600090601e9061102d9063ffffffff1660016115ce565b6110379190611588565b6003805463ffffffff191663ffffffff83169081179091556000908152600260205260409020859055905061106d8660016115ce565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000034146111355760405162461bcd60e51b815260206004820152603860248201527f506c656173652073656e6420606d697844656e6f6d696e6174696f6e6020455460448201527f4820616c6f6e672077697468207472616e73616374696f6e00000000000000006064820152608401610520565b565b60006020828403121561114957600080fd5b5035919050565b6001600160a01b038116811461116557600080fd5b50565b803561117381611150565b919050565b60008060008060008060008060e0898b03121561119457600080fd5b883567ffffffffffffffff808211156111ac57600080fd5b818b0191508b601f8301126111c057600080fd5b8135818111156111cf57600080fd5b8c60208285010111156111e157600080fd5b60209283019a5098505089013595506040890135945061120360608a01611168565b935061121160808a01611168565b925060a0890135915060c089013590509295985092959890939650565b60008060006060848603121561124357600080fd5b833561124e81611150565b95602085013595506040909401359392505050565b6000806020838503121561127657600080fd5b823567ffffffffffffffff8082111561128e57600080fd5b818501915085601f8301126112a257600080fd5b8135818111156112b157600080fd5b8660208260051b85010111156112c657600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156113125783511515835292840192918401916001016112f4565b50909695505050505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b600681101561137057815183529183019190830190600101611353565b50505050949350505050565b60006020828403121561138e57600080fd5b8151801515811461139e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806113d1576113d16113a5565b6000190192915050565b600080604083850312156113ee57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115611454576114546113a5565b92915050565b600181815b80851115611497578163ffffffff0482111561147d5761147d6113a5565b8085161561148a57918102915b93841c939080029061145f565b509250929050565b6000826114ae57506001611454565b816114bb57506000611454565b81600181146114d157600281146114db5761150c565b6001915050611454565b60ff8411156114ec576114ec6113a5565b6001841b915063ffffffff821115611506576115066113a5565b50611454565b5060208310610133831016604e8410600b8410161715611543575081810a63ffffffff81111561153e5761153e6113a5565b611454565b61154d838361145a565b8063ffffffff04821115611563576115636113a5565b029392505050565b600063ffffffff61158081851682851661149f565b949350505050565b600063ffffffff8084168061159f5761159f6113ff565b92169190910692915050565b600063ffffffff808416806115c2576115c26113ff565b92169190910492915050565b63ffffffff818116838216019080821115610add57610add6113a556fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220b7ae6fa49d2dc33b05a35e194c48ba72870663895936d093d6708dda191f86f164736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; +const isSuperArgs$M = (xs) => xs.length > 1; +class ETHTornado__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$M(args)) { + super(...args); + } else { + super(_abi$1f, _bytecode$M, args[0]); + } + } + getDeployTransaction(_verifier, _hasher, _denomination, _merkleTreeHeight, overrides) { + return super.getDeployTransaction( + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + overrides || {} + ); + } + deploy(_verifier, _hasher, _denomination, _merkleTreeHeight, overrides) { + return super.deploy( + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1f); + } + static connect(address, runner) { + return new Contract(address, _abi$1f, runner); + } +} +ETHTornado__factory.bytecode = _bytecode$M; +ETHTornado__factory.abi = _abi$1f; + +const _abi$1e = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "who", + type: "address" + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "Echo", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + name: "echo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$L = "0x6080604052348015600f57600080fd5b506101638061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c83836040516100809291906100fe565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff808211156100b757600080fd5b818501915085601f8301126100cb57600080fd5b8135818111156100da57600080fd5b8660208285010111156100ec57600080fd5b60209290920196919550909350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220cadc2288aafcfeb373ae536503c025419ca51a0b1642ad003ff215a6bff8658464736f6c63430008190033"; +const isSuperArgs$L = (xs) => xs.length > 1; +class Echoer__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$L(args)) { + super(...args); + } else { + super(_abi$1e, _bytecode$L, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1e); + } + static connect(address, runner) { + return new Contract(address, _abi$1e, runner); + } +} +Echoer__factory.bytecode = _bytecode$L; +Echoer__factory.abi = _abi$1e; + +const _abi$1d = [ + { + inputs: [ + { + internalType: "bytes", + name: "proof", + type: "bytes" + }, + { + internalType: "uint256[6]", + name: "input", + type: "uint256[6]" + } + ], + name: "verifyProof", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$K = "0x6080604052348015600f57600080fd5b506110d08061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063695ef6f914610030575b600080fd5b61004361003e366004610eca565b610057565b604051901515815260200160405180910390f35b6000808380602001905181019061006e9190610f71565b905060005b60088160ff161015610129577f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47828260ff16600881106100b5576100b5610ff0565b6020020151106101175760405162461bcd60e51b815260206004820152602260248201527f76657269666965722d70726f6f662d656c656d656e742d6774652d7072696d656044820152612d7160f01b60648201526084015b60405180910390fd5b806101218161101c565b915050610073565b50610132610ca2565b6040805180820182528351815260208085015181830152908352815160808082018452858401518285019081526060808801519084015282528351808501855290860151815260a08601518184015281830152838201528151808301835260c0850151815260e0850151918101919091529082015260006101b1610321565b90506000604051806040016040528060008152602001600081525090506101f38183608001516000600781106101e9576101e9610ff0565b60200201516107ec565b905060005b60068110156102df577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187826006811061023457610234610ff0565b6020020151106102865760405162461bcd60e51b815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015260640161010e565b6102d5826102d0856080015184600161029f919061103b565b600781106102af576102af610ff0565b60200201518a85600681106102c6576102c6610ff0565b602002015161088d565b6107ec565b91506001016101f8565b506103146102f0846000015161091b565b846020015184600001518560200151858760400151896040015189606001516109d5565b9450505050505b92915050565b610329610cf3565b6040805180820182527f2dbfc3ec62a3eee5a3b4b464bcf1f8527bbca12adea0f1f12033cd4f61b0e09181527f19e55bd0b72c126da18665039556776642ff82e2f347f24fcea2475f4db087df6020808301919091529083528151608080820184527f1ae724ab134e5a7c6bd8a116fa5505b259522c0f164a5e8126e3ec7d34465f6e8285019081527e9f1bcdc853f8e3531756bb625b0d1dc014f4ab57c3f79f4f4e2e7ef7e0ead6606080850191909152908352845180860186527f23a8ca5760457e726365b92fd0ceb486665797cd68c35dcffd8e4ae8066691e981527f13ec7182c9fd68331a10f8be0fe885d730de5c7f89aa7d0b7bafaa009bbc9e3e818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835180820185527f2f0c63d0c53b3dfbca27b6b43ae7fbf55a38d78a21470996485b03128accc2088186019081527e556502356e37ed150db2e36531b0f275fd6835c0fc1945922e270b48c48a86828501528152845180860186527f02644c27b5dbd793592a70b735e22c798a5e309fa17a992a7dc2a050e01b298f81527f194776b6a53439d7336f389d2a8f6651e40885f5ca2538b0dc9cb534fb23f7fa818601528185015282860152835180850185527f23df1bc9165e9c1c9b2bc036d8ebdd10e7aeae7e5e8019fde68aec7c818bb23e81527f0b6c92080d37c5fb2ddf30892a33665e5478432ef3f71ac8768ecbbe62c7789281850152818601805191909152845180860186527f1c7b2adf45e046caea000956b2ecb2d8617e710d2a7bb201a95ea276f92307b481527f2b15f07536f45948cf4abe6596637d902ffabb18c8c2f5c151544c294ce4a672818601528151850152845180860186527f1cecfe92882a8c835a47bf01bfa655cf628cbba7f81cf4042179fd13edcd6a3981527f0154bfbb2cb786ca247d4b69183d1751f267bbc7656be8d0f0e7a5a47e2c1101818601528151860152845180860186527f1584616a7423efcc72f69ea84fa0b2bc01433677297f4e8351bebfc15bcd0cda81527f0623755b1488526daa9fecf0e11b110dd6df12c461579d792e1db65af523c8be81860152815190930192909252835180850185527f12fbb5bfca9d61357ba2d641604cf4852e21ef54faa180fe539c18994dc1da5a81527f2f09dd9972a1af5f7bcfccf3d7ab600c9d898ea6d6933150ba0ae228ece17e5f81850152825190910152825180840184527f0adb513796fdf2103022c64151ce05f7c7a6d9200e8d819fa59e654fc4bfe83c81527f2d64f72ef4eddf9ca032058ed2bf691758387e913a77cf99d6a3cfb37c8ba7ee81840152815160a0015282518084019093527f21e7c9bffda74bfd2c4393b6803d775545de6fa89145f4a23476241d9881b66183527f0bbe41e52237ac13eb7b01f3cb999b7394d08734e71b1c3ada62713e17eb560c918301919091525160c0015290565b6040805180820190915260008082526020820152610808610d44565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061084257fe5b50806108855760405162461bcd60e51b81526020600482015260126024820152711c185a5c9a5b99cb5859190b59985a5b195960721b604482015260640161010e565b505092915050565b60408051808201909152600080825260208201526108a9610d62565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806108d857fe5b50806108855760405162461bcd60e51b81526020600482015260126024820152711c185a5c9a5b99cb5b5d5b0b59985a5b195960721b604482015260640161010e565b6040805180820190915260008082526020820152815115801561094057506020820151155b1561095e575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516109a3919061104e565b6109cd907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611070565b905292915050565b60408051608080820183528a825260208083018a90528284018890526060808401879052845192830185528b83528282018a9052828501889052820185905283516018808252610320820190955260009491859190839082016103008036833701905050905060005b6004811015610c1f576000610a54826006611083565b9050858260048110610a6857610a68610ff0565b60200201515183610a7a83600061103b565b81518110610a8a57610a8a610ff0565b602002602001018181525050858260048110610aa857610aa8610ff0565b60200201516020015183826001610abf919061103b565b81518110610acf57610acf610ff0565b602002602001018181525050848260048110610aed57610aed610ff0565b6020020151515183610b0083600261103b565b81518110610b1057610b10610ff0565b602002602001018181525050848260048110610b2e57610b2e610ff0565b6020020151516001602002015183610b4783600361103b565b81518110610b5757610b57610ff0565b602002602001018181525050848260048110610b7557610b75610ff0565b602002015160200151600060028110610b9057610b90610ff0565b602002015183610ba183600461103b565b81518110610bb157610bb1610ff0565b602002602001018181525050848260048110610bcf57610bcf610ff0565b602002015160200151600160028110610bea57610bea610ff0565b602002015183610bfb83600561103b565b81518110610c0b57610c0b610ff0565b602090810291909101015250600101610a3e565b50610c28610d80565b6000602082602086026020860160086107d05a03fa90508080610c4757fe5b5080610c8d5760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b604482015260640161010e565b505115159d9c50505050505050505050505050565b6040805160a081019091526000606082018181526080830191909152815260208101610ccc610d9e565b8152602001610cee604051806040016040528060008152602001600081525090565b905290565b6040805160e08101909152600060a0820181815260c0830191909152815260208101610d1d610d9e565b8152602001610d2a610d9e565b8152602001610d37610d9e565b8152602001610cee610dbe565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280610db1610df7565b8152602001610cee610df7565b6040518060e001604052806007905b6040805180820190915260008082526020820152815260200190600190039081610dcd5790505090565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e5457610e54610e15565b604052919050565b600082601f830112610e6d57600080fd5b60405160c0810181811067ffffffffffffffff82111715610e9057610e90610e15565b6040528060c0840185811115610ea557600080fd5b845b81811015610ebf578035835260209283019201610ea7565b509195945050505050565b60008060e08385031215610edd57600080fd5b823567ffffffffffffffff80821115610ef557600080fd5b818501915085601f830112610f0957600080fd5b8135602082821115610f1d57610f1d610e15565b610f2f601f8301601f19168201610e2b565b92508183528781838601011115610f4557600080fd5b81818501828501376000818385010152829550610f6488828901610e5c565b9450505050509250929050565b6000610100808385031215610f8557600080fd5b83601f840112610f9457600080fd5b60405181810181811067ffffffffffffffff82111715610fb657610fb6610e15565b604052908301908085831115610fcb57600080fd5b845b83811015610fe5578051825260209182019101610fcd565b509095945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361103257611032611006565b60010192915050565b8082018082111561031b5761031b611006565b60008261106b57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561031b5761031b611006565b808202811582820484141761031b5761031b61100656fea2646970667358221220f45b9b217fe8de0faa784c9b47a788ed44f7beab2c4749dda027f1862d4a28df64736f6c63430008190033"; +const isSuperArgs$K = (xs) => xs.length > 1; +class Verifier__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$K(args)) { + super(...args); + } else { + super(_abi$1d, _bytecode$K, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1d); + } + static connect(address, runner) { + return new Contract(address, _abi$1d, runner); + } +} +Verifier__factory.bytecode = _bytecode$K; +Verifier__factory.abi = _abi$1d; + +const _abi$1c = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "contract IERC20", + name: "_comp", + type: "address" + }, + { + internalType: "contract IVerifier", + name: "_verifier", + type: "address" + }, + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "uint256", + name: "_denomination", + type: "uint256" + }, + { + internalType: "uint32", + name: "_merkleTreeHeight", + type: "uint32" + }, + { + internalType: "contract IERC20", + name: "_token", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "commitment", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint32", + name: "leafIndex", + type: "uint32" + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "fee", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + }, + { + inputs: [], + name: "FIELD_SIZE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ROOT_HISTORY_SIZE", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ZERO_VALUE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "claimComp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "commitments", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "comp", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "currentRootIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "filledSubtrees", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getLastRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IHasher", + name: "_hasher", + type: "address" + }, + { + internalType: "bytes32", + name: "_left", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_right", + type: "bytes32" + } + ], + name: "hashLeftRight", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "hasher", + outputs: [ + { + internalType: "contract IHasher", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + } + ], + name: "isKnownRoot", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + } + ], + name: "isSpent", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_nullifierHashes", + type: "bytes32[]" + } + ], + name: "isSpentArray", + outputs: [ + { + internalType: "bool[]", + name: "spent", + type: "bool[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "levels", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "nextIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "nullifierHashes", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "roots", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "verifier", + outputs: [ + { + internalType: "contract IVerifier", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "zeros", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$J = "0x610160604052600380546001600160401b031916905534801561002157600080fd5b5060405161205a38038061205a8339810160408190526100409161048f565b848484848484848484808360008263ffffffff16116100b25760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101085760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a9565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101905763ffffffff811660009081526001602090815260408083208590559082905290208290556101868383806102aa565b9150600101610143565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55505060016004558161021e5760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a9565b506001600160a01b0392831660c05260e05250908116610100528a16935061028c925050505760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420434f4d5020746f6b656e206164647265737300000000000060448201526064016100a9565b5050506001600160a01b03938416610120525050166101405261054e565b600060008051602061203a83398151915283106103095760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a9565b60008051602061203a83398151915282106103705760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a9565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e3919061052a565b909250905060008051602061203a83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061052a565b509695505050505050565b6001600160a01b038116811461048c57600080fd5b50565b600080600080600080600060e0888a0312156104aa57600080fd5b87516104b581610477565b60208901519097506104c681610477565b60408901519096506104d781610477565b60608901519095506104e881610477565b608089015160a08a0151919550935063ffffffff8116811461050957600080fd5b60c089015190925061051a81610477565b8091505092959891949750929550565b6000806040838503121561053d57600080fd5b505080516020909101519092909150565b60805160a05160c05160e051610100516101205161014051611a3e6105fc6000396000818161017d01526105d40152600081816102e5015261060501526000818161057801528181610ecc01528181610f0601526112600152600081816103690152818161074101528181610e9e015261128401526000818161023801526108aa01526000818161029c01528181610fe7015261108901526000818161051701526111210152611a3e6000f3fe6080604052600436106101665760003560e01c806390eeb02b116100d1578063e5285dcc1161008a578063ed33639f11610064578063ed33639f14610505578063f178e47c14610539578063fc0c546a14610566578063fc7e9c6f1461059a57600080fd5b8063e5285dcc14610474578063e8295588146104a4578063ec732959146104d157600080fd5b806390eeb02b146103ab5780639fa12d0b146103c8578063b214faa5146103f5578063ba70f75714610408578063c2b40ae414610432578063cd87a3b41461045f57600080fd5b80634ecf518b116101235780634ecf518b1461028a5780635aa6e675146102d35780636d9833e314610307578063839df945146103275780638bca6d16146103575780638ea3099e1461038b57600080fd5b8063109d0af81461016b57806317cc915c146101bc5780631bd85bdb146101fc57806321a0adb6146102135780632b7ac3f314610226578063414a37ba1461025a575b600080fd5b34801561017757600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c857600080fd5b506101ec6101d73660046114ef565b60056020526000908152604090205460ff1681565b60405190151581526020016101b3565b34801561020857600080fd5b506102116105bf565b005b61021161022136600461152d565b6106e3565b34801561023257600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026657600080fd5b5061027c6000805160206119e983398151915281565b6040519081526020016101b3565b34801561029657600080fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b3565b3480156102df57600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031357600080fd5b506101ec6103223660046114ef565b6109ee565b34801561033357600080fd5b506101ec6103423660046114ef565b60066020526000908152604090205460ff1681565b34801561036357600080fd5b5061027c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039757600080fd5b5061027c6103a63660046115e3565b610a6c565b3480156103b757600080fd5b506003546102be9063ffffffff1681565b3480156103d457600080fd5b506103e86103e3366004611618565b610c39565b6040516101b3919061168d565b6102116104033660046114ef565b610cf5565b34801561041457600080fd5b5060035463ffffffff1660009081526002602052604090205461027c565b34801561043e57600080fd5b5061027c61044d3660046114ef565b60026020526000908152604090205481565b34801561046b57600080fd5b506102be601e81565b34801561048057600080fd5b506101ec61048f3660046114ef565b60009081526005602052604090205460ff1690565b3480156104b057600080fd5b5061027c6104bf3660046114ef565b60016020526000908152604090205481565b3480156104dd57600080fd5b5061027c7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561051157600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054557600080fd5b5061027c6105543660046114ef565b60006020819052908152604090205481565b34801561057257600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a657600080fd5b506003546102be90640100000000900463ffffffff1681565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067191906116d3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e091906116ec565b50565b60026004540361073a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156107af5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c75650000000000006044820152606401610731565b60008581526005602052604090205460ff161561080e5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e74006044820152606401610731565b610817866109ee565b6108635760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610731565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f9916108e3918c918c91600401611715565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092691906116ec565b61096b5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610731565b6000858152600560205260409020805460ff1916600117905561099084848484610e2c565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b60008181036109ff57506000919050565b60035463ffffffff16805b63ffffffff81166000908152600260205260409020548403610a30575060019392505050565b8063ffffffff16600003610a425750601e5b80610a4c81611789565b9150508163ffffffff168163ffffffff1603610a0a575060009392505050565b60006000805160206119e98339815191528310610acb5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c646044820152606401610731565b6000805160206119e98339815191528210610b325760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610731565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba591906117a9565b90925090506000805160206119e983398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e91906117a9565b509695505050505050565b60608167ffffffffffffffff811115610c5457610c546117e3565b604051908082528060200260200182016040528015610c7d578160200160208202803683370190505b50905060005b82811015610cee57610cbc848483818110610ca057610ca06117f9565b9050602002013560009081526005602052604090205460ff1690565b15610ce6576001828281518110610cd557610cd56117f9565b911515602092830291909101909101525b600101610c83565b5092915050565b600260045403610d475760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610731565b600260045560008181526006602052604090205460ff1615610db55760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b6064820152608401610731565b6000610dc082610fce565b6000838152600660205260409020805460ff191660011790559050610de36111ec565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b803414610e945760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b6064820152608401610731565b610ef384610ec2847f000000000000000000000000000000000000000000000000000000000000000061180f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906112aa565b8115610f2d57610f2d6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684846112aa565b8015610fc8576000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f80576040519150601f19603f3d011682016040523d82523d6000602084013e610f85565b606091505b5050905080610fc6576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015610fc4573d6000803e3d6000fd5b505b505b50505050565b600354600090640100000000900463ffffffff1661100d7f00000000000000000000000000000000000000000000000000000000000000006002611939565b63ffffffff168163ffffffff16036110805760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610731565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561115e576110c6600286611956565b63ffffffff166000036111005763ffffffff811660009081526001602090815260408083205491839052909120859055849350915061111c565b63ffffffff811660009081526020819052604090205492508391505b6111477f00000000000000000000000000000000000000000000000000000000000000008484610a6c565b9350611154600286611979565b9450600101611087565b50600354600090601e906111799063ffffffff16600161199c565b6111839190611956565b6003805463ffffffff191663ffffffff8316908117909155600090815260026020526040902085905590506111b986600161199c565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b34156112535760405162461bcd60e51b815260206004820152603060248201527f4554482076616c756520697320737570706f73656420746f206265203020666f60448201526f7220455243323020696e7374616e636560801b6064820152608401610731565b6112a86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f00000000000000000000000000000000000000000000000000000000000000006113c3565b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161130691906119b9565b6000604051808303816000865af19150503d8060008114611343576040519150601f19603f3d011682016040523d82523d6000602084013e611348565b606091505b50915091508161135a57805181602001fd5b8051158061137757508080602001905181019061137791906116ec565b610fc65760405162461bcd60e51b815260206004820152601e60248201527f5361666545524332303a20736166655472616e73666572206661696c656400006044820152606401610731565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161142791906119b9565b6000604051808303816000865af19150503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b50915091508161147b57805181602001fd5b8051158061149857508080602001905181019061149891906116ec565b610fc45760405162461bcd60e51b815260206004820152602260248201527f5361666545524332303a20736166655472616e7366657246726f6d206661696c604482015261195960f21b6064820152608401610731565b60006020828403121561150157600080fd5b5035919050565b6001600160a01b03811681146106e057600080fd5b803561152881611508565b919050565b60008060008060008060008060e0898b03121561154957600080fd5b883567ffffffffffffffff8082111561156157600080fd5b818b0191508b601f83011261157557600080fd5b81358181111561158457600080fd5b8c602082850101111561159657600080fd5b60209283019a509850508901359550604089013594506115b860608a0161151d565b93506115c660808a0161151d565b925060a0890135915060c089013590509295985092959890939650565b6000806000606084860312156115f857600080fd5b833561160381611508565b95602085013595506040909401359392505050565b6000806020838503121561162b57600080fd5b823567ffffffffffffffff8082111561164357600080fd5b818501915085601f83011261165757600080fd5b81358181111561166657600080fd5b8660208260051b850101111561167b57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156116c75783511515835292840192918401916001016116a9565b50909695505050505050565b6000602082840312156116e557600080fd5b5051919050565b6000602082840312156116fe57600080fd5b8151801515811461170e57600080fd5b9392505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b60068110156117675781518352918301919083019060010161174a565b50505050949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff82168061179f5761179f611773565b6000190192915050565b600080604083850312156117bc57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8181038181111561182257611822611773565b92915050565b600181815b80851115611865578163ffffffff0482111561184b5761184b611773565b8085161561185857918102915b93841c939080029061182d565b509250929050565b60008261187c57506001611822565b8161188957506000611822565b816001811461189f57600281146118a9576118da565b6001915050611822565b60ff8411156118ba576118ba611773565b6001841b915063ffffffff8211156118d4576118d4611773565b50611822565b5060208310610133831016604e8410600b8410161715611911575081810a63ffffffff81111561190c5761190c611773565b611822565b61191b8383611828565b8063ffffffff0482111561193157611931611773565b029392505050565b600063ffffffff61194e81851682851661186d565b949350505050565b600063ffffffff8084168061196d5761196d6117cd565b92169190910692915050565b600063ffffffff80841680611990576119906117cd565b92169190910492915050565b63ffffffff818116838216019080821115610cee57610cee611773565b6000825160005b818110156119da57602081860181015185830152016119c0565b50600092019182525091905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207136b381e40b7e1e84fceaba3022a28e73ab509289c831db484f05c7303d32a464736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; +const isSuperArgs$J = (xs) => xs.length > 1; +class CTornado__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$J(args)) { + super(...args); + } else { + super(_abi$1c, _bytecode$J, args[0]); + } + } + getDeployTransaction(_governance, _comp, _verifier, _hasher, _denomination, _merkleTreeHeight, _token, overrides) { + return super.getDeployTransaction( + _governance, + _comp, + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + _token, + overrides || {} + ); + } + deploy(_governance, _comp, _verifier, _hasher, _denomination, _merkleTreeHeight, _token, overrides) { + return super.deploy( + _governance, + _comp, + _verifier, + _hasher, + _denomination, + _merkleTreeHeight, + _token, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1c); + } + static connect(address, runner) { + return new Contract(address, _abi$1c, runner); + } +} +CTornado__factory.bytecode = _bytecode$J; +CTornado__factory.abi = _abi$1c; + +var index$A = /*#__PURE__*/Object.freeze({ + __proto__: null, + CTornado__factory: CTornado__factory, + ERC20Tornado__factory: ERC20Tornado__factory, + ETHTornado__factory: ETHTornado__factory, + Echoer__factory: Echoer__factory, + Verifier__factory: Verifier__factory, + interfaces: index$B, + merkleTreeWithHistorySol: index$G, + mocks: index$E, + tornadoProxyLightSol: index$C, + tornadoSol: index$D +}); + +const _abi$1b = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "ApprovalForAll", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "NewOwner", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "NewResolver", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "NewTTL", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "recordExists", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "setApprovalForAll", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setRecord", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "setResolver", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setSubnodeOwner", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setSubnodeRecord", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setTTL", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "ttl", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IENSRegistry__factory { + static createInterface() { + return new Interface(_abi$1b); + } + static connect(address, runner) { + return new Contract(address, _abi$1b, runner); + } +} +IENSRegistry__factory.abi = _abi$1b; + +const _abi$1a = [ + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + } + ], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IENSResolver__factory { + static createInterface() { + return new Interface(_abi$1a); + } + static connect(address, runner) { + return new Contract(address, _abi$1a, runner); + } +} +IENSResolver__factory.abi = _abi$1a; + +const _abi$19 = [ + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "getRelayerBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "address", + name: "toResolve", + type: "address" + } + ], + name: "isRelayerRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IRelayerRegistry__factory { + static createInterface() { + return new Interface(_abi$19); + } + static connect(address, runner) { + return new Contract(address, _abi$19, runner); + } +} +IRelayerRegistry__factory.abi = _abi$19; + +const _abi$18 = [ + { + inputs: [ + { + internalType: "address", + name: "_IENSRegistry", + type: "address" + }, + { + internalType: "address", + name: "_IRelayerRegistry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "ENSRegistry", + outputs: [ + { + internalType: "contract IENSRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "RelayerRegistry", + outputs: [ + { + internalType: "contract IRelayerRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_relayers", + type: "bytes32[]" + }, + { + internalType: "string[]", + name: "_subdomains", + type: "string[]" + } + ], + name: "relayersData", + outputs: [ + { + components: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "bool", + name: "isRegistered", + type: "bool" + }, + { + internalType: "string[20]", + name: "records", + type: "string[20]" + } + ], + internalType: "struct Relayer[]", + name: "", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$I = "0x60c060405234801561001057600080fd5b50604051610b74380380610b7483398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c610a9b6100d96000398060b2528061040352806104f1525080608e528061013a528061021b5250610a9b6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631cb120d61461004657806339c16356146100645780634d47d7751461006c575b600080fd5b61004e61008c565b60405161005b9190610891565b60405180910390f35b61004e6100b0565b61007f61007a366004610702565b6100d4565b60405161005b91906108bf565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b606080835167ffffffffffffffff811180156100ef57600080fd5b5060405190808252806020026020018201604052801561012957816020015b6101166105cd565b81526020019060019003908161010e5790505b50905060005b84518110156105c5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be386838151811061017357fe5b60200260200101516040518263ffffffff1660e01b8152600401610197919061099d565b60206040518083038186803b1580156101af57600080fd5b505afa1580156101c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e791906106d4565b8282815181106101f357fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630178b8bf87848151811061025457fe5b60200260200101516040518263ffffffff1660e01b8152600401610278919061099d565b60206040518083038186803b15801561029057600080fd5b505afa1580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c891906106d4565b905060005b85518110156104005760008784815181106102e457fe5b60200260200101518783815181106102f857fe5b60200260200101516040516020016103109190610875565b60405160208183030381529060405280519060200120604051602001610337929190610867565b60408051601f19818403018152908290528051602090910120631674750f60e21b825291506001600160a01b038416906359d1d43c9061037b9084906004016109a6565b60006040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103cf91908101906107dc565b8585815181106103db57fe5b60200260200101516060015183601481106103f257fe5b6020020152506001016102cd565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b69fd4ab84848151811061043c57fe5b60200260200101516000015185858151811061045457fe5b6020026020010151600001516040518363ffffffff1660e01b815260040161047d9291906108a5565b60206040518083038186803b15801561049557600080fd5b505afa1580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd91906107bc565b8383815181106104d957fe5b602002602001015160400190151590811515815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b971a6bf84848151811061052a57fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016105529190610891565b60206040518083038186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a2919061084f565b8383815181106105ae57fe5b60209081029190910181015101525060010161012f565b509392505050565b604051806080016040528060006001600160a01b0316815260200160008152602001600015158152602001610600610605565b905290565b6040518061028001604052806014905b60608152602001906001900390816106155790505090565b600082601f83011261063d578081fd5b813561065061064b826109f1565b6109ca565b818152915060208083019084810160005b848110156106c9578135870188603f82011261067c57600080fd5b8381013561068c61064b82610a11565b81815260408b818486010111156106a257600080fd5b82818501888401375060009181018601919091528552509282019290820190600101610661565b505050505092915050565b6000602082840312156106e5578081fd5b81516001600160a01b03811681146106fb578182fd5b9392505050565b60008060408385031215610714578081fd5b823567ffffffffffffffff8082111561072b578283fd5b818501915085601f83011261073e578283fd5b813561074c61064b826109f1565b80828252602080830192508086018a82838702890101111561076c578788fd5b8796505b8487101561078e578035845260019690960195928101928101610770565b5090965087013593505050808211156107a5578283fd5b506107b28582860161062d565b9150509250929050565b6000602082840312156107cd578081fd5b815180151581146106fb578182fd5b6000602082840312156107ed578081fd5b815167ffffffffffffffff811115610803578182fd5b8201601f81018413610813578182fd5b805161082161064b82610a11565b818152856020838501011115610835578384fd5b610846826020830160208601610a35565b95945050505050565b600060208284031215610860578081fd5b5051919050565b918252602082015260400190565b60008251610887818460208701610a35565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561099057878503603f19018452815180516001600160a01b03168652868101518787015260408082015115159087015260609081015160809187018290529086016103008701895b601481101561097b57888203607f1901835283518051610950818561099d565b61095d82828f8601610a35565b958c0195948c0194601f91909101601f191601925050600101610930565b509650505092850192908501906001016108e4565b5092979650505050505050565b90815260200190565b908152604060208201819052600390820152621d5c9b60ea1b606082015260800190565b60405181810167ffffffffffffffff811182821017156109e957600080fd5b604052919050565b600067ffffffffffffffff821115610a07578081fd5b5060209081020190565b600067ffffffffffffffff821115610a27578081fd5b50601f01601f191660200190565b60005b83811015610a50578181015183820152602001610a38565b83811115610a5f576000848401525b5050505056fea2646970667358221220628a366714cdda82fe91d785ad928e44e4b9f7976ed987e5fef72d207582dbaf64736f6c634300060c0033"; +const isSuperArgs$I = (xs) => xs.length > 1; +class RelayerAggregator__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$I(args)) { + super(...args); + } else { + super(_abi$18, _bytecode$I, args[0]); + } + } + getDeployTransaction(_IENSRegistry, _IRelayerRegistry, overrides) { + return super.getDeployTransaction( + _IENSRegistry, + _IRelayerRegistry, + overrides || {} + ); + } + deploy(_IENSRegistry, _IRelayerRegistry, overrides) { + return super.deploy( + _IENSRegistry, + _IRelayerRegistry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$18); + } + static connect(address, runner) { + return new Contract(address, _abi$18, runner); + } +} +RelayerAggregator__factory.bytecode = _bytecode$I; +RelayerAggregator__factory.abi = _abi$18; + +var index$z = /*#__PURE__*/Object.freeze({ + __proto__: null, + IENSRegistry__factory: IENSRegistry__factory, + IENSResolver__factory: IENSResolver__factory, + IRelayerRegistry__factory: IRelayerRegistry__factory, + RelayerAggregator__factory: RelayerAggregator__factory +}); + +const _abi$17 = [ + { + inputs: [ + { + internalType: "address", + name: "_ensRegistry", + type: "address" + }, + { + internalType: "address", + name: "_relayerRegistry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "ENSRegistry", + outputs: [ + { + internalType: "contract IENSRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "RelayerRegistry", + outputs: [ + { + internalType: "contract IRelayerRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + } + ], + name: "getAllProposals", + outputs: [ + { + components: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + }, + { + internalType: "enum Governance.ProposalState", + name: "state", + type: "uint8" + } + ], + internalType: "struct GovernanceAggregator.Proposal[]", + name: "proposals", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + }, + { + internalType: "address[]", + name: "accs", + type: "address[]" + } + ], + name: "getGovernanceBalances", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "getUserData", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "latestProposalId", + type: "uint256" + }, + { + internalType: "uint256", + name: "latestProposalIdState", + type: "uint256" + }, + { + internalType: "uint256", + name: "timelock", + type: "uint256" + }, + { + internalType: "address", + name: "delegatee", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "_relayers", + type: "bytes32[]" + }, + { + internalType: "string[]", + name: "_subdomains", + type: "string[]" + } + ], + name: "relayersData", + outputs: [ + { + components: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "bool", + name: "isRegistered", + type: "bool" + }, + { + internalType: "string[20]", + name: "records", + type: "string[20]" + } + ], + internalType: "struct Relayer[]", + name: "", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$H = "0x60c060405234801561001057600080fd5b5060405161155d38038061155d83398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c6114826100db6000398061024b528061059c528061068a52508061022752806102d352806103b452506114826000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063029fcae7146100675780631cb120d61461009057806339c16356146100a55780634d47d775146100ad5780639853d922146100cd578063f4eeefe9146100ed575b600080fd5b61007a610075366004610fa1565b610111565b60405161008791906112ee565b60405180910390f35b610098610225565b6040516100879190611118565b610098610249565b6100c06100bb366004610e93565b61026d565b6040516100879190611210565b6100e06100db366004610dcc565b61075e565b6040516100879190611146565b6101006100fb366004610f69565b6109dd565b60405161008795949392919061135f565b60608167ffffffffffffffff8111801561012a57600080fd5b50604051908082528060200260200182016040528015610154578160200160208202803683370190505b50905060005b8281101561021d57846001600160a01b0316639ae697bf85858481811061017d57fe5b90506020020160208101906101929190610dcc565b6040518263ffffffff1660e01b81526004016101ae9190611118565b60206040518083038186803b1580156101c657600080fd5b505afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906110b5565b82828151811061020a57fe5b602090810291909101015260010161015a565b509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b606080835167ffffffffffffffff8111801561028857600080fd5b506040519080825280602002602001820160405280156102c257816020015b6102af610c79565b8152602001906001900390816102a75790505b50905060005b845181101561021d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be386838151811061030c57fe5b60200260200101516040518263ffffffff1660e01b81526004016103309190611332565b60206040518083038186803b15801561034857600080fd5b505afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190610def565b82828151811061038c57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630178b8bf8784815181106103ed57fe5b60200260200101516040518263ffffffff1660e01b81526004016104119190611332565b60206040518083038186803b15801561042957600080fd5b505afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610def565b905060005b855181101561059957600087848151811061047d57fe5b602002602001015187838151811061049157fe5b60200260200101516040516020016104a991906110fc565b604051602081830303815290604052805190602001206040516020016104d09291906110ee565b60408051601f19818403018152908290528051602090910120631674750f60e21b825291506001600160a01b038416906359d1d43c9061051490849060040161133b565b60006040518083038186803b15801561052c57600080fd5b505afa158015610540573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105689190810190611042565b85858151811061057457fe5b602002602001015160600151836014811061058b57fe5b602002015250600101610466565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b69fd4ab8484815181106105d557fe5b6020026020010151600001518585815181106105ed57fe5b6020026020010151600001516040518363ffffffff1660e01b815260040161061692919061112c565b60206040518083038186803b15801561062e57600080fd5b505afa158015610642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106669190610f4d565b83838151811061067257fe5b602002602001015160400190151590811515815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b971a6bf8484815181106106c357fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016106eb9190611118565b60206040518083038186803b15801561070357600080fd5b505afa158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b91906110b5565b83838151811061074757fe5b6020908102919091018101510152506001016102c8565b6060816001600160a01b031663da35c6646040518163ffffffff1660e01b815260040160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d191906110b5565b67ffffffffffffffff811180156107e757600080fd5b5060405190808252806020026020018201604052801561082157816020015b61080e610cb1565b8152602001906001900390816108065790505b50905060005b81518110156109d7576000806000806000806000808a6001600160a01b031663013cf08b8a6001016040518263ffffffff1660e01b815260040161086b9190611332565b6101006040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc9190610e0b565b97509750975097509750975097509750604051806101200160405280896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001831515815260200182151581526020018c6001600160a01b0316633e4f49e68c6001016040518263ffffffff1660e01b815260040161094d9190611332565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190611023565b60068111156109a857fe5b8152508a8a815181106109b757fe5b602002602001018190525050505050505050508080600101915050610827565b50919050565b6000806000806000866001600160a01b0316639ae697bf876040518263ffffffff1660e01b8152600401610a119190611118565b60206040518083038186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6191906110b5565b6040516317977c6160e01b81529095506001600160a01b038816906317977c6190610a90908990600401611118565b60206040518083038186803b158015610aa857600080fd5b505afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae091906110b5565b93508315610b7257604051631f27a4f360e11b81526001600160a01b03881690633e4f49e690610b14908790600401611332565b60206040518083038186803b158015610b2c57600080fd5b505afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190611023565b6006811115610b6f57fe5b92505b60405163a72edda360e01b81526001600160a01b0388169063a72edda390610b9e908990600401611118565b60206040518083038186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906110b5565b604051631976849960e21b81529092506001600160a01b038816906365da126490610c1d908990600401611118565b60206040518083038186803b158015610c3557600080fd5b505afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190610def565b90509295509295909350565b604051806080016040528060006001600160a01b0316815260200160008152602001600015158152602001610cac610cfd565b905290565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905290610100820190610cac565b6040518061028001604052806014905b6060815260200190600190039081610d0d5790505090565b600082601f830112610d35578081fd5b8135610d48610d43826113b2565b61138b565b818152915060208083019084810160005b84811015610dc1578135870188603f820112610d7457600080fd5b83810135610d84610d43826113d2565b81815260408b81848601011115610d9a57600080fd5b82818501888401375060009181018601919091528552509282019290820190600101610d59565b505050505092915050565b600060208284031215610ddd578081fd5b8135610de881611426565b9392505050565b600060208284031215610e00578081fd5b8151610de881611426565b600080600080600080600080610100898b031215610e27578384fd5b8851610e3281611426565b60208a0151909850610e4381611426565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151610e718161143e565b60e08a0151909250610e828161143e565b809150509295985092959890939650565b60008060408385031215610ea5578182fd5b823567ffffffffffffffff80821115610ebc578384fd5b818501915085601f830112610ecf578384fd5b8135610edd610d43826113b2565b80828252602080830192508086018a828387028901011115610efd578889fd5b8896505b84871015610f1f578035845260019690960195928101928101610f01565b509096508701359350505080821115610f36578283fd5b50610f4385828601610d25565b9150509250929050565b600060208284031215610f5e578081fd5b8151610de88161143e565b60008060408385031215610f7b578182fd5b8235610f8681611426565b91506020830135610f9681611426565b809150509250929050565b600080600060408486031215610fb5578283fd5b8335610fc081611426565b9250602084013567ffffffffffffffff80821115610fdc578384fd5b818601915086601f830112610fef578384fd5b813581811115610ffd578485fd5b8760208083028501011115611010578485fd5b6020830194508093505050509250925092565b600060208284031215611034578081fd5b815160078110610de8578182fd5b600060208284031215611053578081fd5b815167ffffffffffffffff811115611069578182fd5b8201601f81018413611079578182fd5b8051611087610d43826113d2565b81815285602083850101111561109b578384fd5b6110ac8260208301602086016113f6565b95945050505050565b6000602082840312156110c6578081fd5b5051919050565b6001600160a01b03169052565b15159052565b600781106110ea57fe5b9052565b918252602082015260400190565b6000825161110e8184602087016113f6565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561120357815180516001600160a01b031685528681015161118a888701826110cd565b508086015185870152606080820151908601526080808201519086015260a0808201519086015260c0808201516111c3828801826110da565b505060e0808201516111d7828801826110da565b505061010090810151906111ed868201836110e0565b5050610120939093019290850190600101611163565b5091979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e157878503603f19018452815180516001600160a01b03168652868101518787015260408082015115159087015260609081015160809187018290529086016103008701895b60148110156112cc57888203607f19018352835180516112a18185611332565b6112ae82828f86016113f6565b958c0195948c0194601f91909101601f191601925050600101611281565b50965050509285019290850190600101611235565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113265783518352928401929184019160010161130a565b50909695505050505050565b90815260200190565b908152604060208201819052600390820152621d5c9b60ea1b606082015260800190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405181810167ffffffffffffffff811182821017156113aa57600080fd5b604052919050565b600067ffffffffffffffff8211156113c8578081fd5b5060209081020190565b600067ffffffffffffffff8211156113e8578081fd5b50601f01601f191660200190565b60005b838110156114115781810151838201526020016113f9565b83811115611420576000848401525b50505050565b6001600160a01b038116811461143b57600080fd5b50565b801515811461143b57600080fdfea26469706673582212209edead2cf5d16a9f09d7d75c5aa042cb00130c9febd0bf0e908fbf9c3f34f1a164736f6c634300060c0033"; +const isSuperArgs$H = (xs) => xs.length > 1; +class Aggregator__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$H(args)) { + super(...args); + } else { + super(_abi$17, _bytecode$H, args[0]); + } + } + getDeployTransaction(_ensRegistry, _relayerRegistry, overrides) { + return super.getDeployTransaction( + _ensRegistry, + _relayerRegistry, + overrides || {} + ); + } + deploy(_ensRegistry, _relayerRegistry, overrides) { + return super.deploy( + _ensRegistry, + _relayerRegistry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$17); + } + static connect(address, runner) { + return new Contract(address, _abi$17, runner); + } +} +Aggregator__factory.bytecode = _bytecode$H; +Aggregator__factory.abi = _abi$17; + +const _abi$16 = [ + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + } + ], + name: "getAllProposals", + outputs: [ + { + components: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + }, + { + internalType: "enum Governance.ProposalState", + name: "state", + type: "uint8" + } + ], + internalType: "struct GovernanceAggregator.Proposal[]", + name: "proposals", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + }, + { + internalType: "address[]", + name: "accs", + type: "address[]" + } + ], + name: "getGovernanceBalances", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract Governance", + name: "governance", + type: "address" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "getUserData", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "latestProposalId", + type: "uint256" + }, + { + internalType: "uint256", + name: "latestProposalIdState", + type: "uint256" + }, + { + internalType: "uint256", + name: "timelock", + type: "uint256" + }, + { + internalType: "address", + name: "delegatee", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$G = "0x608060405234801561001057600080fd5b50610ab8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063029fcae7146100465780639853d9221461006f578063f4eeefe91461008f575b600080fd5b61005961005436600461082b565b6100b3565b60405161006691906109e3565b60405180910390f35b61008261007d36600461072c565b6101c7565b6040516100669190610919565b6100a261009d3660046107f3565b610446565b604051610066959493929190610a30565b60608167ffffffffffffffff811180156100cc57600080fd5b506040519080825280602002602001820160405280156100f6578160200160208202803683370190505b50905060005b828110156101bf57846001600160a01b0316639ae697bf85858481811061011f57fe5b9050602002016020810190610134919061072c565b6040518263ffffffff1660e01b81526004016101509190610905565b60206040518083038186803b15801561016857600080fd5b505afa15801561017c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a091906108cc565b8282815181106101ac57fe5b60209081029190910101526001016100fc565b509392505050565b6060816001600160a01b031663da35c6646040518163ffffffff1660e01b815260040160206040518083038186803b15801561020257600080fd5b505afa158015610216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023a91906108cc565b67ffffffffffffffff8111801561025057600080fd5b5060405190808252806020026020018201604052801561028a57816020015b6102776106e2565b81526020019060019003908161026f5790505b50905060005b8151811015610440576000806000806000806000808a6001600160a01b031663013cf08b8a6001016040518263ffffffff1660e01b81526004016102d49190610a27565b6101006040518083038186803b1580156102ed57600080fd5b505afa158015610301573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610325919061076b565b97509750975097509750975097509750604051806101200160405280896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001831515815260200182151581526020018c6001600160a01b0316633e4f49e68c6001016040518263ffffffff1660e01b81526004016103b69190610a27565b60206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906108ad565b600681111561041157fe5b8152508a8a8151811061042057fe5b602002602001018190525050505050505050508080600101915050610290565b50919050565b6000806000806000866001600160a01b0316639ae697bf876040518263ffffffff1660e01b815260040161047a9190610905565b60206040518083038186803b15801561049257600080fd5b505afa1580156104a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca91906108cc565b6040516317977c6160e01b81529095506001600160a01b038816906317977c61906104f9908990600401610905565b60206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054991906108cc565b935083156105db57604051631f27a4f360e11b81526001600160a01b03881690633e4f49e69061057d908790600401610a27565b60206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd91906108ad565b60068111156105d857fe5b92505b60405163a72edda360e01b81526001600160a01b0388169063a72edda390610607908990600401610905565b60206040518083038186803b15801561061f57600080fd5b505afa158015610633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065791906108cc565b604051631976849960e21b81529092506001600160a01b038816906365da126490610686908990600401610905565b60206040518083038186803b15801561069e57600080fd5b505afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d6919061074f565b90509295509295909350565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b60006020828403121561073d578081fd5b813561074881610a5c565b9392505050565b600060208284031215610760578081fd5b815161074881610a5c565b600080600080600080600080610100898b031215610787578384fd5b885161079281610a5c565b60208a01519098506107a381610a5c565b8097505060408901519550606089015194506080890151935060a0890151925060c08901516107d181610a74565b60e08a01519092506107e281610a74565b809150509295985092959890939650565b60008060408385031215610805578182fd5b823561081081610a5c565b9150602083013561082081610a5c565b809150509250929050565b60008060006040848603121561083f578283fd5b833561084a81610a5c565b9250602084013567ffffffffffffffff80821115610866578384fd5b818601915086601f830112610879578384fd5b813581811115610887578485fd5b876020808302850101111561089a578485fd5b6020830194508093505050509250925092565b6000602082840312156108be578081fd5b815160078110610748578182fd5b6000602082840312156108dd578081fd5b5051919050565b6001600160a01b03169052565b15159052565b6007811061090157fe5b9052565b6001600160a01b0391909116815260200190565b602080825282518282018190526000919060409081850190868401855b828110156109d657815180516001600160a01b031685528681015161095d888701826108e4565b508086015185870152606080820151908601526080808201519086015260a0808201519086015260c080820151610996828801826108f1565b505060e0808201516109aa828801826108f1565b505061010090810151906109c0868201836108f7565b5050610120939093019290850190600101610936565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610a1b578351835292840192918401916001016109ff565b50909695505050505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6001600160a01b0381168114610a7157600080fd5b50565b8015158114610a7157600080fdfea2646970667358221220c68e065ff95a2c91c1e5904ff4ba8c709291d5227b10049b437e89d35c33af4d64736f6c634300060c0033"; +const isSuperArgs$G = (xs) => xs.length > 1; +class GovernanceAggregator__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$G(args)) { + super(...args); + } else { + super(_abi$16, _bytecode$G, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$16); + } + static connect(address, runner) { + return new Contract( + address, + _abi$16, + runner + ); + } +} +GovernanceAggregator__factory.bytecode = _bytecode$G; +GovernanceAggregator__factory.abi = _abi$16; + +var index$y = /*#__PURE__*/Object.freeze({ + __proto__: null, + Aggregator__factory: Aggregator__factory, + GovernanceAggregator__factory: GovernanceAggregator__factory, + relayerAggregatorSol: index$z +}); + +const _abi$15 = [ + { + inputs: [ + { + internalType: "contract IDeployer", + name: "_deployer", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "addr", + type: "address" + } + ], + name: "Deployed", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes", + name: "_initCode", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_salt", + type: "bytes32" + } + ], + name: "deploy", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "deployer", + outputs: [ + { + internalType: "contract IDeployer", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$F = "0x60a060405234801561001057600080fd5b506040516103a93803806103a98339818101604052602081101561003357600080fd5b50516001600160a01b0381161561004a5780610060565b73ce0042b868300000d44a59004da54a005ffdcf9f5b60601b6001600160601b031916608052604051309032907f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec2090600090a35060805160601c6102e96100c06000398061010d528061029152506102e96000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634af63f021461003b578063d5f39488146100e5575b600080fd5b6100e36004803603604081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610109915050565b005b6100ed61028f565b604080516001600160a01b039092168252519081900360200190f35b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634af63f0284846040518363ffffffff1660e01b81526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561018e578181015183820152602001610176565b50505050905090810190601f1680156101bb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d602081101561020557600080fd5b505190506001600160a01b038116610254576040805162461bcd60e51b815260206004820152600d60248201526c11195c1b1bde4819985a5b1959609a1b604482015290519081900360640190fd5b6040516001600160a01b0382169033907f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec2090600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000008156fea26469706673582212209824ac82969e56106968b899123a2ecac48f942b4ed3dcae2ced58022879d32364736f6c634300060c0033"; +const isSuperArgs$F = (xs) => xs.length > 1; +class Deployer__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$F(args)) { + super(...args); + } else { + super(_abi$15, _bytecode$F, args[0]); + } + } + getDeployTransaction(_deployer, overrides) { + return super.getDeployTransaction(_deployer, overrides || {}); + } + deploy(_deployer, overrides) { + return super.deploy(_deployer, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$15); + } + static connect(address, runner) { + return new Contract(address, _abi$15, runner); + } +} +Deployer__factory.bytecode = _bytecode$F; +Deployer__factory.abi = _abi$15; + +const _abi$14 = [ + { + inputs: [ + { + internalType: "bytes", + name: "_initCode", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_salt", + type: "bytes32" + } + ], + name: "deploy", + outputs: [ + { + internalType: "address payable", + name: "createdContract", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IDeployer__factory { + static createInterface() { + return new Interface(_abi$14); + } + static connect(address, runner) { + return new Contract(address, _abi$14, runner); + } +} +IDeployer__factory.abi = _abi$14; + +var index$x = /*#__PURE__*/Object.freeze({ + __proto__: null, + Deployer__factory: Deployer__factory, + IDeployer__factory: IDeployer__factory +}); + +const _abi$13 = [ + { + inputs: [ + { + internalType: "contract IERC20", + name: "_token", + type: "address" + }, + { + internalType: "address", + name: "_spender", + type: "address" + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256" + } + ], + name: "approveExactToken", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class ITornadoRouter__factory { + static createInterface() { + return new Interface(_abi$13); + } + static connect(address, runner) { + return new Contract(address, _abi$13, runner); + } +} +ITornadoRouter__factory.abi = _abi$13; + +const _abi$12 = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract ITornadoInstance", + name: "instance", + type: "address" + }, + { + indexed: false, + internalType: "enum InstanceRegistry.InstanceState", + name: "state", + type: "uint8" + } + ], + name: "InstanceStateUpdated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "tornadoRouter", + type: "address" + } + ], + name: "RouterRegistered", + type: "event" + }, + { + inputs: [], + name: "getAllInstanceAddresses", + outputs: [ + { + internalType: "contract ITornadoInstance[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getAllInstances", + outputs: [ + { + components: [ + { + internalType: "contract ITornadoInstance", + name: "addr", + type: "address" + }, + { + components: [ + { + internalType: "bool", + name: "isERC20", + type: "bool" + }, + { + internalType: "contract IERC20", + name: "token", + type: "address" + }, + { + internalType: "enum InstanceRegistry.InstanceState", + name: "state", + type: "uint8" + }, + { + internalType: "uint24", + name: "uniswapPoolSwappingFee", + type: "uint24" + }, + { + internalType: "uint32", + name: "protocolFeePercentage", + type: "uint32" + } + ], + internalType: "struct InstanceRegistry.Instance", + name: "instance", + type: "tuple" + } + ], + internalType: "struct InstanceRegistry.Tornado[]", + name: "result", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "instance", + type: "address" + } + ], + name: "getPoolToken", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "contract ITornadoInstance", + name: "addr", + type: "address" + }, + { + components: [ + { + internalType: "bool", + name: "isERC20", + type: "bool" + }, + { + internalType: "contract IERC20", + name: "token", + type: "address" + }, + { + internalType: "enum InstanceRegistry.InstanceState", + name: "state", + type: "uint8" + }, + { + internalType: "uint24", + name: "uniswapPoolSwappingFee", + type: "uint24" + }, + { + internalType: "uint32", + name: "protocolFeePercentage", + type: "uint32" + } + ], + internalType: "struct InstanceRegistry.Instance", + name: "instance", + type: "tuple" + } + ], + internalType: "struct InstanceRegistry.Tornado[]", + name: "_instances", + type: "tuple[]" + }, + { + internalType: "address", + name: "_router", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "instanceIds", + outputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + name: "instances", + outputs: [ + { + internalType: "bool", + name: "isERC20", + type: "bool" + }, + { + internalType: "contract IERC20", + name: "token", + type: "address" + }, + { + internalType: "enum InstanceRegistry.InstanceState", + name: "state", + type: "uint8" + }, + { + internalType: "uint24", + name: "uniswapPoolSwappingFee", + type: "uint24" + }, + { + internalType: "uint32", + name: "protocolFeePercentage", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_instanceId", + type: "uint256" + } + ], + name: "removeInstance", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract ITornadoRouter", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "instance", + type: "address" + }, + { + internalType: "uint32", + name: "newFee", + type: "uint32" + } + ], + name: "setProtocolFee", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "routerAddress", + type: "address" + } + ], + name: "setTornadoRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "contract ITornadoInstance", + name: "addr", + type: "address" + }, + { + components: [ + { + internalType: "bool", + name: "isERC20", + type: "bool" + }, + { + internalType: "contract IERC20", + name: "token", + type: "address" + }, + { + internalType: "enum InstanceRegistry.InstanceState", + name: "state", + type: "uint8" + }, + { + internalType: "uint24", + name: "uniswapPoolSwappingFee", + type: "uint24" + }, + { + internalType: "uint32", + name: "protocolFeePercentage", + type: "uint32" + } + ], + internalType: "struct InstanceRegistry.Instance", + name: "instance", + type: "tuple" + } + ], + internalType: "struct InstanceRegistry.Tornado", + name: "_tornado", + type: "tuple" + } + ], + name: "updateInstance", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$E = "0x60a060405234801561001057600080fd5b5060405161146738038061146783398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c6113c46100a3600039806103e552806105c052806105ed528061073a52806107e652506113c46000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636c9be937116100715780636c9be9371461014d578063908e3b371461016057806392b65a4114610173578063b5b899b714610186578063cf552c8914610199578063f887ea40146101ac576100b4565b8063032bb443146100b957806310c13ac3146100e65780631ad058a9146100fb5780634ba16d9d1461011057806352c228e3146101235780635aa6e67514610138575b600080fd5b6100cc6100c7366004610e89565b6101b4565b6040516100dd959493929190611194565b60405180910390f35b6100ee6101fe565b6040516100dd9190611097565b61010e610109366004610ec8565b6102af565b005b61010e61011e366004610e89565b6103da565b61012b61047f565b6040516100dd91906110e4565b6101406105be565b6040516100dd9190611069565b61010e61015b366004610fd3565b6105e2565b61014061016e366004610e89565b610709565b61010e610181366004610f80565b61072f565b610140610194366004611005565b6107b4565b61010e6101a7366004611005565b6107db565b610140610a77565b60016020526000908152604090205460ff8082169161010081046001600160a01b031691600160a81b82041690600160b01b810462ffffff1690600160c81b900463ffffffff1685565b60025460609067ffffffffffffffff8111801561021a57600080fd5b50604051908082528060200260200182016040528015610244578160200160208202803683370190505b50905060005b6002548110156102ab576002818154811061026157fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061028b57fe5b6001600160a01b039092166020928302919091019091015260010161024a565b5090565b600054610100900460ff16806102c857506102c8610a8c565b806102d6575060005460ff16155b6102fb5760405162461bcd60e51b81526004016102f290611214565b60405180910390fd5b600054610100900460ff16158015610326576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038516021781555b83518110156103c25761036e84828151811061036157fe5b6020026020010151610a92565b600284828151811061037c57fe5b6020908102919091018101515182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610349565b5080156103d5576000805461ff00191690555b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104225760405162461bcd60e51b81526004016102f2906112c2565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517f94df8c3a8087dce110e5fbc5acf380c83c94bbd31b2c8ed4c08e1396a696e1a890610474908390611069565b60405180910390a150565b60025460609067ffffffffffffffff8111801561049b57600080fd5b506040519080825280602002602001820160405280156104d557816020015b6104c2610d64565b8152602001906001900390816104ba5790505b50905060005b6002548110156102ab576000600282815481106104f457fe5b60009182526020808320909101546040805180820182526001600160a01b03928316808252808652600180865295839020835160a081018552815460ff8082161515835261010082049097168289015292985092969587019592949093850192600160a81b909204169081111561056757fe5b600181111561057257fe5b81529054600160b01b810462ffffff166020830152600160c81b900463ffffffff16604090910152905283518490849081106105aa57fe5b6020908102919091010152506001016104db565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461062a5760405162461bcd60e51b81526004016102f2906112c2565b600061063c6080830160608401610fb8565b600181111561064757fe5b14156106655760405162461bcd60e51b81526004016102f29061128b565b6000600160006106786020850185610e89565b6001600160a01b03168152602081019190915260400160002054600160a81b900460ff1660018111156106a757fe5b14156106ef5760026106bc6020830183610e89565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b61070661070136839003830183610fea565b610a92565b50565b6001600160a01b038082166000908152600160205260409020546101009004165b919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107775760405162461bcd60e51b81526004016102f2906112c2565b6001600160a01b039091166000908152600160205260409020805463ffffffff909216600160c81b0263ffffffff60c81b19909216919091179055565b600281815481106107c157fe5b6000918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108235760405162461bcd60e51b81526004016102f2906112c2565b60006002828154811061083257fe5b60009182526020808320909101546001600160a01b03908116808452600190925260409092205490925060ff8116916101009091041681156109705760008054604051636eb1769f60e11b81526001600160a01b038085169263dd62ed3e926108aa926201000090920490911690889060040161107d565b60206040518083038186803b1580156108c257600080fd5b505afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa919061101d565b9050801561096e5760008054604051633ef1078360e01b8152620100009091046001600160a01b031691633ef107839161093b9186918991906004016111db565b600060405180830381600087803b15801561095557600080fd5b505af1158015610969573d6000803e3d6000fd5b505050505b505b6001600160a01b038316600090815260016020526040902080546001600160e81b03191690556002805460001981019081106109a857fe5b600091825260209091200154600280546001600160a01b0390921691869081106109ce57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610a0757fe5b6001900381819060005260206000200160006101000a8154906001600160a01b0302191690559055826001600160a01b03167f02826f62d88a4d9f1978eb9c06f8663f642d032908e65a915d5898f3585421c06000604051610a6991906111ff565b60405180910390a250505050565b6000546201000090046001600160a01b031681565b303b1590565b60208181015182516001600160a01b0390811660009081526001808552604091829020845181549686015160ff1990971690151517610100600160a81b0319166101009690941695909502929092178085559083015192939291839160ff60a81b191690600160a81b908490811115610b0757fe5b02179055506060820151815460809093015163ffffffff16600160c81b0263ffffffff60c81b1962ffffff909216600160b01b0262ffffff60b01b19909416939093171691909117905560208101515115610d1457600081600001516001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190610eac565b90508160200151602001516001600160a01b0316816001600160a01b031614610c0e5760405162461bcd60e51b81526004016102f290611262565b600080548351604051636eb1769f60e11b81526001600160a01b038086169363dd62ed3e93610c4b9362010000909204909216919060040161107d565b60206040518083038186803b158015610c6357600080fd5b505afa158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b919061101d565b905080610d11576000548351604051633ef1078360e01b8152620100009092046001600160a01b031691633ef1078391610cde91869190600019906004016111db565b600060405180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050505b50505b80600001516001600160a01b03167f02826f62d88a4d9f1978eb9c06f8663f642d032908e65a915d5898f3585421c0826020015160400151604051610d5991906111ff565b60405180910390a250565b604051806040016040528060006001600160a01b03168152602001610d87610d8c565b905290565b6040805160a0810182526000808252602082018190529091820190815260006020820181905260409091015290565b8035610dc681611348565b92915050565b803560028110610dc657600080fd5b600081830360c0811215610ded578182fd5b610df760406112ea565b91508235610e0481611348565b825260a0601f1982011215610e1857600080fd5b50610e2360a06112ea565b6020830135610e318161135d565b81526040830135610e4181611348565b6020820152610e538460608501610dcc565b60408201526080830135610e668161136b565b606082015260a0830135610e798161137c565b6080820152602082015292915050565b600060208284031215610e9a578081fd5b8135610ea581611348565b9392505050565b600060208284031215610ebd578081fd5b8151610ea581611348565b60008060408385031215610eda578081fd5b823567ffffffffffffffff811115610ef0578182fd5b8301601f81018513610f00578182fd5b8035610f13610f0e82611311565b6112ea565b808282526020808301925080850160c08a838288028901011115610f35578788fd5b8796505b85871015610f6157610f4b8b83610ddb565b8552600196909601959382019390810190610f39565b5050819650610f7289828a01610dbb565b955050505050509250929050565b60008060408385031215610f92578182fd5b8235610f9d81611348565b91506020830135610fad8161137c565b809150509250929050565b600060208284031215610fc9578081fd5b610ea58383610dcc565b600060c08284031215610fe4578081fd5b50919050565b600060c08284031215610ffb578081fd5b610ea58383610ddb565b600060208284031215611016578081fd5b5035919050565b60006020828403121561102e578081fd5b5051919050565b15159052565b6001600160a01b03169052565b6002811061105257fe5b9052565b62ffffff169052565b63ffffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156110d85783516001600160a01b0316835292840192918401916001016110b3565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156111875781516111158151611331565b855286015180516111299088870190611035565b868101516111398787018261103b565b5085810151606061114c81880183611048565b8201519050608061115f87820183611056565b9190910151905061117360a086018261105f565b5060c0939093019290850190600101611101565b5091979650505050505050565b85151581526001600160a01b038516602082015260a081016111b58561133d565b604083015262ffffff8416606083015263ffffffff831660808301529695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020810161120c8361133d565b825292915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600f908201526e24b731b7b93932b1ba103a37b5b2b760891b604082015260600190565b6020808252601f908201527f5573652072656d6f7665496e7374616e6365282920666f722072656d6f766500604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60405181810167ffffffffffffffff8111828210171561130957600080fd5b604052919050565b600067ffffffffffffffff821115611327578081fd5b5060209081020190565b6001600160a01b031690565b806002811061072a57fe5b6001600160a01b038116811461070657600080fd5b801515811461070657600080fd5b62ffffff8116811461070657600080fd5b63ffffffff8116811461070657600080fdfea26469706673582212207c46c875176b62100d16a46c273e615cd9eb5336dbcd238b33b227f39ff9106564736f6c634300060c0033"; +const isSuperArgs$E = (xs) => xs.length > 1; +class InstanceRegistry__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$E(args)) { + super(...args); + } else { + super(_abi$12, _bytecode$E, args[0]); + } + } + getDeployTransaction(_governance, overrides) { + return super.getDeployTransaction(_governance, overrides || {}); + } + deploy(_governance, overrides) { + return super.deploy(_governance, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$12); + } + static connect(address, runner) { + return new Contract(address, _abi$12, runner); + } +} +InstanceRegistry__factory.bytecode = _bytecode$E; +InstanceRegistry__factory.abi = _abi$12; + +var index$w = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoRouter__factory: ITornadoRouter__factory, + InstanceRegistry__factory: InstanceRegistry__factory +}); + +const _abi$11 = [ + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IENS__factory { + static createInterface() { + return new Interface(_abi$11); + } + static connect(address, runner) { + return new Contract(address, _abi$11, runner); + } +} +IENS__factory.abi = _abi$11; + +const _abi$10 = [ + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "instanceFeeWithUpdate", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IFeeManager__factory { + static createInterface() { + return new Interface(_abi$10); + } + static connect(address, runner) { + return new Contract(address, _abi$10, runner); + } +} +IFeeManager__factory.abi = _abi$10; + +const _abi$$ = [ + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + }, + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "address", + name: "_ens", + type: "address" + }, + { + internalType: "address", + name: "_staking", + type: "address" + }, + { + internalType: "address", + name: "_feeManager", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "minStakeAmount", + type: "uint256" + } + ], + name: "MinimumStakeAmount", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "RelayerBalanceNullified", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "relayer", + type: "bytes32" + }, + { + indexed: false, + internalType: "string", + name: "ensName", + type: "string" + }, + { + indexed: false, + internalType: "address", + name: "relayerAddress", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "stakedAmount", + type: "uint256" + } + ], + name: "RelayerRegistered", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "RelayerUnregistered", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "tornadoRouter", + type: "address" + } + ], + name: "RouterRegistered", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amountStakeAdded", + type: "uint256" + } + ], + name: "StakeAddedToRelayer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amountBurned", + type: "uint256" + } + ], + name: "StakeBurned", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "worker", + type: "address" + } + ], + name: "WorkerRegistered", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "relayer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "worker", + type: "address" + } + ], + name: "WorkerUnregistered", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "contract ITornadoInstance", + name: "pool", + type: "address" + } + ], + name: "burn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "ens", + outputs: [ + { + internalType: "contract IENS", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeManager", + outputs: [ + { + internalType: "contract IFeeManager", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "getRelayerBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "getRelayerEnsHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_tornadoRouter", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "toResolve", + type: "address" + } + ], + name: "isRelayer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "address", + name: "toResolve", + type: "address" + } + ], + name: "isRelayerRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "minStakeAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "nullifyBalance", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "string", + name: "ensName", + type: "string" + }, + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "address[]", + name: "workersToRegister", + type: "address[]" + } + ], + name: "register", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "string", + name: "ensName", + type: "string" + }, + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "address[]", + name: "workersToRegister", + type: "address[]" + }, + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "registerPermit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "address", + name: "worker", + type: "address" + } + ], + name: "registerWorker", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "relayers", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "bytes32", + name: "ensHash", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "minAmount", + type: "uint256" + } + ], + name: "setMinStakeAmount", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tornadoRouterAddress", + type: "address" + } + ], + name: "setTornadoRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "uint256", + name: "stake", + type: "uint256" + } + ], + name: "stakeToRelayer", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + }, + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "address", + name: "staker", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "stakeToRelayerPermit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "staking", + outputs: [ + { + internalType: "contract TornadoStakingRewards", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "tornadoRouter", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "relayer", + type: "address" + } + ], + name: "unregisterRelayer", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "worker", + type: "address" + } + ], + name: "unregisterWorker", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "workers", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$D = "0x6101206040523480156200001257600080fd5b5060405162001fab38038062001fab83398101604081905262000035916200006d565b6001600160601b0319606095861b811660805293851b841660a05291841b831660c052831b821660e05290911b166101005262000105565b600080600080600060a0868803121562000085578081fd5b85516200009281620000ec565b6020870151909550620000a581620000ec565b6040870151909450620000b881620000ec565b6060870151909350620000cb81620000ec565b6080870151909250620000de81620000ec565b809150509295509295909350565b6001600160a01b03811681146200010257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c611e1662000195600039806106785280610bf352508061075452806108af5280610ea852806111685250806105625280610f99525080610351528061080952806108dc52806109e75280610ce4525080610a205280610aa95280610c375280610e8552806111455250611e166000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80635aa6e675116100de578063c4d66de811610097578063e37e8bcc11610071578063e37e8bcc14610305578063e43fdb3c14610318578063eb4af0451461032b578063f18876841461033e57610173565b8063c4d66de8146102d7578063d0fb0203146102ea578063d990231d146102f257610173565b80635aa6e6751461026e57806385a2968314610276578063adf898a414610289578063ae53941c14610291578063b69fd4ab146102b1578063b971a6bf146102c457610173565b80634ba16d9d116101305780634ba16d9d146101f75780634cb16c2e1461020a5780634cf088d9146102125780634d4efd041461021a5780635300f8411461022d578063541d55481461024e57610173565b806314d92307146101785780632e6506491461018d5780633523dc85146101a05780633f15457f146101b35780634048a257146101d157806345a11cec146101e4575b600080fd5b61018b610186366004611612565b610346565b005b61018b61019b36600461164a565b610414565b61018b6101ae366004611612565b610460565b6101bb610560565b6040516101c891906118f5565b60405180910390f35b6101bb6101df366004611612565b610584565b61018b6101f2366004611682565b61059f565b61018b610205366004611612565b6107fe565b6101bb610898565b6101bb6108ad565b61018b610228366004611612565b6108d1565b61024061023b366004611612565b6109ac565b6040516101c89291906118cb565b61026161025c366004611612565b6109c5565b6040516101c891906119a1565b6101bb6109e5565b61018b6102843660046116f7565b610a09565b6101bb610aa7565b6102a461029f366004611612565b610acb565b6040516101c891906119ac565b6102616102bf36600461164a565b610af9565b6102a46102d2366004611612565b610b20565b61018b6102e5366004611612565b610b4b565b6101bb610bf1565b61018b6103003660046116cc565b610c15565b61018b6103133660046117fc565b610c20565b61018b610326366004611785565b610cc4565b61018b6103393660046118b3565b610cd9565b6102a4610d56565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103975760405162461bcd60e51b815260040161038e90611ae4565b60405180910390fd5b6103a0816108d1565b6001600160a01b038116600090815260026020908152604080832083815560010183905560039091529081902080546001600160a01b0319169055517f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c383521906104099083906118f5565b60405180910390a150565b3360008181526003602052604090205483906001600160a01b038083169116146104505760405162461bcd60e51b815260040161038e90611c83565b61045a8484610d5c565b50505050565b6001600160a01b03811633146104a9576001600160a01b038181166000908152600360205260409020541633146104a95760405162461bcd60e51b815260040161038e90611cd8565b6001600160a01b0380821660008181526003602052604090205490911614156104e45760405162461bcd60e51b815260040161038e90611b8b565b6001600160a01b03808216600090815260036020526040908190205490517fb2a8e18b9e887f502d65c1683e60b723fa582a6903ea4e8eb23907a19c1ce8a0926105319216908490611909565b60405180910390a16001600160a01b0316600090815260036020526040902080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602052600090815260409020546001600160a01b031681565b6000546201000090046001600160a01b031633146105cf5760405162461bcd60e51b815260040161038e90611a64565b6001600160a01b03808416600090815260036020526040902054168061062d576001600160a01b0383811660009081526003602052604090205416156106275760405162461bcd60e51b815260040161038e90611be8565b506107f9565b826001600160a01b0316816001600160a01b03161461065e5760405162461bcd60e51b815260040161038e90611c83565b604051630bbefce160e21b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632efbf384906106ad9086906004016118f5565b602060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff919061162e565b6001600160a01b03858116600090815260026020526040902054911691506107279082610df5565b6001600160a01b038086166000908152600260205260409081902092909255905163338610af60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063338610af9061078b9084906004016119ac565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050507f659f33fc6677bebf3a9bf3101092792e31f35766d0358e54577bdd91a655f6a084826040516107ee929190611988565b60405180910390a150505b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108465760405162461bcd60e51b815260040161038e90611ae4565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517f94df8c3a8087dce110e5fbc5acf380c83c94bbd31b2c8ed4c08e1396a696e1a8906104099083906118f5565b6000546201000090046001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109195760405162461bcd60e51b815260040161038e90611ae4565b6001600160a01b038082166000818152600360205260409020549091169081146109555760405162461bcd60e51b815260040161038e90611d74565b6001600160a01b03811660009081526002602052604080822091909155517fafa759fb3c68e89eaaba359f0930ab40c24875b73cc9e2f6a38b0180019eb8f3906109a09084906118f5565b60405180910390a15050565b6002602052600090815260409020805460019091015482565b6001600160a01b0390811660009081526003602052604090205416151590565b7f000000000000000000000000000000000000000000000000000000000000000081565b60405163d505accf60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90610a6190889030908b908a908a908a908a90600401611947565b600060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b50505050610a9e858888610e3e565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03908116600090815260036020908152604080832054909316825260029052206001015490565b6001600160a01b038181166000908152600360205260409020548116908316145b92915050565b6001600160a01b03908116600090815260036020908152604080832054909316825260029052205490565b600054610100900460ff1680610b645750610b64610f4c565b80610b72575060005460ff16155b610b8e5760405162461bcd60e51b815260040161038e90611b3d565b600054610100900460ff16158015610bb9576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610bed576000805461ff00191690555b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bed338383610e3e565b60405163d505accf60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90610c7890889030908d908a908a908a908a90600401611947565b600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b50505050610cb8858b8b8b8b8b610f52565b50505050505050505050565b610cd2338686868686610f52565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d215760405162461bcd60e51b815260040161038e90611ae4565b60018190556040517f404663163d528ec45288abc4389b81bd96fabf858ff57577ebd4ee7f15d7b0a6906104099083906119ac565b60015481565b6001600160a01b038181166000908152600360205260409020541615610d945760405162461bcd60e51b815260040161038e90611b0d565b6001600160a01b038181166000908152600360205260409081902080546001600160a01b03191692851692909217909155517fcde75bd02c5f739608c891bcd9aa6809e6c4a7035ac7b9f3fd5fea756db74724906109a09084908490611909565b6000610e3783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611287565b9392505050565b6001600160a01b0380831660008181526003602052604090205490911614610e785760405162461bcd60e51b815260040161038e90611abf565b610ecd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016847f0000000000000000000000000000000000000000000000000000000000000000846112b3565b6001600160a01b038216600090815260026020526040902054610ef190829061130b565b6001600160a01b0383166000908152600260205260409081902091909155517f1275dbe2a271b2b822e60f1d44894fa5fb337e7e2dc6a200205b1a5b17c07d6490610f3f9084908490611988565b60405180910390a1505050565b303b1590565b6000610f9386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061133092505050565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be3836040518263ffffffff1660e01b8152600401610fe391906119ac565b60206040518083038186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611033919061162e565b905073d4416b13d2b3a9abae7acd5d6c2bbdbe256864016001600160a01b0382168114156110735760405162461bcd60e51b815260040161038e90611c15565b816001600160a01b0316896001600160a01b0316146110a45760405162461bcd60e51b815260040161038e90611ca9565b6001600160a01b0389811660009081526003602052604090205416156110dc5760405162461bcd60e51b815260040161038e90611bbb565b6001600160a01b03891660009081526002602052604090206001810154156111165760405162461bcd60e51b815260040161038e90611a38565b6001548710156111385760405162461bcd60e51b815260040161038e90611d50565b61118d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b7f00000000000000000000000000000000000000000000000000000000000000008a6112b3565b7f1275dbe2a271b2b822e60f1d44894fa5fb337e7e2dc6a200205b1a5b17c07d648a886040516111be929190611988565b60405180910390a1868155600181018490556001600160a01b038a16600081815260036020526040812080546001600160a01b0319169092179091555b8581101561123b57600087878381811061121157fe5b90506020020160208101906112269190611612565b90506112328c82610d5c565b506001016111fb565b507f9ca7c9c762eff27b021608f232b4c4b8f9b8bf9a3d322297e47cc4209a67d5e2848a8a8d8b6040516112739594939291906119b5565b60405180910390a150505050505050505050565b600081848411156112ab5760405162461bcd60e51b815260040161038e9190611a05565b505050900390565b61045a846323b872dd60e01b8585856040516024016112d493929190611923565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261133d565b600082820183811015610e375760405162461bcd60e51b815260040161038e90611a88565b6000610b1a8260006113cc565b6060611392826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114369092919063ffffffff16565b8051909150156107f957808060200190518101906113b09190611765565b6107f95760405162461bcd60e51b815260040161038e90611d06565b6000818351116113de57506000610b1a565b60006113ea848461144d565b90506113fb848285016001016113cc565b611406858584611492565b6040516020016114179291906118cb565b6040516020818303038152906040528051906020012091505092915050565b606061144584846000856114ae565b949350505050565b6000805b8351818401141580156114855750838184018151811061146d57fe5b6020910101516001600160f81b031916601760f91b14155b15610e3757600101611451565b6000835182840111156114a457600080fd5b5091016020012090565b60606114b985611572565b6114d55760405162461bcd60e51b815260040161038e90611c4c565b60006060866001600160a01b031685876040516114f291906118d9565b60006040518083038185875af1925050503d806000811461152f576040519150601f19603f3d011682016040523d82523d6000602084013e611534565b606091505b509150915081156115485791506114459050565b8051156115585780518082602001fd5b8360405162461bcd60e51b815260040161038e9190611a05565b3b151590565b60008083601f840112611589578182fd5b50813567ffffffffffffffff8111156115a0578182fd5b60208301915083602080830285010111156115ba57600080fd5b9250929050565b60008083601f8401126115d2578182fd5b50813567ffffffffffffffff8111156115e9578182fd5b6020830191508360208285010111156115ba57600080fd5b803560ff81168114610b1a57600080fd5b600060208284031215611623578081fd5b8135610e3781611dc8565b60006020828403121561163f578081fd5b8151610e3781611dc8565b6000806040838503121561165c578081fd5b823561166781611dc8565b9150602083013561167781611dc8565b809150509250929050565b600080600060608486031215611696578081fd5b83356116a181611dc8565b925060208401356116b181611dc8565b915060408401356116c181611dc8565b809150509250925092565b600080604083850312156116de578182fd5b82356116e981611dc8565b946020939093013593505050565b600080600080600080600060e0888a031215611711578283fd5b873561171c81611dc8565b965060208801359550604088013561173381611dc8565b9450606088013593506117498960808a01611601565b925060a0880135915060c0880135905092959891949750929550565b600060208284031215611776578081fd5b81518015158114610e37578182fd5b60008060008060006060868803121561179c578081fd5b853567ffffffffffffffff808211156117b3578283fd5b6117bf89838a016115c1565b90975095506020880135945060408801359150808211156117de578283fd5b506117eb88828901611578565b969995985093965092949392505050565b6000806000806000806000806000806101008b8d03121561181b578283fd5b8a3567ffffffffffffffff80821115611832578485fd5b61183e8e838f016115c1565b909c509a5060208d0135995060408d013591508082111561185d578485fd5b5061186a8d828e01611578565b90985096505060608b013561187e81611dc8565b945060808b013593506118948c60a08d01611601565b925060c08b0135915060e08b013590509295989b9194979a5092959850565b6000602082840312156118c4578081fd5b5035919050565b918252602082015260400190565b600082516118eb818460208701611d9c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600086825260806020830152846080830152848660a084013760a08583018101919091526001600160a01b039390931660408201526060810191909152601f909201601f19169091010192915050565b6000602082528251806020840152611a24816040850160208701611d9c565b601f01601f19169190910160400192915050565b6020808252601290820152717265676973746572656420616c726561647960701b604082015260600190565b6020808252600a90820152696f6e6c792070726f787960b01b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600b908201526a085c9959da5cdd195c995960aa1b604082015260600190565b6020808252600f908201526e6f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526016908201527563616e277420737465616c20616e206164647265737360501b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526016908201527531b0b73a103ab73932b3b4b9ba32b91036b0b9ba32b960511b604082015260600190565b60208082526013908201527231b0b73a103932b3b4b9ba32b91030b3b0b4b760691b604082015260600190565b60208082526013908201527227b7363c9031bab9ba37b6903932b630bcb2b960691b604082015260600190565b6020808252601a908201527f6f6e6c7920756e7772617070656420656e7320646f6d61696e73000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600c908201526b37b7363c903932b630bcb2b960a11b604082015260600190565b60208082526015908201527437b7363c9032b739903237b6b0b4b71037bbb732b960591b604082015260600190565b60208082526014908201527337b7363c9037bbb732b91037b3103bb7b935b2b960611b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600a9082015269216d696e5f7374616b6560b01b604082015260600190565b6020808252600e908201526d36bab9ba1031329036b0b9ba32b960911b604082015260600190565b60005b83811015611db7578181015183820152602001611d9f565b8381111561045a5750506000910152565b6001600160a01b0381168114611ddd57600080fd5b5056fea26469706673582212206f4cc4f67dba9ba55aab193d3511cc31e3b32c37cef7bd7df74b3ebff2b3ca5b64736f6c634300060c0033"; +const isSuperArgs$D = (xs) => xs.length > 1; +class RelayerRegistry__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$D(args)) { + super(...args); + } else { + super(_abi$$, _bytecode$D, args[0]); + } + } + getDeployTransaction(_torn, _governance, _ens, _staking, _feeManager, overrides) { + return super.getDeployTransaction( + _torn, + _governance, + _ens, + _staking, + _feeManager, + overrides || {} + ); + } + deploy(_torn, _governance, _ens, _staking, _feeManager, overrides) { + return super.deploy( + _torn, + _governance, + _ens, + _staking, + _feeManager, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$$); + } + static connect(address, runner) { + return new Contract(address, _abi$$, runner); + } +} +RelayerRegistry__factory.bytecode = _bytecode$D; +RelayerRegistry__factory.abi = _abi$$; + +var index$v = /*#__PURE__*/Object.freeze({ + __proto__: null, + IENS__factory: IENS__factory, + IFeeManager__factory: IFeeManager__factory, + RelayerRegistry__factory: RelayerRegistry__factory +}); + +const _abi$_ = [ + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "contract Resolver", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class ENS__factory { + static createInterface() { + return new Interface(_abi$_); + } + static connect(address, runner) { + return new Contract(address, _abi$_, runner); + } +} +ENS__factory.abi = _abi$_; + +const _abi$Z = [ + { + inputs: [ + { + internalType: "bytes32[]", + name: "domains", + type: "bytes32[]" + } + ], + name: "bulkResolve", + outputs: [ + { + internalType: "address[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolve", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$C = "0x608060405234801561001057600080fd5b5061036d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c23bdf51461003b578063f9e5423414610074575b600080fd5b6100586004803603602081101561005157600080fd5b5035610167565b604080516001600160a01b039092168252519081900360200190f35b6101176004803603602081101561008a57600080fd5b8101906020810181356401000000008111156100a557600080fd5b8201836020820111156100b757600080fd5b803590602001918460208302840111640100000000831117156100d957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610292945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561015357818101518382015260200161013b565b505050509050019250505060405180910390f35b600080610172610333565b60011461019357738595bfb0d940dfedc98943fa8a907091203f25ee6101a4565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b9050806001600160a01b0316630178b8bf846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101ea57600080fd5b505afa1580156101fe573d6000803e3d6000fd5b505050506040513d602081101561021457600080fd5b505160408051631d9dabef60e11b81526004810186905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50519392505050565b6060815167ffffffffffffffff811180156102ac57600080fd5b506040519080825280602002602001820160405280156102d6578160200160208202803683370190505b50905060005b825181101561032d576103018382815181106102f457fe5b6020026020010151610167565b82828151811061030d57fe5b6001600160a01b03909216602092830291909101909101526001016102dc565b50919050565b469056fea26469706673582212201849a5e31df8347ec61f3d54e8cef603101becea24443df7d4e43cc42ff12a7564736f6c634300060c0033"; +const isSuperArgs$C = (xs) => xs.length > 1; +class EnsResolve__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$C(args)) { + super(...args); + } else { + super(_abi$Z, _bytecode$C, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$Z); + } + static connect(address, runner) { + return new Contract(address, _abi$Z, runner); + } +} +EnsResolve__factory.bytecode = _bytecode$C; +EnsResolve__factory.abi = _abi$Z; + +const _abi$Y = [ + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class Resolver__factory { + static createInterface() { + return new Interface(_abi$Y); + } + static connect(address, runner) { + return new Contract(address, _abi$Y, runner); + } +} +Resolver__factory.abi = _abi$Y; + +var index$u = /*#__PURE__*/Object.freeze({ + __proto__: null, + ENS__factory: ENS__factory, + EnsResolve__factory: EnsResolve__factory, + Resolver__factory: Resolver__factory +}); + +const _abi$X = [ + { + inputs: [ + { + internalType: "bytes32", + name: "tokenAddress", + type: "bytes32" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct Airdrop.Recipient[]", + name: "targets", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "domains", + type: "bytes32[]" + } + ], + name: "bulkResolve", + outputs: [ + { + internalType: "address[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "addr", + type: "bytes32" + } + ], + name: "resolve", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$B = "0x608060405234801561001057600080fd5b5060405161039938038061039983398101604081905261002f91610220565b8181600061003c836101aa565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161006c91906102e4565b60206040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bc91906102cc565b116100e25760405162461bcd60e51b81526004016100d990610311565b60405180910390fd5b60005b82518110156101a557816001600160a01b031663a9059cbb84838151811061010957fe5b60200260200101516000015185848151811061012157fe5b6020026020010151602001516040518363ffffffff1660e01b815260040161014a9291906102f8565b602060405180830381600087803b15801561016457600080fd5b505af1158015610178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019c91906101f9565b506001016100e5565b506000ff5b60601c90565b6000604082840312156101c1578081fd5b6101cb6040610353565b82519091506001600160a01b03811681146101e557600080fd5b808252506020820151602082015292915050565b60006020828403121561020a578081fd5b81518015158114610219578182fd5b9392505050565b6000806040808486031215610233578182fd5b8351602080860151919450906001600160401b03811115610252578384fd5b8501601f81018713610262578384fd5b805161027561027082610379565b610353565b81815283810190838501868402850186018b1015610291578788fd5b8794505b838510156102bb576102a78b826101b0565b835260019490940193918501918601610295565b508096505050505050509250929050565b6000602082840312156102dd578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60208082526022908201527f42616c616e636520697320302c2061697264726f7020616c726561647920646f6040820152616e6560f01b606082015260800190565b6040518181016001600160401b038111828210171561037157600080fd5b604052919050565b60006001600160401b0382111561038e578081fd5b506020908102019056fe"; +const isSuperArgs$B = (xs) => xs.length > 1; +class AirdropMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$B(args)) { + super(...args); + } else { + super(_abi$X, _bytecode$B, args[0]); + } + } + getDeployTransaction(tokenAddress, targets, overrides) { + return super.getDeployTransaction(tokenAddress, targets, overrides || {}); + } + deploy(tokenAddress, targets, overrides) { + return super.deploy(tokenAddress, targets, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$X); + } + static connect(address, runner) { + return new Contract(address, _abi$X, runner); + } +} +AirdropMock__factory.bytecode = _bytecode$B; +AirdropMock__factory.abi = _abi$X; + +const _abi$W = [ + { + inputs: [ + { + internalType: "bytes32", + name: "_node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "data", + type: "bytes[]" + } + ], + name: "multicall", + outputs: [ + { + internalType: "bytes[]", + name: "results", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_node", + type: "bytes32" + }, + { + internalType: "address", + name: "_addr", + type: "address" + } + ], + name: "setAddr", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$A = "0x608060405234801561001057600080fd5b5061044b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630178b8bf1461005c5780633b3b57de146100855780637ef5029814610098578063ac9650d8146100ab578063d5fa2b00146100cb575b600080fd5b61006f61006a3660046102bc565b6100e0565b60405161007c919061031e565b60405180910390f35b61006f6100933660046102bc565b6100e5565b61006f6100a63660046102bc565b610100565b6100be6100b936600461024d565b61011b565b60405161007c9190610332565b6100de6100d93660046102d4565b61021f565b005b503090565b6000908152602081905260409020546001600160a01b031690565b6000602081905290815260409020546001600160a01b031681565b60608167ffffffffffffffff8111801561013457600080fd5b5060405190808252806020026020018201604052801561016857816020015b60608152602001906001900390816101535790505b50905060005b8281101561021857600060603086868581811061018757fe5b905060200281019061019991906103c9565b6040516101a792919061030e565b600060405180830381855af49150503d80600081146101e2576040519150601f19603f3d011682016040523d82523d6000602084013e6101e7565b606091505b5091509150816101f657600080fd5b8084848151811061020357fe5b6020908102919091010152505060010161016e565b5092915050565b60009182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000806020838503121561025f578182fd5b823567ffffffffffffffff80821115610276578384fd5b818501915085601f830112610289578384fd5b813581811115610297578485fd5b86602080830285010111156102aa578485fd5b60209290920196919550909350505050565b6000602082840312156102cd578081fd5b5035919050565b600080604083850312156102e6578182fd5b8235915060208301356001600160a01b0381168114610303578182fd5b809150509250929050565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156103bc57878503603f1901845281518051808752885b8181101561038c578281018901518882018a01528801610371565b8181111561039c578989838a0101525b50601f01601f191695909501860194509285019290850190600101610357565b5092979650505050505050565b6000808335601e198436030181126103df578283fd5b83018035915067ffffffffffffffff8211156103f9578283fd5b60200191503681900382131561040e57600080fd5b925092905056fea26469706673582212202e44de42b72aec6265acc191876b290bc887c846ffca216ac5d28a16fd49092564736f6c634300060c0033"; +const isSuperArgs$A = (xs) => xs.length > 1; +class ENSMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$A(args)) { + super(...args); + } else { + super(_abi$W, _bytecode$A, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$W); + } + static connect(address, runner) { + return new Contract(address, _abi$W, runner); + } +} +ENSMock__factory.bytecode = _bytecode$A; +ENSMock__factory.abi = _abi$W; + +const _abi$V = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "uint256", + name: "_pausePeriod", + type: "uint256" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct TORN.Recipient[]", + name: "_vesting", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + } + ], + name: "Allowed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + } + ], + name: "Disallowed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Paused", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Unpaused", + type: "event" + }, + { + inputs: [ + { + internalType: "address[]", + name: "target", + type: "address[]" + } + ], + name: "addToAllowedList", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "allowedTransferee", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burnFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "canUnpauseAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "chainID", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "chainId", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bool", + name: "decision", + type: "bool" + } + ], + name: "changeTransferability", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "fakeTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "paused", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "target", + type: "address[]" + } + ], + name: "removeFromAllowedList", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "_token", + type: "address" + }, + { + internalType: "address payable", + name: "_to", + type: "address" + }, + { + internalType: "uint256", + name: "_balance", + type: "uint256" + } + ], + name: "rescueTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_chainId", + type: "uint256" + } + ], + name: "setChainId", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_fakeTimestamp", + type: "uint256" + } + ], + name: "setFakeTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$z = "0x60c06040523480156200001157600080fd5b506040516200298e3803806200298e8339810160408190526200003491620006d6565b604080518082018252600b81526a0a8dee4dcc2c8de86c2e6d60ab1b6020808301918252835180850190945260048452632a27a92760e11b90840152815186938693869390926200008891600391620005e4565b5080516200009e906004906020840190620005e4565b50506005805460ff1916601217905550620000b8620001f8565b506008805460ff199081169091556001600160601b0319606085901b1660a0526001600160a01b0384166000908152600960205260408120805490921660011790915583905b82518110156200017b5760008382815181106200011757fe5b60200260200101516000015190506200014f818584815181106200013757fe5b602002602001015160200151620002b460201b60201c565b6001600160a01b03166000908152600960205260409020805460ff1916600190811790915501620000fe565b506200019f836200018b62000397565b620003b360201b62000d721790919060201c565b608052620001ac620003e4565b620001b66200045b565b6a084595161401484a00000014620001eb5760405162461bcd60e51b8152600401620001e290620008a8565b60405180910390fd5b5050505050505062000946565b6000806200020562000461565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200023462000467565b805160209182012060408051808201825260018152603160f81b90840152516200028693927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918791309101620007be565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b6001600160a01b038216620002dd5760405162461bcd60e51b8152600401620001e290620008df565b620002eb6000838362000501565b6200030781600254620003b360201b62000d721790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200033a91839062000d72620003b3821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200038b90859062000916565b60405180910390a35050565b6000620003ae620005bc60201b62000d9e1760201c565b905090565b600082820183811015620003db5760405162461bcd60e51b8152600401620001e290620007ea565b90505b92915050565b60085460ff16156200040a5760405162461bcd60e51b8152600401620001e2906200087e565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862000442620005d7565b604051620004519190620007aa565b60405180910390a1565b60025490565b600b5490565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905090565b62000519838383620005b760201b620007421760201c565b62000523620005db565b15806200054857506001600160a01b03831660009081526009602052604090205460ff165b806200056c57506001600160a01b03821660009081526009602052604090205460ff165b6200058b5760405162461bcd60e51b8152600401620001e29062000858565b6001600160a01b038216301415620005b75760405162461bcd60e51b8152600401620001e29062000821565b505050565b6000600a54600014620005d257600a54620003ae565b504290565b3390565b60085460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200062757805160ff191683800117855562000657565b8280016001018555821562000657579182015b82811115620006575782518255916020019190600101906200063a565b506200066592915062000669565b5090565b5b808211156200066557600081556001016200066a565b80516001600160a01b0381168114620003de57600080fd5b600060408284031215620006aa578081fd5b620006b660406200091f565b9050620006c4838362000680565b81526020820151602082015292915050565b600080600060608486031215620006eb578283fd5b620006f7858562000680565b9250602080850151925060408086015160018060401b03808211156200071b578485fd5b818801915088601f8301126200072f578485fd5b8151818111156200073e578586fd5b6200074d85868302016200091f565b8181528581019250838601858302850187018c10156200076b578788fd5b8794505b828510156200079957620007848c8262000698565b8452600194909401939286019285016200076f565b508096505050505050509250925092565b6001600160a01b0391909116815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601c908201527f544f524e3a20696e636f727265637420646973747269627574696f6e00000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200093e57600080fd5b604052919050565b60805160a05160601c612008620009866000398061056f52806106975280610764528061081d5280610a215250806107bc5280610d2052506120086000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637ecebe0011610104578063adb61832116100a2578063d505accf11610071578063d505accf1461038d578063dc0f0d12146103a0578063dd62ed3e146103a8578063ef0e2ff4146103bb576101cf565b8063adb6183214610357578063adc879e91461035f578063c565882714610367578063cea9d26f1461037a576101cf565b806395d89b41116100de57806395d89b41146103215780639a8a059214610329578063a457c2d714610331578063a9059cbb14610344576101cf565b80637ecebe00146102e857806381893c7c146102fb578063885ad0cf1461030e576101cf565b80633c8d76d1116101715780635c975abb1161014b5780635c975abb146102a75780635d4545a0146102af57806370a08231146102c257806379cc6790146102d5576101cf565b80633c8d76d11461026a57806342966c681461027f5780635aa6e67514610292576101cf565b806318160ddd116101ad57806318160ddd1461022757806323b872dd1461022f578063313ce567146102425780633950935114610257576101cf565b806301ec0fab146101d457806306fdde03146101f2578063095ea7b314610207575b600080fd5b6101dc6103ce565b6040516101e99190611e68565b60405180910390f35b6101fa6103d4565b6040516101e99190611943565b61021a610215366004611708565b61046b565b6040516101e991906118ba565b6101dc610489565b61021a61023d366004611653565b61048f565b61024a610516565b6040516101e99190611e71565b61021a610265366004611708565b61051f565b61027d610278366004611733565b61056d565b005b61027d61028d36600461181c565b610681565b61029a610695565b6040516101e9919061188d565b61021a6106b9565b61021a6102bd3660046115ff565b6106c2565b6101dc6102d03660046115ff565b6106d7565b61027d6102e3366004611708565b6106f2565b6101dc6102f63660046115ff565b610747565b61027d6103093660046117d0565b610762565b61027d61031c366004611733565b61081b565b6101fa610922565b6101dc610983565b61021a61033f366004611708565b610989565b61021a610352366004611708565b6109f1565b6101dc610a05565b6101dc610a14565b61027d61037536600461181c565b610a1a565b61027d610388366004611808565b610a1f565b61027d61039b366004611693565b610bdd565b6101dc610d1e565b6101dc6103b636600461161b565b610d42565b61027d6103c936600461181c565b610d6d565b600a5481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104605780601f1061043557610100808354040283529160200191610460565b820191906000526020600020905b81548152906001019060200180831161044357829003601f168201915b505050505090505b90565b600061047f610478610db7565b8484610dbb565b5060015b92915050565b60025490565b600061049c848484610e6f565b61050c846104a8610db7565b61050785604051806060016040528060288152602001611f62602891396001600160a01b038a166000908152600160205260408120906104e6610db7565b6001600160a01b031681526020810191909152604001600020549190610f84565b610dbb565b5060019392505050565b60055460ff1690565b600061047f61052c610db7565b84610507856001600061053d610db7565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d72565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661059f610db7565b6001600160a01b0316146105ce5760405162461bcd60e51b81526004016105c590611de4565b60405180910390fd5b60005b815181101561067d576000600960008484815181106105ec57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d3082828151811061065857fe5b602002602001015160405161066d919061188d565b60405180910390a16001016105d1565b5050565b61069261068c610db7565b82610fb0565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085460ff1690565b60096020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b600061072482604051806060016040528060248152602001611f8a6024913961071d866103b6610db7565b9190610f84565b905061073883610732610db7565b83610dbb565b6107428383610fb0565b505050565b6001600160a01b031660009081526006602052604090205490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610794610db7565b6001600160a01b0316146107ba5760405162461bcd60e51b81526004016105c590611de4565b7f00000000000000000000000000000000000000000000000000000000000000006107e3610a05565b116108005760405162461bcd60e51b81526004016105c590611bd9565b80156108135761080e611092565b610692565b6106926110fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661084d610db7565b6001600160a01b0316146108735760405162461bcd60e51b81526004016105c590611de4565b60005b815181101561067d5760016009600084848151811061089157fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc058282815181106108fd57fe5b6020026020010151604051610912919061188d565b60405180910390a1600101610876565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104605780601f1061043557610100808354040283529160200191610460565b600b5481565b600061047f610996610db7565b8461050785604051806060016040528060258152602001611fae60259139600160006109c0610db7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610f84565b600061047f6109fe610db7565b8484610e6f565b6000610a0f610d9e565b905090565b600b5490565b600a55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a51610db7565b6001600160a01b031614610a775760405162461bcd60e51b81526004016105c590611de4565b6001600160a01b038216610a9d5760405162461bcd60e51b81526004016105c590611d58565b6001600160a01b038316610b06574760008215610ac357610abe8284611157565b610ac5565b815b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610afe573d6000803e3d6000fd5b505050610742565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610b3590309060040161188d565b60206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190611834565b905060008215610b9e57610b998284611157565b610ba0565b815b905060008111610bc25760405162461bcd60e51b81526004016105c590611e31565b610bd66001600160a01b038616858361116d565b5050505050565b83610be6610a05565b1115610c045760405162461bcd60e51b81526004016105c590611ace565b6001600160a01b0387166000908152600660209081526040808320549051610c57927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c91016118c5565b6040516020818303038152906040528051906020012090506000611901610c7c6111c3565b83604051602001610c8f93929190611868565b6040516020818303038152906040528051906020012090506000610cb582878787611202565b9050896001600160a01b0316816001600160a01b031614610ce85760405162461bcd60e51b81526004016105c590611c20565b6001600160a01b038a16600090815260066020526040902080546001019055610d128a8a8a610dbb565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b55565b600082820183811015610d975760405162461bcd60e51b81526004016105c590611a60565b9392505050565b6000600a54600014610db257600a54610a0f565b504290565b3390565b6001600160a01b038316610de15760405162461bcd60e51b81526004016105c590611cdd565b6001600160a01b038216610e075760405162461bcd60e51b81526004016105c590611a1e565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e62908590611e68565b60405180910390a3505050565b6001600160a01b038316610e955760405162461bcd60e51b81526004016105c590611c98565b6001600160a01b038216610ebb5760405162461bcd60e51b81526004016105c5906119ad565b610ec68383836112fa565b610f0381604051806060016040528060268152602001611f3c602691396001600160a01b0386166000908152602081905260409020549190610f84565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610f329082610d72565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e62908590611e68565b60008184841115610fa85760405162461bcd60e51b81526004016105c59190611943565b505050900390565b6001600160a01b038216610fd65760405162461bcd60e51b81526004016105c590611c57565b610fe2826000836112fa565b61101f81604051806060016040528060228152602001611f1a602291396001600160a01b0385166000908152602081905260409020549190610f84565b6001600160a01b0383166000908152602081905260409020556002546110459082611399565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611086908590611e68565b60405180910390a35050565b60085460ff166110b45760405162461bcd60e51b81526004016105c5906119f0565b6008805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110e7610db7565b6040516110f4919061188d565b60405180910390a1565b60085460ff16156111215760405162461bcd60e51b81526004016105c590611b6d565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e7610db7565b60008183106111665781610d97565b5090919050565b6107428363a9059cbb60e01b848460405160240161118c9291906118a1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526113db565b600080600760006111d2610a14565b8152602081019190915260400160002054905080156111f2579050610468565b6111fa61146a565b915050610468565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112445760405162461bcd60e51b81526004016105c590611b2b565b8360ff16601b148061125957508360ff16601c145b6112755760405162461bcd60e51b81526004016105c590611b97565b60006001868686866040516000815260200160405260405161129a9493929190611925565b6020604051602081039080840390855afa1580156112bc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112ef5760405162461bcd60e51b81526004016105c590611976565b90505b949350505050565b611305838383610742565b61130d6106b9565b158061133157506001600160a01b03831660009081526009602052604090205460ff165b8061135457506001600160a01b03821660009081526009602052604090205460ff165b6113705760405162461bcd60e51b81526004016105c590611b05565b6001600160a01b0382163014156107425760405162461bcd60e51b81526004016105c590611a97565b6000610d9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f84565b6060611430826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115209092919063ffffffff16565b805190915015610742578080602001905181019061144e91906117ec565b6107425760405162461bcd60e51b81526004016105c590611d9a565b600080611475610a14565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6114a26103d4565b805160209182012060408051808201825260018152603160f81b90840152516114f293927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69187913091016118f9565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b60606112f284846000856060611535856115ee565b6115515760405162461bcd60e51b81526004016105c590611d21565b60006060866001600160a01b0316858760405161156e919061184c565b60006040518083038185875af1925050503d80600081146115ab576040519150601f19603f3d011682016040523d82523d6000602084013e6115b0565b606091505b509150915081156115c45791506112f29050565b8051156115d45780518082602001fd5b8360405162461bcd60e51b81526004016105c59190611943565b3b151590565b803561048381611ef6565b600060208284031215611610578081fd5b8135610d9781611ef6565b6000806040838503121561162d578081fd5b823561163881611ef6565b9150602083013561164881611ef6565b809150509250929050565b600080600060608486031215611667578081fd5b833561167281611ef6565b9250602084013561168281611ef6565b929592945050506040919091013590565b600080600080600080600060e0888a0312156116ad578283fd5b87356116b881611ef6565b965060208801356116c881611ef6565b95506040880135945060608801359350608088013560ff811681146116eb578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561171a578182fd5b823561172581611ef6565b946020939093013593505050565b60006020808385031215611745578182fd5b823567ffffffffffffffff81111561175b578283fd5b8301601f8101851361176b578283fd5b803561177e61177982611ea6565b611e7f565b818152838101908385018584028501860189101561179a578687fd5b8694505b838510156117c4576117b089826115f4565b83526001949094019391850191850161179e565b50979650505050505050565b6000602082840312156117e1578081fd5b8135610d9781611f0b565b6000602082840312156117fd578081fd5b8151610d9781611f0b565b600080600060608486031215611667578283fd5b60006020828403121561182d578081fd5b5035919050565b600060208284031215611845578081fd5b5051919050565b6000825161185e818460208701611ec6565b9190910192915050565b60f09390931b6001600160f01b03191683526002830191909152602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152611962816040850160208701611ec6565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252601d908201527f45524332305065726d69743a206578706972656420646561646c696e65000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526027908201527f544f524e3a2063616e6e6f74206368616e6765207472616e736665726162696c6040820152661a5d1e481e595d60ca1b606082015260800190565b6020808252601e908201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602d908201527f544f524e3a206f6e6c7920676f7665726e616e63652063616e20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611e9e57600080fd5b604052919050565b600067ffffffffffffffff821115611ebc578081fd5b5060209081020190565b60005b83811015611ee1578181015183820152602001611ec9565b83811115611ef0576000848401525b50505050565b6001600160a01b038116811461069257600080fd5b801515811461069257600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c25cb2cef98080abbebec9b5719a4f46d638fbe559a3ab7a9de64272855c3c1064736f6c634300060c0033"; +const isSuperArgs$z = (xs) => xs.length > 1; +class TORNMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$z(args)) { + super(...args); + } else { + super(_abi$V, _bytecode$z, args[0]); + } + } + getDeployTransaction(_governance, _pausePeriod, _vesting, overrides) { + return super.getDeployTransaction( + _governance, + _pausePeriod, + _vesting, + overrides || {} + ); + } + deploy(_governance, _pausePeriod, _vesting, overrides) { + return super.deploy( + _governance, + _pausePeriod, + _vesting, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$V); + } + static connect(address, runner) { + return new Contract(address, _abi$V, runner); + } +} +TORNMock__factory.bytecode = _bytecode$z; +TORNMock__factory.abi = _abi$V; + +const _abi$U = [ + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "fakeTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_fakeTimestamp", + type: "uint256" + } + ], + name: "setFakeTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$y = "0x608060405234801561001057600080fd5b5060d28061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c806301ec0fab146041578063adb61832146059578063c565882714605f575b600080fd5b6047607b565b60408051918252519081900360200190f35b60476081565b607960048036036020811015607357600080fd5b50356097565b005b60005481565b60008054156090576000546092565b425b905090565b60005556fea2646970667358221220b2410460a5b24aec9983bcf8349aa3b589a0dff9120af5b704feae536a65813064736f6c634300060c0033"; +const isSuperArgs$y = (xs) => xs.length > 1; +class Timestamp__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$y(args)) { + super(...args); + } else { + super(_abi$U, _bytecode$y, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$U); + } + static connect(address, runner) { + return new Contract(address, _abi$U, runner); + } +} +Timestamp__factory.bytecode = _bytecode$y; +Timestamp__factory.abi = _abi$U; + +const _abi$T = [ + { + inputs: [ + { + internalType: "address", + name: "_token", + type: "address" + }, + { + internalType: "address", + name: "_beneficiary", + type: "address" + }, + { + internalType: "uint256", + name: "_startTimestamp", + type: "uint256" + }, + { + internalType: "uint256", + name: "_cliffInMonths", + type: "uint256" + }, + { + internalType: "uint256", + name: "_durationInMonths", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Released", + type: "event" + }, + { + inputs: [], + name: "SECONDS_PER_MONTH", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "beneficiary", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "cliffInMonths", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "durationInMonths", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "fakeTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "release", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "released", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_fakeTimestamp", + type: "uint256" + } + ], + name: "setFakeTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "startTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "vestedAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$x = "0x61012060405234801561001157600080fd5b50604051610d2e380380610d2e833981810160405260a081101561003457600080fd5b5080516020820151604083015160608401516080909401519293919290919084848484846001600160a01b0384166100b3576040805162461bcd60e51b815260206004820152601b60248201527f42656e65666963696172792063616e6e6f7420626520656d7074790000000000604482015290519081900360640190fd5b80821115610108576040805162461bcd60e51b815260206004820152601e60248201527f436c6966662069732067726561746572207468616e206475726174696f6e0000604482015290519081900360640190fd5b6001600160601b0319606086811b821660a05285901b1660805261010081905260c082905282156101395782610141565b610141610154565b60e0525061018698505050505050505050565b600061016861016d60201b6105b81760201c565b905090565b600060015460001461018157600154610168565b504290565b60805160601c60a05160601c60c05160e05161010051610b366101f86000398061024452806103bc528061041e52508061019352806101cf52806105725250806102115280610534525080610289528061030952806104b5528061059652508061016d52806104d75250610b366000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063928d89ae11610071578063928d89ae146101195780639613252114610121578063adb6183214610129578063c565882714610131578063e6fd48bc1461014e578063fc0c546a14610156576100b4565b806301ec0fab146100b957806310786deb146100d357806338af3eed146100db57806344b1231f146100ff57806367097a4b1461010757806386d1a69f1461010f575b600080fd5b6100c161015e565b60408051918252519081900360200190f35b6100c1610164565b6100e361016b565b604080516001600160a01b039092168252519081900360200190f35b6100c161018f565b6100c161041c565b610117610440565b005b6100c1610532565b6100c1610556565b6100c161055c565b6101176004803603602081101561014757600080fd5b503561056b565b6100c1610570565b6100e3610594565b60015481565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006101ba61055c565b10156101c857506000610419565b60006101fc7f00000000000000000000000000000000000000000000000000000000000000006101f661055c565b906105d1565b9050600061020d8262278d0061061c565b90507f000000000000000000000000000000000000000000000000000000000000000081101561024257600092505050610419565b7f0000000000000000000000000000000000000000000000000000000000000000811061030557604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156102cf57600080fd5b505afa1580156102e3573d6000803e3d6000fd5b505050506040513d60208110156102f957600080fd5b50519250610419915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561037457600080fd5b505afa158015610388573d6000803e3d6000fd5b505050506040513d602081101561039e57600080fd5b505160008054919250906103b390839061065e565b905060006103eb7f00000000000000000000000000000000000000000000000000000000000000006103e584876106b8565b9061061c565b90506000610404600054836105d190919063ffffffff16565b90506104108482610711565b96505050505050505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061044a61018f565b905060008111610498576040805162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b604482015290519081900360640190fd5b6000546104a5908261065e565b6000556104fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610727565b6040805182815290517ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5659181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b60006105666105b8565b905090565b600155565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001546000146105cc57600154610566565b504290565b600061061383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061077e565b90505b92915050565b600061061383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610815565b600082820183811015610613576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826106c757506000610616565b828202828482816106d457fe5b04146106135760405162461bcd60e51b8152600401808060200182810382526021815260200180610ab66021913960400191505060405180910390fd5b60008183106107205781610613565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261077990849061087a565b505050565b6000818484111561080d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107d25781810151838201526020016107ba565b50505050905090810190601f1680156107ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836108645760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156107d25781810151838201526020016107ba565b50600083858161087057fe5b0495945050505050565b60606108cf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661092b9092919063ffffffff16565b805190915015610779578080602001905160208110156108ee57600080fd5b50516107795760405162461bcd60e51b815260040180806020018281038252602a815260200180610ad7602a913960400191505060405180910390fd5b606061093a8484600085610942565b949350505050565b606061094d85610aaf565b61099e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106109dd5780518252601f1990920191602091820191016109be565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a3f576040519150601f19603f3d011682016040523d82523d6000602084013e610a44565b606091505b50915091508115610a5857915061093a9050565b805115610a685780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156107d25781810151838201526020016107ba565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220852e02606e74d747094138d7e10fc9f005278a953559d85ca961b67f95c9fa8f64736f6c634300060c0033"; +const isSuperArgs$x = (xs) => xs.length > 1; +class VestingMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$x(args)) { + super(...args); + } else { + super(_abi$T, _bytecode$x, args[0]); + } + } + getDeployTransaction(_token, _beneficiary, _startTimestamp, _cliffInMonths, _durationInMonths, overrides) { + return super.getDeployTransaction( + _token, + _beneficiary, + _startTimestamp, + _cliffInMonths, + _durationInMonths, + overrides || {} + ); + } + deploy(_token, _beneficiary, _startTimestamp, _cliffInMonths, _durationInMonths, overrides) { + return super.deploy( + _token, + _beneficiary, + _startTimestamp, + _cliffInMonths, + _durationInMonths, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$T); + } + static connect(address, runner) { + return new Contract(address, _abi$T, runner); + } +} +VestingMock__factory.bytecode = _bytecode$x; +VestingMock__factory.abi = _abi$T; + +const _abi$S = [ + { + inputs: [ + { + internalType: "bytes32", + name: "_torn", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_governance", + type: "bytes32" + }, + { + internalType: "uint256", + name: "_duration", + type: "uint256" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct Voucher.Recipient[]", + name: "_airdrops", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "allowedTransferee", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "domains", + type: "bytes32[]" + } + ], + name: "bulkResolve", + outputs: [ + { + internalType: "address[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "expiresAt", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "fakeTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "redeem", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "rescueExpiredTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "addr", + type: "bytes32" + } + ], + name: "resolve", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_fakeTimestamp", + type: "uint256" + } + ], + name: "setFakeTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$w = "0x60e06040523480156200001157600080fd5b5060405162001b7838038062001b78833981016040819052620000349162000476565b8383838360405180606001604052806026815260200162001b5260269139604051806040016040528060058152602001643b2a27a92760d91b8152508160039080519060200190620000889291906200038d565b5080516200009e9060049060208401906200038d565b50506005805460ff1916601217905550620000b984620001b7565b60601b6001600160601b031916608052620000d483620001b7565b60601b6001600160601b03191660c0526200010782620000f3620001bd565b620001d960201b6200089d1790919060201c565b60a05260005b8151811015620001a857620001598282815181106200012857fe5b6020026020010151600001518383815181106200014157fe5b6020026020010151602001516200021160201b60201c565b6001600660008484815181106200016c57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200010d565b5050505050505050506200061d565b60601c90565b6000620001d4620002f460201b620008c91760201c565b905090565b6000828201838110156200020a5760405162461bcd60e51b8152600401620002019062000548565b60405180910390fd5b9392505050565b6001600160a01b0382166200023a5760405162461bcd60e51b81526004016200020190620005b6565b62000248600083836200030f565b6200026481600254620001d960201b6200089d1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002979183906200089d620001d9821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620002e8908590620005ed565b60405180910390a35050565b60006007546000146200030a57600754620001d4565b504290565b620003278383836200038860201b620008e21760201c565b6001600160a01b03821615806200034557506001600160a01b038316155b806200036957506001600160a01b03831660009081526006602052604090205460ff165b620003885760405162461bcd60e51b815260040162000201906200057f565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003d057805160ff191683800117855562000400565b8280016001018555821562000400579182015b8281111562000400578251825591602001919060010190620003e3565b506200040e92915062000412565b5090565b5b808211156200040e576000815560010162000413565b6000604082840312156200043b578081fd5b620004476040620005f6565b82519091506001600160a01b03811681146200046257600080fd5b808252506020820151602082015292915050565b600080600080608085870312156200048c578384fd5b8451935060208086015193506040808701519350606087015160018060401b0380821115620004b9578485fd5b818901915089601f830112620004cd578485fd5b815181811115620004dc578586fd5b620004eb8586830201620005f6565b8181528581019250838601858302850187018d101562000509578788fd5b8794505b828510156200053757620005228d8262000429565b8452600194909401939286019285016200050d565b50989b979a50959850505050505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200061557600080fd5b604052919050565b60805160601c60a05160c05160601c6114e46200066e6000398061046952806106de5250806104c352806105f752806106945250806105d3528061066852806106ff52806107a352506114e46000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638622a689116100b8578063adf898a41161007c578063adf898a414610269578063be040fb014610271578063c39ef8551461027b578063c565882714610283578063dd62ed3e14610296578063f9e54234146102a957610142565b80638622a6891461022b57806395d89b4114610233578063a457c2d71461023b578063a9059cbb1461024e578063adb618321461026157610142565b8063313ce5671161010a578063313ce567146101b557806339509351146101ca5780635aa6e675146101dd5780635c23bdf5146101f25780635d4545a01461020557806370a082311461021857610142565b806301ec0fab1461014757806306fdde0314610165578063095ea7b31461017a57806318160ddd1461019a57806323b872dd146101a2575b600080fd5b61014f6102c9565b60405161015c9190611376565b60405180910390f35b61016d6102cf565b60405161015c9190611087565b61018d610188366004610ed7565b610365565b60405161015c919061107c565b61014f610383565b61018d6101b0366004610e97565b610389565b6101bd610410565b60405161015c919061137f565b61018d6101d8366004610ed7565b610419565b6101e5610467565b60405161015c9190611002565b6101e5610200366004610fb6565b61048b565b61018d610213366004610e48565b610491565b61014f610226366004610e48565b6104a6565b61014f6104c1565b61016d6104e5565b61018d610249366004610ed7565b610546565b61018d61025c366004610ed7565b6105ae565b61014f6105c2565b6101e56105d1565b6102796105f5565b005b610279610692565b610279610291366004610fb6565b6107cc565b61014f6102a4366004610e63565b6107d1565b6102bc6102b7366004610f01565b6107fc565b60405161015c919061102f565b60075481565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b820191906000526020600020905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b60006103796103726108e7565b84846108eb565b5060015b92915050565b60025490565b600061039684848461099f565b610406846103a26108e7565b61040185604051806060016040528060288152602001611462602891396001600160a01b038a166000908152600160205260408120906103e06108e7565b6001600160a01b031681526020810191909152604001600020549190610ab4565b6108eb565b5060019392505050565b60055460ff1690565b60006103796104266108e7565b8461040185600160006104376108e7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061089d565b7f000000000000000000000000000000000000000000000000000000000000000081565b60601c90565b60066020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b60006103796105536108e7565b846104018560405180606001604052806025815260200161148a602591396001600061057d6108e7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610ab4565b60006103796105bb6108e7565b848461099f565b60006105cc6108c9565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061061e6105c2565b106106445760405162461bcd60e51b815260040161063b90611176565b60405180910390fd5b600061064f336104a6565b905061065b3382610ae0565b61068f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383610bc2565b50565b7f00000000000000000000000000000000000000000000000000000000000000006106bb6105c2565b10156106d95760405162461bcd60e51b815260040161063b906111ad565b6107ca7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016107499190611002565b60206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107999190610fce565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190610bc2565b565b600755565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060815167ffffffffffffffff8111801561081657600080fd5b50604051908082528060200260200182016040528015610840578160200160208202803683370190505b50905060005b82518110156108975761086b83828151811061085e57fe5b602002602001015161048b565b82828151811061087757fe5b6001600160a01b0390921660209283029190910190910152600101610846565b50919050565b6000828201838110156108c25760405162461bcd60e51b815260040161063b9061113f565b9392505050565b60006007546000146108dd576007546105cc565b504290565b505050565b3390565b6001600160a01b0383166109115760405162461bcd60e51b815260040161063b906112b1565b6001600160a01b0382166109375760405162461bcd60e51b815260040161063b906110fd565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610992908590611376565b60405180910390a3505050565b6001600160a01b0383166109c55760405162461bcd60e51b815260040161063b9061126c565b6001600160a01b0382166109eb5760405162461bcd60e51b815260040161063b906110ba565b6109f6838383610c18565b610a338160405180606001604052806026815260200161143c602691396001600160a01b0386166000908152602081905260409020549190610ab4565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610a62908261089d565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610992908590611376565b60008184841115610ad85760405162461bcd60e51b815260040161063b9190611087565b505050900390565b6001600160a01b038216610b065760405162461bcd60e51b815260040161063b9061122b565b610b1282600083610c18565b610b4f8160405180606001604052806022815260200161141a602291396001600160a01b0385166000908152602081905260409020549190610ab4565b6001600160a01b038316600090815260208190526040902055600254610b759082610c7f565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bb6908590611376565b60405180910390a35050565b6108e28363a9059cbb60e01b8484604051602401610be1929190611016565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610cc1565b610c238383836108e2565b6001600160a01b0382161580610c4057506001600160a01b038316155b80610c6357506001600160a01b03831660009081526006602052604090205460ff165b6108e25760405162461bcd60e51b815260040161063b906111f4565b60006108c283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ab4565b6060610d16826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d509092919063ffffffff16565b8051909150156108e25780806020019051810190610d349190610f96565b6108e25760405162461bcd60e51b815260040161063b9061132c565b6060610d5f8484600085610d67565b949350505050565b6060610d7285610e2b565b610d8e5760405162461bcd60e51b815260040161063b906112f5565b60006060866001600160a01b03168587604051610dab9190610fe6565b60006040518083038185875af1925050503d8060008114610de8576040519150601f19603f3d011682016040523d82523d6000602084013e610ded565b606091505b50915091508115610e01579150610d5f9050565b805115610e115780518082602001fd5b8360405162461bcd60e51b815260040161063b9190611087565b3b151590565b80356001600160a01b038116811461037d57600080fd5b600060208284031215610e59578081fd5b6108c28383610e31565b60008060408385031215610e75578081fd5b610e7f8484610e31565b9150610e8e8460208501610e31565b90509250929050565b600080600060608486031215610eab578081fd5b8335610eb681611404565b92506020840135610ec681611404565b929592945050506040919091013590565b60008060408385031215610ee9578182fd5b610ef38484610e31565b946020939093013593505050565b60006020808385031215610f13578182fd5b823567ffffffffffffffff811115610f29578283fd5b8301601f81018513610f39578283fd5b8035610f4c610f47826113b4565b61138d565b8181528381019083850185840285018601891015610f68578687fd5b8694505b83851015610f8a578035835260019490940193918501918501610f6c565b50979650505050505050565b600060208284031215610fa7578081fd5b815180151581146108c2578182fd5b600060208284031215610fc7578081fd5b5035919050565b600060208284031215610fdf578081fd5b5051919050565b60008251610ff88184602087016113d4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156110705783516001600160a01b03168352928401929184019160010161104b565b50909695505050505050565b901515815260200190565b60006020825282518060208401526110a68160408501602087016113d4565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f41697264726f702072656465656d20706572696f642068617320656e64656400604082015260600190565b60208082526027908201527f41697264726f702072656465656d20706572696f6420686173206e6f7420656e604082015266191959081e595d60ca1b606082015260800190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156113ac57600080fd5b604052919050565b600067ffffffffffffffff8211156113ca578081fd5b5060209081020190565b60005b838110156113ef5781810151838201526020016113d7565b838111156113fe576000848401525b50505050565b6001600160a01b038116811461068f57600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220794126baf4ea3c44b9afb84b4d8a20535aca899e75471e5d9bb4c8e671aabde664736f6c634300060c0033546f726e61646f4361736820766f756368657220666f72206561726c792061646f7074657273"; +const isSuperArgs$w = (xs) => xs.length > 1; +class VoucherMock__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$w(args)) { + super(...args); + } else { + super(_abi$S, _bytecode$w, args[0]); + } + } + getDeployTransaction(_torn, _governance, _duration, _airdrops, overrides) { + return super.getDeployTransaction( + _torn, + _governance, + _duration, + _airdrops, + overrides || {} + ); + } + deploy(_torn, _governance, _duration, _airdrops, overrides) { + return super.deploy( + _torn, + _governance, + _duration, + _airdrops, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$S); + } + static connect(address, runner) { + return new Contract(address, _abi$S, runner); + } +} +VoucherMock__factory.bytecode = _bytecode$w; +VoucherMock__factory.abi = _abi$S; + +var index$t = /*#__PURE__*/Object.freeze({ + __proto__: null, + AirdropMock__factory: AirdropMock__factory, + ENSMock__factory: ENSMock__factory, + TORNMock__factory: TORNMock__factory, + Timestamp__factory: Timestamp__factory, + VestingMock__factory: VestingMock__factory, + VoucherMock__factory: VoucherMock__factory +}); + +const _abi$R = [ + { + inputs: [ + { + internalType: "bytes32", + name: "tokenAddress", + type: "bytes32" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct Airdrop.Recipient[]", + name: "targets", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "domains", + type: "bytes32[]" + } + ], + name: "bulkResolve", + outputs: [ + { + internalType: "address[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolve", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$v = "0x60806040523480156200001157600080fd5b506040516200054038038062000540833981016040819052620000349162000396565b60006200004183620001c2565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040162000073919062000467565b60206040518083038186803b1580156200008c57600080fd5b505afa158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c791906200044e565b11620000f05760405162461bcd60e51b8152600401620000e7906200049d565b60405180910390fd5b60005b8251811015620001bd57816001600160a01b031663a9059cbb8483815181106200011957fe5b6020026020010151600001518584815181106200013257fe5b6020026020010151602001516040518363ffffffff1660e01b81526004016200015d9291906200047b565b602060405180830381600087803b1580156200017857600080fd5b505af11580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000374565b50600101620000f3565b506000ff5b600080620001cf62000310565b600114620001f257738595bfb0d940dfedc98943fa8a907091203f25ee62000203565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906200023490869060040162000494565b60206040518083038186803b1580156200024d57600080fd5b505afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000288919062000355565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401620002b5919062000494565b60206040518083038186803b158015620002ce57600080fd5b505afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000355565b9392505050565b4690565b60006040828403121562000326578081fd5b620003326040620004df565b90508151620003418162000526565b808252506020820151602082015292915050565b60006020828403121562000367578081fd5b8151620003098162000526565b60006020828403121562000386578081fd5b8151801515811462000309578182fd5b6000806040808486031215620003aa578182fd5b8351602080860151919450906001600160401b03811115620003ca578384fd5b8501601f81018713620003db578384fd5b8051620003f2620003ec8262000506565b620004df565b81815283810190838501868402850186018b10156200040f578788fd5b8794505b838510156200043d57620004288b8262000314565b83526001949094019391850191860162000413565b508096505050505050509250929050565b60006020828403121562000460578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b60208082526022908201527f42616c616e636520697320302c2061697264726f7020616c726561647920646f6040820152616e6560f01b606082015260800190565b6040518181016001600160401b0381118282101715620004fe57600080fd5b604052919050565b60006001600160401b038211156200051c578081fd5b5060209081020190565b6001600160a01b03811681146200053c57600080fd5b5056fe"; +const isSuperArgs$v = (xs) => xs.length > 1; +class Airdrop__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$v(args)) { + super(...args); + } else { + super(_abi$R, _bytecode$v, args[0]); + } + } + getDeployTransaction(tokenAddress, targets, overrides) { + return super.getDeployTransaction(tokenAddress, targets, overrides || {}); + } + deploy(tokenAddress, targets, overrides) { + return super.deploy(tokenAddress, targets, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$R); + } + static connect(address, runner) { + return new Contract(address, _abi$R, runner); + } +} +Airdrop__factory.bytecode = _bytecode$v; +Airdrop__factory.abi = _abi$R; + +const _abi$Q = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "chainID", + outputs: [ + { + internalType: "uint256", + name: "_chainID", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class ERC20Permit__factory { + static createInterface() { + return new Interface(_abi$Q); + } + static connect(address, runner) { + return new Contract(address, _abi$Q, runner); + } +} +ERC20Permit__factory.abi = _abi$Q; + +const _abi$P = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "uint256", + name: "_pausePeriod", + type: "uint256" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct TORN.Recipient[]", + name: "_vestings", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + } + ], + name: "Allowed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + } + ], + name: "Disallowed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Paused", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "Unpaused", + type: "event" + }, + { + inputs: [ + { + internalType: "address[]", + name: "target", + type: "address[]" + } + ], + name: "addToAllowedList", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "allowedTransferee", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "burnFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "canUnpauseAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "chainID", + outputs: [ + { + internalType: "uint256", + name: "_chainID", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bool", + name: "decision", + type: "bool" + } + ], + name: "changeTransferability", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "paused", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "target", + type: "address[]" + } + ], + name: "removeFromAllowedList", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "_token", + type: "address" + }, + { + internalType: "address payable", + name: "_to", + type: "address" + }, + { + internalType: "uint256", + name: "_balance", + type: "uint256" + } + ], + name: "rescueTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$u = "0x60c06040523480156200001157600080fd5b506040516200288338038062002883833981016040819052620000349162000699565b604080518082018252600b81526a0a8dee4dcc2c8de86c2e6d60ab1b6020808301918252835180850190945260048452632a27a92760e11b9084015281519192916200008391600391620005a7565b50805162000099906004906020840190620005a7565b50506005805460ff1916601217905550620000b3620001f0565b506008805460ff199081169091556001600160601b0319606085901b1660a0526001600160a01b0384166000908152600960205260408120805490921660011790915583905b8251811015620001765760008382815181106200011257fe5b60200260200101516000015190506200014a818584815181106200013257fe5b602002602001015160200151620002ac60201b60201c565b6001600160a01b03166000908152600960205260409020805460ff1916600190811790915501620000f9565b506200019a83620001866200038f565b6200039360201b62000cbd1790919060201c565b608052620001a7620003c4565b620001b16200043b565b6a084595161401484a00000014620001e65760405162461bcd60e51b8152600401620001dd906200086b565b60405180910390fd5b5050505062000909565b600080620001fd62000441565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200022c62000445565b805160209182012060408051808201825260018152603160f81b90840152516200027e93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691879130910162000781565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b6001600160a01b038216620002d55760405162461bcd60e51b8152600401620001dd90620008a2565b620002e360008383620004df565b620002ff816002546200039360201b62000cbd1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200033291839062000cbd62000393821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000383908590620008d9565b60405180910390a35050565b4290565b600082820183811015620003bb5760405162461bcd60e51b8152600401620001dd90620007ad565b90505b92915050565b60085460ff1615620003ea5760405162461bcd60e51b8152600401620001dd9062000841565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004226200059a565b6040516200043191906200076d565b60405180910390a1565b60025490565b4690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620004d55780601f10620004a957610100808354040283529160200191620004d5565b820191906000526020600020905b815481529060010190602001808311620004b757829003601f168201915b5050505050905090565b620004f78383836200059560201b620006aa1760201c565b620005016200059e565b15806200052657506001600160a01b03831660009081526009602052604090205460ff165b806200054a57506001600160a01b03821660009081526009602052604090205460ff165b620005695760405162461bcd60e51b8152600401620001dd906200081b565b6001600160a01b038216301415620005955760405162461bcd60e51b8152600401620001dd90620007e4565b505050565b3390565b60085460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005ea57805160ff19168380011785556200061a565b828001600101855582156200061a579182015b828111156200061a578251825591602001919060010190620005fd565b50620006289291506200062c565b5090565b5b808211156200062857600081556001016200062d565b80516001600160a01b0381168114620003be57600080fd5b6000604082840312156200066d578081fd5b620006796040620008e2565b905062000687838362000643565b81526020820151602082015292915050565b600080600060608486031215620006ae578283fd5b620006ba858562000643565b9250602080850151925060408086015160018060401b0380821115620006de578485fd5b818801915088601f830112620006f2578485fd5b81518181111562000701578586fd5b620007108586830201620008e2565b8181528581019250838601858302850187018c10156200072e578788fd5b8794505b828510156200075c57620007478c826200065b565b84526001949094019392860192850162000732565b508096505050505050509250925092565b6001600160a01b0391909116815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601c908201527f544f524e3a20696e636f727265637420646973747269627574696f6e00000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200090157600080fd5b604052919050565b60805160a05160601c611f3a62000949600039806104d752806105ff52806106cc528061078552806109715250806107245280610c705250611f3a6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806379cc6790116100de578063a9059cbb11610097578063cea9d26f11610071578063cea9d26f146102fb578063d505accf1461030e578063dc0f0d1214610321578063dd62ed3e1461032957610173565b8063a9059cbb146102d8578063adb61832146102eb578063adc879e9146102f357610173565b806379cc6790146102715780637ecebe001461028457806381893c7c14610297578063885ad0cf146102aa57806395d89b41146102bd578063a457c2d7146102c557610173565b80633c8d76d1116101305780633c8d76d11461020657806342966c681461021b5780635aa6e6751461022e5780635c975abb146102435780635d4545a01461024b57806370a082311461025e57610173565b806306fdde0314610178578063095ea7b31461019657806318160ddd146101b657806323b872dd146101cb578063313ce567146101de57806339509351146101f3575b600080fd5b61018061033c565b60405161018d9190611875565b60405180910390f35b6101a96101a436600461163a565b6103d3565b60405161018d91906117ec565b6101be6103f1565b60405161018d9190611d9a565b6101a96101d9366004611585565b6103f7565b6101e661047e565b60405161018d9190611da3565b6101a961020136600461163a565b610487565b610219610214366004611665565b6104d5565b005b61021961022936600461174e565b6105e9565b6102366105fd565b60405161018d91906117bf565b6101a9610621565b6101a9610259366004611531565b61062a565b6101be61026c366004611531565b61063f565b61021961027f36600461163a565b61065a565b6101be610292366004611531565b6106af565b6102196102a5366004611702565b6106ca565b6102196102b8366004611665565b610783565b61018061088a565b6101a96102d336600461163a565b6108eb565b6101a96102e636600461163a565b610953565b6101be610967565b6101be61096b565b61021961030936600461173a565b61096f565b61021961031c3660046115c5565b610b2d565b6101be610c6e565b6101be61033736600461154d565b610c92565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c85780601f1061039d576101008083540402835291602001916103c8565b820191906000526020600020905b8154815290600101906020018083116103ab57829003601f168201915b505050505090505b90565b60006103e76103e0610ce9565b8484610ced565b5060015b92915050565b60025490565b6000610404848484610da1565b61047484610410610ce9565b61046f85604051806060016040528060288152602001611e94602891396001600160a01b038a1660009081526001602052604081209061044e610ce9565b6001600160a01b031681526020810191909152604001600020549190610eb6565b610ced565b5060019392505050565b60055460ff1690565b60006103e7610494610ce9565b8461046f85600160006104a5610ce9565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610cbd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610507610ce9565b6001600160a01b0316146105365760405162461bcd60e51b815260040161052d90611d16565b60405180910390fd5b60005b81518110156105e55760006009600084848151811061055457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d308282815181106105c057fe5b60200260200101516040516105d591906117bf565b60405180910390a1600101610539565b5050565b6105fa6105f4610ce9565b82610ee2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085460ff1690565b60096020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b600061068c82604051806060016040528060248152602001611ebc6024913961068586610337610ce9565b9190610eb6565b90506106a08361069a610ce9565b83610ced565b6106aa8383610ee2565b505050565b6001600160a01b031660009081526006602052604090205490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106fc610ce9565b6001600160a01b0316146107225760405162461bcd60e51b815260040161052d90611d16565b7f000000000000000000000000000000000000000000000000000000000000000061074b610967565b116107685760405162461bcd60e51b815260040161052d90611b0b565b801561077b57610776610fc4565b6105fa565b6105fa611030565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107b5610ce9565b6001600160a01b0316146107db5760405162461bcd60e51b815260040161052d90611d16565b60005b81518110156105e5576001600960008484815181106107f957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc0582828151811061086557fe5b602002602001015160405161087a91906117bf565b60405180910390a16001016107de565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c85780601f1061039d576101008083540402835291602001916103c8565b60006103e76108f8610ce9565b8461046f85604051806060016040528060258152602001611ee06025913960016000610922610ce9565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610eb6565b60006103e7610960610ce9565b8484610da1565b4290565b4690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109a1610ce9565b6001600160a01b0316146109c75760405162461bcd60e51b815260040161052d90611d16565b6001600160a01b0382166109ed5760405162461bcd60e51b815260040161052d90611c8a565b6001600160a01b038316610a56574760008215610a1357610a0e8284611089565b610a15565b815b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610a4e573d6000803e3d6000fd5b5050506106aa565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610a859030906004016117bf565b60206040518083038186803b158015610a9d57600080fd5b505afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611766565b905060008215610aee57610ae98284611089565b610af0565b815b905060008111610b125760405162461bcd60e51b815260040161052d90611d63565b610b266001600160a01b038616858361109f565b5050505050565b83610b36610967565b1115610b545760405162461bcd60e51b815260040161052d90611a00565b6001600160a01b0387166000908152600660209081526040808320549051610ba7927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c91016117f7565b6040516020818303038152906040528051906020012090506000611901610bcc6110f5565b83604051602001610bdf9392919061179a565b6040516020818303038152906040528051906020012090506000610c0582878787611134565b9050896001600160a01b0316816001600160a01b031614610c385760405162461bcd60e51b815260040161052d90611b52565b6001600160a01b038a16600090815260066020526040902080546001019055610c628a8a8a610ced565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610ce25760405162461bcd60e51b815260040161052d90611992565b9392505050565b3390565b6001600160a01b038316610d135760405162461bcd60e51b815260040161052d90611c0f565b6001600160a01b038216610d395760405162461bcd60e51b815260040161052d90611950565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d94908590611d9a565b60405180910390a3505050565b6001600160a01b038316610dc75760405162461bcd60e51b815260040161052d90611bca565b6001600160a01b038216610ded5760405162461bcd60e51b815260040161052d906118df565b610df883838361122c565b610e3581604051806060016040528060268152602001611e6e602691396001600160a01b0386166000908152602081905260409020549190610eb6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e649082610cbd565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d94908590611d9a565b60008184841115610eda5760405162461bcd60e51b815260040161052d9190611875565b505050900390565b6001600160a01b038216610f085760405162461bcd60e51b815260040161052d90611b89565b610f148260008361122c565b610f5181604051806060016040528060228152602001611e4c602291396001600160a01b0385166000908152602081905260409020549190610eb6565b6001600160a01b038316600090815260208190526040902055600254610f7790826112cb565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fb8908590611d9a565b60405180910390a35050565b60085460ff16610fe65760405162461bcd60e51b815260040161052d90611922565b6008805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611019610ce9565b60405161102691906117bf565b60405180910390a1565b60085460ff16156110535760405162461bcd60e51b815260040161052d90611a9f565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611019610ce9565b60008183106110985781610ce2565b5090919050565b6106aa8363a9059cbb60e01b84846040516024016110be9291906117d3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261130d565b6000806007600061110461096b565b8152602081019190915260400160002054905080156111245790506103d0565b61112c61139c565b9150506103d0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156111765760405162461bcd60e51b815260040161052d90611a5d565b8360ff16601b148061118b57508360ff16601c145b6111a75760405162461bcd60e51b815260040161052d90611ac9565b6000600186868686604051600081526020016040526040516111cc9493929190611857565b6020604051602081039080840390855afa1580156111ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112215760405162461bcd60e51b815260040161052d906118a8565b90505b949350505050565b6112378383836106aa565b61123f610621565b158061126357506001600160a01b03831660009081526009602052604090205460ff165b8061128657506001600160a01b03821660009081526009602052604090205460ff165b6112a25760405162461bcd60e51b815260040161052d90611a37565b6001600160a01b0382163014156106aa5760405162461bcd60e51b815260040161052d906119c9565b6000610ce283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610eb6565b6060611362826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114529092919063ffffffff16565b8051909150156106aa5780806020019051810190611380919061171e565b6106aa5760405162461bcd60e51b815260040161052d90611ccc565b6000806113a761096b565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d461033c565b805160209182012060408051808201825260018152603160f81b908401525161142493927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691879130910161182b565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b60606112248484600085606061146785611520565b6114835760405162461bcd60e51b815260040161052d90611c53565b60006060866001600160a01b031685876040516114a0919061177e565b60006040518083038185875af1925050503d80600081146114dd576040519150601f19603f3d011682016040523d82523d6000602084013e6114e2565b606091505b509150915081156114f65791506112249050565b8051156115065780518082602001fd5b8360405162461bcd60e51b815260040161052d9190611875565b3b151590565b80356103eb81611e28565b600060208284031215611542578081fd5b8135610ce281611e28565b6000806040838503121561155f578081fd5b823561156a81611e28565b9150602083013561157a81611e28565b809150509250929050565b600080600060608486031215611599578081fd5b83356115a481611e28565b925060208401356115b481611e28565b929592945050506040919091013590565b600080600080600080600060e0888a0312156115df578283fd5b87356115ea81611e28565b965060208801356115fa81611e28565b95506040880135945060608801359350608088013560ff8116811461161d578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561164c578182fd5b823561165781611e28565b946020939093013593505050565b60006020808385031215611677578182fd5b823567ffffffffffffffff81111561168d578283fd5b8301601f8101851361169d578283fd5b80356116b06116ab82611dd8565b611db1565b81815283810190838501858402850186018910156116cc578687fd5b8694505b838510156116f6576116e28982611526565b8352600194909401939185019185016116d0565b50979650505050505050565b600060208284031215611713578081fd5b8135610ce281611e3d565b60006020828403121561172f578081fd5b8151610ce281611e3d565b600080600060608486031215611599578283fd5b60006020828403121561175f578081fd5b5035919050565b600060208284031215611777578081fd5b5051919050565b60008251611790818460208701611df8565b9190910192915050565b60f09390931b6001600160f01b03191683526002830191909152602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152611894816040850160208701611df8565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252601d908201527f45524332305065726d69743a206578706972656420646561646c696e65000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526027908201527f544f524e3a2063616e6e6f74206368616e6765207472616e736665726162696c6040820152661a5d1e481e595d60ca1b606082015260800190565b6020808252601e908201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602d908201527f544f524e3a206f6e6c7920676f7665726e616e63652063616e20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611dd057600080fd5b604052919050565b600067ffffffffffffffff821115611dee578081fd5b5060209081020190565b60005b83811015611e13578181015183820152602001611dfb565b83811115611e22576000848401525b50505050565b6001600160a01b03811681146105fa57600080fd5b80151581146105fa57600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fd515804eca384cb14c99861e60dc5364ae65ba9ddfdfe00d195788ee631d01064736f6c634300060c0033"; +const isSuperArgs$u = (xs) => xs.length > 1; +class TORN__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$u(args)) { + super(...args); + } else { + super(_abi$P, _bytecode$u, args[0]); + } + } + getDeployTransaction(_governance, _pausePeriod, _vestings, overrides) { + return super.getDeployTransaction( + _governance, + _pausePeriod, + _vestings, + overrides || {} + ); + } + deploy(_governance, _pausePeriod, _vestings, overrides) { + return super.deploy( + _governance, + _pausePeriod, + _vestings, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$P); + } + static connect(address, runner) { + return new Contract(address, _abi$P, runner); + } +} +TORN__factory.bytecode = _bytecode$u; +TORN__factory.abi = _abi$P; + +const _abi$O = [ + { + inputs: [ + { + internalType: "address", + name: "_token", + type: "address" + }, + { + internalType: "address", + name: "_beneficiary", + type: "address" + }, + { + internalType: "uint256", + name: "_startTimestamp", + type: "uint256" + }, + { + internalType: "uint256", + name: "_cliffInMonths", + type: "uint256" + }, + { + internalType: "uint256", + name: "_durationInMonths", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Released", + type: "event" + }, + { + inputs: [], + name: "SECONDS_PER_MONTH", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "beneficiary", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "cliffInMonths", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "durationInMonths", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "release", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "released", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "startTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "vestedAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$t = "0x61012060405234801561001157600080fd5b50604051610c8c380380610c8c833981810160405260a081101561003457600080fd5b508051602082015160408301516060840151608090940151929391929091906001600160a01b0384166100ae576040805162461bcd60e51b815260206004820152601b60248201527f42656e65666963696172792063616e6e6f7420626520656d7074790000000000604482015290519081900360640190fd5b80821115610103576040805162461bcd60e51b815260206004820152601e60248201527f436c6966662069732067726561746572207468616e206475726174696f6e0000604482015290519081900360640190fd5b6001600160601b0319606086811b821660a05285901b1660805261010081905260c08290528215610134578261013c565b61013c61014a565b60e0525061014e9350505050565b4290565b60805160601c60a05160601c60c05160e05161010051610acc6101c060003980610203528061037b52806103dd525080610152528061018e52806105215250806101d052806104f352508061024852806102c85280610474528061054552508061012c52806104965250610acc6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063928d89ae11610066578063928d89ae146100fb5780639613252114610103578063adb618321461010b578063e6fd48bc14610113578063fc0c546a1461011b5761009e565b806310786deb146100a357806338af3eed146100bd57806344b1231f146100e157806367097a4b146100e957806386d1a69f146100f1575b600080fd5b6100ab610123565b60408051918252519081900360200190f35b6100c561012a565b604080516001600160a01b039092168252519081900360200190f35b6100ab61014e565b6100ab6103db565b6100f96103ff565b005b6100ab6104f1565b6100ab610515565b6100ab61051b565b6100ab61051f565b6100c5610543565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000061017961051b565b1015610187575060006103d8565b60006101bb7f00000000000000000000000000000000000000000000000000000000000000006101b561051b565b90610567565b905060006101cc8262278d006105b2565b90507f0000000000000000000000000000000000000000000000000000000000000000811015610201576000925050506103d8565b7f000000000000000000000000000000000000000000000000000000000000000081106102c457604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561028e57600080fd5b505afa1580156102a2573d6000803e3d6000fd5b505050506040513d60208110156102b857600080fd5b505192506103d8915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d602081101561035d57600080fd5b505160008054919250906103729083906105f4565b905060006103aa7f00000000000000000000000000000000000000000000000000000000000000006103a4848761064e565b906105b2565b905060006103c36000548361056790919063ffffffff16565b90506103cf84826106a7565b96505050505050505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061040961014e565b905060008111610457576040805162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b604482015290519081900360640190fd5b60005461046490826105f4565b6000556104bb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836106bd565b6040805182815290517ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5659181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b4290565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006105a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610714565b90505b92915050565b60006105a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506107ab565b6000828201838110156105a9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261065d575060006105ac565b8282028284828161066a57fe5b04146105a95760405162461bcd60e51b8152600401808060200182810382526021815260200180610a4c6021913960400191505060405180910390fd5b60008183106106b657816105a9565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261070f908490610810565b505050565b600081848411156107a35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610768578181015183820152602001610750565b50505050905090810190601f1680156107955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836107fa5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610768578181015183820152602001610750565b50600083858161080657fe5b0495945050505050565b6060610865826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108c19092919063ffffffff16565b80519091501561070f5780806020019051602081101561088457600080fd5b505161070f5760405162461bcd60e51b815260040180806020018281038252602a815260200180610a6d602a913960400191505060405180910390fd5b60606108d084846000856108d8565b949350505050565b60606108e385610a45565b610934576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106109735780518252601f199092019160209182019101610954565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146109d5576040519150601f19603f3d011682016040523d82523d6000602084013e6109da565b606091505b509150915081156109ee5791506108d09050565b8051156109fe5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315610768578181015183820152602001610750565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212203b3e8370e345374172efb9e3693b20807c318ecfcc569df94f28df8a94f2727a64736f6c634300060c0033"; +const isSuperArgs$t = (xs) => xs.length > 1; +class Vesting__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$t(args)) { + super(...args); + } else { + super(_abi$O, _bytecode$t, args[0]); + } + } + getDeployTransaction(_token, _beneficiary, _startTimestamp, _cliffInMonths, _durationInMonths, overrides) { + return super.getDeployTransaction( + _token, + _beneficiary, + _startTimestamp, + _cliffInMonths, + _durationInMonths, + overrides || {} + ); + } + deploy(_token, _beneficiary, _startTimestamp, _cliffInMonths, _durationInMonths, overrides) { + return super.deploy( + _token, + _beneficiary, + _startTimestamp, + _cliffInMonths, + _durationInMonths, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$O); + } + static connect(address, runner) { + return new Contract(address, _abi$O, runner); + } +} +Vesting__factory.bytecode = _bytecode$t; +Vesting__factory.abi = _abi$O; + +const _abi$N = [ + { + inputs: [ + { + internalType: "bytes32", + name: "_torn", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_governance", + type: "bytes32" + }, + { + internalType: "uint256", + name: "_duration", + type: "uint256" + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + internalType: "struct Voucher.Recipient[]", + name: "_airdrops", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "allowedTransferee", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "blockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "domains", + type: "bytes32[]" + } + ], + name: "bulkResolve", + outputs: [ + { + internalType: "address[]", + name: "result", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "subtractedValue", + type: "uint256" + } + ], + name: "decreaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "expiresAt", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "addedValue", + type: "uint256" + } + ], + name: "increaseAllowance", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "redeem", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "rescueExpiredTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolve", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$s = "0x60e06040523480156200001157600080fd5b5060405162001d8d38038062001d8d833981016040819052620000349162000593565b60405180606001604052806026815260200162001d6760269139604051806040016040528060058152602001643b2a27a92760d91b81525081600390805190602001906200008492919062000497565b5080516200009a90600490602084019062000497565b50506005805460ff1916601217905550620000b584620001af565b60601b6001600160601b031916608052620000d083620001af565b60601b6001600160601b03191660c0526200010382620000ef620002fd565b6200030160201b6200098d1790919060201c565b60a05260005b8151811015620001a457620001558282815181106200012457fe5b6020026020010151600001518383815181106200013d57fe5b6020026020010151602001516200033260201b60201c565b6001600660008484815181106200016857fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000109565b505050505062000753565b600080620001bc62000415565b600114620001df57738595bfb0d940dfedc98943fa8a907091203f25ee620001f0565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906200022190869060040162000665565b60206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000574565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401620002a2919062000665565b60206040518083038186803b158015620002bb57600080fd5b505afa158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062000574565b9392505050565b4290565b600082820183811015620002f65760405162461bcd60e51b815260040162000329906200066e565b60405180910390fd5b6001600160a01b0382166200035b5760405162461bcd60e51b81526004016200032990620006dc565b620003696000838362000419565b62000385816002546200030160201b6200098d1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620003b89183906200098d62000301821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200040990859062000665565b60405180910390a35050565b4690565b620004318383836200049260201b620009b21760201c565b6001600160a01b03821615806200044f57506001600160a01b038316155b806200047357506001600160a01b03831660009081526006602052604090205460ff165b620004925760405162461bcd60e51b81526004016200032990620006a5565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004da57805160ff19168380011785556200050a565b828001600101855582156200050a579182015b828111156200050a578251825591602001919060010190620004ed565b50620005189291506200051c565b5090565b5b808211156200051857600081556001016200051d565b60006040828403121562000545578081fd5b62000551604062000713565b9050815162000560816200073a565b808252506020820151602082015292915050565b60006020828403121562000586578081fd5b8151620002f6816200073a565b60008060008060808587031215620005a9578283fd5b8451935060208086015193506040808701519350606087015160018060401b0380821115620005d6578485fd5b818901915089601f830112620005ea578485fd5b815181811115620005f9578586fd5b62000608858683020162000713565b8181528581019250838601858302850187018d101562000626578788fd5b8794505b8285101562000654576200063f8d8262000533565b8452600194909401939286019285016200062a565b50989b979a50959850505050505050565b90815260200190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6040518181016001600160401b03811182821017156200073257600080fd5b604052919050565b6001600160a01b03811681146200075057600080fd5b50565b60805160601c60a05160c05160601c6115c3620007a46000398061043152806107d35250806105c352806106ec52806107895250806106c8528061075d52806107f4528061089852506115c36000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638622a689116100ad578063adf898a411610071578063adf898a41461024b578063be040fb014610253578063c39ef8551461025d578063dd62ed3e14610265578063f9e54234146102785761012c565b80638622a6891461020d57806395d89b4114610215578063a457c2d71461021d578063a9059cbb14610230578063adb61832146102435761012c565b806339509351116100f457806339509351146101ac5780635aa6e675146101bf5780635c23bdf5146101d45780635d4545a0146101e757806370a08231146101fa5761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461016f57806323b872dd14610184578063313ce56714610197575b600080fd5b610139610298565b604051610146919061116f565b60405180910390f35b61016261015d366004610fb5565b61032e565b604051610146919061115b565b61017761034b565b6040516101469190611166565b610162610192366004610f75565b610351565b61019f6103d8565b604051610146919061145e565b6101626101ba366004610fb5565b6103e1565b6101c761042f565b60405161014691906110e1565b6101c76101e2366004611095565b610453565b6101626101f5366004610f05565b610591565b610177610208366004610f05565b6105a6565b6101776105c1565b6101396105e5565b61016261022b366004610fb5565b610646565b61016261023e366004610fb5565b6106ae565b6101776106c2565b6101c76106c6565b61025b6106ea565b005b61025b610787565b610177610273366004610f3d565b6108c1565b61028b610286366004610fe0565b6108ec565b604051610146919061110e565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103245780601f106102f957610100808354040283529160200191610324565b820191906000526020600020905b81548152906001019060200180831161030757829003601f168201915b5050505050905090565b600061034261033b6109b7565b84846109bb565b50600192915050565b60025490565b600061035e848484610a6f565b6103ce8461036a6109b7565b6103c985604051806060016040528060288152602001611541602891396001600160a01b038a166000908152600160205260408120906103a86109b7565b6001600160a01b031681526020810191909152604001600020549190610b84565b6109bb565b5060019392505050565b60055460ff1690565b60006103426103ee6109b7565b846103c985600160006103ff6109b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061098d565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008061045e610bb0565b60011461047f57738595bfb0d940dfedc98943fa8a907091203f25ee610490565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906104bf908690600401611166565b60206040518083038186803b1580156104d757600080fd5b505afa1580156104eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050f9190610f21565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b815260040161053a9190611166565b60206040518083038186803b15801561055257600080fd5b505afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190610f21565b9392505050565b60066020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103245780601f106102f957610100808354040283529160200191610324565b60006103426106536109b7565b846103c985604051806060016040528060258152602001611569602591396001600061067d6109b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610b84565b60006103426106bb6109b7565b8484610a6f565b4290565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006107136106c2565b106107395760405162461bcd60e51b81526004016107309061125e565b60405180910390fd5b6000610744336105a6565b90506107503382610bb4565b6107846001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383610c96565b50565b7f00000000000000000000000000000000000000000000000000000000000000006107b06106c2565b10156107ce5760405162461bcd60e51b815260040161073090611295565b6108bf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161083e91906110e1565b60206040518083038186803b15801561085657600080fd5b505afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088e91906110ad565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190610c96565b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060815167ffffffffffffffff8111801561090657600080fd5b50604051908082528060200260200182016040528015610930578160200160208202803683370190505b50905060005b82518110156109875761095b83828151811061094e57fe5b6020026020010151610453565b82828151811061096757fe5b6001600160a01b0390921660209283029190910190910152600101610936565b50919050565b60008282018381101561058a5760405162461bcd60e51b815260040161073090611227565b505050565b3390565b6001600160a01b0383166109e15760405162461bcd60e51b815260040161073090611399565b6001600160a01b038216610a075760405162461bcd60e51b8152600401610730906111e5565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a62908590611166565b60405180910390a3505050565b6001600160a01b038316610a955760405162461bcd60e51b815260040161073090611354565b6001600160a01b038216610abb5760405162461bcd60e51b8152600401610730906111a2565b610ac6838383610cec565b610b038160405180606001604052806026815260200161151b602691396001600160a01b0386166000908152602081905260409020549190610b84565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610b32908261098d565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a62908590611166565b60008184841115610ba85760405162461bcd60e51b8152600401610730919061116f565b505050900390565b4690565b6001600160a01b038216610bda5760405162461bcd60e51b815260040161073090611313565b610be682600083610cec565b610c23816040518060600160405280602281526020016114f9602291396001600160a01b0385166000908152602081905260409020549190610b84565b6001600160a01b038316600090815260208190526040902055600254610c499082610d53565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c8a908590611166565b60405180910390a35050565b6109b28363a9059cbb60e01b8484604051602401610cb59291906110f5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d95565b610cf78383836109b2565b6001600160a01b0382161580610d1457506001600160a01b038316155b80610d3757506001600160a01b03831660009081526006602052604090205460ff165b6109b25760405162461bcd60e51b8152600401610730906112dc565b600061058a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b84565b6060610dea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e249092919063ffffffff16565b8051909150156109b25780806020019051810190610e089190611075565b6109b25760405162461bcd60e51b815260040161073090611414565b6060610e338484600085610e3b565b949350505050565b6060610e4685610eff565b610e625760405162461bcd60e51b8152600401610730906113dd565b60006060866001600160a01b03168587604051610e7f91906110c5565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b50915091508115610ed5579150610e339050565b805115610ee55780518082602001fd5b8360405162461bcd60e51b8152600401610730919061116f565b3b151590565b600060208284031215610f16578081fd5b813561058a816114e3565b600060208284031215610f32578081fd5b815161058a816114e3565b60008060408385031215610f4f578081fd5b8235610f5a816114e3565b91506020830135610f6a816114e3565b809150509250929050565b600080600060608486031215610f89578081fd5b8335610f94816114e3565b92506020840135610fa4816114e3565b929592945050506040919091013590565b60008060408385031215610fc7578182fd5b8235610fd2816114e3565b946020939093013593505050565b60006020808385031215610ff2578182fd5b823567ffffffffffffffff811115611008578283fd5b8301601f81018513611018578283fd5b803561102b61102682611493565b61146c565b8181528381019083850185840285018601891015611047578687fd5b8694505b8385101561106957803583526001949094019391850191850161104b565b50979650505050505050565b600060208284031215611086578081fd5b8151801515811461058a578182fd5b6000602082840312156110a6578081fd5b5035919050565b6000602082840312156110be578081fd5b5051919050565b600082516110d78184602087016114b3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561114f5783516001600160a01b03168352928401929184019160010161112a565b50909695505050505050565b901515815260200190565b90815260200190565b600060208252825180602084015261118e8160408501602087016114b3565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f41697264726f702072656465656d20706572696f642068617320656e64656400604082015260600190565b60208082526027908201527f41697264726f702072656465656d20706572696f6420686173206e6f7420656e604082015266191959081e595d60ca1b606082015260800190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561148b57600080fd5b604052919050565b600067ffffffffffffffff8211156114a9578081fd5b5060209081020190565b60005b838110156114ce5781810151838201526020016114b6565b838111156114dd576000848401525b50505050565b6001600160a01b038116811461078457600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209b2d6f14167bc062b61418b8fca6b7946d243420e3df874c9632acb30079c69b64736f6c634300060c0033546f726e61646f4361736820766f756368657220666f72206561726c792061646f7074657273"; +const isSuperArgs$s = (xs) => xs.length > 1; +class Voucher__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$s(args)) { + super(...args); + } else { + super(_abi$N, _bytecode$s, args[0]); + } + } + getDeployTransaction(_torn, _governance, _duration, _airdrops, overrides) { + return super.getDeployTransaction( + _torn, + _governance, + _duration, + _airdrops, + overrides || {} + ); + } + deploy(_torn, _governance, _duration, _airdrops, overrides) { + return super.deploy( + _torn, + _governance, + _duration, + _airdrops, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$N); + } + static connect(address, runner) { + return new Contract(address, _abi$N, runner); + } +} +Voucher__factory.bytecode = _bytecode$s; +Voucher__factory.abi = _abi$N; + +var index$s = /*#__PURE__*/Object.freeze({ + __proto__: null, + Airdrop__factory: Airdrop__factory, + ERC20Permit__factory: ERC20Permit__factory, + TORN__factory: TORN__factory, + Vesting__factory: Vesting__factory, + Voucher__factory: Voucher__factory, + ensSol: index$u, + mocks: index$t +}); + +const _abi$M = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "address", + name: "_admin", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "callToOwner", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "delegateToOwner", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "getCurrentOwner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeToOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$r = "0x608060405260405162000e6738038062000e67833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150839050828282828281620000ff82620001f6565b805115620001bd576000826001600160a01b0316826040518082805190602001908083835b60208310620001455780518252601f19909201916020918201910162000124565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620001a7576040519150601f19603f3d011682016040523d82523d6000602084013e620001ac565b606091505b5050905080620001bb57600080fd5b505b50620001c69050565b620001d1826200026d565b505050505050620001ed336200029160201b620008ab1760201c565b50505062000308565b6200020c81620002bd60201b620008d51760201c565b620002495760405162461bcd60e51b815260040180806020018281038252603681526020018062000e316036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b806200029c620002c3565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610b1980620003186000396000f3fe6080604052600436106100955760003560e01c80635c60da1b116100595780635c60da1b146102fe5780638f2839701461032f578063a18a186b14610362578063a6f9dae114610377578063f851a440146103aa576100a4565b806323711ab1146100ac57806323c735f1146101625780632e44e0e0146101955780633659cfe61461024b5780634f1ef2861461027e576100a4565b366100a4576100a26103bf565b005b6100a26103bf565b6100a2600480360360408110156100c257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ed57600080fd5b8201836020820111156100ff57600080fd5b8035906020019184600183028401116401000000008311171561012157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103d9945050505050565b34801561016e57600080fd5b506100a26004803603602081101561018557600080fd5b50356001600160a01b03166104e7565b6100a2600480360360408110156101ab57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101d657600080fd5b8201836020820111156101e857600080fd5b8035906020019184600183028401116401000000008311171561020a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610546945050505050565b34801561025757600080fd5b506100a26004803603602081101561026e57600080fd5b50356001600160a01b031661063a565b6100a26004803603604081101561029457600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111640100000000831117156102f357600080fd5b509092509050610671565b34801561030a57600080fd5b5061031361071e565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b506100a26004803603602081101561035257600080fd5b50356001600160a01b031661075b565b34801561036e57600080fd5b50610313610815565b34801561038357600080fd5b506100a26004803603602081101561039a57600080fd5b50356001600160a01b0316610824565b3480156103b657600080fd5b50610313610880565b6103c76103d7565b6103d76103d26108db565b610900565b565b336103e2610924565b6001600160a01b03161461042c576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061046a5780518252601f19909201916020918201910161044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b606091505b5091509150816104e157805181602001fd5b50505050565b336104f0610924565b6001600160a01b03161461053a576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b6105438161093d565b50565b3361054f610924565b6001600160a01b031614610599576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b031634846040518082805190602001908083835b602083106105d85780518252601f1990920191602091820191016105b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b61064261097d565b6001600160a01b0316336001600160a01b03161415610669576106648161093d565b610543565b6105436103bf565b61067961097d565b6001600160a01b0316336001600160a01b031614156107115761069b8361093d565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146106f8576040519150601f19603f3d011682016040523d82523d6000602084013e6106fd565b606091505b505090508061070b57600080fd5b50610719565b6107196103bf565b505050565b600061072861097d565b6001600160a01b0316336001600160a01b03161415610750576107496108db565b9050610758565b6107586103bf565b90565b61076361097d565b6001600160a01b0316336001600160a01b03161415610669576001600160a01b0381166107c15760405162461bcd60e51b815260040180806020018281038252603a815260200180610a74603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6107ea61097d565b604080516001600160a01b03928316815291841660208301528051918290030190a1610664816109a2565b600061081f610924565b905090565b3361082d610924565b6001600160a01b031614610877576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b610543816108ab565b600061088a61097d565b6001600160a01b0316336001600160a01b031614156107505761074961097d565b806108b46109c6565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b600061092e6109c6565b546001600160a01b0316919050565b61094681610a0b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610a14816108d5565b610a4f5760405162461bcd60e51b8152600401808060200182810382526036815260200180610aae6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122001f07e10d1eeadbd61da070e50227b529a3ec4b8f2e780a0e6bc1dc6028ba95764736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$r = (xs) => xs.length > 1; +class TestnetAdminProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$r(args)) { + super(...args); + } else { + super(_abi$M, _bytecode$r, args[0]); + } + } + getDeployTransaction(_logic, _admin, _data, overrides) { + return super.getDeployTransaction(_logic, _admin, _data, overrides || {}); + } + deploy(_logic, _admin, _data, overrides) { + return super.deploy(_logic, _admin, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$M); + } + static connect(address, runner) { + return new Contract(address, _abi$M, runner); + } +} +TestnetAdminProxy__factory.bytecode = _bytecode$r; +TestnetAdminProxy__factory.abi = _abi$M; + +const _abi$L = [ + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + }, + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "address", + name: "_registry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "instance", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "newFee", + type: "uint256" + } + ], + name: "FeeUpdated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint24", + name: "newFee", + type: "uint24" + } + ], + name: "UniswapTornPoolSwappingFeeChanged", + type: "event" + }, + { + inputs: [], + name: "PROTOCOL_FEE_DIVIDER", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "calculatePoolFee", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeDeviations", + outputs: [ + { + components: [ + { + internalType: "address", + name: "instance", + type: "address" + }, + { + internalType: "int256", + name: "deviation", + type: "int256" + } + ], + internalType: "struct FeeManager.Deviation[]", + name: "results", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_token", + type: "address" + }, + { + internalType: "uint24", + name: "_uniswapPoolSwappingFee", + type: "uint24" + } + ], + name: "getTokenPriceRatio", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + name: "instanceFee", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + name: "instanceFeeUpdated", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "instanceFeeWithUpdate", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "contract InstanceRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint32", + name: "newPeriod", + type: "uint32" + } + ], + name: "setPeriodForTWAPOracle", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_token", + type: "address" + }, + { + internalType: "uint256", + name: "_price", + type: "uint256" + } + ], + name: "setTokenPrice", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "_uniswapTornPoolSwappingFee", + type: "uint24" + } + ], + name: "setUniswapTornPoolSwappingFee", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "newLimit", + type: "uint24" + } + ], + name: "setUpdateFeeTimeLimit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "uniswapTimePeriod", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "uniswapTornPoolSwappingFee", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "updateAllFees", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "updateFee", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "updateFeeTimeLimit", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance[]", + name: "_instances", + type: "address[]" + } + ], + name: "updateFees", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$q = "0x60e06040523480156200001157600080fd5b5060405162001ca738038062001ca783398101604081905262000034916200005c565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c611b866200012160003980610350528061061452806108915280610a42525080610539528061064c528061072d528061082252508061059852806107ad5250611b866000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806380eb7bf0116100ad578063bcc5ee6411610071578063bcc5ee641461024b578063c51c229714610253578063d8718fb114610266578063e1f121561461027b578063f522d6d61461028e5761012c565b806380eb7bf014610202578063a028752014610215578063adf898a414610228578063aeb3077a14610230578063b19a2972146102385761012c565b8063603a54fe116100f4578063603a54fe146101ac57806369574fef146101bf5780637b103999146101d25780637ccd2f48146101da57806380679eb3146101ef5761012c565b806305e34364146101315780632efbf3841461015a578063431f63c91461017a5780634bf0a5421461018f5780635aa6e675146101a4575b600080fd5b61014461013f366004611848565b610296565b6040516101519190611ab4565b60405180910390f35b61016d610168366004611848565b6102a8565b60405161015191906118d5565b61018d6101883660046115bc565b610305565b005b61019761034b565b6040516101519190611911565b61016d610537565b61016d6101ba366004611848565b61055b565b6101446101cd366004611584565b610576565b61016d610612565b6101e2610636565b6040516101519190611aa4565b61018d6101fd366004611898565b610641565b61018d610210366004611848565b61069c565b61018d610223366004611864565b610722565b61016d6107ab565b6101446107cf565b61018d6102463660046115e7565b6107d5565b6101e2610805565b61018d610261366004611864565b610817565b61026e610874565b6040516101519190611abd565b61016d610289366004611848565b610887565b61018d610a3d565b60026020526000908152604090205481565b600080546001600160a01b038316825260026020526040822054600160381b90910462ffffff16429190910311156102e3576102e38261069c565b506001600160a01b03808216600090815260016020526040902054165b919050565b3361030e610ad7565b6001600160a01b03161461033d5760405162461bcd60e51b815260040161033490611a06565b60405180910390fd5b6103478282610af0565b5050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b1580156103a757600080fd5b505afa1580156103bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103e3919081019061167f565b9050805167ffffffffffffffff811180156103fd57600080fd5b5060405190808252806020026020018201604052801561043757816020015b6104246114b2565b81526020019060019003908161041c5790505b50915060005b815181101561053257600061046483838151811061045757fe5b6020026020010151610887565b6001600160a01b03169050600081156104e0576103e8826001600087878151811061048b57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166103e8026001600160a01b0316816104db57fe5b040390505b60405180604001604052808585815181106104f757fe5b60200260200101516001600160a01b031681526020018281525085848151811061051d57fe5b6020908102919091010152505060010161043d565b505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052600090815260409020546001600160a01b031681565b600061058183610b19565b610600576040805180820182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682528516602080830191909152825180840190935260005462ffffff80821685528616918401919091526105fb929063ffffffff630100000090910416610b44565b610609565b61060983610b19565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461067657600080fd5b6000805463ffffffff90921663010000000266ffffffff00000019909216919091179055565b60006106a782610887565b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b03191695871695909517909455600290528290204290559051919250907f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a906107169084906118d5565b60405180910390a25050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461075757600080fd5b6000805462ffffff191662ffffff83811691909117918290556040517fbfe65cfc2359076c4468c9b895156c309c78f94fb09f6d2fc0463c4ca9a71ac2926107a0921690611aa4565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b61271081565b60005b8151811015610347576107fd8282815181106107f057fe5b602002602001015161069c565b6001016107d8565b600054600160381b900462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084c57600080fd5b6000805462ffffff909216600160381b0269ffffff0000000000000019909216919091179055565b6000546301000000900463ffffffff1681565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443876040518263ffffffff1660e01b81526004016108db91906118d5565b60a06040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b91906117cd565b9450945050935093508063ffffffff1660001415610950576000945050505050610300565b6001600160a01b038316158015610965575083155b61096f5782610985565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b925060006109938484610576565b9050610a32612710610a2c8463ffffffff16610a2685610a2c670de0b6b3a76400008e6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ee57600080fd5b505afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190611880565b90610b90565b90610bca565b979650505050505050565b610ad57f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b158015610a9957600080fd5b505afa158015610aad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610246919081019061167f565b565b6000610ae1610c0c565b546001600160a01b0316919050565b6000610afa610c61565b6001600160a01b03909316600090815260209390935250604090912055565b600080610b24610c61565b6001600160a01b0390931660009081526020939093525050604090205490565b60208084015190830151600091610b5b9184610c98565b84518451610b7e91670de0b6b3a764000091610b78919087610c98565b90610cc2565b81610b8557fe5b0490505b9392505050565b600082610b9f5750600061060c565b82820282848281610bac57fe5b04146106095760405162461bcd60e51b815260040161033490611a63565b600061060983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ce6565b6000807fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b360001c604051602001610c439190611ab4565b60408051601f19818403018152919052805160209091012092915050565b6000807f6521c13ddfc30471ec629848a30b01f73c36737d417c11843e7a9afa6985e84860001c604051602001610c439190611ab4565b6000610cba8473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28585610d1d565b949350505050565b6000821580610cdd57505081810281838281610cda57fe5b04145b61060c57600080fd5b60008183610d075760405162461bcd60e51b815260040161033491906119b3565b506000838581610d1357fe5b0495945050505050565b600080846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906118b4565b60ff16600a0a90506001600160a01b038681169086161415610dbd576001600160801b03169050610cba565b604051630b4c774160e11b8152610e5e90610e5690731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610e00908b908b908b906004016118e9565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e509190611568565b85610e6f565b828888611004565b915050610cba565b50949350505050565b600063ffffffff8216610e945760405162461bcd60e51b815260040161033490611a2c565b60408051600280825260608083018452926020830190803683370190505090508281600081518110610ec257fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610eeb57fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526060906001600160a01b0386169063883bdbfd90610f2f908590600401611969565b60006040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f83919081019061170b565b509050600081600081518110610f9557fe5b602002602001015182600181518110610faa57fe5b60200260200101510390508463ffffffff168160060b81610fc757fe5b05935060008160060b128015610fee57508463ffffffff168160060b81610fea57fe5b0715155b15610ffb57600019909301925b50505092915050565b600080611010866110ee565b90506001600160801b036001600160a01b0382161161107f576001600160a01b038082168002908481169086161061105f5761105a600160c01b876001600160801b031683611407565b611077565b61107781876001600160801b0316600160c01b611407565b925050610e66565b600061109e6001600160a01b0383168068010000000000000000611407565b9050836001600160a01b0316856001600160a01b0316106110d6576110d1600160801b876001600160801b031683611407565b610a32565b610a3281876001600160801b0316600160801b611407565b60008060008360020b12611105578260020b61110d565b8260020b6000035b9050620d89e88111156111325760405162461bcd60e51b815260040161033490611a48565b60006001821661114657600160801b611158565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561118c576ffff97272373d413259a46990580e213a0260801c5b60048216156111ab576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156111ca576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156111e9576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611208576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611227576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611246576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611266576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611286576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156112a6576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156112c6576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156112e6576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611306576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611326576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611346576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611367576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611387576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156113a6576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156113c3576b048a170391f7dc42444e8fa20260801c5b60008460020b13156113de5780600019816113da57fe5b0490505b6401000000008106156113f25760016113f5565b60005b60ff16602082901c0192505050919050565b600080806000198587098686029250828110908390030390508061143d576000841161143257600080fd5b508290049050610b89565b80841161144957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604080518082019091526000808252602082015290565b600082601f8301126114d9578081fd5b81516114ec6114e782611af5565b611ace565b81815291506020808301908481018184028601820187101561150d57600080fd5b60005b8481101561153557815161152381611b15565b84529282019290820190600101611510565b505050505092915050565b803561060c81611b15565b805161060c81611b15565b8051600681900b811461060c57600080fd5b600060208284031215611579578081fd5b815161060981611b15565b60008060408385031215611596578081fd5b82356115a181611b15565b915060208301356115b181611b2d565b809150509250929050565b600080604083850312156115ce578182fd5b82356115d981611b15565b946020939093013593505050565b600060208083850312156115f9578182fd5b823567ffffffffffffffff81111561160f578283fd5b8301601f8101851361161f578283fd5b803561162d6114e782611af5565b8181528381019083850185840285018601891015611649578687fd5b8694505b838510156116735761165f8982611540565b83526001949094019391850191850161164d565b50979650505050505050565b60006020808385031215611691578182fd5b825167ffffffffffffffff8111156116a7578283fd5b8301601f810185136116b7578283fd5b80516116c56114e782611af5565b81815283810190838501858402850186018910156116e1578687fd5b8694505b83851015611673576116f7898261154b565b8352600194909401939185019185016116e5565b6000806040838503121561171d578182fd5b825167ffffffffffffffff80821115611734578384fd5b818501915085601f830112611747578384fd5b81516117556114e782611af5565b80828252602080830192508086018a828387028901011115611775578889fd5b8896505b8487101561179f5761178b8b82611556565b845260019690960195928101928101611779565b5088015190965093505050808211156117b6578283fd5b506117c3858286016114c9565b9150509250929050565b600080600080600060a086880312156117e4578081fd5b855180151581146117f3578182fd5b602087015190955061180481611b15565b604087015190945060028110611818578182fd5b606087015190935061182981611b2d565b608087015190925061183a81611b3e565b809150509295509295909350565b600060208284031215611859578081fd5b813561060981611b15565b600060208284031215611875578081fd5b813561060981611b2d565b600060208284031215611891578081fd5b5051919050565b6000602082840312156118a9578081fd5b813561060981611b3e565b6000602082840312156118c5578081fd5b815160ff81168114610609578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b602080825282518282018190526000919060409081850190868401855b8281101561195c57815180516001600160a01b0316855286015186850152928401929085019060010161192e565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156119a757835163ffffffff1683529284019291840191600101611985565b50909695505050505050565b6000602080835283518082850152825b818110156119df578581018301518582016040015282016119c3565b818111156119f05783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b2737ba1030b71037bbb732b960a11b604082015260600190565b602080825260029082015261042560f41b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b62ffffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611aed57600080fd5b604052919050565b600067ffffffffffffffff821115611b0b578081fd5b5060209081020190565b6001600160a01b0381168114611b2a57600080fd5b50565b62ffffff81168114611b2a57600080fd5b63ffffffff81168114611b2a57600080fdfea2646970667358221220e716ce7751ca9331e897d31f3744c6916e2f742be6df42551b069b566751df4c64736f6c634300060c0033"; +const isSuperArgs$q = (xs) => xs.length > 1; +class TestnetFeeManager__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$q(args)) { + super(...args); + } else { + super(_abi$L, _bytecode$q, args[0]); + } + } + getDeployTransaction(_torn, _governance, _registry, overrides) { + return super.getDeployTransaction( + _torn, + _governance, + _registry, + overrides || {} + ); + } + deploy(_torn, _governance, _registry, overrides) { + return super.deploy( + _torn, + _governance, + _registry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$L); + } + static connect(address, runner) { + return new Contract(address, _abi$L, runner); + } +} +TestnetFeeManager__factory.bytecode = _bytecode$q; +TestnetFeeManager__factory.abi = _abi$L; + +const _abi$K = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "callToOwner", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "delegateToOwner", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "getCurrentOwner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeToOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$p = "0x608060405260405162000e6038038062000e60833981810160405260408110156200002957600080fd5b8151602083018051604051929492938301929190846401000000008211156200005157600080fd5b9083019060208201858111156200006757600080fd5b82516401000000008111828201881017156200008257600080fd5b82525081516020918201929091019080838360005b83811015620000b157818101518382015260200162000097565b50505050905090810190601f168015620000df5780820380516001836020036101000a031916815260200191505b50604052508391508290508130828281620000fa82620001ef565b805115620001b8576000826001600160a01b0316826040518082805190602001908083835b60208310620001405780518252601f1990920191602091820191016200011f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620001a2576040519150601f19603f3d011682016040523d82523d6000602084013e620001a7565b606091505b5050905080620001b657600080fd5b505b50620001c19050565b620001cc8262000266565b5050505050620001e7336200028a60201b620008ab1760201c565b505062000301565b6200020581620002b660201b620008d51760201c565b620002425760405162461bcd60e51b815260040180806020018281038252603681526020018062000e2a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b8062000295620002bc565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610b1980620003116000396000f3fe6080604052600436106100955760003560e01c80635c60da1b116100595780635c60da1b146102fe5780638f2839701461032f578063a18a186b14610362578063a6f9dae114610377578063f851a440146103aa576100a4565b806323711ab1146100ac57806323c735f1146101625780632e44e0e0146101955780633659cfe61461024b5780634f1ef2861461027e576100a4565b366100a4576100a26103bf565b005b6100a26103bf565b6100a2600480360360408110156100c257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ed57600080fd5b8201836020820111156100ff57600080fd5b8035906020019184600183028401116401000000008311171561012157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103d9945050505050565b34801561016e57600080fd5b506100a26004803603602081101561018557600080fd5b50356001600160a01b03166104e7565b6100a2600480360360408110156101ab57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101d657600080fd5b8201836020820111156101e857600080fd5b8035906020019184600183028401116401000000008311171561020a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610546945050505050565b34801561025757600080fd5b506100a26004803603602081101561026e57600080fd5b50356001600160a01b031661063a565b6100a26004803603604081101561029457600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111640100000000831117156102f357600080fd5b509092509050610671565b34801561030a57600080fd5b5061031361071e565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b506100a26004803603602081101561035257600080fd5b50356001600160a01b031661075b565b34801561036e57600080fd5b50610313610815565b34801561038357600080fd5b506100a26004803603602081101561039a57600080fd5b50356001600160a01b0316610824565b3480156103b657600080fd5b50610313610880565b6103c76103d7565b6103d76103d26108db565b610900565b565b336103e2610924565b6001600160a01b03161461042c576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061046a5780518252601f19909201916020918201910161044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b606091505b5091509150816104e157805181602001fd5b50505050565b336104f0610924565b6001600160a01b03161461053a576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b6105438161093d565b50565b3361054f610924565b6001600160a01b031614610599576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b031634846040518082805190602001908083835b602083106105d85780518252601f1990920191602091820191016105b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b61064261097d565b6001600160a01b0316336001600160a01b03161415610669576106648161093d565b610543565b6105436103bf565b61067961097d565b6001600160a01b0316336001600160a01b031614156107115761069b8361093d565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146106f8576040519150601f19603f3d011682016040523d82523d6000602084013e6106fd565b606091505b505090508061070b57600080fd5b50610719565b6107196103bf565b505050565b600061072861097d565b6001600160a01b0316336001600160a01b03161415610750576107496108db565b9050610758565b6107586103bf565b90565b61076361097d565b6001600160a01b0316336001600160a01b03161415610669576001600160a01b0381166107c15760405162461bcd60e51b815260040180806020018281038252603a815260200180610a74603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6107ea61097d565b604080516001600160a01b03928316815291841660208301528051918290030190a1610664816109a2565b600061081f610924565b905090565b3361082d610924565b6001600160a01b031614610877576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b610543816108ab565b600061088a61097d565b6001600160a01b0316336001600160a01b031614156107505761074961097d565b806108b46109c6565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b600061092e6109c6565b546001600160a01b0316919050565b61094681610a0b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610a14816108d5565b610a4f5760405162461bcd60e51b8152600401808060200182810382526036815260200180610aae6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220486b8f46c84e133fdcdf09d6e85ae28603a923477471dc965d4d7f5f3634234c64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$p = (xs) => xs.length > 1; +class TestnetGovernanceProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$p(args)) { + super(...args); + } else { + super(_abi$K, _bytecode$p, args[0]); + } + } + getDeployTransaction(_logic, _data, overrides) { + return super.getDeployTransaction(_logic, _data, overrides || {}); + } + deploy(_logic, _data, overrides) { + return super.deploy(_logic, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$K); + } + static connect(address, runner) { + return new Contract( + address, + _abi$K, + runner + ); + } +} +TestnetGovernanceProxy__factory.bytecode = _bytecode$p; +TestnetGovernanceProxy__factory.abi = _abi$K; + +var index$r = /*#__PURE__*/Object.freeze({ + __proto__: null, + TestnetAdminProxy__factory: TestnetAdminProxy__factory, + TestnetFeeManager__factory: TestnetFeeManager__factory, + TestnetGovernanceProxy__factory: TestnetGovernanceProxy__factory +}); + +const _abi$J = [ + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class ITornadoGovernance__factory { + static createInterface() { + return new Interface(_abi$J); + } + static connect(address, runner) { + return new Contract(address, _abi$J, runner); + } +} +ITornadoGovernance__factory.abi = _abi$J; + +const _abi$I = [ + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +let ITornadoVault__factory$1 = class ITornadoVault__factory { + static createInterface() { + return new Interface(_abi$I); + } + static connect(address, runner) { + return new Contract(address, _abi$I, runner); + } +}; +ITornadoVault__factory$1.abi = _abi$I; + +const _abi$H = [ + { + inputs: [ + { + internalType: "address", + name: "governanceAddress", + type: "address" + }, + { + internalType: "address", + name: "tornAddress", + type: "address" + }, + { + internalType: "address", + name: "_relayerRegistry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "rewardsClaimed", + type: "uint256" + } + ], + name: "RewardsClaimed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "rewards", + type: "uint256" + } + ], + name: "RewardsUpdated", + type: "event" + }, + { + inputs: [], + name: "Governance", + outputs: [ + { + internalType: "contract ITornadoGovernance", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "accumulatedRewardPerTorn", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "accumulatedRewardRateOnLastUpdate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "accumulatedRewards", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "addBurnRewards", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "checkReward", + outputs: [ + { + internalType: "uint256", + name: "rewards", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getReward", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "ratioConstant", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "relayerRegistry", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "setReward", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amountLockedBeforehand", + type: "uint256" + } + ], + name: "updateRewardsOnLockedBalanceChange", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$o = "0x6101006040523480156200001257600080fd5b50604051620011e4380380620011e48339810160408190526200003591620000e0565b6001600160601b0319606084811b821660a05283811b821660c05282901b1660e052604080516318160ddd60e01b815290516001600160a01b038416916318160ddd916004808301926020929190829003018186803b1580156200009857600080fd5b505afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d3919062000133565b6080525062000165915050565b600080600060608486031215620000f5578283fd5b835162000102816200014c565b602085015190935062000115816200014c565b604085015190925062000128816200014c565b809150509250925092565b60006020828403121562000145578081fd5b5051919050565b6001600160a01b03811681146200016257600080fd5b50565b60805160a05160601c60c05160601c60e05160601c610ff0620001f4600039806101eb52806104f652508061023a52806104815280610574528061084252806108d75250806101b9528061026952806103ab5280610550528061059b52806106e5528061078052806107e452806108f952508061036a528061052c528061065f52806109f55250610ff06000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063adf898a41161008c578063e0d3265211610066578063e0d326521461016d578063e113335f14610175578063eacccaf014610188578063f58073b11461019b576100cf565b8063adf898a41461013f578063c3c90e6414610147578063d7ada20d1461015a576100cf565b8063338610af146100d45780633d18b912146100e957806347ff589d146100f157806373f273fc1461010f57806380a120411461012f5780639453911214610137575b600080fd5b6100e76100e2366004610d78565b6101ae565b005b6100e76103a3565b6100f96104f4565b6040516101069190610dc4565b60405180910390f35b61012261011d366004610cf5565b610518565b6040516101069190610f6c565b61012261052a565b6100f961054e565b6100f9610572565b610122610155366004610cf5565b610596565b610122610168366004610cf5565b6106c2565b6101226106d4565b6100e7610183366004610d11565b6106da565b6100e7610196366004610d11565b610775565b6100e76101a9366004610d78565b6107d9565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061020d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6102325760405162461bcd60e51b815260040161022990610ec5565b60405180910390fd5b61039d6103947f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639daafec76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5c565b6040518263ffffffff1660e01b81526004016103149190610dc4565b60206040518083038186803b15801561032c57600080fd5b505afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190610d90565b61038e847f0000000000000000000000000000000000000000000000000000000000000000610921565b90610964565b600154906109a6565b60015550565b600061044a337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639ae697bf336040518263ffffffff1660e01b81526004016103f59190610dc4565b60206040518083038186803b15801561040d57600080fd5b505afa158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610d90565b6109cb565b336000908152600360205260409020549091506104689082906109a6565b336000818152600360205260408120559091506104b0907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083610a85565b336001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe826040516104e99190610f6c565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639ae697bf846040518263ffffffff1660e01b81526004016105e59190610dc4565b60206040518083038186803b1580156105fd57600080fd5b505afa158015610611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106359190610d90565b90508015610697576001600160a01b038316600090815260026020526040902054600154610694917f00000000000000000000000000000000000000000000000000000000000000009161038e91859161068e91610ae0565b90610921565b91505b6001600160a01b0383166000908152600360205260409020546106bb9083906109a6565b9392505050565b60026020526000908152604090205481565b60015481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107225760405162461bcd60e51b815260040161022990610e5b565b600061072e83836109cb565b6001600160a01b03841660009081526003602052604090205490915061075490826109a6565b6001600160a01b039093166000908152600360205260409020929092555050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107bd5760405162461bcd60e51b815260040161022990610e5b565b6001600160a01b03909116600090815260036020526040902055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108215760405162461bcd60e51b815260040161022990610e5b565b6000198114156108ca576040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610877903090600401610dc4565b60206040518083038186803b15801561088f57600080fd5b505afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610d90565b90505b61091e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610a85565b50565b6000826109305750600061095e565b8282028284828161093d57fe5b041461095b5760405162461bcd60e51b815260040161022990610e84565b90505b92915050565b600061095b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b22565b60008282018381101561095b5760405162461bcd60e51b815260040161022990610e24565b60008115610a27576001600160a01b038316600090815260026020526040902054600154610a24917f00000000000000000000000000000000000000000000000000000000000000009161038e91869161068e91610ae0565b90505b6001546001600160a01b038416600081815260026020526040908190209290925590517f39fe62076cf7adf3c60e355a2da5a4f17a958ca319e8eba385a6c09a8b64901690610a77908490610f6c565b60405180910390a292915050565b610adb8363a9059cbb60e01b8484604051602401610aa4929190610dd8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b59565b505050565b600061095b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610be8565b60008183610b435760405162461bcd60e51b81526004016102299190610df1565b506000838581610b4f57fe5b0495945050505050565b6060610bae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c149092919063ffffffff16565b805190915015610adb5780806020019051810190610bcc9190610d3c565b610adb5760405162461bcd60e51b815260040161022990610f22565b60008184841115610c0c5760405162461bcd60e51b81526004016102299190610df1565b505050900390565b6060610c238484600085610c2b565b949350505050565b6060610c3685610cef565b610c525760405162461bcd60e51b815260040161022990610eeb565b60006060866001600160a01b03168587604051610c6f9190610da8565b60006040518083038185875af1925050503d8060008114610cac576040519150601f19603f3d011682016040523d82523d6000602084013e610cb1565b606091505b50915091508115610cc5579150610c239050565b805115610cd55780518082602001fd5b8360405162461bcd60e51b81526004016102299190610df1565b3b151590565b600060208284031215610d06578081fd5b813561095b81610fa5565b60008060408385031215610d23578081fd5b8235610d2e81610fa5565b946020939093013593505050565b600060208284031215610d4d578081fd5b8151801515811461095b578182fd5b600060208284031215610d6d578081fd5b815161095b81610fa5565b600060208284031215610d89578081fd5b5035919050565b600060208284031215610da1578081fd5b5051919050565b60008251610dba818460208701610f75565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610e10816040850160208701610f75565b601f01601f19169190910160400192915050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e6f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b90815260200190565b60005b83811015610f90578181015183820152602001610f78565b83811115610f9f576000848401525b50505050565b6001600160a01b038116811461091e57600080fdfea2646970667358221220007ef4aab133b842800388614e081de933a2da981d94088bca1e1a924db5174764736f6c634300060c0033"; +const isSuperArgs$o = (xs) => xs.length > 1; +class TornadoStakingRewards__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$o(args)) { + super(...args); + } else { + super(_abi$H, _bytecode$o, args[0]); + } + } + getDeployTransaction(governanceAddress, tornAddress, _relayerRegistry, overrides) { + return super.getDeployTransaction( + governanceAddress, + tornAddress, + _relayerRegistry, + overrides || {} + ); + } + deploy(governanceAddress, tornAddress, _relayerRegistry, overrides) { + return super.deploy( + governanceAddress, + tornAddress, + _relayerRegistry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$H); + } + static connect(address, runner) { + return new Contract( + address, + _abi$H, + runner + ); + } +} +TornadoStakingRewards__factory.bytecode = _bytecode$o; +TornadoStakingRewards__factory.abi = _abi$H; + +var index$q = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoGovernance__factory: ITornadoGovernance__factory, + ITornadoVault__factory: ITornadoVault__factory$1, + TornadoStakingRewards__factory: TornadoStakingRewards__factory +}); + +const _abi$G = [ + { + inputs: [ + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount", + type: "uint128" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount0Requested", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1Requested", + type: "uint128" + } + ], + name: "collect", + outputs: [ + { + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "flash", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + } + ], + name: "increaseObservationCardinalityNext", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "bool", + name: "zeroForOne", + type: "bool" + }, + { + internalType: "int256", + name: "amountSpecified", + type: "int256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + { + internalType: "int256", + name: "amount0", + type: "int256" + }, + { + internalType: "int256", + name: "amount1", + type: "int256" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; +class IUniswapV3PoolActions__factory { + static createInterface() { + return new Interface(_abi$G); + } + static connect(address, runner) { + return new Contract( + address, + _abi$G, + runner + ); + } +} +IUniswapV3PoolActions__factory.abi = _abi$G; + +const _abi$F = [ + { + inputs: [ + { + internalType: "uint32[]", + name: "secondsAgos", + type: "uint32[]" + } + ], + name: "observe", + outputs: [ + { + internalType: "int56[]", + name: "tickCumulatives", + type: "int56[]" + }, + { + internalType: "uint160[]", + name: "secondsPerLiquidityCumulativeX128s", + type: "uint160[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + } + ], + name: "snapshotCumulativesInside", + outputs: [ + { + internalType: "int56", + name: "tickCumulativeInside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityInsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsInside", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IUniswapV3PoolDerivedState__factory { + static createInterface() { + return new Interface(_abi$F); + } + static connect(address, runner) { + return new Contract( + address, + _abi$F, + runner + ); + } +} +IUniswapV3PoolDerivedState__factory.abi = _abi$F; + +const _abi$E = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + indexed: false, + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + name: "Collect", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + indexed: false, + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + name: "CollectProtocol", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "paid0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "paid1", + type: "uint256" + } + ], + name: "Flash", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint16", + name: "observationCardinalityNextOld", + type: "uint16" + }, + { + indexed: false, + internalType: "uint16", + name: "observationCardinalityNextNew", + type: "uint16" + } + ], + name: "IncreaseObservationCardinalityNext", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + indexed: false, + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "Initialize", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "feeProtocol0Old", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol1Old", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol0New", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol1New", + type: "uint8" + } + ], + name: "SetFeeProtocol", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "int256", + name: "amount0", + type: "int256" + }, + { + indexed: false, + internalType: "int256", + name: "amount1", + type: "int256" + }, + { + indexed: false, + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + indexed: false, + internalType: "uint128", + name: "liquidity", + type: "uint128" + }, + { + indexed: false, + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "Swap", + type: "event" + } +]; +class IUniswapV3PoolEvents__factory { + static createInterface() { + return new Interface(_abi$E); + } + static connect(address, runner) { + return new Contract( + address, + _abi$E, + runner + ); + } +} +IUniswapV3PoolEvents__factory.abi = _abi$E; + +const _abi$D = [ + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "fee", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "maxLiquidityPerTick", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "tickSpacing", + outputs: [ + { + internalType: "int24", + name: "", + type: "int24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IUniswapV3PoolImmutables__factory { + static createInterface() { + return new Interface(_abi$D); + } + static connect(address, runner) { + return new Contract( + address, + _abi$D, + runner + ); + } +} +IUniswapV3PoolImmutables__factory.abi = _abi$D; + +const _abi$C = [ + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint128", + name: "amount0Requested", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1Requested", + type: "uint128" + } + ], + name: "collectProtocol", + outputs: [ + { + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint8", + name: "feeProtocol0", + type: "uint8" + }, + { + internalType: "uint8", + name: "feeProtocol1", + type: "uint8" + } + ], + name: "setFeeProtocol", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IUniswapV3PoolOwnerActions__factory { + static createInterface() { + return new Interface(_abi$C); + } + static connect(address, runner) { + return new Contract( + address, + _abi$C, + runner + ); + } +} +IUniswapV3PoolOwnerActions__factory.abi = _abi$C; + +const _abi$B = [ + { + inputs: [], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IUniswapV3PoolState__factory { + static createInterface() { + return new Interface(_abi$B); + } + static connect(address, runner) { + return new Contract( + address, + _abi$B, + runner + ); + } +} +IUniswapV3PoolState__factory.abi = _abi$B; + +var index$p = /*#__PURE__*/Object.freeze({ + __proto__: null, + IUniswapV3PoolActions__factory: IUniswapV3PoolActions__factory, + IUniswapV3PoolDerivedState__factory: IUniswapV3PoolDerivedState__factory, + IUniswapV3PoolEvents__factory: IUniswapV3PoolEvents__factory, + IUniswapV3PoolImmutables__factory: IUniswapV3PoolImmutables__factory, + IUniswapV3PoolOwnerActions__factory: IUniswapV3PoolOwnerActions__factory, + IUniswapV3PoolState__factory: IUniswapV3PoolState__factory +}); + +const _abi$A = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + indexed: true, + internalType: "int24", + name: "tickSpacing", + type: "int24" + } + ], + name: "FeeAmountEnabled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnerChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "token0", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "token1", + type: "address" + }, + { + indexed: true, + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + indexed: false, + internalType: "int24", + name: "tickSpacing", + type: "int24" + }, + { + indexed: false, + internalType: "address", + name: "pool", + type: "address" + } + ], + name: "PoolCreated", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + } + ], + name: "createPool", + outputs: [ + { + internalType: "address", + name: "pool", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "int24", + name: "tickSpacing", + type: "int24" + } + ], + name: "enableFeeAmount", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "fee", + type: "uint24" + } + ], + name: "feeAmountTickSpacing", + outputs: [ + { + internalType: "int24", + name: "", + type: "int24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + } + ], + name: "getPool", + outputs: [ + { + internalType: "address", + name: "pool", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address" + } + ], + name: "setOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IUniswapV3Factory__factory { + static createInterface() { + return new Interface(_abi$A); + } + static connect(address, runner) { + return new Contract(address, _abi$A, runner); + } +} +IUniswapV3Factory__factory.abi = _abi$A; + +const _abi$z = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + indexed: false, + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + name: "Collect", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + indexed: false, + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + name: "CollectProtocol", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "paid0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "paid1", + type: "uint256" + } + ], + name: "Flash", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint16", + name: "observationCardinalityNextOld", + type: "uint16" + }, + { + indexed: false, + internalType: "uint16", + name: "observationCardinalityNextNew", + type: "uint16" + } + ], + name: "IncreaseObservationCardinalityNext", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + indexed: false, + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "Initialize", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + indexed: true, + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + indexed: false, + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "feeProtocol0Old", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol1Old", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol0New", + type: "uint8" + }, + { + indexed: false, + internalType: "uint8", + name: "feeProtocol1New", + type: "uint8" + } + ], + name: "SetFeeProtocol", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address" + }, + { + indexed: false, + internalType: "int256", + name: "amount0", + type: "int256" + }, + { + indexed: false, + internalType: "int256", + name: "amount1", + type: "int256" + }, + { + indexed: false, + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + indexed: false, + internalType: "uint128", + name: "liquidity", + type: "uint128" + }, + { + indexed: false, + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "Swap", + type: "event" + }, + { + inputs: [ + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount", + type: "uint128" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount0Requested", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1Requested", + type: "uint128" + } + ], + name: "collect", + outputs: [ + { + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint128", + name: "amount0Requested", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1Requested", + type: "uint128" + } + ], + name: "collectProtocol", + outputs: [ + { + internalType: "uint128", + name: "amount0", + type: "uint128" + }, + { + internalType: "uint128", + name: "amount1", + type: "uint128" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "fee", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "flash", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + } + ], + name: "increaseObservationCardinalityNext", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "maxLiquidityPerTick", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + }, + { + internalType: "uint128", + name: "amount", + type: "uint128" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint32[]", + name: "secondsAgos", + type: "uint32[]" + } + ], + name: "observe", + outputs: [ + { + internalType: "int56[]", + name: "tickCumulatives", + type: "int56[]" + }, + { + internalType: "uint160[]", + name: "secondsPerLiquidityCumulativeX128s", + type: "uint160[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint8", + name: "feeProtocol0", + type: "uint8" + }, + { + internalType: "uint8", + name: "feeProtocol1", + type: "uint8" + } + ], + name: "setFeeProtocol", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tickLower", + type: "int24" + }, + { + internalType: "int24", + name: "tickUpper", + type: "int24" + } + ], + name: "snapshotCumulativesInside", + outputs: [ + { + internalType: "int56", + name: "tickCumulativeInside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityInsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsInside", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "bool", + name: "zeroForOne", + type: "bool" + }, + { + internalType: "int256", + name: "amountSpecified", + type: "int256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + { + internalType: "int256", + name: "amount0", + type: "int256" + }, + { + internalType: "int256", + name: "amount1", + type: "int256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "tickSpacing", + outputs: [ + { + internalType: "int24", + name: "", + type: "int24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IUniswapV3Pool__factory { + static createInterface() { + return new Interface(_abi$z); + } + static connect(address, runner) { + return new Contract(address, _abi$z, runner); + } +} +IUniswapV3Pool__factory.abi = _abi$z; + +var index$o = /*#__PURE__*/Object.freeze({ + __proto__: null, + IUniswapV3Factory__factory: IUniswapV3Factory__factory, + IUniswapV3Pool__factory: IUniswapV3Pool__factory, + pool: index$p +}); + +var index$n = /*#__PURE__*/Object.freeze({ + __proto__: null, + interfaces: index$o +}); + +var index$m = /*#__PURE__*/Object.freeze({ + __proto__: null, + contracts: index$n +}); + +var index$l = /*#__PURE__*/Object.freeze({ + __proto__: null, + v3Core: index$m +}); + +const _abi$y = [ + { + inputs: [], + name: "denomination", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "commitment", + type: "bytes32" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "recipient", + type: "address" + }, + { + internalType: "address payable", + name: "relayer", + type: "address" + }, + { + internalType: "uint256", + name: "fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + } +]; +class ITornadoInstance__factory { + static createInterface() { + return new Interface(_abi$y); + } + static connect(address, runner) { + return new Contract(address, _abi$y, runner); + } +} +ITornadoInstance__factory.abi = _abi$y; + +var index$k = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoInstance__factory: ITornadoInstance__factory +}); + +const _abi$x = [ + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IERC20Decimals__factory { + static createInterface() { + return new Interface(_abi$x); + } + static connect(address, runner) { + return new Contract(address, _abi$x, runner); + } +} +IERC20Decimals__factory.abi = _abi$x; + +var index$j = /*#__PURE__*/Object.freeze({ + __proto__: null, + IERC20Decimals__factory: IERC20Decimals__factory +}); + +var index$i = /*#__PURE__*/Object.freeze({ + __proto__: null, + uniswapV3OracleHelperSol: index$j +}); + +const _abi$w = [ + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "value", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$n = "0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600160008190556040805180820190915260058082526464756d6d7960d81b60209092019182526101ac9291906101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea26469706673582212204b4d54284aeff9c7c570415da4a9efb9bf7115fe94a322210f9981c1c7ae107a64736f6c634300060c0033"; +const isSuperArgs$n = (xs) => xs.length > 1; +class Dummy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$n(args)) { + super(...args); + } else { + super(_abi$w, _bytecode$n, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$w); + } + static connect(address, runner) { + return new Contract(address, _abi$w, runner); + } +} +Dummy__factory.bytecode = _bytecode$n; +Dummy__factory.abi = _abi$w; + +const _abi$v = [ + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "value", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$m = "0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600260005560408051808201909152600680825265323ab6b6bc9960d11b60209092019182526101ac916001916101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea2646970667358221220056d994e19772e421a19f4bcf8cb09061d5645867c4c352106bf6b809fb5de3664736f6c634300060c0033"; +const isSuperArgs$m = (xs) => xs.length > 1; +class DummySecond__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$m(args)) { + super(...args); + } else { + super(_abi$v, _bytecode$m, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$v); + } + static connect(address, runner) { + return new Contract(address, _abi$v, runner); + } +} +DummySecond__factory.bytecode = _bytecode$m; +DummySecond__factory.abi = _abi$v; + +var index$h = /*#__PURE__*/Object.freeze({ + __proto__: null, + DummySecond__factory: DummySecond__factory, + Dummy__factory: Dummy__factory +}); + +const _abi$u = [ + { + inputs: [ + { + internalType: "uint256", + name: "delay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IGovernance__factory { + static createInterface() { + return new Interface(_abi$u); + } + static connect(address, runner) { + return new Contract(address, _abi$u, runner); + } +} +IGovernance__factory.abi = _abi$u; + +const _abi$t = [ + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$l = "0x608060405234801561001057600080fd5b5060c48061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063373058b814602d575b600080fd5b60336035565b005b6040805163e4917d9f60e01b81526203f48060048201529051309163e4917d9f91602480830192600092919082900301818387803b158015607557600080fd5b505af11580156088573d6000803e3d6000fd5b5050505056fea264697066735822122080cc4a797d58ff69ba6d6a0d2a3849574ef67da2d75c41e66a86d3f6e162209d64736f6c634300060c0033"; +const isSuperArgs$l = (xs) => xs.length > 1; +class ProposalStateChangeGovernance__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$l(args)) { + super(...args); + } else { + super(_abi$t, _bytecode$l, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$t); + } + static connect(address, runner) { + return new Contract( + address, + _abi$t, + runner + ); + } +} +ProposalStateChangeGovernance__factory.bytecode = _bytecode$l; +ProposalStateChangeGovernance__factory.abi = _abi$t; + +var index$g = /*#__PURE__*/Object.freeze({ + __proto__: null, + IGovernance__factory: IGovernance__factory, + ProposalStateChangeGovernance__factory: ProposalStateChangeGovernance__factory +}); + +const _abi$s = [ + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IProxy__factory { + static createInterface() { + return new Interface(_abi$s); + } + static connect(address, runner) { + return new Contract(address, _abi$s, runner); + } +} +IProxy__factory.abi = _abi$s; + +const _abi$r = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "x", + type: "uint256" + } + ], + name: "Overriden", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "newVariable", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "time_", + type: "uint256" + } + ], + name: "setTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "torna", + type: "address" + } + ], + name: "setTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "time", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$k = "0x6080604052426041553480156200001557600080fd5b50600054610100900460ff168062000032575062000032620000cd565b8062000041575060005460ff16155b620000695760405162461bcd60e51b8152600401620000609062000114565b60405180910390fd5b600054610100900460ff1615801562000095576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000b3620000d3565b8015620000c6576000805461ff00191690555b5062000162565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6123ac80620001726000396000f3fe60806040526004361061023b5760003560e01c8063a0a2b5731161012e578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f14610664578063ea0217cf14610684578063ece40cc1146106a4578063f0b76892146106c4578063fe0d94c1146106e45761023b565b8063ce25d71c146105d8578063d6159fe5146105ed578063d6f0948c14610602578063da35c66414610622578063e23a9a52146106375761023b565b8063b54426c8116100f2578063b54426c814610538578063b5f6a74314610558578063b859f11b14610578578063c0c0e82014610598578063c4d66de8146105b85761023b565b8063a0a2b573146104b9578063a6c26603146104d9578063a72edda3146104ee578063adf898a41461050e578063b1610d7e146105235761023b565b80636198e339116101bc57806370b0f6601161018057806370b0f6601461042f5780638d7a72f31461044f57806392ab89bb146104645780639a9e3b6e146104795780639ae697bf146104995761023b565b80636198e3391461039857806365da1264146103b8578063671dd275146103e55780636a661755146103fa5780636dc2dc6c1461040f5761023b565b806337f135d71161020357806337f135d7146103015780633e4f49e614610316578063587a6ecb1461034357806358e9fff0146103585780635c19a95c146103785761023b565b8063013cf08b1461024057806302ec8f9e1461027d57806315373e3d1461029f57806316ada547146102bf57806317977c61146102e1575b600080fd5b34801561024c57600080fd5b5061026061025b366004611cd6565b6106f7565b604051610274989796959493929190611de5565b60405180910390f35b34801561028957600080fd5b5061029d610298366004611cd6565b61075c565b005b3480156102ab57600080fd5b5061029d6102ba366004611d1a565b610789565b3480156102cb57600080fd5b506102d4610798565b6040516102749190612323565b3480156102ed57600080fd5b506102d46102fc366004611acd565b61079e565b34801561030d57600080fd5b506102d46107b0565b34801561032257600080fd5b50610336610331366004611cd6565b6107b6565b6040516102749190611ea3565b34801561034f57600080fd5b506102d46108f9565b34801561036457600080fd5b506102d4610373366004611ae8565b6108ff565b34801561038457600080fd5b5061029d610393366004611acd565b61094d565b3480156103a457600080fd5b5061029d6103b3366004611cd6565b610a6f565b3480156103c457600080fd5b506103d86103d3366004611acd565b610ba6565b6040516102749190611d94565b3480156103f157600080fd5b506102d4610bc1565b34801561040657600080fd5b506102d4610bc7565b34801561041b57600080fd5b5061029d61042a366004611cd6565b610bcd565b34801561043b57600080fd5b5061029d61044a366004611cd6565b610c12565b34801561045b57600080fd5b506102d4610c36565b34801561047057600080fd5b5061029d610c3c565b34801561048557600080fd5b5061029d610494366004611cd6565b610cc3565b3480156104a557600080fd5b506102d46104b4366004611acd565b610ce7565b3480156104c557600080fd5b5061029d6104d4366004611cd6565b610cf9565b3480156104e557600080fd5b506102d4610cfe565b3480156104fa57600080fd5b506102d4610509366004611acd565b610d04565b34801561051a57600080fd5b506103d8610d16565b34801561052f57600080fd5b506102d4610d25565b34801561054457600080fd5b5061029d610553366004611cd6565b610d2b565b34801561056457600080fd5b5061029d610573366004611acd565b610d35565b34801561058457600080fd5b5061029d610593366004611bf5565b610d57565b3480156105a457600080fd5b5061029d6105b3366004611cd6565b610e0e565b3480156105c457600080fd5b5061029d6105d3366004611acd565b610e32565b3480156105e457600080fd5b506102d4611075565b3480156105f957600080fd5b506102d461107b565b34801561060e57600080fd5b506102d461061d366004611b48565b611081565b34801561062e57600080fd5b506102d4611097565b34801561064357600080fd5b50610657610652366004611cee565b6110a1565b60405161027491906122fe565b34801561067057600080fd5b5061029d61067f366004611cd6565b611113565b34801561069057600080fd5b5061029d61069f366004611cd6565b611137565b3480156106b057600080fd5b5061029d6106bf366004611cd6565b61115b565b3480156106d057600080fd5b5061029d6106df366004611b96565b61117f565b61029d6106f2366004611cd6565b6111ff565b603d818154811061070457fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146107845760405162461bcd60e51b815260040161077b90612101565b60405180910390fd5b603555565b610794338383611240565b5050565b60415481565b603e6020526000908152604090205481565b60335481565b60006107c0611097565b82111580156107cf5750600082115b6107eb5760405162461bcd60e51b815260040161077b90612237565b6000603d83815481106107fa57fe5b906000526020600020906008020190508060020154610817611471565b116108265760009150506108f4565b8060030154610833611471565b116108425760019150506108f4565b8060050154816004015411158061086457506035548160050154826004015401105b156108735760029150506108f4565b600681015460ff161561088a5760059150506108f4565b6108af6034546108a9603354846003015461147790919063ffffffff16565b90611477565b6108b7611471565b106108c65760069150506108f4565b60335460038201546108d791611477565b6108df611471565b106108ee5760049150506108f4565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461093a5760405162461bcd60e51b815260040161077b906122c7565b61094584848461149c565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061098357506001600160a01b0382163014155b801561099757506001600160a01b03821615155b80156109b55750806001600160a01b0316826001600160a01b031614155b6109d15760405162461bcd60e51b815260040161077b90612138565b6001600160a01b03811615610a17576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a87611471565b11610aa45760405162461bcd60e51b815260040161077b90612064565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610af29183906117ea565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610b35918590600401611da8565b602060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190611cba565b610ba35760405162461bcd60e51b815260040161077b9061209b565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610bec5760405162461bcd60e51b815260040161077b90612101565b6033548110610c0d5760405162461bcd60e51b815260040161077b90612020565b603a55565b333014610c315760405162461bcd60e51b815260040161077b90612101565b603755565b60425481565b336000908152603c60205260409020546001600160a01b031680610c725760405162461bcd60e51b815260040161077b9061227d565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610ce25760405162461bcd60e51b815260040161077b90612101565b603455565b603b6020526000908152604090205481565b604155565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610ba33382611816565b604080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015610de857336001600160a01b0316603c6000868481518110610d7d57fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610dc25760405162461bcd60e51b815260040161077b906122c7565b610de0848281518110610dd157fe5b60200260200101518484611240565b600101610d5a565b50336000908152603b602052604090205415610e0957610e09338383611240565b505050565b333014610e2d5760405162461bcd60e51b815260040161077b90612101565b603955565b600054610100900460ff1680610e4b5750610e4b6118fb565b80610e59575060005460ff16155b610e755760405162461bcd60e51b815260040161077b906121e9565b600054610100900460ff16158015610ea0576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611060611901565b8015610794576000805461ff00191690555050565b60395481565b60375481565b600061108e33848461149c565b90505b92915050565b603d546000190190565b6110a96119c7565b603d83815481106110b657fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146111325760405162461bcd60e51b815260040161077b90612101565b603355565b3330146111565760405162461bcd60e51b815260040161077b90612101565b603855565b33301461117a5760405162461bcd60e51b815260040161077b90612101565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906111bb90899030908a908a908a908a908a90600401611e2b565b600060405180830381600087803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050506111f78686611816565b505050505050565b6103e76042556040517fc22c84ebcf25b30190d2b53474def7b552efd2018ef8acaf6bed1b67e8d2be7c90611235908390612323565b60405180910390a150565b600161124b836107b6565b600681111561125657fe5b146112735760405162461bcd60e51b815260040161077b90611f45565b6000603d838154811061128257fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806112e15760405162461bcd60e51b815260040161077b9061216f565b825460ff1615611330578254610100900460ff1615611317576001830154600485015461130d91611942565b6004850155611330565b6001830154600585015461132a91611942565b60058501555b841561134f5760048401546113459082611477565b6004850155611364565b600584015461135e9082611477565b60058501555b6006840154610100900460ff161580156113945750603954611392611387611471565b600387015490611942565b105b156113d85760058401546004850154111582151581146113d65760068501805461ff001916610100179055603a5460038601546113d091611477565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611423938b9361141e9391926108a992839190611477565b611984565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516114609190612323565b60405180910390a450505050505050565b60415490565b60008282018381101561108e5760405162461bcd60e51b815260040161077b90611fe9565b6001600160a01b0383166000908152603b60205260408120546036548110156114d75760405162461bcd60e51b815260040161077b90611f8c565b6114e0846119c1565b6114fc5760405162461bcd60e51b815260040161077b906121a6565b6001600160a01b0385166000908152603e6020526040902054801561156e576000611526826107b6565b9050600181600681111561153657fe5b141580156115505750600081600681111561154d57fe5b14155b61156c5760405162461bcd60e51b815260040161077b90611eca565b505b600061157e6037546108a9611471565b905060006115976038548361147790919063ffffffff16565b90506115a16119e7565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611753611097565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611795928d9261141e9290916108a9919082908a90611477565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516117d59493929190611e6c565b60405180910390a39998505050505050505050565b6000818484111561180e5760405162461bcd60e51b815260040161077b9190611eb7565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061184a90859030908690600401611dc1565b602060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189c9190611cba565b6118b85760405162461bcd60e51b815260040161077b906120ca565b6001600160a01b0382166000908152603b60205260409020546118db9082611477565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b600061108e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ea565b6001600160a01b0382166000908152603f6020526040902054811115610794576001600160a01b03919091166000908152603f6020526040902055565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461109157600080fd5b803561109181612368565b600082601f830112611a74578081fd5b813567ffffffffffffffff811115611a8a578182fd5b611a9d601f8201601f191660200161232c565b9150808252836020828501011115611ab457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611ade578081fd5b61108e8383611a42565b600080600060608486031215611afc578182fd5b8335611b0781612353565b92506020840135611b1781612353565b9150604084013567ffffffffffffffff811115611b32578182fd5b611b3e86828701611a64565b9150509250925092565b60008060408385031215611b5a578182fd5b8235611b6581612353565b9150602083013567ffffffffffffffff811115611b80578182fd5b611b8c85828601611a64565b9150509250929050565b60008060008060008060c08789031215611bae578182fd5b611bb88888611a42565b95506020870135945060408701359350606087013560ff81168114611bdb578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611c09578283fd5b833567ffffffffffffffff80821115611c20578485fd5b818601915086601f830112611c33578485fd5b813581811115611c41578586fd5b60209150818102611c5383820161232c565b8281528381019085850183870186018c1015611c6d57898afd5b8996505b84871015611c9757611c838c82611a42565b835260019690960195918501918501611c71565b5097505050508501359250611cb190508560408601611a59565b90509250925092565b600060208284031215611ccb578081fd5b815161108e81612368565b600060208284031215611ce7578081fd5b5035919050565b60008060408385031215611d00578182fd5b82359150611d118460208501611a42565b90509250929050565b60008060408385031215611d2c578182fd5b823591506020830135611d3e81612368565b809150509250929050565b60008151808452815b81811015611d6e57602081850181015186830182015201611d52565b81811115611d7f5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611e996080830184611d49565b9695505050505050565b6020810160078310611eb157fe5b91905290565b60006020825261108e6020830184611d49565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561234b57600080fd5b604052919050565b6001600160a01b0381168114610ba357600080fd5b8015158114610ba357600080fdfea264697066735822122077147b2d24ffd383c4a2d0eb254eb72ba4274421278e284354c4848ff7c9df0164736f6c634300060c0033"; +const isSuperArgs$k = (xs) => xs.length > 1; +class NewImplementation__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$k(args)) { + super(...args); + } else { + super(_abi$r, _bytecode$k, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$r); + } + static connect(address, runner) { + return new Contract(address, _abi$r, runner); + } +} +NewImplementation__factory.bytecode = _bytecode$k; +NewImplementation__factory.abi = _abi$r; + +const _abi$q = [ + { + inputs: [ + { + internalType: "address", + name: "_newLogic", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "newLogic", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$j = "0x60a060405234801561001057600080fd5b506040516101da3803806101da83398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610148610092600039806065528060a252506101486000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806305ccb23e1461003b578063373058b814610059575b600080fd5b610043610063565b60405161005091906100fe565b60405180910390f35b610061610087565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b604051631b2ce7f360e11b81523090633659cfe6906100ca907f0000000000000000000000000000000000000000000000000000000000000000906004016100fe565b600060405180830381600087803b1580156100e457600080fd5b505af11580156100f8573d6000803e3d6000fd5b50505050565b6001600160a01b039190911681526020019056fea26469706673582212207d2c2c988cd8f64fa7efb7ef33cfeee3b01f81a501e4a71ae8a63d6a5e269eb664736f6c634300060c0033"; +const isSuperArgs$j = (xs) => xs.length > 1; +class ProposalUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$j(args)) { + super(...args); + } else { + super(_abi$q, _bytecode$j, args[0]); + } + } + getDeployTransaction(_newLogic, overrides) { + return super.getDeployTransaction(_newLogic, overrides || {}); + } + deploy(_newLogic, overrides) { + return super.deploy(_newLogic, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$q); + } + static connect(address, runner) { + return new Contract(address, _abi$q, runner); + } +} +ProposalUpgrade__factory.bytecode = _bytecode$j; +ProposalUpgrade__factory.abi = _abi$q; + +var index$f = /*#__PURE__*/Object.freeze({ + __proto__: null, + IProxy__factory: IProxy__factory, + NewImplementation__factory: NewImplementation__factory, + ProposalUpgrade__factory: ProposalUpgrade__factory +}); + +const _abi$p = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "time_", + type: "uint256" + } + ], + name: "setTimestamp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "torna", + type: "address" + } + ], + name: "setTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "time", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$i = "0x6080604052426041553480156200001557600080fd5b50600054610100900460ff168062000032575062000032620000cd565b8062000041575060005460ff16155b620000695760405162461bcd60e51b8152600401620000609062000114565b60405180910390fd5b600054610100900460ff1615801562000095576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000b3620000d3565b8015620000c6576000805461ff00191690555b5062000162565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6125c980620001726000396000f3fe6080604052600436106102305760003560e01c8063a0a2b5731161012e578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f14610644578063ea0217cf14610664578063ece40cc114610684578063f0b76892146106a4578063fe0d94c1146106c457610230565b8063ce25d71c146105b8578063d6159fe5146105cd578063d6f0948c146105e2578063da35c66414610602578063e23a9a521461061757610230565b8063b54426c8116100f2578063b54426c814610518578063b5f6a74314610538578063b859f11b14610558578063c0c0e82014610578578063c4d66de81461059857610230565b8063a0a2b57314610499578063a6c26603146104b9578063a72edda3146104ce578063adf898a4146104ee578063b1610d7e1461050357610230565b80635c19a95c116101bc5780636dc2dc6c116101805780636dc2dc6c1461040457806370b0f6601461042457806392ab89bb146104445780639a9e3b6e146104595780639ae697bf1461047957610230565b80635c19a95c1461036d5780636198e3391461038d57806365da1264146103ad578063671dd275146103da5780636a661755146103ef57610230565b806317977c611161020357806317977c61146102d657806337f135d7146102f65780633e4f49e61461030b578063587a6ecb1461033857806358e9fff01461034d57610230565b8063013cf08b1461023557806302ec8f9e1461027257806315373e3d1461029457806316ada547146102b4575b600080fd5b34801561024157600080fd5b50610255610250366004611e01565b6106d7565b604051610269989796959493929190611f0d565b60405180910390f35b34801561027e57600080fd5b5061029261028d366004611e01565b61073c565b005b3480156102a057600080fd5b506102926102af366004611e45565b610769565b3480156102c057600080fd5b506102c9610778565b6040516102699190612510565b3480156102e257600080fd5b506102c96102f1366004611bf8565b61077e565b34801561030257600080fd5b506102c9610790565b34801561031757600080fd5b5061032b610326366004611e01565b610796565b6040516102699190611fcb565b34801561034457600080fd5b506102c96108d9565b34801561035957600080fd5b506102c9610368366004611c13565b6108df565b34801561037957600080fd5b50610292610388366004611bf8565b61092d565b34801561039957600080fd5b506102926103a8366004611e01565b610a4f565b3480156103b957600080fd5b506103cd6103c8366004611bf8565b610b86565b6040516102699190611ebc565b3480156103e657600080fd5b506102c9610ba1565b3480156103fb57600080fd5b506102c9610ba7565b34801561041057600080fd5b5061029261041f366004611e01565b610bad565b34801561043057600080fd5b5061029261043f366004611e01565b610bf2565b34801561045057600080fd5b50610292610c16565b34801561046557600080fd5b50610292610474366004611e01565b610c9d565b34801561048557600080fd5b506102c9610494366004611bf8565b610cc1565b3480156104a557600080fd5b506102926104b4366004611e01565b610cd3565b3480156104c557600080fd5b506102c9610cd8565b3480156104da57600080fd5b506102c96104e9366004611bf8565b610cde565b3480156104fa57600080fd5b506103cd610cf0565b34801561050f57600080fd5b506102c9610cff565b34801561052457600080fd5b50610292610533366004611e01565b610d05565b34801561054457600080fd5b50610292610553366004611bf8565b610d0f565b34801561056457600080fd5b50610292610573366004611d20565b610d31565b34801561058457600080fd5b50610292610593366004611e01565b610de8565b3480156105a457600080fd5b506102926105b3366004611bf8565b610e0c565b3480156105c457600080fd5b506102c961104f565b3480156105d957600080fd5b506102c9611055565b3480156105ee57600080fd5b506102c96105fd366004611c73565b61105b565b34801561060e57600080fd5b506102c9611071565b34801561062357600080fd5b50610637610632366004611e19565b61107b565b60405161026991906124eb565b34801561065057600080fd5b5061029261065f366004611e01565b6110ed565b34801561067057600080fd5b5061029261067f366004611e01565b611111565b34801561069057600080fd5b5061029261069f366004611e01565b611135565b3480156106b057600080fd5b506102926106bf366004611cc1565b611159565b6102926106d2366004611e01565b6111d9565b603d81815481106106e457fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146107645760405162461bcd60e51b815260040161075b906122b7565b60405180910390fd5b603555565b61077433838361136b565b5050565b60415481565b603e6020526000908152604090205481565b60335481565b60006107a0611071565b82111580156107af5750600082115b6107cb5760405162461bcd60e51b815260040161075b906123ed565b6000603d83815481106107da57fe5b9060005260206000209060080201905080600201546107f761159c565b116108065760009150506108d4565b806003015461081361159c565b116108225760019150506108d4565b8060050154816004015411158061084457506035548160050154826004015401105b156108535760029150506108d4565b600681015460ff161561086a5760059150506108d4565b61088f60345461088960335484600301546115a290919063ffffffff16565b906115a2565b61089761159c565b106108a65760069150506108d4565b60335460038201546108b7916115a2565b6108bf61159c565b106108ce5760049150506108d4565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461091a5760405162461bcd60e51b815260040161075b9061247d565b6109258484846115c7565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061096357506001600160a01b0382163014155b801561097757506001600160a01b03821615155b80156109955750806001600160a01b0316826001600160a01b031614155b6109b15760405162461bcd60e51b815260040161075b906122ee565b6001600160a01b038116156109f7576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a6761159c565b11610a845760405162461bcd60e51b815260040161075b9061221a565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610ad2918390611915565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610b15918590600401611ed0565b602060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190611de5565b610b835760405162461bcd60e51b815260040161075b90612251565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610bcc5760405162461bcd60e51b815260040161075b906122b7565b6033548110610bed5760405162461bcd60e51b815260040161075b906121d6565b603a55565b333014610c115760405162461bcd60e51b815260040161075b906122b7565b603755565b336000908152603c60205260409020546001600160a01b031680610c4c5760405162461bcd60e51b815260040161075b90612433565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610cbc5760405162461bcd60e51b815260040161075b906122b7565b603455565b603b6020526000908152604090205481565b604155565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610b833382611941565b604080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015610dc257336001600160a01b0316603c6000868481518110610d5757fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610d9c5760405162461bcd60e51b815260040161075b9061247d565b610dba848281518110610dab57fe5b6020026020010151848461136b565b600101610d34565b50336000908152603b602052604090205415610de357610de333838361136b565b505050565b333014610e075760405162461bcd60e51b815260040161075b906122b7565b603955565b600054610100900460ff1680610e255750610e25611a26565b80610e33575060005460ff16155b610e4f5760405162461bcd60e51b815260040161075b9061239f565b600054610100900460ff16158015610e7a576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561103a611a2c565b8015610774576000805461ff00191690555050565b60395481565b60375481565b60006110683384846115c7565b90505b92915050565b603d546000190190565b611083611af2565b603d838154811061109057fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b33301461110c5760405162461bcd60e51b815260040161075b906122b7565b603355565b3330146111305760405162461bcd60e51b815260040161075b906122b7565b603855565b3330146111545760405162461bcd60e51b815260040161075b906122b7565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061119590899030908a908a908a908a908a90600401611f53565b600060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b505050506111d18686611941565b505050505050565b60046111e482610796565b60068111156111ef57fe5b1461120c5760405162461bcd60e51b815260040161075b90612035565b6000603d828154811061121b57fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661125681611a6d565b6112725760405162461bcd60e51b815260040161075b90611ff2565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b038516916112b691611ea0565b600060405180830381855af49150503d80600081146112f1576040519150601f19603f3d011682016040523d82523d6000602084013e6112f6565b606091505b50915091508161133957805115611321578060405162461bcd60e51b815260040161075b9190611fdf565b60405162461bcd60e51b815260040161075b906124b4565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b600161137683610796565b600681111561138157fe5b1461139e5760405162461bcd60e51b815260040161075b906120fb565b6000603d83815481106113ad57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061140c5760405162461bcd60e51b815260040161075b90612325565b825460ff161561145b578254610100900460ff1615611442576001830154600485015461143891611a73565b600485015561145b565b6001830154600585015461145591611a73565b60058501555b841561147a57600484015461147090826115a2565b600485015561148f565b600584015461148990826115a2565b60058501555b6006840154610100900460ff161580156114bf57506039546114bd6114b261159c565b600387015490611a73565b105b156115035760058401546004850154111582151581146115015760068501805461ff001916610100179055603a5460038601546114fb916115a2565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461154e938b93611549939192610889928391906115a2565b611ab5565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b58460405161158b9190612510565b60405180910390a450505050505050565b60415490565b6000828201838110156110685760405162461bcd60e51b815260040161075b9061219f565b6001600160a01b0383166000908152603b60205260408120546036548110156116025760405162461bcd60e51b815260040161075b90612142565b61160b84611a6d565b6116275760405162461bcd60e51b815260040161075b9061235c565b6001600160a01b0385166000908152603e6020526040902054801561169957600061165182610796565b9050600181600681111561166157fe5b1415801561167b5750600081600681111561167857fe5b14155b6116975760405162461bcd60e51b815260040161075b90612080565b505b60006116a960375461088961159c565b905060006116c2603854836115a290919063ffffffff16565b90506116cc611b12565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff1990931692909217949094161790559061187e611071565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a549293506118c0928d92611549929091610889919082908a906115a2565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516119009493929190611f94565b60405180910390a39998505050505050505050565b600081848411156119395760405162461bcd60e51b815260040161075b9190611fdf565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061197590859030908690600401611ee9565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190611de5565b6119e35760405162461bcd60e51b815260040161075b90612280565b6001600160a01b0382166000908152603b6020526040902054611a0690826115a2565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b600061106883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611915565b6001600160a01b0382166000908152603f6020526040902054811115610774576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461106b57600080fd5b803561106b81612585565b600082601f830112611b9f578081fd5b813567ffffffffffffffff811115611bb5578182fd5b611bc8601f8201601f1916602001612519565b9150808252836020828501011115611bdf57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c09578081fd5b6110688383611b6d565b600080600060608486031215611c27578182fd5b8335611c3281612570565b92506020840135611c4281612570565b9150604084013567ffffffffffffffff811115611c5d578182fd5b611c6986828701611b8f565b9150509250925092565b60008060408385031215611c85578182fd5b8235611c9081612570565b9150602083013567ffffffffffffffff811115611cab578182fd5b611cb785828601611b8f565b9150509250929050565b60008060008060008060c08789031215611cd9578182fd5b611ce38888611b6d565b95506020870135945060408701359350606087013560ff81168114611d06578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611d34578283fd5b833567ffffffffffffffff80821115611d4b578485fd5b818601915086601f830112611d5e578485fd5b813581811115611d6c578586fd5b60209150818102611d7e838201612519565b8281528381019085850183870186018c1015611d9857898afd5b8996505b84871015611dc257611dae8c82611b6d565b835260019690960195918501918501611d9c565b5097505050508501359250611ddc90508560408601611b84565b90509250925092565b600060208284031215611df6578081fd5b815161106881612585565b600060208284031215611e12578081fd5b5035919050565b60008060408385031215611e2b578182fd5b82359150611e3c8460208501611b6d565b90509250929050565b60008060408385031215611e57578182fd5b823591506020830135611e6981612585565b809150509250929050565b60008151808452611e8c816020860160208601612540565b601f01601f19169290920160200192915050565b60008251611eb2818460208701612540565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611fc16080830184611e74565b9695505050505050565b6020810160078310611fd957fe5b91905290565b6000602082526110686020830184611e74565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561253857600080fd5b604052919050565b60005b8381101561255b578181015183820152602001612543565b8381111561256a576000848401525b50505050565b6001600160a01b0381168114610b8357600080fd5b8015158114610b8357600080fdfea264697066735822122079a24ea0dc3d5ef34041a37a137cef69305763e031faa841e2db8f078345f2af64736f6c634300060c0033"; +const isSuperArgs$i = (xs) => xs.length > 1; +class MockGovernance__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$i(args)) { + super(...args); + } else { + super(_abi$p, _bytecode$i, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$p); + } + static connect(address, runner) { + return new Contract(address, _abi$p, runner); + } +} +MockGovernance__factory.bytecode = _bytecode$i; +MockGovernance__factory.abi = _abi$p; + +const _abi$o = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "output", + type: "address" + } + ], + name: "Debug", + type: "event" + }, + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$h = "0x608060405234801561001057600080fd5b506103d5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063373058b814610030575b600080fd5b61003861003a565b005b6000604051610048906100fa565b604051809103906000f080158015610064573d6000803e3d6000fd5b509050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100a257600080fd5b505af11580156100b6573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f330da4cde831ccab151372275307c2f0cce2bcce846635cd66e6908f10d203639350908190036020019150a150565b610298806101088339019056fe608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600160008190556040805180820190915260058082526464756d6d7960d81b60209092019182526101ac9291906101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea26469706673582212204b4d54284aeff9c7c570415da4a9efb9bf7115fe94a322210f9981c1c7ae107a64736f6c634300060c0033a26469706673582212205967b156db23a5fd2372953049f5c366f68a9f95cfa116f9fbd6d0c8e7bdaa6364736f6c634300060c0033"; +const isSuperArgs$h = (xs) => xs.length > 1; +class Proposal__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$h(args)) { + super(...args); + } else { + super(_abi$o, _bytecode$h, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$o); + } + static connect(address, runner) { + return new Contract(address, _abi$o, runner); + } +} +Proposal__factory.bytecode = _bytecode$h; +Proposal__factory.abi = _abi$o; + +var index$e = /*#__PURE__*/Object.freeze({ + __proto__: null, + MockGovernance__factory: MockGovernance__factory, + Proposal__factory: Proposal__factory, + dummySol: index$h, + proposalStateChangeGovernanceSol: index$g, + proposalUpgradeSol: index$f +}); + +const _abi$n = [ + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$g = "0x608060405234801561001057600080fd5b50610563806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a6c2660311610097578063d6159fe511610066578063d6159fe5146101e2578063e4917d9f146101ea578063ea0217cf14610207578063ece40cc11461022457610100565b8063a6c26603146101ad578063b1610d7e146101b5578063c0c0e820146101bd578063ce25d71c146101da57610100565b80636a661755116100d35780636a6617551461014e5780636dc2dc6c1461015657806370b0f660146101735780639a9e3b6e1461019057610100565b806302ec8f9e1461010557806337f135d714610124578063587a6ecb1461013e578063671dd27514610146575b600080fd5b6101226004803603602081101561011b57600080fd5b5035610241565b005b61012c610288565b60408051918252519081900360200190f35b61012c61028e565b61012c610294565b61012c61029a565b6101226004803603602081101561016c57600080fd5b50356102a0565b6101226004803603602081101561018957600080fd5b5035610327565b610122600480360360208110156101a657600080fd5b503561036e565b61012c6103b5565b61012c6103bb565b610122600480360360208110156101d357600080fd5b50356103c1565b61012c610408565b61012c61040e565b6101226004803603602081101561020057600080fd5b5035610414565b6101226004803603602081101561021d57600080fd5b503561045b565b6101226004803603602081101561023a57600080fd5b50356104a2565b333014610283576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600255565b60005481565b60075481565b60025481565b60015481565b3330146102e2576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b60005481106103225760405162461bcd60e51b81526004018080602001828103825260248152602001806104ea6024913960400191505060405180910390fd5b600755565b333014610369576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600455565b3330146103b0576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600155565b60035481565b60055481565b333014610403576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600655565b60065481565b60045481565b333014610456576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600055565b33301461049d576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600555565b3330146104e4576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b60035556fe476f7665726e616e63653a20696e636f727265637420766f7465457874656e6454696d65476f7665726e616e63653a20756e617574686f72697a65640000000000000000a26469706673582212208fff4d62d622acc801ece8b6a7cc281f67f5959bf09e0ca68afde2a0ab0bc83164736f6c634300060c0033"; +const isSuperArgs$g = (xs) => xs.length > 1; +class Configuration__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$g(args)) { + super(...args); + } else { + super(_abi$n, _bytecode$g, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$n); + } + static connect(address, runner) { + return new Contract(address, _abi$n, runner); + } +} +Configuration__factory.bytecode = _bytecode$g; +Configuration__factory.abi = _abi$n; + +const _abi$m = [ + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +]; +class Core__factory { + static createInterface() { + return new Interface(_abi$m); + } + static connect(address, runner) { + return new Contract(address, _abi$m, runner); + } +} +Core__factory.abi = _abi$m; + +const _abi$l = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class Delegation__factory { + static createInterface() { + return new Interface(_abi$l); + } + static connect(address, runner) { + return new Contract(address, _abi$l, runner); + } +} +Delegation__factory.abi = _abi$l; + +const _abi$k = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$f = "0x60806040523480156200001157600080fd5b50600054610100900460ff16806200002e57506200002e620000c9565b806200003d575060005460ff16155b620000655760405162461bcd60e51b81526004016200005c9062000110565b60405180910390fd5b600054610100900460ff1615801562000091576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000af620000cf565b8015620000c2576000805461ff00191690555b506200015e565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b612524806200016e6000396000f3fe60806040526004361061020f5760003560e01c8063a6c2660311610118578063d6159fe5116100a0578063e4917d9f1161006f578063e4917d9f146105ce578063ea0217cf146105ee578063ece40cc11461060e578063f0b768921461062e578063fe0d94c11461064e5761020f565b8063d6159fe514610557578063d6f0948c1461056c578063da35c6641461058c578063e23a9a52146105a15761020f565b8063b54426c8116100e7578063b54426c8146104c2578063b859f11b146104e2578063c0c0e82014610502578063c4d66de814610522578063ce25d71c146105425761020f565b8063a6c2660314610463578063a72edda314610478578063adf898a414610498578063b1610d7e146104ad5761020f565b80636198e3391161019b5780636dc2dc6c1161016a5780636dc2dc6c146103ce57806370b0f660146103ee57806392ab89bb1461040e5780639a9e3b6e146104235780639ae697bf146104435761020f565b80636198e3391461035757806365da126414610377578063671dd275146103a45780636a661755146103b95761020f565b806337f135d7116101e257806337f135d7146102c05780633e4f49e6146102d5578063587a6ecb1461030257806358e9fff0146103175780635c19a95c146103375761020f565b8063013cf08b1461021457806302ec8f9e1461025157806315373e3d1461027357806317977c6114610293575b600080fd5b34801561022057600080fd5b5061023461022f366004611d5c565b610661565b604051610248989796959493929190611e68565b60405180910390f35b34801561025d57600080fd5b5061027161026c366004611d5c565b6106c6565b005b34801561027f57600080fd5b5061027161028e366004611da0565b6106f3565b34801561029f57600080fd5b506102b36102ae366004611b53565b610702565b604051610248919061246b565b3480156102cc57600080fd5b506102b3610714565b3480156102e157600080fd5b506102f56102f0366004611d5c565b61071a565b6040516102489190611f26565b34801561030e57600080fd5b506102b361085d565b34801561032357600080fd5b506102b3610332366004611b6e565b610863565b34801561034357600080fd5b50610271610352366004611b53565b6108b1565b34801561036357600080fd5b50610271610372366004611d5c565b6109d3565b34801561038357600080fd5b50610397610392366004611b53565b610b0a565b6040516102489190611e17565b3480156103b057600080fd5b506102b3610b25565b3480156103c557600080fd5b506102b3610b2b565b3480156103da57600080fd5b506102716103e9366004611d5c565b610b31565b3480156103fa57600080fd5b50610271610409366004611d5c565b610b76565b34801561041a57600080fd5b50610271610b9a565b34801561042f57600080fd5b5061027161043e366004611d5c565b610c21565b34801561044f57600080fd5b506102b361045e366004611b53565b610c45565b34801561046f57600080fd5b506102b3610c57565b34801561048457600080fd5b506102b3610493366004611b53565b610c5d565b3480156104a457600080fd5b50610397610c6f565b3480156104b957600080fd5b506102b3610c7e565b3480156104ce57600080fd5b506102716104dd366004611d5c565b610c84565b3480156104ee57600080fd5b506102716104fd366004611c7b565b610c8e565b34801561050e57600080fd5b5061027161051d366004611d5c565b610d45565b34801561052e57600080fd5b5061027161053d366004611b53565b610d69565b34801561054e57600080fd5b506102b3610fac565b34801561056357600080fd5b506102b3610fb2565b34801561057857600080fd5b506102b3610587366004611bce565b610fb8565b34801561059857600080fd5b506102b3610fce565b3480156105ad57600080fd5b506105c16105bc366004611d74565b610fd8565b6040516102489190612446565b3480156105da57600080fd5b506102716105e9366004611d5c565b61104a565b3480156105fa57600080fd5b50610271610609366004611d5c565b61106e565b34801561061a57600080fd5b50610271610629366004611d5c565b611092565b34801561063a57600080fd5b50610271610649366004611c1c565b6110b6565b61027161065c366004611d5c565b611136565b603d818154811061066e57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146106ee5760405162461bcd60e51b81526004016106e590612212565b60405180910390fd5b603555565b6106fe3383836112c8565b5050565b603e6020526000908152604090205481565b60335481565b6000610724610fce565b82111580156107335750600082115b61074f5760405162461bcd60e51b81526004016106e590612348565b6000603d838154811061075e57fe5b90600052602060002090600802019050806002015461077b6114f9565b1161078a576000915050610858565b80600301546107976114f9565b116107a6576001915050610858565b806005015481600401541115806107c857506035548160050154826004015401105b156107d7576002915050610858565b600681015460ff16156107ee576005915050610858565b61081360345461080d60335484600301546114fd90919063ffffffff16565b906114fd565b61081b6114f9565b1061082a576006915050610858565b603354600382015461083b916114fd565b6108436114f9565b10610852576004915050610858565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461089e5760405162461bcd60e51b81526004016106e5906123d8565b6108a9848484611522565b949350505050565b336000818152603c60205260409020546001600160a01b0390811691908316148015906108e757506001600160a01b0382163014155b80156108fb57506001600160a01b03821615155b80156109195750806001600160a01b0316826001600160a01b031614155b6109355760405162461bcd60e51b81526004016106e590612249565b6001600160a01b0381161561097b576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f60205260409020546109eb6114f9565b11610a085760405162461bcd60e51b81526004016106e590612175565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610a56918390611870565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610a99918590600401611e2b565b602060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190611d40565b610b075760405162461bcd60e51b81526004016106e5906121ac565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610b505760405162461bcd60e51b81526004016106e590612212565b6033548110610b715760405162461bcd60e51b81526004016106e590612131565b603a55565b333014610b955760405162461bcd60e51b81526004016106e590612212565b603755565b336000908152603c60205260409020546001600160a01b031680610bd05760405162461bcd60e51b81526004016106e59061238e565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610c405760405162461bcd60e51b81526004016106e590612212565b603455565b603b6020526000908152604090205481565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610b07338261189c565b60005b8351811015610d1f57336001600160a01b0316603c6000868481518110610cb457fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610cf95760405162461bcd60e51b81526004016106e5906123d8565b610d17848281518110610d0857fe5b602002602001015184846112c8565b600101610c91565b50336000908152603b602052604090205415610d4057610d403383836112c8565b505050565b333014610d645760405162461bcd60e51b81526004016106e590612212565b603955565b600054610100900460ff1680610d825750610d82611981565b80610d90575060005460ff16155b610dac5760405162461bcd60e51b81526004016106e5906122fa565b600054610100900460ff16158015610dd7576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055610f97611987565b80156106fe576000805461ff00191690555050565b60395481565b60375481565b6000610fc5338484611522565b90505b92915050565b603d546000190190565b610fe0611a4d565b603d8381548110610fed57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146110695760405162461bcd60e51b81526004016106e590612212565b603355565b33301461108d5760405162461bcd60e51b81526004016106e590612212565b603855565b3330146110b15760405162461bcd60e51b81526004016106e590612212565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906110f290899030908a908a908a908a908a90600401611eae565b600060405180830381600087803b15801561110c57600080fd5b505af1158015611120573d6000803e3d6000fd5b5050505061112e868661189c565b505050505050565b60046111418261071a565b600681111561114c57fe5b146111695760405162461bcd60e51b81526004016106e590611f90565b6000603d828154811061117857fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b03166111b3816119c8565b6111cf5760405162461bcd60e51b81526004016106e590611f4d565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161121391611dfb565b600060405180830381855af49150503d806000811461124e576040519150601f19603f3d011682016040523d82523d6000602084013e611253565b606091505b5091509150816112965780511561127e578060405162461bcd60e51b81526004016106e59190611f3a565b60405162461bcd60e51b81526004016106e59061240f565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b60016112d38361071a565b60068111156112de57fe5b146112fb5760405162461bcd60e51b81526004016106e590612056565b6000603d838154811061130a57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806113695760405162461bcd60e51b81526004016106e590612280565b825460ff16156113b8578254610100900460ff161561139f5760018301546004850154611395916119ce565b60048501556113b8565b600183015460058501546113b2916119ce565b60058501555b84156113d75760048401546113cd90826114fd565b60048501556113ec565b60058401546113e690826114fd565b60058501555b6006840154610100900460ff1615801561141c575060395461141a61140f6114f9565b6003870154906119ce565b105b1561146057600584015460048501541115821515811461145e5760068501805461ff001916610100179055603a546003860154611458916114fd565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a5460038701546114ab938b936114a693919261080d928391906114fd565b611a10565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516114e8919061246b565b60405180910390a450505050505050565b4290565b600082820183811015610fc55760405162461bcd60e51b81526004016106e5906120fa565b6001600160a01b0383166000908152603b602052604081205460365481101561155d5760405162461bcd60e51b81526004016106e59061209d565b611566846119c8565b6115825760405162461bcd60e51b81526004016106e5906122b7565b6001600160a01b0385166000908152603e602052604090205480156115f45760006115ac8261071a565b905060018160068111156115bc57fe5b141580156115d6575060008160068111156115d357fe5b14155b6115f25760405162461bcd60e51b81526004016106e590611fdb565b505b600061160460375461080d6114f9565b9050600061161d603854836114fd90919063ffffffff16565b9050611627611a6d565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906117d9610fce565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a5492935061181b928d926114a692909161080d919082908a906114fd565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d60405161185b9493929190611eef565b60405180910390a39998505050505050505050565b600081848411156118945760405162461bcd60e51b81526004016106e59190611f3a565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906118d090859030908690600401611e44565b602060405180830381600087803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190611d40565b61193e5760405162461bcd60e51b81526004016106e5906121db565b6001600160a01b0382166000908152603b602052604090205461196190826114fd565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b6000610fc583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611870565b6001600160a01b0382166000908152603f60205260409020548111156106fe576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b0381168114610fc857600080fd5b8035610fc8816124e0565b600082601f830112611afa578081fd5b813567ffffffffffffffff811115611b10578182fd5b611b23601f8201601f1916602001612474565b9150808252836020828501011115611b3a57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611b64578081fd5b610fc58383611ac8565b600080600060608486031215611b82578182fd5b8335611b8d816124cb565b92506020840135611b9d816124cb565b9150604084013567ffffffffffffffff811115611bb8578182fd5b611bc486828701611aea565b9150509250925092565b60008060408385031215611be0578182fd5b8235611beb816124cb565b9150602083013567ffffffffffffffff811115611c06578182fd5b611c1285828601611aea565b9150509250929050565b60008060008060008060c08789031215611c34578182fd5b611c3e8888611ac8565b95506020870135945060408701359350606087013560ff81168114611c61578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611c8f578283fd5b833567ffffffffffffffff80821115611ca6578485fd5b818601915086601f830112611cb9578485fd5b813581811115611cc7578586fd5b60209150818102611cd9838201612474565b8281528381019085850183870186018c1015611cf357898afd5b8996505b84871015611d1d57611d098c82611ac8565b835260019690960195918501918501611cf7565b5097505050508501359250611d3790508560408601611adf565b90509250925092565b600060208284031215611d51578081fd5b8151610fc5816124e0565b600060208284031215611d6d578081fd5b5035919050565b60008060408385031215611d86578182fd5b82359150611d978460208501611ac8565b90509250929050565b60008060408385031215611db2578182fd5b823591506020830135611dc4816124e0565b809150509250929050565b60008151808452611de781602086016020860161249b565b601f01601f19169290920160200192915050565b60008251611e0d81846020870161249b565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611f1c6080830184611dcf565b9695505050505050565b6020810160078310611f3457fe5b91905290565b600060208252610fc56020830184611dcf565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561249357600080fd5b604052919050565b60005b838110156124b657818101518382015260200161249e565b838111156124c5576000848401525b50505050565b6001600160a01b0381168114610b0757600080fd5b8015158114610b0757600080fdfea26469706673582212208c8a57d0dd9da76417112ba79eab1d38dbdf5e0a8bc014651f10bebe82ce8f9b64736f6c634300060c0033"; +const isSuperArgs$f = (xs) => xs.length > 1; +class Governance__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$f(args)) { + super(...args); + } else { + super(_abi$k, _bytecode$f, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$k); + } + static connect(address, runner) { + return new Contract(address, _abi$k, runner); + } +} +Governance__factory.bytecode = _bytecode$f; +Governance__factory.abi = _abi$k; + +var index$d = /*#__PURE__*/Object.freeze({ + __proto__: null, + Configuration__factory: Configuration__factory, + Core__factory: Core__factory, + Delegation__factory: Delegation__factory, + Governance__factory: Governance__factory, + mocks: index$e +}); + +const _abi$j = [ + { + inputs: [ + { + internalType: "address", + name: "_gasCompensationVault", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "gasCompensationVault", + outputs: [ + { + internalType: "contract IGasCompensationVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_gasCompensationsLimit", + type: "uint256" + } + ], + name: "setGasCompensations", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawFromHelper", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class GasCompensator__factory { + static createInterface() { + return new Interface(_abi$j); + } + static connect(address, runner) { + return new Contract(address, _abi$j, runner); + } +} +GasCompensator__factory.abi = _abi$j; + +const _abi$i = [ + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "gasAmount", + type: "uint256" + } + ], + name: "compensateGas", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawToGovernance", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class IGasCompensationVault__factory { + static createInterface() { + return new Interface(_abi$i); + } + static connect(address, runner) { + return new Contract( + address, + _abi$i, + runner + ); + } +} +IGasCompensationVault__factory.abi = _abi$i; + +var index$c = /*#__PURE__*/Object.freeze({ + __proto__: null, + GasCompensator__factory: GasCompensator__factory, + IGasCompensationVault__factory: IGasCompensationVault__factory +}); + +const _abi$h = [ + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class ITornadoVault__factory { + static createInterface() { + return new Interface(_abi$h); + } + static connect(address, runner) { + return new Contract(address, _abi$h, runner); + } +} +ITornadoVault__factory.abi = _abi$h; + +var index$b = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoVault__factory: ITornadoVault__factory +}); + +const _abi$g = [ + { + inputs: [ + { + internalType: "address", + name: "_gasCompLogic", + type: "address" + }, + { + internalType: "address", + name: "_userVault", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "checkIfQuorumReached", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "gasCompensationVault", + outputs: [ + { + internalType: "contract IGasCompensationVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "hasAccountVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "returnMultisigAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasCompensationsLimit", + type: "uint256" + } + ], + name: "setGasCompensations", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawFromHelper", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$e = "0x60c06040523480156200001157600080fd5b5060405162002e3138038062002e31833981016040819052620000349162000153565b60005482908290610100900460ff1680620000545750620000546200010c565b8062000063575060005460ff16155b6200008b5760405162461bcd60e51b8152600401620000829062000191565b60405180910390fd5b600054610100900460ff16158015620000b7576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000d562000112565b8015620000e8576000805461ff00191690555b506001600160601b0319606091821b811660805291901b1660a05250620001f89050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000806040838503121562000166578182fd5b82516200017381620001df565b60208401519092506200018681620001df565b809150509250929050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0381168114620001f557600080fd5b50565b60805160601c60a05160601c612bf162000240600039806108c55280610e525280610f4a52806114505280611ee1525080610d545280610fb75280611cf75250612bf16000f3fe60806040526004361061026b5760003560e01c80639ae697bf11610144578063d6159fe5116100b6578063e525aa081161007a578063e525aa08146106ff578063ea0217cf1461071f578063ece40cc11461073f578063ef3f8bb11461075f578063f0b768921461077f578063fe0d94c11461079f57610272565b8063d6159fe514610668578063d6f0948c1461067d578063da35c6641461069d578063e23a9a52146106b2578063e4917d9f146106df57610272565b8063b1610d7e11610108578063b1610d7e146105be578063b54426c8146105d3578063b859f11b146105f3578063c0c0e82014610613578063c4d66de814610633578063ce25d71c1461065357610272565b80639ae697bf1461053f5780639daafec71461055f578063a6c2660314610574578063a72edda314610589578063adf898a4146105a957610272565b80635c19a95c116101dd5780636dc2dc6c116101a15780636dc2dc6c1461049557806370b0f660146104b55780638b34a960146104d557806392ab89bb146104ea578063932d5157146104ff5780639a9e3b6e1461051f57610272565b80635c19a95c1461040b5780636198e3391461042b57806365da12641461044b578063671dd2751461046b5780636a6617551461048057610272565b806332687ec11161022f57806332687ec11461034557806337f135d7146103725780633e4f49e61461038757806354fd4d50146103b4578063587a6ecb146103d657806358e9fff0146103eb57610272565b8063013cf08b1461027757806302ec8f9e146102b457806315373e3d146102d657806317977c61146102f657806324b0435f1461032357610272565b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046123c5565b6107b2565b6040516102ab9897969594939291906124d1565b60405180910390f35b3480156102c057600080fd5b506102d46102cf3660046123c5565b610817565b005b3480156102e257600080fd5b506102d46102f1366004612409565b610844565b34801561030257600080fd5b506103166103113660046121bc565b610947565b6040516102ab9190612b38565b34801561032f57600080fd5b50610338610959565b6040516102ab9190612480565b34801561035157600080fd5b506103656103603660046123c5565b610971565b6040516102ab919061258f565b34801561037e57600080fd5b506103166109bf565b34801561039357600080fd5b506103a76103a23660046123c5565b6109c5565b6040516102ab919061259a565b3480156103c057600080fd5b506103c9610b01565b6040516102ab91906125ae565b3480156103e257600080fd5b50610316610b38565b3480156103f757600080fd5b506103166104063660046121d7565b610b3e565b34801561041757600080fd5b506102d46104263660046121bc565b610b8c565b34801561043757600080fd5b506102d46104463660046123c5565b610cae565b34801561045757600080fd5b506103386104663660046121bc565b610dc0565b34801561047757600080fd5b50610316610ddb565b34801561048c57600080fd5b50610316610de1565b3480156104a157600080fd5b506102d46104b03660046123c5565b610de7565b3480156104c157600080fd5b506102d46104d03660046123c5565b610e2c565b3480156104e157600080fd5b50610338610e50565b3480156104f657600080fd5b506102d4610e74565b34801561050b57600080fd5b506102d461051a3660046123c5565b610efb565b34801561052b57600080fd5b506102d461053a3660046123c5565b610f7f565b34801561054b57600080fd5b5061031661055a3660046121bc565b610fa3565b34801561056b57600080fd5b50610338610fb5565b34801561058057600080fd5b50610316610fd9565b34801561059557600080fd5b506103166105a43660046121bc565b610fdf565b3480156105b557600080fd5b50610338610ff1565b3480156105ca57600080fd5b50610316611000565b3480156105df57600080fd5b506102d46105ee3660046123c5565b611006565b3480156105ff57600080fd5b506102d461060e3660046122e4565b611013565b34801561061f57600080fd5b506102d461062e3660046123c5565b611061565b34801561063f57600080fd5b506102d461064e3660046121bc565b611085565b34801561065f57600080fd5b506103166112c9565b34801561067457600080fd5b506103166112cf565b34801561068957600080fd5b50610316610698366004612237565b6112d5565b3480156106a957600080fd5b506103166112eb565b3480156106be57600080fd5b506106d26106cd3660046123dd565b6112f5565b6040516102ab9190612b13565b3480156106eb57600080fd5b506102d46106fa3660046123c5565b611367565b34801561070b57600080fd5b5061036561071a3660046123dd565b61138b565b34801561072b57600080fd5b506102d461073a3660046123c5565b6113ce565b34801561074b57600080fd5b506102d461075a3660046123c5565b6113f2565b34801561076b57600080fd5b506102d461077a3660046123c5565b611416565b34801561078b57600080fd5b506102d461079a366004612285565b6114a5565b6102d46107ad3660046123c5565b611525565b603d81815481106107bf57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461083f5760405162461bcd60e51b815260040161083690612881565b60405180910390fd5b603555565b3361084f833361138b565b158015610862575061086083610971565b155b333214610870576000610874565b6152085b61ffff1681156109355760005a905061088e3387876116b7565b60006108ab6127106108a5856108a55a87906118e8565b9061192a565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce807906108fc9088908590600401612494565b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b505050505050610940565b6109403386866116b7565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d838154811061098357fe5b906000526020600020906008020160050154603d84815481106109a257fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b60006109cf6112eb565b82111580156109de5750600082115b6109fa5760405162461bcd60e51b8152600401610836906129de565b6000603d8381548110610a0957fe5b906000526020600020906008020190508060020154610a2661194f565b11610a355760009150506109ba565b8060030154610a4261194f565b11610a515760019150506109ba565b80600501548160040154111580610a7357506035548160050154826004015401105b15610a825760029150506109ba565b600681015460ff1615610a995760059150506109ba565b610ab86034546108a5603354846003015461192a90919063ffffffff16565b610ac061194f565b10610acf5760069150506109ba565b6033546003820154610ae09161192a565b610ae861194f565b10610af75760049150506109ba565b60039150506109ba565b60408051808201909152601981527f322e6c6f74746572792d616e642d6761732d7570677261646500000000000000602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610b795760405162461bcd60e51b815260040161083690612a6e565b610b84848484611953565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bc257506001600160a01b0382163014155b8015610bd657506001600160a01b03821615155b8015610bf45750806001600160a01b0316826001600160a01b031614155b610c105760405162461bcd60e51b8152600401610836906128b8565b6001600160a01b03811615610c56576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610cc661194f565b11610ce35760405162461bcd60e51b8152600401610836906127e9565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610d31918390611ca1565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610d9291908590600401612494565b600060405180830381600087803b158015610dac57600080fd5b505af1158015610940573d6000803e3d6000fd5b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e065760405162461bcd60e51b815260040161083690612881565b6033548110610e275760405162461bcd60e51b8152600401610836906127a5565b603a55565b333014610e4b5760405162461bcd60e51b815260040161083690612881565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610eaa5760405162461bcd60e51b815260040161083690612a24565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f03610959565b6001600160a01b0316336001600160a01b031614610f335760405162461bcd60e51b8152600401610836906129b7565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610d92908490600401612b38565b333014610f9e5760405162461bcd60e51b815260040161083690612881565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b6110103382611ccd565b50565b60008351116110345760405162461bcd60e51b815260040161083690612857565b61105c838383611044863361138b565b158015611057575061105586610971565b155b611dd2565b505050565b3330146110805760405162461bcd60e51b815260040161083690612881565b603955565b600054610100900460ff168061109e575061109e612016565b806110ac575060005460ff16155b6110c85760405162461bcd60e51b815260040161083690612969565b600054610100900460ff161580156110f3576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff1990941693909317169190911790556112b361201c565b80156112c5576000805461ff00191690555b5050565b60395481565b60375481565b60006112e2338484611953565b90505b92915050565b603d546000190190565b6112fd6120b6565b603d838154811061130a57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146113865760405162461bcd60e51b815260040161083690612881565b603355565b6000603d838154811061139a57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146113ed5760405162461bcd60e51b815260040161083690612881565b603855565b3330146114115760405162461bcd60e51b815260040161083690612881565b603655565b61141e610959565b6001600160a01b0316336001600160a01b03161461144e5760405162461bcd60e51b8152600401610836906129b7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc611485834761205d565b6040518115909202916000818181858888f1935050505061101057600080fd5b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906114e190899030908a908a908a908a908a90600401612517565b600060405180830381600087803b1580156114fb57600080fd5b505af115801561150f573d6000803e3d6000fd5b5050505061151d8686611ccd565b505050505050565b6004611530826109c5565b600681111561153b57fe5b146115585760405162461bcd60e51b815260040161083690612604565b6000603d828154811061156757fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b03166115a281612073565b6115be5760405162461bcd60e51b8152600401610836906125c1565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161160291612464565b600060405180830381855af49150503d806000811461163d576040519150601f19603f3d011682016040523d82523d6000602084013e611642565b606091505b5091509150816116855780511561166d578060405162461bcd60e51b815260040161083691906125ae565b60405162461bcd60e51b815260040161083690612aa5565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b60016116c2836109c5565b60068111156116cd57fe5b146116ea5760405162461bcd60e51b8152600401610836906126ca565b6000603d83815481106116f957fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806117585760405162461bcd60e51b8152600401610836906128ef565b825460ff16156117a7578254610100900460ff161561178e5760018301546004850154611784916118e8565b60048501556117a7565b600183015460058501546117a1916118e8565b60058501555b84156117c65760048401546117bc908261192a565b60048501556117db565b60058401546117d5908261192a565b60058501555b6006840154610100900460ff1615801561180b57506039546118096117fe61194f565b6003870154906118e8565b105b1561184f57600584015460048501541115821515811461184d5760068501805461ff001916610100179055603a5460038601546118479161192a565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461189a938b936118959391926108a59283919061192a565b612079565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516118d79190612b38565b60405180910390a450505050505050565b60006112e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ca1565b6000828201838110156112e25760405162461bcd60e51b81526004016108369061276e565b4290565b6001600160a01b0383166000908152603b602052604081205460365481101561198e5760405162461bcd60e51b815260040161083690612711565b61199784612073565b6119b35760405162461bcd60e51b815260040161083690612926565b6001600160a01b0385166000908152603e60205260409020548015611a255760006119dd826109c5565b905060018160068111156119ed57fe5b14158015611a0757506000816006811115611a0457fe5b14155b611a235760405162461bcd60e51b81526004016108369061264f565b505b6000611a356037546108a561194f565b90506000611a4e6038548361192a90919063ffffffff16565b9050611a586120d6565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611c0a6112eb565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611c4c928d926118959290916108a5919082908a9061192a565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d604051611c8c9493929190612558565b60405180910390a39998505050505050505050565b60008184841115611cc55760405162461bcd60e51b815260040161083691906125ae565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd90611d219085907f00000000000000000000000000000000000000000000000000000000000000009086906004016124ad565b602060405180830381600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906123a9565b611d8f5760405162461bcd60e51b815260040161083690612820565b6001600160a01b0382166000908152603b6020526040902054611db2908261192a565b6001600160a01b039092166000908152603b602052604090209190915550565b3381328214611de2576000611de6565b6152085b61ffff168115611f515760005a905060005b8851811015611eaf576000898281518110611e0f57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e4f57506001600160a01b03811633145b611e6b5760405162461bcd60e51b815260040161083690612a6e565b861580611e7f5750611e7d898261138b565b155b611e9b5760405162461bcd60e51b815260040161083690612adc565b611ea6818a8a6116b7565b50600101611df8565b506000611ec76127106108a5856108a55a87906118e8565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611f189088908590600401612494565b600060405180830381600087803b158015611f3257600080fd5b505af1158015611f46573d6000803e3d6000fd5b50505050505061200d565b60005b875181101561200b576000888281518110611f6b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611fab57506001600160a01b03811633145b611fc75760405162461bcd60e51b815260040161083690612a6e565b851580611fdb5750611fd9888261138b565b155b611ff75760405162461bcd60e51b815260040161083690612adc565b6120028189896116b7565b50600101611f54565b505b50505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b600081831061206c57816112e2565b5090919050565b3b151590565b6001600160a01b0382166000908152603f60205260409020548111156112c5576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146112e557600080fd5b80356112e581612bad565b600082601f830112612163578081fd5b813567ffffffffffffffff811115612179578182fd5b61218c601f8201601f1916602001612b41565b91508082528360208285010111156121a357600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156121cd578081fd5b6112e28383612131565b6000806000606084860312156121eb578182fd5b83356121f681612b98565b9250602084013561220681612b98565b9150604084013567ffffffffffffffff811115612221578182fd5b61222d86828701612153565b9150509250925092565b60008060408385031215612249578182fd5b823561225481612b98565b9150602083013567ffffffffffffffff81111561226f578182fd5b61227b85828601612153565b9150509250929050565b60008060008060008060c0878903121561229d578182fd5b6122a78888612131565b95506020870135945060408701359350606087013560ff811681146122ca578283fd5b9598949750929560808101359460a0909101359350915050565b6000806000606084860312156122f8578283fd5b833567ffffffffffffffff8082111561230f578485fd5b818601915086601f830112612322578485fd5b813581811115612330578586fd5b60209150818102612342838201612b41565b8281528381019085850183870186018c101561235c57898afd5b8996505b84871015612386576123728c82612131565b835260019690960195918501918501612360565b50975050505085013592506123a090508560408601612148565b90509250925092565b6000602082840312156123ba578081fd5b81516112e281612bad565b6000602082840312156123d6578081fd5b5035919050565b600080604083850312156123ef578182fd5b823591506124008460208501612131565b90509250929050565b6000806040838503121561241b578182fd5b82359150602083013561242d81612bad565b809150509250929050565b60008151808452612450816020860160208601612b68565b601f01601f19169290920160200192915050565b60008251612476818460208701612b68565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b0386168252846020830152836040830152608060608301526125856080830184612438565b9695505050505050565b901515815260200190565b60208101600783106125a857fe5b91905290565b6000602082526112e26020830184612438565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612b6057600080fd5b604052919050565b60005b83811015612b83578181015183820152602001612b6b565b83811115612b92576000848401525b50505050565b6001600160a01b038116811461101057600080fd5b801515811461101057600080fdfea2646970667358221220a9ae24380315e86f1632949f167f44c17322fe48a1385357edbfdf8bc543469764736f6c634300060c0033"; +const isSuperArgs$e = (xs) => xs.length > 1; +class GovernanceGasUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$e(args)) { + super(...args); + } else { + super(_abi$g, _bytecode$e, args[0]); + } + } + getDeployTransaction(_gasCompLogic, _userVault, overrides) { + return super.getDeployTransaction( + _gasCompLogic, + _userVault, + overrides || {} + ); + } + deploy(_gasCompLogic, _userVault, overrides) { + return super.deploy(_gasCompLogic, _userVault, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$g); + } + static connect(address, runner) { + return new Contract( + address, + _abi$g, + runner + ); + } +} +GovernanceGasUpgrade__factory.bytecode = _bytecode$e; +GovernanceGasUpgrade__factory.abi = _abi$g; + +const _abi$f = [ + { + inputs: [ + { + internalType: "address", + name: "_userVault", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + } +]; +const _bytecode$d = "0x60a06040523480156200001157600080fd5b506040516200277e3803806200277e833981016040819052620000349162000142565b600054610100900460ff168062000050575062000050620000fb565b806200005f575060005460ff16155b620000875760405162461bcd60e51b81526004016200007e9062000172565b60405180910390fd5b600054610100900460ff16158015620000b3576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000d162000101565b8015620000e4576000805461ff00191690555b5060601b6001600160601b031916608052620001c0565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60006020828403121562000154578081fd5b81516001600160a01b03811681146200016b578182fd5b9392505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60805160601c612596620001e860003980610af15280610cb3528061194752506125966000f3fe6080604052600436106102255760003560e01c80639daafec711610123578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f1461061b578063ea0217cf1461063b578063ece40cc11461065b578063f0b768921461067b578063fe0d94c11461069b57610225565b8063ce25d71c1461058f578063d6159fe5146105a4578063d6f0948c146105b9578063da35c664146105d9578063e23a9a52146105ee57610225565b8063b1610d7e116100f2578063b1610d7e146104fa578063b54426c81461050f578063b859f11b1461052f578063c0c0e8201461054f578063c4d66de81461056f57610225565b80639daafec71461049b578063a6c26603146104b0578063a72edda3146104c5578063adf898a4146104e557610225565b80635c19a95c116101b15780636dc2dc6c116101755780636dc2dc6c1461040657806370b0f6601461042657806392ab89bb146104465780639a9e3b6e1461045b5780639ae697bf1461047b57610225565b80635c19a95c1461036f5780636198e3391461038f57806365da1264146103af578063671dd275146103dc5780636a661755146103f157610225565b806337f135d7116101f857806337f135d7146102d65780633e4f49e6146102eb57806354fd4d5014610318578063587a6ecb1461033a57806358e9fff01461034f57610225565b8063013cf08b1461022a57806302ec8f9e1461026757806315373e3d1461028957806317977c61146102a9575b600080fd5b34801561023657600080fd5b5061024a610245366004611dfd565b6106ae565b60405161025e989796959493929190611f09565b60405180910390f35b34801561027357600080fd5b50610287610282366004611dfd565b610713565b005b34801561029557600080fd5b506102876102a4366004611e41565b610740565b3480156102b557600080fd5b506102c96102c4366004611bf4565b61074f565b60405161025e91906124dd565b3480156102e257600080fd5b506102c9610761565b3480156102f757600080fd5b5061030b610306366004611dfd565b610767565b60405161025e9190611fc7565b34801561032457600080fd5b5061032d6108aa565b60405161025e9190611fdb565b34801561034657600080fd5b506102c96108d5565b34801561035b57600080fd5b506102c961036a366004611c0f565b6108db565b34801561037b57600080fd5b5061028761038a366004611bf4565b610929565b34801561039b57600080fd5b506102876103aa366004611dfd565b610a4b565b3480156103bb57600080fd5b506103cf6103ca366004611bf4565b610b64565b60405161025e9190611eb8565b3480156103e857600080fd5b506102c9610b7f565b3480156103fd57600080fd5b506102c9610b85565b34801561041257600080fd5b50610287610421366004611dfd565b610b8b565b34801561043257600080fd5b50610287610441366004611dfd565b610bd0565b34801561045257600080fd5b50610287610bf4565b34801561046757600080fd5b50610287610476366004611dfd565b610c7b565b34801561048757600080fd5b506102c9610496366004611bf4565b610c9f565b3480156104a757600080fd5b506103cf610cb1565b3480156104bc57600080fd5b506102c9610cd5565b3480156104d157600080fd5b506102c96104e0366004611bf4565b610cdb565b3480156104f157600080fd5b506103cf610ced565b34801561050657600080fd5b506102c9610cfc565b34801561051b57600080fd5b5061028761052a366004611dfd565b610d02565b34801561053b57600080fd5b5061028761054a366004611d1c565b610d0f565b34801561055b57600080fd5b5061028761056a366004611dfd565b610dc6565b34801561057b57600080fd5b5061028761058a366004611bf4565b610dea565b34801561059b57600080fd5b506102c961102d565b3480156105b057600080fd5b506102c9611033565b3480156105c557600080fd5b506102c96105d4366004611c6f565b611039565b3480156105e557600080fd5b506102c961104f565b3480156105fa57600080fd5b5061060e610609366004611e15565b611059565b60405161025e91906124b8565b34801561062757600080fd5b50610287610636366004611dfd565b6110cb565b34801561064757600080fd5b50610287610656366004611dfd565b6110ef565b34801561066757600080fd5b50610287610676366004611dfd565b611113565b34801561068757600080fd5b50610287610696366004611cbd565b611137565b6102876106a9366004611dfd565b6111b7565b603d81815481106106bb57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461073b5760405162461bcd60e51b815260040161073290612284565b60405180910390fd5b603555565b61074b338383611349565b5050565b603e6020526000908152604090205481565b60335481565b600061077161104f565b82111580156107805750600082115b61079c5760405162461bcd60e51b8152600401610732906123ba565b6000603d83815481106107ab57fe5b9060005260206000209060080201905080600201546107c861157a565b116107d75760009150506108a5565b80600301546107e461157a565b116107f35760019150506108a5565b8060050154816004015411158061081557506035548160050154826004015401105b156108245760029150506108a5565b600681015460ff161561083b5760059150506108a5565b61086060345461085a603354846003015461157e90919063ffffffff16565b9061157e565b61086861157a565b106108775760069150506108a5565b60335460038201546108889161157e565b61089061157a565b1061089f5760049150506108a5565b60039150505b919050565b60408051808201909152601181527019173b30bab63a16b6b4b3b930ba34b7b760791b602082015290565b603a5481565b6001600160a01b038381166000908152603c602052604081205490911633146109165760405162461bcd60e51b81526004016107329061244a565b6109218484846115a3565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061095f57506001600160a01b0382163014155b801561097357506001600160a01b03821615155b80156109915750806001600160a01b0316826001600160a01b031614155b6109ad5760405162461bcd60e51b8152600401610732906122bb565b6001600160a01b038116156109f3576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a6361157a565b11610a805760405162461bcd60e51b815260040161073290612216565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610ace9183906118f1565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610b2f91908590600401611ecc565b600060405180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b5050505050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610baa5760405162461bcd60e51b815260040161073290612284565b6033548110610bcb5760405162461bcd60e51b8152600401610732906121d2565b603a55565b333014610bef5760405162461bcd60e51b815260040161073290612284565b603755565b336000908152603c60205260409020546001600160a01b031680610c2a5760405162461bcd60e51b815260040161073290612400565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610c9a5760405162461bcd60e51b815260040161073290612284565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610d0c338261191d565b50565b60005b8351811015610da057336001600160a01b0316603c6000868481518110610d3557fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610d7a5760405162461bcd60e51b81526004016107329061244a565b610d98848281518110610d8957fe5b60200260200101518484611349565b600101610d12565b50336000908152603b602052604090205415610dc157610dc1338383611349565b505050565b333014610de55760405162461bcd60e51b815260040161073290612284565b603955565b600054610100900460ff1680610e035750610e03611a22565b80610e11575060005460ff16155b610e2d5760405162461bcd60e51b81526004016107329061236c565b600054610100900460ff16158015610e58576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611018611a28565b801561074b576000805461ff00191690555050565b60395481565b60375481565b60006110463384846115a3565b90505b92915050565b603d546000190190565b611061611aee565b603d838154811061106e57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146110ea5760405162461bcd60e51b815260040161073290612284565b603355565b33301461110e5760405162461bcd60e51b815260040161073290612284565b603855565b3330146111325760405162461bcd60e51b815260040161073290612284565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061117390899030908a908a908a908a908a90600401611f4f565b600060405180830381600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506111af868661191d565b505050505050565b60046111c282610767565b60068111156111cd57fe5b146111ea5760405162461bcd60e51b815260040161073290612031565b6000603d82815481106111f957fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661123481611a69565b6112505760405162461bcd60e51b815260040161073290611fee565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161129491611e9c565b600060405180830381855af49150503d80600081146112cf576040519150601f19603f3d011682016040523d82523d6000602084013e6112d4565b606091505b509150915081611317578051156112ff578060405162461bcd60e51b81526004016107329190611fdb565b60405162461bcd60e51b815260040161073290612481565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b600161135483610767565b600681111561135f57fe5b1461137c5760405162461bcd60e51b8152600401610732906120f7565b6000603d838154811061138b57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806113ea5760405162461bcd60e51b8152600401610732906122f2565b825460ff1615611439578254610100900460ff1615611420576001830154600485015461141691611a6f565b6004850155611439565b6001830154600585015461143391611a6f565b60058501555b841561145857600484015461144e908261157e565b600485015561146d565b6005840154611467908261157e565b60058501555b6006840154610100900460ff1615801561149d575060395461149b61149061157a565b600387015490611a6f565b105b156114e15760058401546004850154111582151581146114df5760068501805461ff001916610100179055603a5460038601546114d99161157e565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461152c938b9361152793919261085a9283919061157e565b611ab1565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b58460405161156991906124dd565b60405180910390a450505050505050565b4290565b6000828201838110156110465760405162461bcd60e51b81526004016107329061219b565b6001600160a01b0383166000908152603b60205260408120546036548110156115de5760405162461bcd60e51b81526004016107329061213e565b6115e784611a69565b6116035760405162461bcd60e51b815260040161073290612329565b6001600160a01b0385166000908152603e6020526040902054801561167557600061162d82610767565b9050600181600681111561163d57fe5b141580156116575750600081600681111561165457fe5b14155b6116735760405162461bcd60e51b81526004016107329061207c565b505b600061168560375461085a61157a565b9050600061169e6038548361157e90919063ffffffff16565b90506116a8611b0e565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff1990931692909217949094161790559061185a61104f565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a5492935061189c928d9261152792909161085a919082908a9061157e565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516118dc9493929190611f90565b60405180910390a39998505050505050505050565b600081848411156119155760405162461bcd60e51b81526004016107329190611fdb565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906119719085907f0000000000000000000000000000000000000000000000000000000000000000908690600401611ee5565b602060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c39190611de1565b6119df5760405162461bcd60e51b81526004016107329061224d565b6001600160a01b0382166000908152603b6020526040902054611a02908261157e565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b600061104683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f1565b6001600160a01b0382166000908152603f602052604090205481111561074b576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461104957600080fd5b803561104981612552565b600082601f830112611b9b578081fd5b813567ffffffffffffffff811115611bb1578182fd5b611bc4601f8201601f19166020016124e6565b9150808252836020828501011115611bdb57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c05578081fd5b6110468383611b69565b600080600060608486031215611c23578182fd5b8335611c2e8161253d565b92506020840135611c3e8161253d565b9150604084013567ffffffffffffffff811115611c59578182fd5b611c6586828701611b8b565b9150509250925092565b60008060408385031215611c81578182fd5b8235611c8c8161253d565b9150602083013567ffffffffffffffff811115611ca7578182fd5b611cb385828601611b8b565b9150509250929050565b60008060008060008060c08789031215611cd5578182fd5b611cdf8888611b69565b95506020870135945060408701359350606087013560ff81168114611d02578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611d30578283fd5b833567ffffffffffffffff80821115611d47578485fd5b818601915086601f830112611d5a578485fd5b813581811115611d68578586fd5b60209150818102611d7a8382016124e6565b8281528381019085850183870186018c1015611d9457898afd5b8996505b84871015611dbe57611daa8c82611b69565b835260019690960195918501918501611d98565b5097505050508501359250611dd890508560408601611b80565b90509250925092565b600060208284031215611df2578081fd5b815161104681612552565b600060208284031215611e0e578081fd5b5035919050565b60008060408385031215611e27578182fd5b82359150611e388460208501611b69565b90509250929050565b60008060408385031215611e53578182fd5b823591506020830135611e6581612552565b809150509250929050565b60008151808452611e8881602086016020860161250d565b601f01601f19169290920160200192915050565b60008251611eae81846020870161250d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611fbd6080830184611e70565b9695505050505050565b6020810160078310611fd557fe5b91905290565b6000602082526110466020830184611e70565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561250557600080fd5b604052919050565b60005b83811015612528578181015183820152602001612510565b83811115612537576000848401525b50505050565b6001600160a01b0381168114610d0c57600080fd5b8015158114610d0c57600080fdfea26469706673582212204b0042571b6576e17c0708c8f251958898bb0e0a9f340387b1eed439d732af7264736f6c634300060c0033"; +const isSuperArgs$d = (xs) => xs.length > 1; +class GovernanceVaultUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$d(args)) { + super(...args); + } else { + super(_abi$f, _bytecode$d, args[0]); + } + } + getDeployTransaction(_userVault, overrides) { + return super.getDeployTransaction(_userVault, overrides || {}); + } + deploy(_userVault, overrides) { + return super.deploy(_userVault, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$f); + } + static connect(address, runner) { + return new Contract( + address, + _abi$f, + runner + ); + } +} +GovernanceVaultUpgrade__factory.bytecode = _bytecode$d; +GovernanceVaultUpgrade__factory.abi = _abi$f; + +var index$a = /*#__PURE__*/Object.freeze({ + __proto__: null, + GovernanceGasUpgrade__factory: GovernanceGasUpgrade__factory, + GovernanceVaultUpgrade__factory: GovernanceVaultUpgrade__factory, + gasCompensatorSol: index$c, + interfaces: index$b +}); + +const _abi$e = [ + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amountLockedBeforehand", + type: "uint256" + } + ], + name: "updateRewardsOnLockedBalanceChange", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +class ITornadoStakingRewards__factory { + static createInterface() { + return new Interface(_abi$e); + } + static connect(address, runner) { + return new Contract( + address, + _abi$e, + runner + ); + } +} +ITornadoStakingRewards__factory.abi = _abi$e; + +var index$9 = /*#__PURE__*/Object.freeze({ + __proto__: null, + ITornadoStakingRewards__factory: ITornadoStakingRewards__factory +}); + +const _abi$d = [ + { + inputs: [ + { + internalType: "address", + name: "stakingRewardsAddress", + type: "address" + }, + { + internalType: "address", + name: "gasCompLogic", + type: "address" + }, + { + internalType: "address", + name: "userVaultAddress", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "bytes", + name: "errorData", + type: "bytes" + } + ], + name: "RewardUpdateFailed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "RewardUpdateSuccessful", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "Staking", + outputs: [ + { + internalType: "contract ITornadoStakingRewards", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "checkIfQuorumReached", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "gasCompensationVault", + outputs: [ + { + internalType: "contract IGasCompensationVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "hasAccountVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "returnMultisigAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasCompensationsLimit", + type: "uint256" + } + ], + name: "setGasCompensations", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawFromHelper", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$c = "0x60e06040523480156200001157600080fd5b50604051620032a6380380620032a6833981016040819052620000349162000165565b81818181600060019054906101000a900460ff1680620000595750620000596200011e565b8062000068575060005460ff16155b620000905760405162461bcd60e51b81526004016200008790620001b8565b60405180910390fd5b600054610100900460ff16158015620000bc576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000da62000124565b8015620000ed576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200021f92505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000806000606084860312156200017a578283fd5b8351620001878162000206565b60208501519093506200019a8162000206565b6040850151909250620001ad8162000206565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200021c57600080fd5b50565b60805160601c60a05160601c60c05160601c6130246200028260003980610cf652806110b7528061169852806117c95250806108e55280610ead5280610fa552806116145280612164525080611040528061200d528061240e52506130246000f3fe6080604052600436106102765760003560e01c80639ae697bf1161014f578063d6159fe5116100c1578063ea0217cf1161007a578063ea0217cf1461072a578063ece40cc11461074a578063ef3f8bb11461076a578063f0b768921461078a578063f57df22e146107aa578063fe0d94c1146107bf5761027d565b8063d6159fe514610673578063d6f0948c14610688578063da35c664146106a8578063e23a9a52146106bd578063e4917d9f146106ea578063e525aa081461070a5761027d565b8063b1610d7e11610113578063b1610d7e146105c9578063b54426c8146105de578063b859f11b146105fe578063c0c0e8201461061e578063c4d66de81461063e578063ce25d71c1461065e5761027d565b80639ae697bf1461054a5780639daafec71461056a578063a6c266031461057f578063a72edda314610594578063adf898a4146105b45761027d565b80635c19a95c116101e85780636dc2dc6c116101ac5780636dc2dc6c146104a057806370b0f660146104c05780638b34a960146104e057806392ab89bb146104f5578063932d51571461050a5780639a9e3b6e1461052a5761027d565b80635c19a95c146104165780636198e3391461043657806365da126414610456578063671dd275146104765780636a6617551461048b5761027d565b806332687ec11161023a57806332687ec11461035057806337f135d71461037d5780633e4f49e61461039257806354fd4d50146103bf578063587a6ecb146103e157806358e9fff0146103f65761027d565b8063013cf08b1461028257806302ec8f9e146102bf57806315373e3d146102e157806317977c611461030157806324b0435f1461032e5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046127f8565b6107d2565b6040516102b6989796959493929190612904565b60405180910390f35b3480156102cb57600080fd5b506102df6102da3660046127f8565b610837565b005b3480156102ed57600080fd5b506102df6102fc36600461283c565b610864565b34801561030d57600080fd5b5061032161031c3660046125ef565b610967565b6040516102b69190612f6b565b34801561033a57600080fd5b50610343610979565b6040516102b691906128b3565b34801561035c57600080fd5b5061037061036b3660046127f8565b610991565b6040516102b691906129c2565b34801561038957600080fd5b506103216109df565b34801561039e57600080fd5b506103b26103ad3660046127f8565b6109e5565b6040516102b691906129cd565b3480156103cb57600080fd5b506103d4610b21565b6040516102b691906129e1565b3480156103ed57600080fd5b50610321610b58565b34801561040257600080fd5b5061032161041136600461260a565b610b5e565b34801561042257600080fd5b506102df6104313660046125ef565b610bac565b34801561044257600080fd5b506102df6104513660046127f8565b610cce565b34801561046257600080fd5b506103436104713660046125ef565b610e1b565b34801561048257600080fd5b50610321610e36565b34801561049757600080fd5b50610321610e3c565b3480156104ac57600080fd5b506102df6104bb3660046127f8565b610e42565b3480156104cc57600080fd5b506102df6104db3660046127f8565b610e87565b3480156104ec57600080fd5b50610343610eab565b34801561050157600080fd5b506102df610ecf565b34801561051657600080fd5b506102df6105253660046127f8565b610f56565b34801561053657600080fd5b506102df6105453660046127f8565b611008565b34801561055657600080fd5b506103216105653660046125ef565b61102c565b34801561057657600080fd5b5061034361103e565b34801561058b57600080fd5b50610321611062565b3480156105a057600080fd5b506103216105af3660046125ef565b611068565b3480156105c057600080fd5b5061034361107a565b3480156105d557600080fd5b50610321611089565b3480156105ea57600080fd5b506102df6105f93660046127f8565b61108f565b34801561060a57600080fd5b506102df610619366004612717565b6111d8565b34801561062a57600080fd5b506102df6106393660046127f8565b611226565b34801561064a57600080fd5b506102df6106593660046125ef565b61124a565b34801561066a57600080fd5b5061032161148d565b34801561067f57600080fd5b50610321611493565b34801561069457600080fd5b506103216106a336600461266a565b611499565b3480156106b457600080fd5b506103216114af565b3480156106c957600080fd5b506106dd6106d8366004612810565b6114b9565b6040516102b69190612f46565b3480156106f657600080fd5b506102df6107053660046127f8565b61152b565b34801561071657600080fd5b50610370610725366004612810565b61154f565b34801561073657600080fd5b506102df6107453660046127f8565b611592565b34801561075657600080fd5b506102df6107653660046127f8565b6115b6565b34801561077657600080fd5b506102df6107853660046127f8565b6115da565b34801561079657600080fd5b506102df6107a53660046126b8565b61166c565b3480156107b657600080fd5b506103436117c7565b6102df6107cd3660046127f8565b6117eb565b603d81815481106107df57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461085f5760405162461bcd60e51b815260040161085690612cb4565b60405180910390fd5b603555565b3361086f833361154f565b158015610882575061088083610991565b155b333214610890576000610894565b6152085b61ffff1681156109555760005a90506108ae33878761197d565b60006108cb6127106108c5856108c55a8790611bae565b90611bf0565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061091c90889085906004016128c7565b600060405180830381600087803b15801561093657600080fd5b505af115801561094a573d6000803e3d6000fd5b505050505050610960565b61096033868661197d565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109a357fe5b906000526020600020906008020160050154603d84815481106109c257fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b60006109ef6114af565b82111580156109fe5750600082115b610a1a5760405162461bcd60e51b815260040161085690612e11565b6000603d8381548110610a2957fe5b906000526020600020906008020190508060020154610a46611c15565b11610a555760009150506109da565b8060030154610a62611c15565b11610a715760019150506109da565b80600501548160040154111580610a9357506035548160050154826004015401105b15610aa25760029150506109da565b600681015460ff1615610ab95760059150506109da565b610ad86034546108c56033548460030154611bf090919063ffffffff16565b610ae0611c15565b10610aef5760069150506109da565b6033546003820154610b0091611bf0565b610b08611c15565b10610b175760049150506109da565b60039150506109da565b60408051808201909152601981527f322e6c6f74746572792d616e642d6761732d7570677261646500000000000000602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610b995760405162461bcd60e51b815260040161085690612ea1565b610ba4848484611c19565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610be257506001600160a01b0382163014155b8015610bf657506001600160a01b03821615155b8015610c145750806001600160a01b0316826001600160a01b031614155b610c305760405162461bcd60e51b815260040161085690612ceb565b6001600160a01b03811615610c76576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d2b9185916004016128c7565b600060405180830381600087803b158015610d4557600080fd5b505af1925050508015610d56575060015b610dd9573d808015610d84576040519150601f19603f3d011682016040523d82523d6000602084013e610d89565b606091505b5080604051610d989190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e0e565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e1782611f67565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e615760405162461bcd60e51b815260040161085690612cb4565b6033548110610e825760405162461bcd60e51b815260040161085690612bd8565b603a55565b333014610ea65760405162461bcd60e51b815260040161085690612cb4565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f055760405162461bcd60e51b815260040161085690612e57565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f5e610979565b6001600160a01b0316336001600160a01b031614610f8e5760405162461bcd60e51b815260040161085690612dea565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610fda908490600401612f6b565b600060405180830381600087803b158015610ff457600080fd5b505af1158015610960573d6000803e3d6000fd5b3330146110275760405162461bcd60e51b815260040161085690612cb4565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916110ec9185916004016128c7565b600060405180830381600087803b15801561110657600080fd5b505af1925050508015611117575060015b61119a573d808015611145576040519150601f19603f3d011682016040523d82523d6000602084013e61114a565b606091505b50806040516111599190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111cf565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e178261204b565b60008351116111f95760405162461bcd60e51b815260040161085690612c8a565b611221838383611209863361154f565b15801561121c575061121a86610991565b155b612055565b505050565b3330146112455760405162461bcd60e51b815260040161085690612cb4565b603955565b600054610100900460ff16806112635750611263612298565b80611271575060005460ff16155b61128d5760405162461bcd60e51b815260040161085690612d9c565b600054610100900460ff161580156112b8576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561147861229e565b8015610e17576000805461ff00191690555050565b60395481565b60375481565b60006114a6338484611c19565b90505b92915050565b603d546000190190565b6114c16124e9565b603d83815481106114ce57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b33301461154a5760405162461bcd60e51b815260040161085690612cb4565b603355565b6000603d838154811061155e57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115b15760405162461bcd60e51b815260040161085690612cb4565b603855565b3330146115d55760405162461bcd60e51b815260040161085690612cb4565b603655565b6115e2610979565b6001600160a01b0316336001600160a01b0316146116125760405162461bcd60e51b815260040161085690612dea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc61164983476122df565b6040518115909202916000818181858888f1935050505061166957600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116cd9185916004016128c7565b600060405180830381600087803b1580156116e757600080fd5b505af19250505080156116f8575060015b61177b573d808015611726576040519150601f19603f3d011682016040523d82523d6000602084013e61172b565b606091505b508060405161173a9190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117b0565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117be8787878787876122f5565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60046117f6826109e5565b600681111561180157fe5b1461181e5760405162461bcd60e51b815260040161085690612a37565b6000603d828154811061182d57fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661186881612375565b6118845760405162461bcd60e51b8152600401610856906129f4565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b038516916118c891612897565b600060405180830381855af49150503d8060008114611903576040519150601f19603f3d011682016040523d82523d6000602084013e611908565b606091505b50915091508161194b57805115611933578060405162461bcd60e51b815260040161085691906129e1565b60405162461bcd60e51b815260040161085690612ed8565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001611988836109e5565b600681111561199357fe5b146119b05760405162461bcd60e51b815260040161085690612afd565b6000603d83815481106119bf57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b909452919094205492945010159080611a1e5760405162461bcd60e51b815260040161085690612d22565b825460ff1615611a6d578254610100900460ff1615611a545760018301546004850154611a4a91611bae565b6004850155611a6d565b60018301546005850154611a6791611bae565b60058501555b8415611a8c576004840154611a829082611bf0565b6004850155611aa1565b6005840154611a9b9082611bf0565b60058501555b6006840154610100900460ff16158015611ad15750603954611acf611ac4611c15565b600387015490611bae565b105b15611b15576005840154600485015411158215158114611b135760068501805461ff001916610100179055603a546003860154611b0d91611bf0565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611b60938b93611b5b9391926108c592839190611bf0565b61237b565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611b9d9190612f6b565b60405180910390a450505050505050565b60006114a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123b8565b6000828201838110156114a65760405162461bcd60e51b815260040161085690612ba1565b4290565b6001600160a01b0383166000908152603b6020526040812054603654811015611c545760405162461bcd60e51b815260040161085690612b44565b611c5d84612375565b611c795760405162461bcd60e51b815260040161085690612d59565b6001600160a01b0385166000908152603e60205260409020548015611ceb576000611ca3826109e5565b90506001816006811115611cb357fe5b14158015611ccd57506000816006811115611cca57fe5b14155b611ce95760405162461bcd60e51b815260040161085690612a82565b505b6000611cfb6037546108c5611c15565b90506000611d1460385483611bf090919063ffffffff16565b9050611d1e612509565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611ed06114af565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611f12928d92611b5b9290916108c5919082908a90611bf0565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d604051611f52949392919061298b565b60405180910390a39998505050505050505050565b336000908152603f6020526040902054611f7f611c15565b11611f9c5760405162461bcd60e51b815260040161085690612c1c565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611fea9183906123b8565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610fda919085906004016128c7565b61166933826123e4565b3381328214612065576000612069565b6152085b61ffff1681156121d45760005a905060005b885181101561213257600089828151811061209257fe5b6020908102919091018101516001600160a01b038082166000908152603c909352604090922054909250163314806120d257506001600160a01b03811633145b6120ee5760405162461bcd60e51b815260040161085690612ea1565b8615806121025750612100898261154f565b155b61211e5760405162461bcd60e51b815260040161085690612f0f565b612129818a8a61197d565b5060010161207b565b50600061214a6127106108c5856108c55a8790611bae565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061219b90889085906004016128c7565b600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b5050505050506117be565b60005b875181101561228e5760008882815181106121ee57fe5b6020908102919091018101516001600160a01b038082166000908152603c9093526040909220549092501633148061222e57506001600160a01b03811633145b61224a5760405162461bcd60e51b815260040161085690612ea1565b85158061225e575061225c888261154f565b155b61227a5760405162461bcd60e51b815260040161085690612f0f565b61228581898961197d565b506001016121d7565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008183106122ee57816114a6565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061233190899030908a908a908a908a908a9060040161294a565b600060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b5050505061236d86866123e4565b505050505050565b3b151590565b6001600160a01b0382166000908152603f6020526040902054811115610e17576001600160a01b03919091166000908152603f6020526040902055565b600081848411156123dc5760405162461bcd60e51b815260040161085691906129e1565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906124389085907f00000000000000000000000000000000000000000000000000000000000000009086906004016128e0565b602060405180830381600087803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a91906127dc565b6124a65760405162461bcd60e51b815260040161085690612c53565b6001600160a01b0382166000908152603b60205260409020546124c99082611bf0565b6001600160a01b039092166000908152603b602052604090209190915550565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114a957600080fd5b80356114a981612fe0565b600082601f830112612596578081fd5b813567ffffffffffffffff8111156125ac578182fd5b6125bf601f8201601f1916602001612f74565b91508082528360208285010111156125d657600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612600578081fd5b6114a68383612564565b60008060006060848603121561261e578182fd5b833561262981612fcb565b9250602084013561263981612fcb565b9150604084013567ffffffffffffffff811115612654578182fd5b61266086828701612586565b9150509250925092565b6000806040838503121561267c578182fd5b823561268781612fcb565b9150602083013567ffffffffffffffff8111156126a2578182fd5b6126ae85828601612586565b9150509250929050565b60008060008060008060c087890312156126d0578182fd5b6126da8888612564565b95506020870135945060408701359350606087013560ff811681146126fd578283fd5b9598949750929560808101359460a0909101359350915050565b60008060006060848603121561272b578283fd5b833567ffffffffffffffff80821115612742578485fd5b818601915086601f830112612755578485fd5b813581811115612763578586fd5b60209150818102612775838201612f74565b8281528381019085850183870186018c101561278f57898afd5b8996505b848710156127b9576127a58c82612564565b835260019690960195918501918501612793565b50975050505085013592506127d39050856040860161257b565b90509250925092565b6000602082840312156127ed578081fd5b81516114a681612fe0565b600060208284031215612809578081fd5b5035919050565b60008060408385031215612822578182fd5b823591506128338460208501612564565b90509250929050565b6000806040838503121561284e578182fd5b82359150602083013561286081612fe0565b809150509250929050565b60008151808452612883816020860160208601612f9b565b601f01601f19169290920160200192915050565b600082516128a9818460208701612f9b565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b0386168252846020830152836040830152608060608301526129b8608083018461286b565b9695505050505050565b901515815260200190565b60208101600783106129db57fe5b91905290565b6000602082526114a6602083018461286b565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612f9357600080fd5b604052919050565b60005b83811015612fb6578181015183820152602001612f9e565b83811115612fc5576000848401525b50505050565b6001600160a01b038116811461166957600080fd5b801515811461166957600080fdfea2646970667358221220e1f35bea256ff1c0e43f98312094903f31941303df43a2edbe8b9bd0fa323c8864736f6c634300060c0033"; +const isSuperArgs$c = (xs) => xs.length > 1; +class GovernanceStakingUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$c(args)) { + super(...args); + } else { + super(_abi$d, _bytecode$c, args[0]); + } + } + getDeployTransaction(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.getDeployTransaction( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + deploy(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.deploy( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$d); + } + static connect(address, runner) { + return new Contract( + address, + _abi$d, + runner + ); + } +} +GovernanceStakingUpgrade__factory.bytecode = _bytecode$c; +GovernanceStakingUpgrade__factory.abi = _abi$d; + +var index$8 = /*#__PURE__*/Object.freeze({ + __proto__: null, + GovernanceStakingUpgrade__factory: GovernanceStakingUpgrade__factory, + interfaces: index$9 +}); + +const _abi$c = [ + { + inputs: [ + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + }, + { + internalType: "address", + name: "implementationContract", + type: "address" + }, + { + internalType: "bytes", + name: "metamorphicContractInitializationCalldata", + type: "bytes" + } + ], + name: "deployMetamorphicContractFromExistingImplementation", + outputs: [ + { + internalType: "address", + name: "metamorphicContractAddress", + type: "address" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + } + ], + name: "findMetamorphicContractAddress", + outputs: [ + { + internalType: "address", + name: "metamorphicContractAddress", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +class IMetamorphicContractFactory__factory { + static createInterface() { + return new Interface(_abi$c); + } + static connect(address, runner) { + return new Contract( + address, + _abi$c, + runner + ); + } +} +IMetamorphicContractFactory__factory.abi = _abi$c; + +var index$7 = /*#__PURE__*/Object.freeze({ + __proto__: null, + IMetamorphicContractFactory__factory: IMetamorphicContractFactory__factory +}); + +const _abi$b = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "num", + type: "uint256" + } + ], + name: "MockExecuted", + type: "event" + }, + { + inputs: [], + name: "emergencyStop", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$b = "0x608060405234801561001057600080fd5b5060c08061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063373058b814603757806363a599a414603f575b600080fd5b603d6045565b005b603d607d565b7f2ff532ec74fd1130db9b7b6800e0992b2363095b00331a891a27edfab97c45406001604051607391906081565b60405180910390a1565b6000ff5b9081526020019056fea264697066735822122018779fa63005d6573862657b4a5cd55f75b705b28a7ff69222461665b78f408a64736f6c634300060c0033"; +const isSuperArgs$b = (xs) => xs.length > 1; +class InitialProposal__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$b(args)) { + super(...args); + } else { + super(_abi$b, _bytecode$b, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$b); + } + static connect(address, runner) { + return new Contract(address, _abi$b, runner); + } +} +InitialProposal__factory.bytecode = _bytecode$b; +InitialProposal__factory.abi = _abi$b; + +const _abi$a = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "num", + type: "uint256" + } + ], + name: "MockExecuted", + type: "event" + }, + { + inputs: [], + name: "deployer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "emergencyStop", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$a = "0x60a060405234801561001057600080fd5b5033606081901b6080526102746100366000398061012952806101b052506102746000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063373058b81461004657806363a599a414610050578063d5f3948814610058575b600080fd5b61004e610076565b005b61004e6101aa565b6100606101ae565b60405161006d9190610211565b60405180910390f35b6040516370a0823160e01b81527377777feddddffc19ff86db637967013e6c6a116c9060009082906370a08231906100b2903090600401610211565b60206040518083038186803b1580156100ca57600080fd5b505afa1580156100de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010291906101f9565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610153907f0000000000000000000000000000000000000000000000000000000000000000908590600401610225565b602060405180830381600087803b15801561016d57600080fd5b505af1158015610181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a591906101d2565b505050565b6000ff5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000602082840312156101e3578081fd5b815180151581146101f2578182fd5b9392505050565b60006020828403121561020a578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220c120adf2a3856eb39e4d2305abf19175fb5f11d87cd96e5c70ce2a9f702ba53664736f6c634300060c0033"; +const isSuperArgs$a = (xs) => xs.length > 1; +class MaliciousProposal__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$a(args)) { + super(...args); + } else { + super(_abi$a, _bytecode$a, args[0]); + } + } + getDeployTransaction(overrides) { + return super.getDeployTransaction(overrides || {}); + } + deploy(overrides) { + return super.deploy(overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$a); + } + static connect(address, runner) { + return new Contract(address, _abi$a, runner); + } +} +MaliciousProposal__factory.bytecode = _bytecode$a; +MaliciousProposal__factory.abi = _abi$a; + +var index$6 = /*#__PURE__*/Object.freeze({ + __proto__: null, + InitialProposal__factory: InitialProposal__factory, + MaliciousProposal__factory: MaliciousProposal__factory +}); + +var index$5 = /*#__PURE__*/Object.freeze({ + __proto__: null, + mockProposalsSol: index$6 +}); + +const _abi$9 = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "address", + name: "_admin", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$9 = "0x60806040526040516108403803806108408339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508390508282816100f1826101c5565b8051156101a9576000826001600160a01b0316826040518082805190602001908083835b602083106101345780518252601f199092019160209182019101610115565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610194576040519150601f19603f3d011682016040523d82523d6000602084013e610199565b606091505b50509050806101a757600080fd5b505b506101b19050565b6101ba82610237565b505050505050610261565b6101d88161025b60201b6103b41760201c565b6102135760405162461bcd60e51b815260040180806020018281038252603681526020018061080a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a806102706000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212203c0c6456361fbff816ff53c5547d39ad0e807130f877d2661772f7bffc95b82764736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$9 = (xs) => xs.length > 1; +let AdminUpgradeableProxy__factory$1 = class AdminUpgradeableProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$9(args)) { + super(...args); + } else { + super(_abi$9, _bytecode$9, args[0]); + } + } + getDeployTransaction(_logic, _admin, _data, overrides) { + return super.getDeployTransaction(_logic, _admin, _data, overrides || {}); + } + deploy(_logic, _admin, _data, overrides) { + return super.deploy(_logic, _admin, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$9); + } + static connect(address, runner) { + return new Contract( + address, + _abi$9, + runner + ); + } +}; +AdminUpgradeableProxy__factory$1.bytecode = _bytecode$9; +AdminUpgradeableProxy__factory$1.abi = _abi$9; + +const _abi$8 = [ + { + inputs: [ + { + internalType: "address", + name: "stakingRewardsAddress", + type: "address" + }, + { + internalType: "address", + name: "gasCompLogic", + type: "address" + }, + { + internalType: "address", + name: "userVaultAddress", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "bytes", + name: "errorData", + type: "bytes" + } + ], + name: "RewardUpdateFailed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "RewardUpdateSuccessful", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "Staking", + outputs: [ + { + internalType: "contract ITornadoStakingRewards", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "checkIfQuorumReached", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "gasCompensationVault", + outputs: [ + { + internalType: "contract IGasCompensationVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "hasAccountVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposalCodehashes", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "returnMultisigAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasCompensationsLimit", + type: "uint256" + } + ], + name: "setGasCompensations", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawFromHelper", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$8 = "0x60e06040523480156200001157600080fd5b50604051620034343803806200343483398101604081905262000034916200016b565b82828281818181600060019054906101000a900460ff16806200005c57506200005c62000124565b806200006b575060005460ff16155b620000935760405162461bcd60e51b81526004016200008a90620001be565b60405180910390fd5b600054610100900460ff16158015620000bf576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000dd6200012a565b8015620000f0576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022595505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000180578283fd5b83516200018d816200020c565b6020850151909350620001a0816200020c565b6040850151909250620001b3816200020c565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022257600080fd5b50565b60805160601c60a05160601c60c05160601c6131ac6200028860003980610d1352806110d452806116c752806117f85250806109105280610eca5280610fc252806116435280611d6d52508061105d5280611c1652806124f152506131ac6000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e1565b6107fd565b6040516102c19897969594939291906129ed565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e1565b610862565b005b3480156102f857600080fd5b506102ea610307366004612925565b61088f565b34801561031857600080fd5b5061032c6103273660046126d8565b610992565b6040516102c19190612ab6565b34801561034557600080fd5b5061034e6109a4565b6040516102c1919061299c565b34801561036757600080fd5b5061037b6103763660046128e1565b6109bc565b6040516102c19190612aab565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e1565b610a10565b6040516102c19190612abf565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ad3565b3480156103f857600080fd5b5061032c610b75565b34801561040d57600080fd5b5061032c61041c3660046126f3565b610b7b565b34801561042d57600080fd5b506102ea61043c3660046126d8565b610bc9565b34801561044d57600080fd5b506102ea61045c3660046128e1565b610ceb565b34801561046d57600080fd5b5061034e61047c3660046126d8565b610e38565b34801561048d57600080fd5b5061032c610e53565b3480156104a257600080fd5b5061032c610e59565b3480156104b757600080fd5b506102ea6104c63660046128e1565b610e5f565b3480156104d757600080fd5b506102ea6104e63660046128e1565b610ea4565b3480156104f757600080fd5b5061034e610ec8565b34801561050c57600080fd5b506102ea610eec565b34801561052157600080fd5b506102ea6105303660046128e1565b610f73565b34801561054157600080fd5b506102ea6105503660046128e1565b611025565b34801561056157600080fd5b5061032c6105703660046126d8565b611049565b34801561058157600080fd5b5061034e61105b565b34801561059657600080fd5b5061032c61107f565b3480156105ab57600080fd5b5061032c6105ba3660046126d8565b611085565b3480156105cb57600080fd5b5061034e611097565b3480156105e057600080fd5b5061032c6110a6565b3480156105f557600080fd5b506102ea6106043660046128e1565b6110ac565b34801561061557600080fd5b506102ea610624366004612800565b6111f5565b34801561063557600080fd5b506102ea6106443660046128e1565b611243565b34801561065557600080fd5b506102ea6106643660046126d8565b611267565b34801561067557600080fd5b5061032c6114aa565b34801561068a57600080fd5b5061032c6114b0565b34801561069f57600080fd5b5061032c6106ae366004612753565b6114b6565b3480156106bf57600080fd5b5061032c6114cc565b3480156106d457600080fd5b5061032c6106e33660046128e1565b6114d6565b3480156106f457600080fd5b506107086107033660046128f9565b6114e8565b6040516102c191906130db565b34801561072157600080fd5b506102ea6107303660046128e1565b61155a565b34801561074157600080fd5b5061037b6107503660046128f9565b61157e565b34801561076157600080fd5b506102ea6107703660046128e1565b6115c1565b34801561078157600080fd5b506102ea6107903660046128e1565b6115e5565b3480156107a157600080fd5b506102ea6107b03660046128e1565b611609565b3480156107c157600080fd5b506102ea6107d03660046127a1565b61169b565b3480156107e157600080fd5b5061034e6117f6565b6102ea6107f83660046128e1565b61181a565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e49565b60405180910390fd5b603555565b3361089a833361157e565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118ac565b60006108f66127106108f0856108f05a8790611add565b90611b1f565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b0565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118ac565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114cc565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fa6565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b44565b11610a80576000915050610a05565b8060030154610a8d611b44565b11610a9c576001915050610a05565b80600501548160040154111580610abe57506035548160050154826004015401105b15610acd576002915050610a05565b600681015460ff1615610ae4576005915050610a05565b610b036034546108f06033548460030154611b1f90919063ffffffff16565b610b0b611b44565b10610b1a576006915050610a05565b6033546003820154610b2b91611b1f565b610b33611b44565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152600f81526e0d0b9c185d18da0b595e1c1b1bda5d608a1b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bb65760405162461bcd60e51b815260040161088190613036565b610bc1848484611b48565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bff57506001600160a01b0382163014155b8015610c1357506001600160a01b03821615155b8015610c315750806001600160a01b0316826001600160a01b031614155b610c4d5760405162461bcd60e51b815260040161088190612e80565b6001600160a01b03811615610c93576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d489185916004016129b0565b600060405180830381600087803b158015610d6257600080fd5b505af1925050508015610d73575060015b610df6573d808015610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b5080604051610db59190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e2b565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611b70565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e7e5760405162461bcd60e51b815260040161088190612e49565b6033548110610e9f5760405162461bcd60e51b815260040161088190612d6d565b603a55565b333014610ec35760405162461bcd60e51b815260040161088190612e49565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f225760405162461bcd60e51b815260040161088190612fec565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f7b6109a4565b6001600160a01b0316336001600160a01b031614610fab5760405162461bcd60e51b815260040161088190612f7f565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ff7908490600401612ab6565b600060405180830381600087803b15801561101157600080fd5b505af115801561098b573d6000803e3d6000fd5b3330146110445760405162461bcd60e51b815260040161088190612e49565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111099185916004016129b0565b600060405180830381600087803b15801561112357600080fd5b505af1925050508015611134575060015b6111b7573d808015611162576040519150601f19603f3d011682016040523d82523d6000602084013e611167565b606091505b50806040516111769190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111ec565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611c54565b60008351116112165760405162461bcd60e51b815260040161088190612e1f565b61123e838383611226863361157e565b1580156112395750611237866109bc565b155b611c5e565b505050565b3330146112625760405162461bcd60e51b815260040161088190612e49565b603955565b600054610100900460ff16806112805750611280611ea1565b8061128e575060005460ff16155b6112aa5760405162461bcd60e51b815260040161088190612f31565b600054610100900460ff161580156112d5576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611495611ea7565b8015610e34576000805461ff00191690555050565b60395481565b60375481565b60006114c3338484611b48565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f06125d2565b603d83815481106114fd57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115795760405162461bcd60e51b815260040161088190612e49565b603355565b6000603d838154811061158d57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e05760405162461bcd60e51b815260040161088190612e49565b603855565b3330146116045760405162461bcd60e51b815260040161088190612e49565b603655565b6116116109a4565b6001600160a01b0316336001600160a01b0316146116415760405162461bcd60e51b815260040161088190612f7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc6116788347611ee8565b6040518115909202916000818181858888f1935050505061169857600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116fc9185916004016129b0565b600060405180830381600087803b15801561171657600080fd5b505af1925050508015611727575060015b6117aa573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b50806040516117699190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117df565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117ed878787878787611efe565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3330141561183a5760405162461bcd60e51b815260040161088190612c36565b6000603d828154811061184957fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f90811461189d5760405162461bcd60e51b815260040161088190612d17565b6118a684611f7e565b50505050565b60016118b783610a10565b60068111156118c257fe5b146118df5760405162461bcd60e51b815260040161088190612bef565b6000603d83815481106118ee57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061194d5760405162461bcd60e51b815260040161088190612eb7565b825460ff161561199c578254610100900460ff1615611983576001830154600485015461197991611add565b600485015561199c565b6001830154600585015461199691611add565b60058501555b84156119bb5760048401546119b19082611b1f565b60048501556119d0565b60058401546119ca9082611b1f565b60058501555b6006840154610100900460ff16158015611a0057506039546119fe6119f3611b44565b600387015490611add565b105b15611a44576005840154600485015411158215158114611a425760068501805461ff001916610100179055603a546003860154611a3c91611b1f565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a8f938b93611a8a9391926108f092839190611b1f565b612110565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611acc9190612ab6565b60405180910390a450505050505050565b60006114c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214d565b6000828201838110156114c35760405162461bcd60e51b815260040161088190612ce0565b4290565b6000611b55848484612179565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b88611b44565b11611ba55760405162461bcd60e51b815260040161088190612db1565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bf391839061214d565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ff7919085906004016129b0565b61169833826124c7565b3381328214611c6e576000611c72565b6152085b61ffff168115611ddd5760005a905060005b8851811015611d3b576000898281518110611c9b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611cdb57506001600160a01b03811633145b611cf75760405162461bcd60e51b815260040161088190613036565b861580611d0b5750611d09898261157e565b155b611d275760405162461bcd60e51b8152600401610881906130a4565b611d32818a8a6118ac565b50600101611c84565b506000611d536127106108f0856108f05a8790611add565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611da490889085906004016129b0565b600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b5050505050506117ed565b60005b8751811015611e97576000888281518110611df757fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3757506001600160a01b03811633145b611e535760405162461bcd60e51b815260040161088190613036565b851580611e675750611e65888261157e565b155b611e835760405162461bcd60e51b8152600401610881906130a4565b611e8e8189896118ac565b50600101611de0565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611ef757816114c3565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f3a90899030908a908a908a908a908a90600401612a33565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b50505050611f7686866124c7565b505050505050565b6004611f8982610a10565b6006811115611f9457fe5b14611fb15760405162461bcd60e51b815260040161088190612b29565b6000603d8281548110611fc057fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316611ffb816125cc565b6120175760405162461bcd60e51b815260040161088190612ae6565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161205b91612980565b600060405180830381855af49150503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5091509150816120de578051156120c6578060405162461bcd60e51b81526004016108819190612ad3565b60405162461bcd60e51b81526004016108819061306d565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e34576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121715760405162461bcd60e51b81526004016108819190612ad3565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121b45760405162461bcd60e51b815260040161088190612c83565b6121bd846125cc565b6121d95760405162461bcd60e51b815260040161088190612eee565b6001600160a01b0385166000908152603e6020526040902054801561224b57600061220382610a10565b9050600181600681111561221357fe5b1415801561222d5750600081600681111561222a57fe5b14155b6122495760405162461bcd60e51b815260040161088190612b74565b505b600061225b6037546108f0611b44565b9050600061227460385483611b1f90919063ffffffff16565b905061227e6125f2565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124306114cc565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612472928d92611a8a9290916108f0919082908a90611b1f565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b29493929190612a74565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061251b9085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129c9565b602060405180830381600087803b15801561253557600080fd5b505af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d91906128c5565b6125895760405162461bcd60e51b815260040161088190612de8565b6001600160a01b0382166000908152603b60205260409020546125ac9082611b1f565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114c657600080fd5b80356114c681613168565b600082601f83011261267f578081fd5b813567ffffffffffffffff811115612695578182fd5b6126a8601f8201601f1916602001613100565b91508082528360208285010111156126bf57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126e9578081fd5b6114c3838361264d565b600080600060608486031215612707578182fd5b833561271281613153565b9250602084013561272281613153565b9150604084013567ffffffffffffffff81111561273d578182fd5b6127498682870161266f565b9150509250925092565b60008060408385031215612765578182fd5b823561277081613153565b9150602083013567ffffffffffffffff81111561278b578182fd5b6127978582860161266f565b9150509250929050565b60008060008060008060c087890312156127b9578182fd5b6127c3888861264d565b95506020870135945060408701359350606087013560ff811681146127e6578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215612814578283fd5b833567ffffffffffffffff8082111561282b578485fd5b818601915086601f83011261283e578485fd5b81358181111561284c578586fd5b6020915081810261285e838201613100565b8281528381019085850183870186018c101561287857898afd5b8996505b848710156128a25761288e8c8261264d565b83526001969096019591850191850161287c565b50975050505085013592506128bc90508560408601612664565b90509250925092565b6000602082840312156128d6578081fd5b81516114c381613168565b6000602082840312156128f2578081fd5b5035919050565b6000806040838503121561290b578182fd5b8235915061291c846020850161264d565b90509250929050565b60008060408385031215612937578182fd5b82359150602083013561294981613168565b809150509250929050565b6000815180845261296c816020860160208601613127565b601f01601f19169290920160200192915050565b60008251612992818460208701613127565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa16080830184612954565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612acd57fe5b91905290565b6000602082526114c36020830184612954565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561311f57600080fd5b604052919050565b60005b8381101561314257818101518382015260200161312a565b838111156118a65750506000910152565b6001600160a01b038116811461169857600080fd5b801515811461169857600080fdfea2646970667358221220b75004153b6c8b4905c018daca78cb0fa6d3859298be55252bcf6ba75ea68d0e64736f6c634300060c0033"; +const isSuperArgs$8 = (xs) => xs.length > 1; +class GovernanceExploitPatchUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$8(args)) { + super(...args); + } else { + super(_abi$8, _bytecode$8, args[0]); + } + } + getDeployTransaction(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.getDeployTransaction( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + deploy(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.deploy( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$8); + } + static connect(address, runner) { + return new Contract( + address, + _abi$8, + runner + ); + } +} +GovernanceExploitPatchUpgrade__factory.bytecode = _bytecode$8; +GovernanceExploitPatchUpgrade__factory.abi = _abi$8; + +const _abi$7 = [ + { + inputs: [ + { + internalType: "address", + name: "_deployedStakingProxyContractAddress", + type: "address" + }, + { + internalType: "address", + name: "_deployedRelayerRegistryImplementationAddress", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "TORN", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "deployedRelayerRegistryImplementationAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "deployedStakingProxyContractAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "executeProposal", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "gasCompensationVaultAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governanceProxyAddress", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "oldStakingProxyAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "registryProxyAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "userVaultAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; +const _bytecode$7 = "0x60c060405234801561001057600080fd5b50604051613adb380380613adb83398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c613a056100d66000398061027a52806104985250806102f952806103f452806104bc5250613a056000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063373058b811610066578063373058b8146100ce5780634655478f146100d857806361697d64146100e05780636fc6091d146100e85780639b49989a146100f057610093565b80630cc784761461009857806313f32237146100b657806324044543146100be57806332bf1039146100c6575b600080fd5b6100a06100f8565b6040516100ad9190610542565b60405180910390f35b6100a0610110565b6100a0610128565b6100a0610140565b6100d6610158565b005b6100a061047e565b6100a0610496565b6100a06104ba565b6100a06104de565b7358e8dcc13be9780fc42e8723d8ead4cf46943df281565b732fc93484614a34f26f7970cbb94615ba109bb4bf81565b73fa4c1f3f7d5dd7c12a9adb82cd7dda542e3d59ef81565b7377777feddddffc19ff86db637967013e6c6a116c81565b6040516370a0823160e01b8152732fc93484614a34f26f7970cbb94615ba109bb4bf90819063f58073b1907377777feddddffc19ff86db637967013e6c6a116c906370a08231906101ad908590600401610542565b60206040518083038186803b1580156101c557600080fd5b505afa1580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd919061052a565b6040518263ffffffff1660e01b81526004016102199190610592565b600060405180830381600087803b15801561023357600080fd5b505af1158015610247573d6000803e3d6000fd5b5050604051631b2ce7f360e11b81527358e8dcc13be9780fc42e8723d8ead4cf46943df29250633659cfe691506102a2907f000000000000000000000000000000000000000000000000000000000000000090600401610542565b600060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b50505050735efda50f22d34f262c29268506c5fa42cb56a1ce6001600160a01b0316633659cfe67f000000000000000000000000000000000000000000000000000000000000000073fa4c1f3f7d5dd7c12a9adb82cd7dda542e3d59ef732f50508a8a3d323b91336fa3ea6ae50e55f3218560405161034e906104f6565b61035a93929190610556565b604051809103906000f080158015610376573d6000803e3d6000fd5b506040518263ffffffff1660e01b81526004016103939190610542565b600060405180830381600087803b1580156103ad57600080fd5b505af11580156103c1573d6000803e3d6000fd5b505060405163a9059cbb60e01b81527377777feddddffc19ff86db637967013e6c6a116c925063a9059cbb9150610428907f0000000000000000000000000000000000000000000000000000000000000000906913ecbccf7737e6b0000090600401610579565b602060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610503565b5050565b735efda50f22d34f262c29268506c5fa42cb56a1ce81565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b732f50508a8a3d323b91336fa3ea6ae50e55f3218581565b6134348061059c83390190565b600060208284031215610514578081fd5b81518015158114610523578182fd5b9392505050565b60006020828403121561053b578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b9081526020019056fe60e06040523480156200001157600080fd5b50604051620034343803806200343483398101604081905262000034916200016b565b82828281818181600060019054906101000a900460ff16806200005c57506200005c62000124565b806200006b575060005460ff16155b620000935760405162461bcd60e51b81526004016200008a90620001be565b60405180910390fd5b600054610100900460ff16158015620000bf576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000dd6200012a565b8015620000f0576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022595505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000180578283fd5b83516200018d816200020c565b6020850151909350620001a0816200020c565b6040850151909250620001b3816200020c565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022257600080fd5b50565b60805160601c60a05160601c60c05160601c6131ac6200028860003980610d1352806110d452806116c752806117f85250806109105280610eca5280610fc252806116435280611d6d52508061105d5280611c1652806124f152506131ac6000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e1565b6107fd565b6040516102c19897969594939291906129ed565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e1565b610862565b005b3480156102f857600080fd5b506102ea610307366004612925565b61088f565b34801561031857600080fd5b5061032c6103273660046126d8565b610992565b6040516102c19190612ab6565b34801561034557600080fd5b5061034e6109a4565b6040516102c1919061299c565b34801561036757600080fd5b5061037b6103763660046128e1565b6109bc565b6040516102c19190612aab565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e1565b610a10565b6040516102c19190612abf565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ad3565b3480156103f857600080fd5b5061032c610b75565b34801561040d57600080fd5b5061032c61041c3660046126f3565b610b7b565b34801561042d57600080fd5b506102ea61043c3660046126d8565b610bc9565b34801561044d57600080fd5b506102ea61045c3660046128e1565b610ceb565b34801561046d57600080fd5b5061034e61047c3660046126d8565b610e38565b34801561048d57600080fd5b5061032c610e53565b3480156104a257600080fd5b5061032c610e59565b3480156104b757600080fd5b506102ea6104c63660046128e1565b610e5f565b3480156104d757600080fd5b506102ea6104e63660046128e1565b610ea4565b3480156104f757600080fd5b5061034e610ec8565b34801561050c57600080fd5b506102ea610eec565b34801561052157600080fd5b506102ea6105303660046128e1565b610f73565b34801561054157600080fd5b506102ea6105503660046128e1565b611025565b34801561056157600080fd5b5061032c6105703660046126d8565b611049565b34801561058157600080fd5b5061034e61105b565b34801561059657600080fd5b5061032c61107f565b3480156105ab57600080fd5b5061032c6105ba3660046126d8565b611085565b3480156105cb57600080fd5b5061034e611097565b3480156105e057600080fd5b5061032c6110a6565b3480156105f557600080fd5b506102ea6106043660046128e1565b6110ac565b34801561061557600080fd5b506102ea610624366004612800565b6111f5565b34801561063557600080fd5b506102ea6106443660046128e1565b611243565b34801561065557600080fd5b506102ea6106643660046126d8565b611267565b34801561067557600080fd5b5061032c6114aa565b34801561068a57600080fd5b5061032c6114b0565b34801561069f57600080fd5b5061032c6106ae366004612753565b6114b6565b3480156106bf57600080fd5b5061032c6114cc565b3480156106d457600080fd5b5061032c6106e33660046128e1565b6114d6565b3480156106f457600080fd5b506107086107033660046128f9565b6114e8565b6040516102c191906130db565b34801561072157600080fd5b506102ea6107303660046128e1565b61155a565b34801561074157600080fd5b5061037b6107503660046128f9565b61157e565b34801561076157600080fd5b506102ea6107703660046128e1565b6115c1565b34801561078157600080fd5b506102ea6107903660046128e1565b6115e5565b3480156107a157600080fd5b506102ea6107b03660046128e1565b611609565b3480156107c157600080fd5b506102ea6107d03660046127a1565b61169b565b3480156107e157600080fd5b5061034e6117f6565b6102ea6107f83660046128e1565b61181a565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e49565b60405180910390fd5b603555565b3361089a833361157e565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118ac565b60006108f66127106108f0856108f05a8790611add565b90611b1f565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b0565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118ac565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114cc565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fa6565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b44565b11610a80576000915050610a05565b8060030154610a8d611b44565b11610a9c576001915050610a05565b80600501548160040154111580610abe57506035548160050154826004015401105b15610acd576002915050610a05565b600681015460ff1615610ae4576005915050610a05565b610b036034546108f06033548460030154611b1f90919063ffffffff16565b610b0b611b44565b10610b1a576006915050610a05565b6033546003820154610b2b91611b1f565b610b33611b44565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152600f81526e0d0b9c185d18da0b595e1c1b1bda5d608a1b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bb65760405162461bcd60e51b815260040161088190613036565b610bc1848484611b48565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bff57506001600160a01b0382163014155b8015610c1357506001600160a01b03821615155b8015610c315750806001600160a01b0316826001600160a01b031614155b610c4d5760405162461bcd60e51b815260040161088190612e80565b6001600160a01b03811615610c93576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d489185916004016129b0565b600060405180830381600087803b158015610d6257600080fd5b505af1925050508015610d73575060015b610df6573d808015610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b5080604051610db59190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e2b565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611b70565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e7e5760405162461bcd60e51b815260040161088190612e49565b6033548110610e9f5760405162461bcd60e51b815260040161088190612d6d565b603a55565b333014610ec35760405162461bcd60e51b815260040161088190612e49565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f225760405162461bcd60e51b815260040161088190612fec565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f7b6109a4565b6001600160a01b0316336001600160a01b031614610fab5760405162461bcd60e51b815260040161088190612f7f565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ff7908490600401612ab6565b600060405180830381600087803b15801561101157600080fd5b505af115801561098b573d6000803e3d6000fd5b3330146110445760405162461bcd60e51b815260040161088190612e49565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111099185916004016129b0565b600060405180830381600087803b15801561112357600080fd5b505af1925050508015611134575060015b6111b7573d808015611162576040519150601f19603f3d011682016040523d82523d6000602084013e611167565b606091505b50806040516111769190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111ec565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611c54565b60008351116112165760405162461bcd60e51b815260040161088190612e1f565b61123e838383611226863361157e565b1580156112395750611237866109bc565b155b611c5e565b505050565b3330146112625760405162461bcd60e51b815260040161088190612e49565b603955565b600054610100900460ff16806112805750611280611ea1565b8061128e575060005460ff16155b6112aa5760405162461bcd60e51b815260040161088190612f31565b600054610100900460ff161580156112d5576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611495611ea7565b8015610e34576000805461ff00191690555050565b60395481565b60375481565b60006114c3338484611b48565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f06125d2565b603d83815481106114fd57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115795760405162461bcd60e51b815260040161088190612e49565b603355565b6000603d838154811061158d57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e05760405162461bcd60e51b815260040161088190612e49565b603855565b3330146116045760405162461bcd60e51b815260040161088190612e49565b603655565b6116116109a4565b6001600160a01b0316336001600160a01b0316146116415760405162461bcd60e51b815260040161088190612f7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc6116788347611ee8565b6040518115909202916000818181858888f1935050505061169857600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116fc9185916004016129b0565b600060405180830381600087803b15801561171657600080fd5b505af1925050508015611727575060015b6117aa573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b50806040516117699190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117df565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117ed878787878787611efe565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3330141561183a5760405162461bcd60e51b815260040161088190612c36565b6000603d828154811061184957fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f90811461189d5760405162461bcd60e51b815260040161088190612d17565b6118a684611f7e565b50505050565b60016118b783610a10565b60068111156118c257fe5b146118df5760405162461bcd60e51b815260040161088190612bef565b6000603d83815481106118ee57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061194d5760405162461bcd60e51b815260040161088190612eb7565b825460ff161561199c578254610100900460ff1615611983576001830154600485015461197991611add565b600485015561199c565b6001830154600585015461199691611add565b60058501555b84156119bb5760048401546119b19082611b1f565b60048501556119d0565b60058401546119ca9082611b1f565b60058501555b6006840154610100900460ff16158015611a0057506039546119fe6119f3611b44565b600387015490611add565b105b15611a44576005840154600485015411158215158114611a425760068501805461ff001916610100179055603a546003860154611a3c91611b1f565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a8f938b93611a8a9391926108f092839190611b1f565b612110565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611acc9190612ab6565b60405180910390a450505050505050565b60006114c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214d565b6000828201838110156114c35760405162461bcd60e51b815260040161088190612ce0565b4290565b6000611b55848484612179565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b88611b44565b11611ba55760405162461bcd60e51b815260040161088190612db1565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bf391839061214d565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ff7919085906004016129b0565b61169833826124c7565b3381328214611c6e576000611c72565b6152085b61ffff168115611ddd5760005a905060005b8851811015611d3b576000898281518110611c9b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611cdb57506001600160a01b03811633145b611cf75760405162461bcd60e51b815260040161088190613036565b861580611d0b5750611d09898261157e565b155b611d275760405162461bcd60e51b8152600401610881906130a4565b611d32818a8a6118ac565b50600101611c84565b506000611d536127106108f0856108f05a8790611add565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611da490889085906004016129b0565b600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b5050505050506117ed565b60005b8751811015611e97576000888281518110611df757fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3757506001600160a01b03811633145b611e535760405162461bcd60e51b815260040161088190613036565b851580611e675750611e65888261157e565b155b611e835760405162461bcd60e51b8152600401610881906130a4565b611e8e8189896118ac565b50600101611de0565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611ef757816114c3565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f3a90899030908a908a908a908a908a90600401612a33565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b50505050611f7686866124c7565b505050505050565b6004611f8982610a10565b6006811115611f9457fe5b14611fb15760405162461bcd60e51b815260040161088190612b29565b6000603d8281548110611fc057fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316611ffb816125cc565b6120175760405162461bcd60e51b815260040161088190612ae6565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161205b91612980565b600060405180830381855af49150503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5091509150816120de578051156120c6578060405162461bcd60e51b81526004016108819190612ad3565b60405162461bcd60e51b81526004016108819061306d565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e34576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121715760405162461bcd60e51b81526004016108819190612ad3565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121b45760405162461bcd60e51b815260040161088190612c83565b6121bd846125cc565b6121d95760405162461bcd60e51b815260040161088190612eee565b6001600160a01b0385166000908152603e6020526040902054801561224b57600061220382610a10565b9050600181600681111561221357fe5b1415801561222d5750600081600681111561222a57fe5b14155b6122495760405162461bcd60e51b815260040161088190612b74565b505b600061225b6037546108f0611b44565b9050600061227460385483611b1f90919063ffffffff16565b905061227e6125f2565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124306114cc565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612472928d92611a8a9290916108f0919082908a90611b1f565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b29493929190612a74565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061251b9085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129c9565b602060405180830381600087803b15801561253557600080fd5b505af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d91906128c5565b6125895760405162461bcd60e51b815260040161088190612de8565b6001600160a01b0382166000908152603b60205260409020546125ac9082611b1f565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114c657600080fd5b80356114c681613168565b600082601f83011261267f578081fd5b813567ffffffffffffffff811115612695578182fd5b6126a8601f8201601f1916602001613100565b91508082528360208285010111156126bf57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126e9578081fd5b6114c3838361264d565b600080600060608486031215612707578182fd5b833561271281613153565b9250602084013561272281613153565b9150604084013567ffffffffffffffff81111561273d578182fd5b6127498682870161266f565b9150509250925092565b60008060408385031215612765578182fd5b823561277081613153565b9150602083013567ffffffffffffffff81111561278b578182fd5b6127978582860161266f565b9150509250929050565b60008060008060008060c087890312156127b9578182fd5b6127c3888861264d565b95506020870135945060408701359350606087013560ff811681146127e6578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215612814578283fd5b833567ffffffffffffffff8082111561282b578485fd5b818601915086601f83011261283e578485fd5b81358181111561284c578586fd5b6020915081810261285e838201613100565b8281528381019085850183870186018c101561287857898afd5b8996505b848710156128a25761288e8c8261264d565b83526001969096019591850191850161287c565b50975050505085013592506128bc90508560408601612664565b90509250925092565b6000602082840312156128d6578081fd5b81516114c381613168565b6000602082840312156128f2578081fd5b5035919050565b6000806040838503121561290b578182fd5b8235915061291c846020850161264d565b90509250929050565b60008060408385031215612937578182fd5b82359150602083013561294981613168565b809150509250929050565b6000815180845261296c816020860160208601613127565b601f01601f19169290920160200192915050565b60008251612992818460208701613127565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa16080830184612954565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612acd57fe5b91905290565b6000602082526114c36020830184612954565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561311f57600080fd5b604052919050565b60005b8381101561314257818101518382015260200161312a565b838111156118a65750506000910152565b6001600160a01b038116811461169857600080fd5b801515811461169857600080fdfea2646970667358221220b75004153b6c8b4905c018daca78cb0fa6d3859298be55252bcf6ba75ea68d0e64736f6c634300060c0033a26469706673582212205ce84e9446fce11b2c9c1572684a150170d4bffa09fb4c56f9926d2efe573f6b64736f6c634300060c0033"; +const isSuperArgs$7 = (xs) => xs.length > 1; +class PatchProposal__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$7(args)) { + super(...args); + } else { + super(_abi$7, _bytecode$7, args[0]); + } + } + getDeployTransaction(_deployedStakingProxyContractAddress, _deployedRelayerRegistryImplementationAddress, overrides) { + return super.getDeployTransaction( + _deployedStakingProxyContractAddress, + _deployedRelayerRegistryImplementationAddress, + overrides || {} + ); + } + deploy(_deployedStakingProxyContractAddress, _deployedRelayerRegistryImplementationAddress, overrides) { + return super.deploy( + _deployedStakingProxyContractAddress, + _deployedRelayerRegistryImplementationAddress, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$7); + } + static connect(address, runner) { + return new Contract(address, _abi$7, runner); + } +} +PatchProposal__factory.bytecode = _bytecode$7; +PatchProposal__factory.abi = _abi$7; + +var index$4 = /*#__PURE__*/Object.freeze({ + __proto__: null, + AdminUpgradeableProxy__factory: AdminUpgradeableProxy__factory$1, + GovernanceExploitPatchUpgrade__factory: GovernanceExploitPatchUpgrade__factory, + PatchProposal__factory: PatchProposal__factory, + metamorphic: index$7, + mock: index$5 +}); + +const _abi$6 = [ + { + inputs: [ + { + internalType: "address", + name: "stakingRewardsAddress", + type: "address" + }, + { + internalType: "address", + name: "gasCompLogic", + type: "address" + }, + { + internalType: "address", + name: "userVaultAddress", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Delegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "id", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "bytes", + name: "errorData", + type: "bytes" + } + ], + name: "RewardUpdateFailed", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + } + ], + name: "RewardUpdateSuccessful", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + } + ], + name: "Undelegated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: true, + internalType: "bool", + name: "support", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + name: "Voted", + type: "event" + }, + { + inputs: [], + name: "CLOSING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "EXECUTION_EXPIRATION", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PROPOSAL_THRESHOLD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "QUORUM_VOTES", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "Staking", + outputs: [ + { + internalType: "contract ITornadoStakingRewards", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTE_EXTEND_TIME", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_DELAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VOTING_PERIOD", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "canWithdrawAfter", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "from", + type: "address[]" + }, + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castDelegatedVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "bool", + name: "support", + type: "bool" + } + ], + name: "castVote", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "checkIfQuorumReached", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "delegatedTo", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "gasCompensationVault", + outputs: [ + { + internalType: "contract IGasCompensationVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "getReceipt", + outputs: [ + { + components: [ + { + internalType: "bool", + name: "hasVoted", + type: "bool" + }, + { + internalType: "bool", + name: "support", + type: "bool" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + } + ], + internalType: "struct Governance.Receipt", + name: "", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "hasAccountVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + } + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "latestProposalIds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "lock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "lockWithApproval", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "lockedBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposalCodehashes", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "proposals", + outputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "startTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "endTime", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "bool", + name: "executed", + type: "bool" + }, + { + internalType: "bool", + name: "extended", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "proposeByDelegate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "returnMultisigAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "closingPeriod", + type: "uint256" + } + ], + name: "setClosingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + } + ], + name: "setExecutionDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "executionExpiration", + type: "uint256" + } + ], + name: "setExecutionExpiration", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasCompensationsLimit", + type: "uint256" + } + ], + name: "setGasCompensations", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumVotes", + type: "uint256" + } + ], + name: "setQuorumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "voteExtendTime", + type: "uint256" + } + ], + name: "setVoteExtendTime", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingDelay", + type: "uint256" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum Governance.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "contract TORN", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "undelegate", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "unlock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "userVault", + outputs: [ + { + internalType: "contract ITornadoVault", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawFromHelper", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$6 = "0x60e06040523480156200001157600080fd5b506040516200344138038062003441833981016040819052620000349162000171565b82828282828281818181600060019054906101000a900460ff16806200005f57506200005f6200012a565b806200006e575060005460ff16155b620000965760405162461bcd60e51b81526004016200008d90620001c4565b60405180910390fd5b600054610100900460ff16158015620000c2576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000e062000130565b8015620000f3576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022b98505050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000186578283fd5b8351620001938162000212565b6020850151909350620001a68162000212565b6040850151909250620001b98162000212565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022857600080fd5b50565b60805160601c60a05160601c60c05160601c6131b36200028e60003980610d1a52806110db52806116ce52806117ff5250806109105280610ed15280610fc9528061164a5280611d745250806110645280611c1d52806124f852506131b36000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e8565b6107fd565b6040516102c19897969594939291906129f4565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e8565b610862565b005b3480156102f857600080fd5b506102ea61030736600461292c565b61088f565b34801561031857600080fd5b5061032c6103273660046126df565b610992565b6040516102c19190612abd565b34801561034557600080fd5b5061034e6109a4565b6040516102c191906129a3565b34801561036757600080fd5b5061037b6103763660046128e8565b6109bc565b6040516102c19190612ab2565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e8565b610a10565b6040516102c19190612ac6565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ada565b3480156103f857600080fd5b5061032c610b7c565b34801561040d57600080fd5b5061032c61041c3660046126fa565b610b82565b34801561042d57600080fd5b506102ea61043c3660046126df565b610bd0565b34801561044d57600080fd5b506102ea61045c3660046128e8565b610cf2565b34801561046d57600080fd5b5061034e61047c3660046126df565b610e3f565b34801561048d57600080fd5b5061032c610e5a565b3480156104a257600080fd5b5061032c610e60565b3480156104b757600080fd5b506102ea6104c63660046128e8565b610e66565b3480156104d757600080fd5b506102ea6104e63660046128e8565b610eab565b3480156104f757600080fd5b5061034e610ecf565b34801561050c57600080fd5b506102ea610ef3565b34801561052157600080fd5b506102ea6105303660046128e8565b610f7a565b34801561054157600080fd5b506102ea6105503660046128e8565b61102c565b34801561056157600080fd5b5061032c6105703660046126df565b611050565b34801561058157600080fd5b5061034e611062565b34801561059657600080fd5b5061032c611086565b3480156105ab57600080fd5b5061032c6105ba3660046126df565b61108c565b3480156105cb57600080fd5b5061034e61109e565b3480156105e057600080fd5b5061032c6110ad565b3480156105f557600080fd5b506102ea6106043660046128e8565b6110b3565b34801561061557600080fd5b506102ea610624366004612807565b6111fc565b34801561063557600080fd5b506102ea6106443660046128e8565b61124a565b34801561065557600080fd5b506102ea6106643660046126df565b61126e565b34801561067557600080fd5b5061032c6114b1565b34801561068a57600080fd5b5061032c6114b7565b34801561069f57600080fd5b5061032c6106ae36600461275a565b6114bd565b3480156106bf57600080fd5b5061032c6114d3565b3480156106d457600080fd5b5061032c6106e33660046128e8565b6114dd565b3480156106f457600080fd5b50610708610703366004612900565b6114ef565b6040516102c191906130e2565b34801561072157600080fd5b506102ea6107303660046128e8565b611561565b34801561074157600080fd5b5061037b610750366004612900565b611585565b34801561076157600080fd5b506102ea6107703660046128e8565b6115c8565b34801561078157600080fd5b506102ea6107903660046128e8565b6115ec565b3480156107a157600080fd5b506102ea6107b03660046128e8565b611610565b3480156107c157600080fd5b506102ea6107d03660046127a8565b6116a2565b3480156107e157600080fd5b5061034e6117fd565b6102ea6107f83660046128e8565b611821565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e50565b60405180910390fd5b603555565b3361089a8333611585565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118b3565b60006108f66127106108f0856108f05a8790611ae4565b90611b26565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b7565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118b3565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114d3565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fad565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b4b565b11610a80576000915050610a05565b8060030154610a8d611b4b565b11610a9c576001915050610a05565b600681015460ff1615610ab3576005915050610a05565b80600501548160040154111580610ad557506035548160050154826004015401105b15610ae4576002915050610a05565b610b036034546108f06033548460030154611b2690919063ffffffff16565b610b0b611b4b565b10610b1a576006915050610a05565b6033546003820154610b2b91611b26565b610b33611b4b565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152601681527506a5ce0e4dee0dee6c2d85ae6e8c2e8ca5ae0c2e8c6d60531b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bbd5760405162461bcd60e51b81526004016108819061303d565b610bc8848484611b4f565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610c0657506001600160a01b0382163014155b8015610c1a57506001600160a01b03821615155b8015610c385750806001600160a01b0316826001600160a01b031614155b610c545760405162461bcd60e51b815260040161088190612e87565b6001600160a01b03811615610c9a576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d4f9185916004016129b7565b600060405180830381600087803b158015610d6957600080fd5b505af1925050508015610d7a575060015b610dfd573d808015610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5080604051610dbc9190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e32565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3b82611b77565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e855760405162461bcd60e51b815260040161088190612e50565b6033548110610ea65760405162461bcd60e51b815260040161088190612d74565b603a55565b333014610eca5760405162461bcd60e51b815260040161088190612e50565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f295760405162461bcd60e51b815260040161088190612ff3565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f826109a4565b6001600160a01b0316336001600160a01b031614610fb25760405162461bcd60e51b815260040161088190612f86565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ffe908490600401612abd565b600060405180830381600087803b15801561101857600080fd5b505af115801561098b573d6000803e3d6000fd5b33301461104b5760405162461bcd60e51b815260040161088190612e50565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111109185916004016129b7565b600060405180830381600087803b15801561112a57600080fd5b505af192505050801561113b575060015b6111be573d808015611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b508060405161117d9190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111f3565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3b82611c5b565b600083511161121d5760405162461bcd60e51b815260040161088190612e26565b61124583838361122d8633611585565b158015611240575061123e866109bc565b155b611c65565b505050565b3330146112695760405162461bcd60e51b815260040161088190612e50565b603955565b600054610100900460ff16806112875750611287611ea8565b80611295575060005460ff16155b6112b15760405162461bcd60e51b815260040161088190612f38565b600054610100900460ff161580156112dc576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561149c611eae565b8015610e3b576000805461ff00191690555050565b60395481565b60375481565b60006114ca338484611b4f565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f76125d9565b603d838154811061150457fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115805760405162461bcd60e51b815260040161088190612e50565b603355565b6000603d838154811061159457fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e75760405162461bcd60e51b815260040161088190612e50565b603855565b33301461160b5760405162461bcd60e51b815260040161088190612e50565b603655565b6116186109a4565b6001600160a01b0316336001600160a01b0316146116485760405162461bcd60e51b815260040161088190612f86565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc61167f8347611eef565b6040518115909202916000818181858888f1935050505061169f57600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916117039185916004016129b7565b600060405180830381600087803b15801561171d57600080fd5b505af192505050801561172e575060015b6117b1573d80801561175c576040519150601f19603f3d011682016040523d82523d6000602084013e611761565b606091505b50806040516117709190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117e6565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117f4878787878787611f05565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b333014156118415760405162461bcd60e51b815260040161088190612c3d565b6000603d828154811061185057fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f9081146118a45760405162461bcd60e51b815260040161088190612d1e565b6118ad84611f85565b50505050565b60016118be83610a10565b60068111156118c957fe5b146118e65760405162461bcd60e51b815260040161088190612bf6565b6000603d83815481106118f557fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806119545760405162461bcd60e51b815260040161088190612ebe565b825460ff16156119a3578254610100900460ff161561198a576001830154600485015461198091611ae4565b60048501556119a3565b6001830154600585015461199d91611ae4565b60058501555b84156119c25760048401546119b89082611b26565b60048501556119d7565b60058401546119d19082611b26565b60058501555b6006840154610100900460ff16158015611a075750603954611a056119fa611b4b565b600387015490611ae4565b105b15611a4b576005840154600485015411158215158114611a495760068501805461ff001916610100179055603a546003860154611a4391611b26565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a96938b93611a919391926108f092839190611b26565b612117565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611ad39190612abd565b60405180910390a450505050505050565b60006114ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612154565b6000828201838110156114ca5760405162461bcd60e51b815260040161088190612ce7565b4290565b6000611b5c848484612180565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b8f611b4b565b11611bac5760405162461bcd60e51b815260040161088190612db8565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bfa918390612154565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ffe919085906004016129b7565b61169f33826124ce565b3381328214611c75576000611c79565b6152085b61ffff168115611de45760005a905060005b8851811015611d42576000898281518110611ca257fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611ce257506001600160a01b03811633145b611cfe5760405162461bcd60e51b81526004016108819061303d565b861580611d125750611d108982611585565b155b611d2e5760405162461bcd60e51b8152600401610881906130ab565b611d39818a8a6118b3565b50600101611c8b565b506000611d5a6127106108f0856108f05a8790611ae4565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611dab90889085906004016129b7565b600060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b5050505050506117f4565b60005b8751811015611e9e576000888281518110611dfe57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3e57506001600160a01b03811633145b611e5a5760405162461bcd60e51b81526004016108819061303d565b851580611e6e5750611e6c8882611585565b155b611e8a5760405162461bcd60e51b8152600401610881906130ab565b611e958189896118b3565b50600101611de7565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611efe57816114ca565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f4190899030908a908a908a908a908a90600401612a3a565b600060405180830381600087803b158015611f5b57600080fd5b505af1158015611f6f573d6000803e3d6000fd5b50505050611f7d86866124ce565b505050505050565b6004611f9082610a10565b6006811115611f9b57fe5b14611fb85760405162461bcd60e51b815260040161088190612b30565b6000603d8281548110611fc757fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316612002816125d3565b61201e5760405162461bcd60e51b815260040161088190612aed565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161206291612987565b600060405180830381855af49150503d806000811461209d576040519150601f19603f3d011682016040523d82523d6000602084013e6120a2565b606091505b5091509150816120e5578051156120cd578060405162461bcd60e51b81526004016108819190612ada565b60405162461bcd60e51b815260040161088190613074565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e3b576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121785760405162461bcd60e51b81526004016108819190612ada565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121bb5760405162461bcd60e51b815260040161088190612c8a565b6121c4846125d3565b6121e05760405162461bcd60e51b815260040161088190612ef5565b6001600160a01b0385166000908152603e6020526040902054801561225257600061220a82610a10565b9050600181600681111561221a57fe5b141580156122345750600081600681111561223157fe5b14155b6122505760405162461bcd60e51b815260040161088190612b7b565b505b60006122626037546108f0611b4b565b9050600061227b60385483611b2690919063ffffffff16565b90506122856125f9565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124376114d3565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612479928d92611a919290916108f0919082908a90611b26565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b99493929190612a7b565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906125229085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129d0565b602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257491906128cc565b6125905760405162461bcd60e51b815260040161088190612def565b6001600160a01b0382166000908152603b60205260409020546125b39082611b26565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114cd57600080fd5b80356114cd8161316f565b600082601f830112612686578081fd5b813567ffffffffffffffff81111561269c578182fd5b6126af601f8201601f1916602001613107565b91508082528360208285010111156126c657600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126f0578081fd5b6114ca8383612654565b60008060006060848603121561270e578182fd5b83356127198161315a565b925060208401356127298161315a565b9150604084013567ffffffffffffffff811115612744578182fd5b61275086828701612676565b9150509250925092565b6000806040838503121561276c578182fd5b82356127778161315a565b9150602083013567ffffffffffffffff811115612792578182fd5b61279e85828601612676565b9150509250929050565b60008060008060008060c087890312156127c0578182fd5b6127ca8888612654565b95506020870135945060408701359350606087013560ff811681146127ed578283fd5b9598949750929560808101359460a0909101359350915050565b60008060006060848603121561281b578283fd5b833567ffffffffffffffff80821115612832578485fd5b818601915086601f830112612845578485fd5b813581811115612853578586fd5b60209150818102612865838201613107565b8281528381019085850183870186018c101561287f57898afd5b8996505b848710156128a9576128958c82612654565b835260019690960195918501918501612883565b50975050505085013592506128c39050856040860161266b565b90509250925092565b6000602082840312156128dd578081fd5b81516114ca8161316f565b6000602082840312156128f9578081fd5b5035919050565b60008060408385031215612912578182fd5b823591506129238460208501612654565b90509250929050565b6000806040838503121561293e578182fd5b8235915060208301356129508161316f565b809150509250929050565b6000815180845261297381602086016020860161312e565b601f01601f19169290920160200192915050565b6000825161299981846020870161312e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa8608083018461295b565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612ad457fe5b91905290565b6000602082526114ca602083018461295b565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561312657600080fd5b604052919050565b60005b83811015613149578181015183820152602001613131565b838111156118ad5750506000910152565b6001600160a01b038116811461169f57600080fd5b801515811461169f57600080fdfea26469706673582212209ae80078297b488112cf4c0eaef3af85f34156332aa7d60065ce1ebb90ab93c264736f6c634300060c0033"; +const isSuperArgs$6 = (xs) => xs.length > 1; +class GovernanceProposalStateUpgrade__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$6(args)) { + super(...args); + } else { + super(_abi$6, _bytecode$6, args[0]); + } + } + getDeployTransaction(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.getDeployTransaction( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + deploy(stakingRewardsAddress, gasCompLogic, userVaultAddress, overrides) { + return super.deploy( + stakingRewardsAddress, + gasCompLogic, + userVaultAddress, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$6); + } + static connect(address, runner) { + return new Contract( + address, + _abi$6, + runner + ); + } +} +GovernanceProposalStateUpgrade__factory.bytecode = _bytecode$6; +GovernanceProposalStateUpgrade__factory.abi = _abi$6; + +var index$3 = /*#__PURE__*/Object.freeze({ + __proto__: null, + GovernanceProposalStateUpgrade__factory: GovernanceProposalStateUpgrade__factory +}); + +const _abi$5 = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "address", + name: "_admin", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$5 = "0x60806040526040516108403803806108408339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508390508282816100f1826101c5565b8051156101a9576000826001600160a01b0316826040518082805190602001908083835b602083106101345780518252601f199092019160209182019101610115565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610194576040519150601f19603f3d011682016040523d82523d6000602084013e610199565b606091505b50509050806101a757600080fd5b505b506101b19050565b6101ba82610237565b505050505050610261565b6101d88161025b60201b6103b41760201c565b6102135760405162461bcd60e51b815260040180806020018281038252603681526020018061080a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a806102706000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220f9da162f8a2d779a4f5f08577ac886bc4694791f749bd6ecc5d270427405583364736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$5 = (xs) => xs.length > 1; +class AdminUpgradeableProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$5(args)) { + super(...args); + } else { + super(_abi$5, _bytecode$5, args[0]); + } + } + getDeployTransaction(_logic, _admin, _data, overrides) { + return super.getDeployTransaction(_logic, _admin, _data, overrides || {}); + } + deploy(_logic, _admin, _data, overrides) { + return super.deploy(_logic, _admin, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$5); + } + static connect(address, runner) { + return new Contract( + address, + _abi$5, + runner + ); + } +} +AdminUpgradeableProxy__factory.bytecode = _bytecode$5; +AdminUpgradeableProxy__factory.abi = _abi$5; + +const _abi$4 = [ + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + }, + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "address", + name: "_registry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "instance", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "newFee", + type: "uint256" + } + ], + name: "FeeUpdated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint24", + name: "newFee", + type: "uint24" + } + ], + name: "UniswapTornPoolSwappingFeeChanged", + type: "event" + }, + { + inputs: [], + name: "PROTOCOL_FEE_DIVIDER", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "calculatePoolFee", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "feeDeviations", + outputs: [ + { + components: [ + { + internalType: "address", + name: "instance", + type: "address" + }, + { + internalType: "int256", + name: "deviation", + type: "int256" + } + ], + internalType: "struct FeeManager.Deviation[]", + name: "results", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + name: "instanceFee", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "", + type: "address" + } + ], + name: "instanceFeeUpdated", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "instanceFeeWithUpdate", + outputs: [ + { + internalType: "uint160", + name: "", + type: "uint160" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "contract InstanceRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint32", + name: "newPeriod", + type: "uint32" + } + ], + name: "setPeriodForTWAPOracle", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "_uniswapTornPoolSwappingFee", + type: "uint24" + } + ], + name: "setUniswapTornPoolSwappingFee", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint24", + name: "newLimit", + type: "uint24" + } + ], + name: "setUpdateFeeTimeLimit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "torn", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "uniswapTimePeriod", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "uniswapTornPoolSwappingFee", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "updateAllFees", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_instance", + type: "address" + } + ], + name: "updateFee", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "updateFeeTimeLimit", + outputs: [ + { + internalType: "uint24", + name: "", + type: "uint24" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance[]", + name: "_instances", + type: "address[]" + } + ], + name: "updateFees", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode$4 = "0x60e06040523480156200001157600080fd5b5060405162001a8938038062001a8983398101604081905262000034916200005c565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c61196862000121600039806102ce52806104f6528061077752806109945250806104b7528061052e528061060f528061070852508061068f528061087e52506119686000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a0287520116100a2578063bcc5ee6411610071578063bcc5ee641461020f578063c51c229714610217578063d8718fb11461022a578063e1f121561461023f578063f522d6d61461025257610116565b8063a0287520146101d9578063adf898a4146101ec578063aeb3077a146101f4578063b19a2972146101fc57610116565b8063603a54fe116100e9578063603a54fe146101815780637b103999146101945780637ccd2f481461019c57806380679eb3146101b157806380eb7bf0146101c657610116565b806305e343641461011b5780632efbf384146101445780634bf0a542146101645780635aa6e67514610179575b600080fd5b61012e610129366004611650565b61025a565b60405161013b9190611896565b60405180910390f35b610157610152366004611650565b61026c565b60405161013b91906116dd565b61016c6102c9565b60405161013b9190611719565b6101576104b5565b61015761018f366004611650565b6104d9565b6101576104f4565b6101a4610518565b60405161013b9190611886565b6101c46101bf3660046116a0565b610523565b005b6101c46101d4366004611650565b61057e565b6101c46101e736600461166c565b610604565b61015761068d565b61012e6106b1565b6101c461020a3660046113ef565b6106b7565b6101a46106eb565b6101c461022536600461166c565b6106fd565b61023261075a565b60405161013b919061189f565b61015761024d366004611650565b61076d565b6101c461098f565b60026020526000908152604090205481565b600080546001600160a01b038316825260026020526040822054600160381b90910462ffffff16429190910311156102a7576102a78261057e565b506001600160a01b03808216600090815260016020526040902054165b919050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103619190810190611487565b9050805167ffffffffffffffff8111801561037b57600080fd5b506040519080825280602002602001820160405280156103b557816020015b6103a261131d565b81526020019060019003908161039a5790505b50915060005b81518110156104b05760006103e28383815181106103d557fe5b602002602001015161076d565b6001600160a01b031690506000811561045e576103e8826001600087878151811061040957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166103e8026001600160a01b03168161045957fe5b040390505b604051806040016040528085858151811061047557fe5b60200260200101516001600160a01b031681526020018281525085848151811061049b57fe5b602090810291909101015250506001016103bb565b505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461055857600080fd5b6000805463ffffffff90921663010000000266ffffffff00000019909216919091179055565b60006105898261076d565b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b03191695871695909517909455600290528290204290559051919250907f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a906105f89084906116dd565b60405180910390a25050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063957600080fd5b6000805462ffffff191662ffffff83811691909117918290556040517fbfe65cfc2359076c4468c9b895156c309c78f94fb09f6d2fc0463c4ca9a71ac292610682921690611886565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b61271081565b60005b81518110156106e7576106df8282815181106106d257fe5b602002602001015161057e565b6001016106ba565b5050565b600054600160381b900462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073257600080fd5b6000805462ffffff909216600160381b0269ffffff0000000000000019909216919091179055565b6000546301000000900463ffffffff1681565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443876040518263ffffffff1660e01b81526004016107c191906116dd565b60a06040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081191906115d5565b9450945050935093508063ffffffff16600014156108365760009450505050506102c4565b6001600160a01b03831615801561084b575083155b610855578261086b565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b6040805180820182526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081168252831660208083019190915282518084019093526000805462ffffff80821686528816928501929092529396506108e5929063ffffffff630100000090910416610a29565b905061098461271061097e8463ffffffff166109788561097e670de0b6b3a76400008e6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561094057600080fd5b505afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190611688565b90610a75565b90610ac1565b979650505050505050565b610a277f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b1580156109eb57600080fd5b505afa1580156109ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261020a9190810190611487565b565b60208084015190830151600091610a409184610b03565b84518451610a6391670de0b6b3a764000091610a5d919087610b03565b90610b2d565b81610a6a57fe5b0490505b9392505050565b600082610a8457506000610abb565b82820282848281610a9157fe5b0414610ab85760405162461bcd60e51b8152600401610aaf90611845565b60405180910390fd5b90505b92915050565b6000610ab883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b51565b6000610b258473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28585610b88565b949350505050565b6000821580610b4857505081810281838281610b4557fe5b04145b610abb57600080fd5b60008183610b725760405162461bcd60e51b8152600401610aaf91906117bb565b506000838581610b7e57fe5b0495945050505050565b600080846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc91906116bc565b60ff16600a0a90506001600160a01b038681169086161415610c28576001600160801b03169050610b25565b604051630b4c774160e11b8152610cc990610cc190731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610c6b908b908b908b906004016116f1565b60206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906113d3565b85610cda565b828888610e6f565b915050610b25565b50949350505050565b600063ffffffff8216610cff5760405162461bcd60e51b8152600401610aaf9061180e565b60408051600280825260608083018452926020830190803683370190505090508281600081518110610d2d57fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610d5657fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526060906001600160a01b0386169063883bdbfd90610d9a908590600401611771565b60006040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dee9190810190611513565b509050600081600081518110610e0057fe5b602002602001015182600181518110610e1557fe5b60200260200101510390508463ffffffff168160060b81610e3257fe5b05935060008160060b128015610e5957508463ffffffff168160060b81610e5557fe5b0715155b15610e6657600019909301925b50505092915050565b600080610e7b86610f59565b90506001600160801b036001600160a01b03821611610eea576001600160a01b0380821680029084811690861610610eca57610ec5600160c01b876001600160801b031683611272565b610ee2565b610ee281876001600160801b0316600160c01b611272565b925050610cd1565b6000610f096001600160a01b0383168068010000000000000000611272565b9050836001600160a01b0316856001600160a01b031610610f4157610f3c600160801b876001600160801b031683611272565b610984565b61098481876001600160801b0316600160801b611272565b60008060008360020b12610f70578260020b610f78565b8260020b6000035b9050620d89e8811115610f9d5760405162461bcd60e51b8152600401610aaf9061182a565b600060018216610fb157600160801b610fc3565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610ff7576ffff97272373d413259a46990580e213a0260801c5b6004821615611016576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611035576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611054576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611073576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611092576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156110b1576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156110d1576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156110f1576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611111576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611131576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611151576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611171576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611191576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156111b1576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156111d2576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156111f2576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611211576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561122e576b048a170391f7dc42444e8fa20260801c5b60008460020b131561124957806000198161124557fe5b0490505b64010000000081061561125d576001611260565b60005b60ff16602082901c0192505050919050565b60008080600019858709868602925082811090839003039050806112a8576000841161129d57600080fd5b508290049050610a6e565b8084116112b457600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604080518082019091526000808252602082015290565b600082601f830112611344578081fd5b8151611357611352826118d7565b6118b0565b81815291506020808301908481018184028601820187101561137857600080fd5b60005b848110156113a057815161138e816118f7565b8452928201929082019060010161137b565b505050505092915050565b8035610abb816118f7565b8051610abb816118f7565b8051600681900b8114610abb57600080fd5b6000602082840312156113e4578081fd5b8151610ab8816118f7565b60006020808385031215611401578182fd5b823567ffffffffffffffff811115611417578283fd5b8301601f81018513611427578283fd5b8035611435611352826118d7565b8181528381019083850185840285018601891015611451578687fd5b8694505b8385101561147b5761146789826113ab565b835260019490940193918501918501611455565b50979650505050505050565b60006020808385031215611499578182fd5b825167ffffffffffffffff8111156114af578283fd5b8301601f810185136114bf578283fd5b80516114cd611352826118d7565b81815283810190838501858402850186018910156114e9578687fd5b8694505b8385101561147b576114ff89826113b6565b8352600194909401939185019185016114ed565b60008060408385031215611525578081fd5b825167ffffffffffffffff8082111561153c578283fd5b818501915085601f83011261154f578283fd5b815161155d611352826118d7565b80828252602080830192508086018a82838702890101111561157d578788fd5b8796505b848710156115a7576115938b826113c1565b845260019690960195928101928101611581565b5088015190965093505050808211156115be578283fd5b506115cb85828601611334565b9150509250929050565b600080600080600060a086880312156115ec578081fd5b855180151581146115fb578182fd5b602087015190955061160c816118f7565b604087015190945060028110611620578182fd5b60608701519093506116318161190f565b608087015190925061164281611920565b809150509295509295909350565b600060208284031215611661578081fd5b8135610ab8816118f7565b60006020828403121561167d578081fd5b8135610ab88161190f565b600060208284031215611699578081fd5b5051919050565b6000602082840312156116b1578081fd5b8135610ab881611920565b6000602082840312156116cd578081fd5b815160ff81168114610ab8578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b602080825282518282018190526000919060409081850190868401855b8281101561176457815180516001600160a01b03168552860151868501529284019290850190600101611736565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117af57835163ffffffff168352928401929184019160010161178d565b50909695505050505050565b6000602080835283518082850152825b818110156117e7578581018301518582016040015282016117cb565b818111156117f85783604083870101525b50601f01601f1916929092016040019392505050565b602080825260029082015261042560f41b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b62ffffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60405181810167ffffffffffffffff811182821017156118cf57600080fd5b604052919050565b600067ffffffffffffffff8211156118ed578081fd5b5060209081020190565b6001600160a01b038116811461190c57600080fd5b50565b62ffffff8116811461190c57600080fd5b63ffffffff8116811461190c57600080fdfea26469706673582212205690be246e00d9bf30da35441a160026439ececfa962348f01e498d25f89f5d164736f6c634300060c0033"; +const isSuperArgs$4 = (xs) => xs.length > 1; +class FeeManager__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$4(args)) { + super(...args); + } else { + super(_abi$4, _bytecode$4, args[0]); + } + } + getDeployTransaction(_torn, _governance, _registry, overrides) { + return super.getDeployTransaction( + _torn, + _governance, + _registry, + overrides || {} + ); + } + deploy(_torn, _governance, _registry, overrides) { + return super.deploy( + _torn, + _governance, + _registry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$4); + } + static connect(address, runner) { + return new Contract(address, _abi$4, runner); + } +} +FeeManager__factory.bytecode = _bytecode$4; +FeeManager__factory.abi = _abi$4; + +const _abi$3 = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "GovernanceAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "gasAmount", + type: "uint256" + } + ], + name: "compensateGas", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawToGovernance", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$3 = "0x60a0604052348015600f57600080fd5b50604051610472380380610472833981016040819052602c91603c565b6001600160a01b0316608052606a565b600060208284031215604d57600080fd5b81516001600160a01b0381168114606357600080fd5b9392505050565b6080516103da6100986000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea264697066735822122073841dd5b5d8687d927814633a2fcb7944a306bb89a9b65a0aab4cc361c8312264736f6c63430008190033"; +const isSuperArgs$3 = (xs) => xs.length > 1; +class GasCompensationVault__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$3(args)) { + super(...args); + } else { + super(_abi$3, _bytecode$3, args[0]); + } + } + getDeployTransaction(_governance, overrides) { + return super.getDeployTransaction(_governance, overrides || {}); + } + deploy(_governance, overrides) { + return super.deploy(_governance, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$3); + } + static connect(address, runner) { + return new Contract( + address, + _abi$3, + runner + ); + } +} +GasCompensationVault__factory.bytecode = _bytecode$3; +GasCompensationVault__factory.abi = _abi$3; + +const _abi$2 = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address" + }, + { + internalType: "bytes", + name: "_data", + type: "bytes" + } + ], + stateMutability: "payable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "AdminChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "Upgraded", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "admin", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newAdmin", + type: "address" + } + ], + name: "changeAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +]; +const _bytecode$2 = "0x608060405260405161083b38038061083b8339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052508391503090508282816100ed826101c0565b8051156101a5576000826001600160a01b0316826040518082805190602001908083835b602083106101305780518252601f199092019160209182019101610111565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610190576040519150601f19603f3d011682016040523d82523d6000602084013e610195565b606091505b50509050806101a357600080fd5b505b506101ad9050565b6101b682610232565b505050505061025c565b6101d38161025660201b6103b41760201c565b61020e5760405162461bcd60e51b81526004018080602001828103825260368152602001806108056036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a8061026b6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122014d721b179bdff3154685a6f1f0fecdd0d99b7cfc61b3f1a2f7a95c6f6d2c2ae64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374"; +const isSuperArgs$2 = (xs) => xs.length > 1; +class LoopbackProxy__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$2(args)) { + super(...args); + } else { + super(_abi$2, _bytecode$2, args[0]); + } + } + getDeployTransaction(_logic, _data, overrides) { + return super.getDeployTransaction(_logic, _data, overrides || {}); + } + deploy(_logic, _data, overrides) { + return super.deploy(_logic, _data, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$2); + } + static connect(address, runner) { + return new Contract(address, _abi$2, runner); + } +} +LoopbackProxy__factory.bytecode = _bytecode$2; +LoopbackProxy__factory.abi = _abi$2; + +const _abi$1 = [ + { + inputs: [ + { + internalType: "address", + name: "_governance", + type: "address" + }, + { + internalType: "address", + name: "_instanceRegistry", + type: "address" + }, + { + internalType: "address", + name: "_relayerRegistry", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "bytes", + name: "encryptedNote", + type: "bytes" + } + ], + name: "EncryptedNote", + type: "event" + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "_token", + type: "address" + }, + { + internalType: "address", + name: "_spender", + type: "address" + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256" + } + ], + name: "approveExactToken", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "_encryptedNotes", + type: "bytes[]" + } + ], + name: "backupNotes", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_tornado", + type: "address" + }, + { + internalType: "bytes32", + name: "_commitment", + type: "bytes32" + }, + { + internalType: "bytes", + name: "_encryptedNote", + type: "bytes" + } + ], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "governance", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "instanceRegistry", + outputs: [ + { + internalType: "contract InstanceRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "relayerRegistry", + outputs: [ + { + internalType: "contract RelayerRegistry", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "_token", + type: "address" + }, + { + internalType: "address payable", + name: "_to", + type: "address" + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256" + } + ], + name: "rescueTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract ITornadoInstance", + name: "_tornado", + type: "address" + }, + { + internalType: "bytes", + name: "_proof", + type: "bytes" + }, + { + internalType: "bytes32", + name: "_root", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "_nullifierHash", + type: "bytes32" + }, + { + internalType: "address payable", + name: "_recipient", + type: "address" + }, + { + internalType: "address payable", + name: "_relayer", + type: "address" + }, + { + internalType: "uint256", + name: "_fee", + type: "uint256" + }, + { + internalType: "uint256", + name: "_refund", + type: "uint256" + } + ], + name: "withdraw", + outputs: [], + stateMutability: "payable", + type: "function" + } +]; +const _bytecode$1 = "0x60e060405234801561001057600080fd5b5060405161128438038061128483398101604081905261002f91610056565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c0526100ba565b60008060006060848603121561006a578283fd5b8351610075816100a2565b6020850151909350610086816100a2565b6040850151909250610097816100a2565b809150509250925092565b6001600160a01b03811681146100b757600080fd5b50565b60805160601c60a05160601c60c05160601c61117c610108600039806103ff528061059e525080610164528061037a52806103a752806104c8525080610423528061068e525061117c6000f3fe60806040526004361061007b5760003560e01c80635aa6e6751161004e5780635aa6e675146100f55780636485ba2a1461010a578063b438689f1461012a578063cea9d26f1461013d5761007b565b806313d98d131461008057806336a3874b146100955780633ef10783146100c057806347ff589d146100e0575b600080fd5b61009361008e366004610c77565b61015d565b005b3480156100a157600080fd5b506100aa610378565b6040516100b79190610dd0565b60405180910390f35b3480156100cc57600080fd5b506100936100db366004610c37565b61039c565b3480156100ec57600080fd5b506100aa6103fd565b34801561010157600080fd5b506100aa610421565b34801561011657600080fd5b50610093610125366004610b26565b610445565b610093610138366004610cd1565b6104ae565b34801561014957600080fd5b50610093610158366004610c37565b610683565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443886040518263ffffffff1660e01b81526004016101ae9190610dd0565b60a06040518083038186803b1580156101c657600080fd5b505afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe9190610bb1565b5092955090935091506000905081600181111561021757fe5b141561023e5760405162461bcd60e51b815260040161023590610f00565b60405180910390fd5b82156102cc576102cc3330896001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561028257600080fd5b505afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610d72565b6001600160a01b038616929190610817565b60405163b214faa560e01b81526001600160a01b0388169063b214faa59034906102fa908a90600401610e5e565b6000604051808303818588803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b40088686604051610367929190610e67565b60405180910390a250505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103e45760405162461bcd60e51b815260040161023590611087565b6103f86001600160a01b0384168383610875565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b818110156103f857337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061047e57fe5b905060200281019061049091906110af565b60405161049e929190610e67565b60405180910390a2600101610448565b60405163032bb44360e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063032bb443906104fd908d90600401610dd0565b60a06040518083038186803b15801561051557600080fd5b505afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d9190610bb1565b509093506000925061055d915050565b81600181111561056957fe5b14156105875760405162461bcd60e51b815260040161023590610f00565b604051631168473b60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906345a11cec906105d790339088908f90600401610de4565b600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b50506040516310d056db60e11b81526001600160a01b038d1692506321a0adb691503490610645908d908d908d908d908d908d908d908d90600401610e7b565b6000604051808303818588803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106cb5760405162461bcd60e51b815260040161023590611087565b6001600160a01b0382166106f15760405162461bcd60e51b815260040161023590610f6e565b6001600160a01b03831661074d5747600061070c8284610938565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610745573d6000803e3d6000fd5b5050506103f8565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061077c903090600401610dd0565b60206040518083038186803b15801561079457600080fd5b505afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190610d72565b905060006107da8284610938565b9050600081116107fc5760405162461bcd60e51b815260040161023590610ffa565b6108106001600160a01b0386168583610950565b5050505050565b61086f846323b872dd60e01b85858560405160240161083893929190610e21565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261096f565b50505050565b8015806108fd5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906108ab9030908690600401610e07565b60206040518083038186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190610d72565b155b6109195760405162461bcd60e51b815260040161023590611031565b6103f88363095ea7b360e01b8484604051602401610838929190610e45565b60008183106109475781610949565b825b9392505050565b6103f88363a9059cbb60e01b8484604051602401610838929190610e45565b60606109c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109fe9092919063ffffffff16565b8051909150156103f857808060200190518101906109e29190610b95565b6103f85760405162461bcd60e51b815260040161023590610fb0565b6060610a0d8484600085610a15565b949350505050565b6060610a2085610ad9565b610a3c5760405162461bcd60e51b815260040161023590610f37565b60006060866001600160a01b03168587604051610a599190610db4565b60006040518083038185875af1925050503d8060008114610a96576040519150601f19603f3d011682016040523d82523d6000602084013e610a9b565b606091505b50915091508115610aaf579150610a0d9050565b805115610abf5780518082602001fd5b8360405162461bcd60e51b81526004016102359190610ecd565b3b151590565b60008083601f840112610af0578182fd5b50813567ffffffffffffffff811115610b07578182fd5b602083019150836020828501011115610b1f57600080fd5b9250929050565b60008060208385031215610b38578182fd5b823567ffffffffffffffff80821115610b4f578384fd5b818501915085601f830112610b62578384fd5b813581811115610b70578485fd5b8660208083028501011115610b83578485fd5b60209290920196919550909350505050565b600060208284031215610ba6578081fd5b815161094981611138565b600080600080600060a08688031215610bc8578081fd5b8551610bd381611138565b6020870151909550610be481611120565b604087015190945060028110610bf8578182fd5b606087015190935062ffffff81168114610c10578182fd5b608087015190925063ffffffff81168114610c29578182fd5b809150509295509295909350565b600080600060608486031215610c4b578283fd5b8335610c5681611120565b92506020840135610c6681611120565b929592945050506040919091013590565b60008060008060608587031215610c8c578384fd5b8435610c9781611120565b935060208501359250604085013567ffffffffffffffff811115610cb9578283fd5b610cc587828801610adf565b95989497509550505050565b60008060008060008060008060006101008a8c031215610cef578384fd5b8935610cfa81611120565b985060208a013567ffffffffffffffff811115610d15578485fd5b610d218c828d01610adf565b90995097505060408a0135955060608a0135945060808a0135610d4381611120565b935060a08a0135610d5381611120565b8093505060c08a0135915060e08a013590509295985092959850929598565b600060208284031215610d83578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251610dc68184602087016110f4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b600060208252610a0d602083018486610d8a565b600060e08252610e8f60e083018a8c610d8a565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b6000602082528251806020840152610eec8160408501602087016110f4565b601f01601f19169190910160400192915050565b6020808252601d908201527f54686520696e7374616e6365206973206e6f7420737570706f72746564000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000808335601e198436030181126110c5578283fd5b83018035915067ffffffffffffffff8211156110df578283fd5b602001915036819003821315610b1f57600080fd5b60005b8381101561110f5781810151838201526020016110f7565b8381111561086f5750506000910152565b6001600160a01b038116811461113557600080fd5b50565b801515811461113557600080fdfea264697066735822122004c0e245ab0b87d2916977a9650f299de2e526143487c917a63e4b88e54387e364736f6c634300060c0033"; +const isSuperArgs$1 = (xs) => xs.length > 1; +class TornadoRouter__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs$1(args)) { + super(...args); + } else { + super(_abi$1, _bytecode$1, args[0]); + } + } + getDeployTransaction(_governance, _instanceRegistry, _relayerRegistry, overrides) { + return super.getDeployTransaction( + _governance, + _instanceRegistry, + _relayerRegistry, + overrides || {} + ); + } + deploy(_governance, _instanceRegistry, _relayerRegistry, overrides) { + return super.deploy( + _governance, + _instanceRegistry, + _relayerRegistry, + overrides || {} + ); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi$1); + } + static connect(address, runner) { + return new Contract(address, _abi$1, runner); + } +} +TornadoRouter__factory.bytecode = _bytecode$1; +TornadoRouter__factory.abi = _abi$1; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_torn", + type: "address" + }, + { + internalType: "address", + name: "_governance", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdrawTorn", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +]; +const _bytecode = "0x60c060405234801561001057600080fd5b506040516104aa3803806104aa8339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61042e61007c60003980606952508060d3525061042e6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806391fe357314610030575b600080fd5b61005c6004803603604081101561004657600080fd5b506001600160a01b03813516906020013561005e565b005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100c6576040805162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b604482015290519081900360640190fd5b6100fa6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836100fe565b5050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610150908490610155565b505050565b60606101aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166102069092919063ffffffff16565b805190915015610150578080602001905160208110156101c957600080fd5b50516101505760405162461bcd60e51b815260040180806020018281038252602a8152602001806103cf602a913960400191505060405180910390fd5b6060610215848460008561021d565b949350505050565b6060610228856103c8565b610279576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106102b85780518252601f199092019160209182019101610299565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461031a576040519150601f19603f3d011682016040523d82523d6000602084013e61031f565b606091505b509150915081156103335791506102159050565b8051156103435780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561038d578181015183820152602001610375565b50505050905090810190601f1680156103ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208fc65ae8299d617f6cff836a2822363849c7fb35b0b27a6f0aebfa62084005c764736f6c634300060c0033"; +const isSuperArgs = (xs) => xs.length > 1; +class TornadoVault__factory extends ContractFactory { + constructor(...args) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + getDeployTransaction(_torn, _governance, overrides) { + return super.getDeployTransaction(_torn, _governance, overrides || {}); + } + deploy(_torn, _governance, overrides) { + return super.deploy(_torn, _governance, overrides || {}); + } + connect(runner) { + return super.connect(runner); + } + static createInterface() { + return new Interface(_abi); + } + static connect(address, runner) { + return new Contract(address, _abi, runner); + } +} +TornadoVault__factory.bytecode = _bytecode; +TornadoVault__factory.abi = _abi; + +var index$2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + AdminUpgradeableProxy__factory: AdminUpgradeableProxy__factory, + FeeManager__factory: FeeManager__factory, + GasCompensationVault__factory: GasCompensationVault__factory, + LoopbackProxy__factory: LoopbackProxy__factory, + TornadoRouter__factory: TornadoRouter__factory, + TornadoVault__factory: TornadoVault__factory, + aggregator: index$y, + deployerSol: index$x, + instanceRegistrySol: index$w, + interfaces: index$k, + libraries: index$i, + relayerRegistrySol: index$v, + testnet: index$r, + torn: index$s, + tornadoStakingRewardsSol: index$q, + uniswap: index$l, + v1: index$d, + v2VaultAndGas: index$a, + v3RelayerRegistry: index$8, + v4ExploitPatch: index$4, + v5ProposalStatePatch: index$3 +}); + +var index$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + classic: index$A, + governance: index$2 +}); + +var index = /*#__PURE__*/Object.freeze({ + __proto__: null, + contracts: index$1, + openzeppelin: index$H +}); + + + +;// ./src/contracts.ts + + + +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/dist/tornadoContracts.umd.min.js b/dist/tornadoContracts.umd.min.js new file mode 100644 index 0000000..09c88a3 --- /dev/null +++ b/dist/tornadoContracts.umd.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TornadoContracts=t():e.TornadoContracts=t()}(self,(()=>(()=>{"use strict";var e={d:(t,a)=>{for(var n in a)e.o(a,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:a[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function a(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function n(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function b(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}e.r(t),e.d(t,{AdminUpgradeableProxy__factory:()=>Fs,Aggregator__factory:()=>Zb,AirdropMock__factory:()=>Df,Airdrop__factory:()=>Qf,BadRecipient__factory:()=>eb,CTornado__factory:()=>Lb,Configuration__factory:()=>Si,Core__factory:()=>Vi,Delegation__factory:()=>Fi,Deployer__factory:()=>ff,DummySecond__factory:()=>ci,Dummy__factory:()=>di,ENSMock__factory:()=>Vf,ENS__factory:()=>If,ERC20Basic__factory:()=>qn,ERC20Burnable__factory:()=>An,ERC20Mock__factory:()=>nb,ERC20Permit__factory:()=>td,ERC20Tornado__factory:()=>Eb,ERC20__factory:()=>kn,ETHTornado__factory:()=>kb,Echoer__factory:()=>Nb,EnsResolve__factory:()=>Of,FeeManager__factory:()=>Bs,GasCompensationVault__factory:()=>$s,GasCompensator__factory:()=>$i,GovernanceAggregator__factory:()=>tf,GovernanceExploitPatchUpgrade__factory:()=>Os,GovernanceGasUpgrade__factory:()=>es,GovernanceProposalStateUpgrade__factory:()=>Ss,GovernanceStakingUpgrade__factory:()=>rs,GovernanceVaultUpgrade__factory:()=>ns,Governance__factory:()=>Bi,IDeployer__factory:()=>fb,IENSRegistry__factory:()=>jb,IENSResolver__factory:()=>Hb,IENS__factory:()=>Tf,IERC1155Errors__factory:()=>Ya,IERC20Decimals__factory:()=>ti,IERC20Errors__factory:()=>Qa,IERC20Metadata__factory:()=>fn,IERC20__factory:()=>Cn,IERC721Errors__factory:()=>tn,IFeeManager__factory:()=>gf,IGasCompensationVault__factory:()=>Wi,IGovernance__factory:()=>ui,IHasher__factory:()=>Bn,IMetamorphicContractFactory__factory:()=>os,IProxy__factory:()=>hi,IRelayerRegistry__factory:()=>$b,ITornadoGovernance__factory:()=>_d,ITornadoInstance__factory:()=>mb,ITornadoRouter__factory:()=>pf,ITornadoStakingRewards__factory:()=>ds,ITornadoVault__factory:()=>Id,IUSDT__factory:()=>Kn,IUniswapV3Factory__factory:()=>zd,IUniswapV3PoolActions__factory:()=>Ad,IUniswapV3PoolDerivedState__factory:()=>Cd,IUniswapV3PoolEvents__factory:()=>Sd,IUniswapV3PoolImmutables__factory:()=>Vd,IUniswapV3PoolOwnerActions__factory:()=>Fd,IUniswapV3PoolState__factory:()=>jd,IUniswapV3Pool__factory:()=>Xd,IVerifier__factory:()=>pb,InitialProposal__factory:()=>Ts,InstanceRegistry__factory:()=>yf,LoopbackProxy__factory:()=>qs,MaliciousProposal__factory:()=>ws,MerkleTreeWithHistoryMock__factory:()=>sb,MerkleTreeWithHistory__factory:()=>$n,MockGovernance__factory:()=>Oi,NewImplementation__factory:()=>vi,Ownable__factory:()=>mn,PatchProposal__factory:()=>As,Pausable__factory:()=>Vn,ProposalStateChangeGovernance__factory:()=>li,ProposalUpgrade__factory:()=>xi,Proposal__factory:()=>Ai,Proxy__factory:()=>gn,RelayerAggregator__factory:()=>qb,RelayerRegistry__factory:()=>Mf,Resolver__factory:()=>Pf,TORNMock__factory:()=>Gf,TORN__factory:()=>bd,TestnetAdminProxy__factory:()=>yd,TestnetFeeManager__factory:()=>Td,TestnetGovernanceProxy__factory:()=>wd,Timestamp__factory:()=>Hf,TornadoProxyLight__factory:()=>gb,TornadoRouter__factory:()=>Ys,TornadoStakingRewards__factory:()=>Od,TornadoVault__factory:()=>ec,Tornado__factory:()=>ob,TransparentUpgradeableProxy__factory:()=>Mn,UpgradeableProxy__factory:()=>In,Verifier__factory:()=>Sb,VestingMock__factory:()=>Xf,Vesting__factory:()=>id,VoucherMock__factory:()=>Jf,Voucher__factory:()=>rd,factories:()=>nc});const f=BigInt(2**32-1),d=BigInt(32);function i(e,t=!1){return t?{h:Number(e&f),l:Number(e>>d&f)}:{h:0|Number(e>>d&f),l:0|Number(e&f)}}function s(e,t=!1){let a=new Uint32Array(e.length),n=new Uint32Array(e.length);for(let b=0;b>T)*g)%h,t&m&&(b^=l<<(l<a>32?((e,t,a)=>t<>>64-a)(e,t,a):((e,t,a)=>e<>>32-a)(e,t,a),_=(e,t,a)=>a>32?((e,t,a)=>e<>>64-a)(e,t,a):((e,t,a)=>t<>>32-a)(e,t,a);class x extends r{constructor(e,t,n,b=!1,f=24){if(super(),this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=b,this.rounds=f,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,a(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");var d;this.state=new Uint8Array(200),this.state32=(d=this.state,new Uint32Array(d.buffer,d.byteOffset,Math.floor(d.byteLength/4)))}keccak(){!function(e,t=24){const a=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let t=0;t<10;t++)a[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){const n=(t+8)%10,b=(t+2)%10,f=a[b],d=a[b+1],i=M(f,d,1)^a[n],s=_(f,d,1)^a[n+1];for(let a=0;a<50;a+=10)e[t+a]^=i,e[t+a+1]^=s}let t=e[2],b=e[3];for(let a=0;a<24;a++){const n=u[a],f=M(t,b,n),d=_(t,b,n),i=p[a];t=e[i],b=e[i+1],e[i]=f,e[i+1]=d}for(let t=0;t<50;t+=10){for(let n=0;n<10;n++)a[n]=e[t+n];for(let n=0;n<10;n++)e[t+n]^=~a[(n+2)%10]&a[(n+4)%10]}e[0]^=w[n],e[1]^=v[n]}a.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(e){b(this);const{blockLen:t,state:a}=this,n=(e=c(e)).length;for(let b=0;b=a&&this.keccak();const f=Math.min(a-this.posOut,b-n);e.set(t.subarray(this.posOut,this.posOut+f),n),this.posOut+=f,n+=f}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return a(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(function(e,t){n(e);const a=t.outputLen;if(e.lengthfunction(e){const t=t=>e().update(c(t)).digest(),a=e();return t.outputLen=a.outputLen,t.blockLen=a.blockLen,t.create=()=>e(),t}((()=>new x(t,e,a))))(1,136,32);function E(e,t,a){const n=t.split("|").map((e=>e.trim()));for(let a=0;aPromise.resolve(e[t]))))).reduce(((e,a,n)=>(e[t[n]]=a,e)),{})}function O(e,t,a){for(let n in t){let b=t[n];const f=a?a[n]:null;f&&E(b,f,n),Object.defineProperty(e,n,{enumerable:!0,value:b,writable:!1})}}function k(e){if(null==e)return"null";if(Array.isArray(e))return"[ "+e.map(k).join(", ")+" ]";if(e instanceof Uint8Array){const t="0123456789abcdef";let a="0x";for(let n=0;n>4],a+=t[15&e[n]];return a}if("object"==typeof e&&"function"==typeof e.toJSON)return k(e.toJSON());switch(typeof e){case"boolean":case"symbol":case"number":return e.toString();case"bigint":return BigInt(e).toString();case"string":return JSON.stringify(e);case"object":{const t=Object.keys(e);return t.sort(),"{ "+t.map((t=>`${k(t)}: ${k(e[t])}`)).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function P(e,t){return e&&e.code===t}function A(e){return P(e,"CALL_EXCEPTION")}function N(e,t,a){let n,b=e;{const n=[];if(a){if("message"in a||"code"in a||"name"in a)throw new Error(`value will overwrite populated values: ${k(a)}`);for(const e in a){if("shortMessage"===e)continue;const t=a[e];n.push(e+"="+k(t))}}n.push(`code=${t}`),n.push("version=6.13.2"),n.length&&(e+=" ("+n.join(", ")+")")}switch(t){case"INVALID_ARGUMENT":n=new TypeError(e);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":n=new RangeError(e);break;default:n=new Error(e)}return O(n,{code:t}),a&&Object.assign(n,a),null==n.shortMessage&&O(n,{shortMessage:b}),n}function C(e,t,a,n){if(!e)throw N(t,a,n)}function D(e,t,a,n){C(e,t,"INVALID_ARGUMENT",{argument:a,value:n})}function S(e,t,a){null==a&&(a=""),a&&(a=": "+a),C(e>=t,"missing arguemnt"+a,"MISSING_ARGUMENT",{count:e,expectedCount:t}),C(e<=t,"too many arguments"+a,"UNEXPECTED_ARGUMENT",{count:e,expectedCount:t})}const U=["NFD","NFC","NFKD","NFKC"].reduce(((e,t)=>{try{if("test"!=="test".normalize(t))throw new Error("bad");if("NFD"===t){if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken")}e.push(t)}catch(e){}return e}),[]);function V(e,t,a){if(null==a&&(a=""),e!==t){let e=a,t="new";a&&(e+=".",t+=" "+a),C(!1,`private constructor; use ${e}from* methods`,"UNSUPPORTED_OPERATION",{operation:t})}}function L(e,t,a){if(e instanceof Uint8Array)return a?new Uint8Array(e):e;if("string"==typeof e&&e.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)){const t=new Uint8Array((e.length-2)/2);let a=2;for(let n=0;n>4]+B[15&n]}return a}function z(e){return"0x"+e.map((e=>H(e).substring(2))).join("")}function $(e,t,a){const n=F(e);return null!=a&&a>n.length&&C(!1,"cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:a}),H(n.slice(null==t?0:t,null==a?n.length:a))}function X(e,t,a){const n=F(e);C(t>=n.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(n),length:t,offset:t+1});const b=new Uint8Array(t);return b.fill(0),a?b.set(n,t-n.length):b.set(n,0),H(b)}let W=!1;const q=function(e){return I(e)};let J=q;function K(e){const t=F(e,"data");return H(J(t))}function Y(e,t,a,n,b){if("BAD_PREFIX"===e||"UNEXPECTED_CONTINUE"===e){let e=0;for(let n=t+1;n>6==2;n++)e++;return e}return"OVERRUN"===e?a.length-t-1:0}K._=q,K.lock=function(){W=!0},K.register=function(e){if(W)throw new TypeError("keccak256 is locked");J=e},Object.freeze(K);const Z=Object.freeze({error:function(e,t,a,n,b){D(!1,`invalid codepoint at offset ${t}; ${e}`,"bytes",a)},ignore:Y,replace:function(e,t,a,n,b){return"OVERLONG"===e?(D("number"==typeof b,"invalid bad code point for replacement","badCodepoint",b),n.push(b),0):(n.push(65533),Y(e,t,a))}});function Q(e,t){D("string"==typeof e,"invalid string value","str",e),null!=t&&(function(e){C(U.indexOf(e)>=0,"platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:e}})}(t),e=e.normalize(t));let a=[];for(let t=0;t>6|192),a.push(63&n|128);else if(55296==(64512&n)){t++;const b=e.charCodeAt(t);D(t>18|240),a.push(f>>12&63|128),a.push(f>>6&63|128),a.push(63&f|128)}else a.push(n>>12|224),a.push(n>>6&63|128),a.push(63&n|128)}return new Uint8Array(a)}function ee(e,t){return function(e,t){null==t&&(t=Z.error);const a=F(e,"bytes"),n=[];let b=0;for(;b>7)){n.push(e);continue}let f=null,d=null;if(192==(224&e))f=1,d=127;else if(224==(240&e))f=2,d=2047;else{if(240!=(248&e)){b+=t(128==(192&e)?"UNEXPECTED_CONTINUE":"BAD_PREFIX",b-1,a,n);continue}f=3,d=65535}if(b-1+f>=a.length){b+=t("OVERRUN",b-1,a,n);continue}let i=e&(1<<8-f-1)-1;for(let e=0;e1114111?b+=t("OUT_OF_RANGE",b-1-f,a,n,i):i>=55296&&i<=57343?b+=t("UTF16_SURROGATE",b-1-f,a,n,i):i<=d?b+=t("OVERLONG",b-1-f,a,n,i):n.push(i))}return n}(e,t).map((e=>e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10&1023),56320+(1023&e))))).join("")}function te(e){return K(Q(e))}const ae=BigInt(0),ne=BigInt(1),be=9007199254740991;function fe(e,t){const a=ie(e,"value"),n=BigInt(re(t,"bits"));return a&(ne<=-be&&e<=be,"overflow",t||"value",e),BigInt(e);case"string":try{if(""===e)throw new Error("empty string");return"-"===e[0]&&"-"!==e[1]?-BigInt(e.substring(1)):BigInt(e)}catch(a){D(!1,`invalid BigNumberish string: ${a.message}`,t||"value",e)}}D(!1,"invalid BigNumberish value",t||"value",e)}function ie(e,t){const a=de(e,t);return C(a>=ae,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:e}),a}const se="0123456789abcdef";function ce(e){if(e instanceof Uint8Array){let t="0x0";for(const a of e)t+=se[a>>4],t+=se[15&a];return BigInt(t)}return de(e)}function re(e,t){switch(typeof e){case"bigint":return D(e>=-be&&e<=be,"overflow",t||"value",e),Number(e);case"number":return D(Number.isInteger(e),"underflow",t||"value",e),D(e>=-be&&e<=be,"overflow",t||"value",e),e;case"string":try{if(""===e)throw new Error("empty string");return re(BigInt(e),t)}catch(a){D(!1,`invalid numeric string: ${a.message}`,t||"value",e)}}D(!1,"invalid numeric value",t||"value",e)}function pe(e,t){let a=ie(e,"value").toString(16);if(null==t)a.length%2&&(a="0"+a);else{const n=re(t,"width");for(C(2*n>=a.length,`value exceeds width (${n} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:e});a.length<2*n;)a="0"+a}return"0x"+a}const ue=32,oe=new Uint8Array(ue),ye=["then"],le={},me=new WeakMap;function Te(e){return me.get(e)}function he(e,t){me.set(e,t)}function ge(e,t){const a=new Error(`deferred error during ABI decoding triggered accessing ${e}`);throw a.error=t,a}function we(e,t,a){return e.indexOf(null)>=0?t.map(((e,t)=>e instanceof ve?we(Te(e),e,a):e)):e.reduce(((e,n,b)=>{let f=t.getValue(n);return n in e||(a&&f instanceof ve&&(f=we(Te(f),f,a)),e[n]=f),e}),{})}class ve extends Array{#e;constructor(...e){const t=e[0];let a=e[1],n=(e[2]||[]).slice(),b=!0;t!==le&&(a=e,n=[],b=!1),super(a.length),a.forEach(((e,t)=>{this[t]=e}));const f=n.reduce(((e,t)=>("string"==typeof t&&e.set(t,(e.get(t)||0)+1),e)),new Map);if(he(this,Object.freeze(a.map(((e,t)=>{const a=n[t];return null!=a&&1===f.get(a)?a:null})))),this.#e=[],null==this.#e&&this.#e,!b)return;Object.freeze(this);const d=new Proxy(this,{get:(e,t,a)=>{if("string"==typeof t){if(t.match(/^[0-9]+$/)){const a=re(t,"%index");if(a<0||a>=this.length)throw new RangeError("out of result range");const n=e[a];return n instanceof Error&&ge(`index ${a}`,n),n}if(ye.indexOf(t)>=0)return Reflect.get(e,t,a);const n=e[t];if(n instanceof Function)return function(...t){return n.apply(this===a?e:this,t)};if(!(t in e))return e.getValue.apply(this===a?e:this,[t])}return Reflect.get(e,t,a)}});return he(d,Te(this)),d}toArray(e){const t=[];return this.forEach(((a,n)=>{a instanceof Error&&ge(`index ${n}`,a),e&&a instanceof ve&&(a=a.toArray(e)),t.push(a)})),t}toObject(e){const t=Te(this);return t.reduce(((a,n,b)=>(C(null!=n,`value at index ${b} unnamed`,"UNSUPPORTED_OPERATION",{operation:"toObject()"}),we(t,this,e))),{})}slice(e,t){null==e&&(e=0),e<0&&(e+=this.length)<0&&(e=0),null==t&&(t=this.length),t<0&&(t+=this.length)<0&&(t=0),t>this.length&&(t=this.length);const a=Te(this),n=[],b=[];for(let f=e;f{this.#t[e]=Me(t)}}}class Ie{allowLoose;#t;#b;#f;#d;#i;constructor(e,t,a){O(this,{allowLoose:!!t}),this.#t=G(e),this.#f=0,this.#d=null,this.#i=null!=a?a:1024,this.#b=0}get data(){return H(this.#t)}get dataLength(){return this.#t.length}get consumed(){return this.#b}get bytes(){return new Uint8Array(this.#t)}#s(e){if(this.#d)return this.#d.#s(e);this.#f+=e,C(this.#i<1||this.#f<=this.#i*this.dataLength,`compressed ABI data exceeds inflation ratio of ${this.#i} ( see: https://github.com/ethers-io/ethers.js/issues/4537 )`,"BUFFER_OVERRUN",{buffer:G(this.#t),offset:this.#b,length:e,info:{bytesRead:this.#f,dataLength:this.dataLength}})}#c(e,t,a){let n=Math.ceil(t/ue)*ue;return this.#b+n>this.#t.length&&(this.allowLoose&&a&&this.#b+t<=this.#t.length?n=t:C(!1,"data out-of-bounds","BUFFER_OVERRUN",{buffer:G(this.#t),length:this.#t.length,offset:this.#b+n})),this.#t.slice(this.#b,this.#b+n)}subReader(e){const t=new Ie(this.#t.slice(this.#b+e),this.allowLoose,this.#i);return t.#d=this,t}readBytes(e,t){let a=this.#c(0,e,!!t);return this.#s(e),this.#b+=a.length,a.slice(0,e)}readValue(){return ce(this.readBytes(ue))}readIndex(){return re(ce(this.readBytes(ue)))}}const Ee=BigInt(0),Re=BigInt(36);function Oe(e){const t=(e=e.toLowerCase()).substring(2).split(""),a=new Uint8Array(40);for(let e=0;e<40;e++)a[e]=t[e].charCodeAt(0);const n=F(K(a));for(let e=0;e<40;e+=2)n[e>>1]>>4>=8&&(t[e]=t[e].toUpperCase()),(15&n[e>>1])>=8&&(t[e+1]=t[e+1].toUpperCase());return"0x"+t.join("")}const ke={};for(let e=0;e<10;e++)ke[String(e)]=String(e);for(let e=0;e<26;e++)ke[String.fromCharCode(65+e)]=String(10+e);const Pe=function(){const e={};for(let t=0;t<36;t++)e["0123456789abcdefghijklmnopqrstuvwxyz"[t]]=BigInt(t);return e}();function Ae(e){if(D("string"==typeof e,"invalid address","address",e),e.match(/^(0x)?[0-9a-fA-F]{40}$/)){e.startsWith("0x")||(e="0x"+e);const t=Oe(e);return D(!e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)||t===e,"bad address checksum","address",e),t}if(e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){D(e.substring(2,4)===function(e){let t=(e=(e=e.toUpperCase()).substring(4)+e.substring(0,2)+"00").split("").map((e=>ke[e])).join("");for(;t.length>=15;){let e=t.substring(0,15);t=parseInt(e,10)%97+t.substring(e.length)}let a=String(98-parseInt(t,10)%97);for(;a.length<2;)a="0"+a;return a}(e),"bad icap checksum","address",e);let t=function(e){e=e.toLowerCase();let t=Ee;for(let a=0;ae.format())).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return this.type.startsWith("bytes")}isString(){return"string"===this.type}get tupleName(){if("tuple"!==this.type)throw TypeError("not a tuple");return this.#r}get arrayLength(){if("array"!==this.type)throw TypeError("not an array");return!0===this.#r?-1:!1===this.#r?this.value.length:null}static from(e,t){return new Ue(Ne,e,t)}static uint8(e){return Ce(e,8)}static uint16(e){return Ce(e,16)}static uint24(e){return Ce(e,24)}static uint32(e){return Ce(e,32)}static uint40(e){return Ce(e,40)}static uint48(e){return Ce(e,48)}static uint56(e){return Ce(e,56)}static uint64(e){return Ce(e,64)}static uint72(e){return Ce(e,72)}static uint80(e){return Ce(e,80)}static uint88(e){return Ce(e,88)}static uint96(e){return Ce(e,96)}static uint104(e){return Ce(e,104)}static uint112(e){return Ce(e,112)}static uint120(e){return Ce(e,120)}static uint128(e){return Ce(e,128)}static uint136(e){return Ce(e,136)}static uint144(e){return Ce(e,144)}static uint152(e){return Ce(e,152)}static uint160(e){return Ce(e,160)}static uint168(e){return Ce(e,168)}static uint176(e){return Ce(e,176)}static uint184(e){return Ce(e,184)}static uint192(e){return Ce(e,192)}static uint200(e){return Ce(e,200)}static uint208(e){return Ce(e,208)}static uint216(e){return Ce(e,216)}static uint224(e){return Ce(e,224)}static uint232(e){return Ce(e,232)}static uint240(e){return Ce(e,240)}static uint248(e){return Ce(e,248)}static uint256(e){return Ce(e,256)}static uint(e){return Ce(e,256)}static int8(e){return Ce(e,-8)}static int16(e){return Ce(e,-16)}static int24(e){return Ce(e,-24)}static int32(e){return Ce(e,-32)}static int40(e){return Ce(e,-40)}static int48(e){return Ce(e,-48)}static int56(e){return Ce(e,-56)}static int64(e){return Ce(e,-64)}static int72(e){return Ce(e,-72)}static int80(e){return Ce(e,-80)}static int88(e){return Ce(e,-88)}static int96(e){return Ce(e,-96)}static int104(e){return Ce(e,-104)}static int112(e){return Ce(e,-112)}static int120(e){return Ce(e,-120)}static int128(e){return Ce(e,-128)}static int136(e){return Ce(e,-136)}static int144(e){return Ce(e,-144)}static int152(e){return Ce(e,-152)}static int160(e){return Ce(e,-160)}static int168(e){return Ce(e,-168)}static int176(e){return Ce(e,-176)}static int184(e){return Ce(e,-184)}static int192(e){return Ce(e,-192)}static int200(e){return Ce(e,-200)}static int208(e){return Ce(e,-208)}static int216(e){return Ce(e,-216)}static int224(e){return Ce(e,-224)}static int232(e){return Ce(e,-232)}static int240(e){return Ce(e,-240)}static int248(e){return Ce(e,-248)}static int256(e){return Ce(e,-256)}static int(e){return Ce(e,-256)}static bytes1(e){return De(e,1)}static bytes2(e){return De(e,2)}static bytes3(e){return De(e,3)}static bytes4(e){return De(e,4)}static bytes5(e){return De(e,5)}static bytes6(e){return De(e,6)}static bytes7(e){return De(e,7)}static bytes8(e){return De(e,8)}static bytes9(e){return De(e,9)}static bytes10(e){return De(e,10)}static bytes11(e){return De(e,11)}static bytes12(e){return De(e,12)}static bytes13(e){return De(e,13)}static bytes14(e){return De(e,14)}static bytes15(e){return De(e,15)}static bytes16(e){return De(e,16)}static bytes17(e){return De(e,17)}static bytes18(e){return De(e,18)}static bytes19(e){return De(e,19)}static bytes20(e){return De(e,20)}static bytes21(e){return De(e,21)}static bytes22(e){return De(e,22)}static bytes23(e){return De(e,23)}static bytes24(e){return De(e,24)}static bytes25(e){return De(e,25)}static bytes26(e){return De(e,26)}static bytes27(e){return De(e,27)}static bytes28(e){return De(e,28)}static bytes29(e){return De(e,29)}static bytes30(e){return De(e,30)}static bytes31(e){return De(e,31)}static bytes32(e){return De(e,32)}static address(e){return new Ue(Ne,"address",e)}static bool(e){return new Ue(Ne,"bool",!!e)}static bytes(e){return new Ue(Ne,"bytes",e)}static string(e){return new Ue(Ne,"string",e)}static array(e,t){throw new Error("not implemented yet")}static tuple(e,t){throw new Error("not implemented yet")}static overrides(e){return new Ue(Ne,"overrides",Object.assign({},e))}static isTyped(e){return e&&"object"==typeof e&&"_typedSymbol"in e&&e._typedSymbol===Se}static dereference(e,t){if(Ue.isTyped(e)){if(e.type!==t)throw new Error(`invalid type: expecetd ${t}, got ${e.type}`);return e.value}return e}}class Ve extends _e{constructor(e){super("address","address",e,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(e,t){let a=Ue.dereference(t,"string");try{a=Ae(a)}catch(e){return this._throwError(e.message,t)}return e.writeValue(a)}decode(e){return Ae(pe(e.readValue(),20))}}class Le extends _e{coder;constructor(e){super(e.name,e.type,"_",e.dynamic),this.coder=e}defaultValue(){return this.coder.defaultValue()}encode(e,t){return this.coder.encode(e,t)}decode(e){return this.coder.decode(e)}}function Fe(e,t,a){let n=[];if(Array.isArray(a))n=a;else if(a&&"object"==typeof a){let e={};n=t.map((t=>{const n=t.localName;return C(n,"cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:t},value:a}),C(!e[n],"cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:t},value:a}),e[n]=!0,a[n]}))}else D(!1,"invalid tuple value","tuple",a);D(t.length===n.length,"types/value length mismatch","tuple",a);let b=new xe,f=new xe,d=[];t.forEach(((e,t)=>{let a=n[t];if(e.dynamic){let t=f.length;e.encode(f,a);let n=b.writeUpdatableValue();d.push((e=>{n(e+t)}))}else e.encode(b,a)})),d.forEach((e=>{e(b.length)}));let i=e.appendWriter(b);return i+=e.appendWriter(f),i}function Ge(e,t){let a=[],n=[],b=e.subReader(0);return t.forEach((t=>{let f=null;if(t.dynamic){let a=e.readIndex(),n=b.subReader(a);try{f=t.decode(n)}catch(e){if(P(e,"BUFFER_OVERRUN"))throw e;f=e,f.baseType=t.name,f.name=t.localName,f.type=t.type}}else try{f=t.decode(e)}catch(e){if(P(e,"BUFFER_OVERRUN"))throw e;f=e,f.baseType=t.name,f.name=t.localName,f.type=t.type}if(null==f)throw new Error("investigate");a.push(f),n.push(t.localName||null)})),ve.fromItems(a,n)}class je extends _e{coder;length;constructor(e,t,a){super("array",e.type+"["+(t>=0?t:"")+"]",a,-1===t||e.dynamic),O(this,{coder:e,length:t})}defaultValue(){const e=this.coder.defaultValue(),t=[];for(let a=0;ae||a<-(e+Je))&&this._throwError("value out-of-bounds",t),a=function(e){let t=de(e,"value");const a=BigInt(re(256,"width")),n=ne<fe(n,8*this.size))&&this._throwError("value out-of-bounds",t);return e.writeValue(a)}decode(e){let t=fe(e.readValue(),8*this.size);return this.signed&&(t=function(e,t){const a=ie(e,"value"),n=BigInt(re(t,"width"));return C(a>>n===ae,"overflow","NUMERIC_FAULT",{operation:"fromTwos",fault:"overflow",value:e}),a>>n-ne?-((~a&(ne<{e.dynamic&&(a=!0),n.push(e.type)})),super("tuple","tuple("+n.join(",")+")",t,a),O(this,{coders:Object.freeze(e.slice())})}defaultValue(){const e=[];this.coders.forEach((t=>{e.push(t.defaultValue())}));const t=this.coders.reduce(((e,t)=>{const a=t.localName;return a&&(e[a]||(e[a]=0),e[a]++),e}),{});return this.coders.forEach(((a,n)=>{let b=a.localName;b&&1===t[b]&&("length"===b&&(b="_length"),null==e[b]&&(e[b]=e[n]))})),Object.freeze(e)}encode(e,t){const a=Ue.dereference(t,"tuple");return Fe(e,this.coders,a)}decode(e){return Ge(e,this.coders)}}function et(e){const t=new Set;return e.forEach((e=>t.add(e))),Object.freeze(t)}const tt=et("external public payable override".split(" ")),at="constant external internal payable private public pure view override",nt=et(at.split(" ")),bt="constructor error event fallback function receive struct",ft=et(bt.split(" ")),dt="calldata memory storage payable indexed",it=et(dt.split(" ")),st=et([bt,dt,"tuple returns",at].join(" ").split(" ")),ct={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},rt=new RegExp("^(\\s*)"),pt=new RegExp("^([0-9]+)"),ut=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),ot=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$"),yt=new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");class lt{#b;#p;get offset(){return this.#b}get length(){return this.#p.length-this.#b}constructor(e){this.#b=0,this.#p=e.slice()}clone(){return new lt(this.#p)}reset(){this.#b=0}#u(e=0,t=0){return new lt(this.#p.slice(e,t).map((t=>Object.freeze(Object.assign({},t,{match:t.match-e,linkBack:t.linkBack-e,linkNext:t.linkNext-e})))))}popKeyword(e){const t=this.peek();if("KEYWORD"!==t.type||!e.has(t.text))throw new Error(`expected keyword ${t.text}`);return this.pop().text}popType(e){if(this.peek().type!==e){const t=this.peek();throw new Error(`expected ${e}; got ${t.type} ${JSON.stringify(t.text)}`)}return this.pop().text}popParen(){const e=this.peek();if("OPEN_PAREN"!==e.type)throw new Error("bad start");const t=this.#u(this.#b+1,e.match+1);return this.#b=e.match+1,t}popParams(){const e=this.peek();if("OPEN_PAREN"!==e.type)throw new Error("bad start");const t=[];for(;this.#b=this.#p.length)throw new Error("out-of-bounds");return this.#p[this.#b]}peekKeyword(e){const t=this.peekType("KEYWORD");return null!=t&&e.has(t)?t:null}peekType(e){if(0===this.length)return null;const t=this.peek();return t.type===e?t.text:null}pop(){const e=this.peek();return this.#b++,e}toString(){const e=[];for(let t=this.#b;t`}}function mt(e){const t=[],a=t=>{const a=f0&&"NUMBER"===t[t.length-1].type){const a=t.pop().text;e=a+e,t[t.length-1].value=re(a)}if(0===t.length||"BRACKET"!==t[t.length-1].type)throw new Error("missing opening bracket");t[t.length-1].text+=e}}else if(i=d.match(ut),i){if(s.text=i[1],f+=s.text.length,st.has(s.text)){s.type="KEYWORD";continue}if(s.text.match(yt)){s.type="TYPE";continue}s.type="ID"}else{if(i=d.match(pt),!i)throw new Error(`unexpected token ${JSON.stringify(d[0])} at position ${f}`);s.text=i[1],s.type="NUMBER",f+=s.text.length}}return new lt(t.map((e=>Object.freeze(e))))}function Tt(e,t){let a=[];for(const n in t.keys())e.has(n)&&a.push(n);if(a.length>1)throw new Error(`conflicting types: ${a.join(", ")}`)}function ht(e,t){if(t.peekKeyword(ft)){const a=t.pop().text;if(a!==e)throw new Error(`expected ${e}, got ${a}`)}return t.popType("ID")}function gt(e,t){const a=new Set;for(;;){const n=e.peekType("KEYWORD");if(null==n||t&&!t.has(n))break;if(e.pop(),a.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);a.add(n)}return Object.freeze(a)}function wt(e){let t=gt(e,nt);return Tt(t,et("constant payable nonpayable".split(" "))),Tt(t,et("pure view payable nonpayable".split(" "))),t.has("view")?"view":t.has("pure")?"pure":t.has("payable")?"payable":t.has("nonpayable")?"nonpayable":t.has("constant")?"view":"nonpayable"}function vt(e,t){return e.popParams().map((e=>St.from(e,t)))}function Mt(e){if(e.peekType("AT")){if(e.pop(),e.peekType("NUMBER"))return de(e.pop().text);throw new Error("invalid gas")}return null}function _t(e){if(e.length)throw new Error(`unexpected tokens at offset ${e.offset}: ${e.toString()}`)}const xt=new RegExp(/^(.*)\[([0-9]*)\]$/);function It(e){const t=e.match(yt);if(D(t,"invalid type","type",e),"uint"===e)return"uint256";if("int"===e)return"int256";if(t[2]){const a=parseInt(t[2]);D(0!==a&&a<=32,"invalid bytes length","type",e)}else if(t[3]){const a=parseInt(t[3]);D(0!==a&&a<=256&&a%8==0,"invalid numeric width","type",e)}return e}const Et={},Rt=Symbol.for("_ethers_internal"),Ot="_ParamTypeInternal",kt="_ErrorInternal",Pt="_EventInternal",At="_ConstructorInternal",Nt="_FallbackInternal",Ct="_FunctionInternal",Dt="_StructInternal";class St{name;type;baseType;indexed;components;arrayLength;arrayChildren;constructor(e,t,a,n,b,f,d,i){if(V(e,Et,"ParamType"),Object.defineProperty(this,Rt,{value:Ot}),f&&(f=Object.freeze(f.slice())),"array"===n){if(null==d||null==i)throw new Error("")}else if(null!=d||null!=i)throw new Error("");if("tuple"===n){if(null==f)throw new Error("")}else if(null!=f)throw new Error("");O(this,{name:t,type:a,baseType:n,indexed:b,components:f,arrayLength:d,arrayChildren:i})}format(e){if(null==e&&(e="sighash"),"json"===e){const t=this.name||"";if(this.isArray()){const e=JSON.parse(this.arrayChildren.format("json"));return e.name=t,e.type+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`,JSON.stringify(e)}const a={type:"tuple"===this.baseType?"tuple":this.type,name:t};return"boolean"==typeof this.indexed&&(a.indexed=this.indexed),this.isTuple()&&(a.components=this.components.map((t=>JSON.parse(t.format(e))))),JSON.stringify(a)}let t="";return this.isArray()?(t+=this.arrayChildren.format(e),t+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?t+="("+this.components.map((t=>t.format(e))).join("full"===e?", ":",")+")":t+=this.type,"sighash"!==e&&(!0===this.indexed&&(t+=" indexed"),"full"===e&&this.name&&(t+=" "+this.name)),t}isArray(){return"array"===this.baseType}isTuple(){return"tuple"===this.baseType}isIndexable(){return null!=this.indexed}walk(e,t){if(this.isArray()){if(!Array.isArray(e))throw new Error("invalid array value");if(-1!==this.arrayLength&&e.length!==this.arrayLength)throw new Error("array is wrong length");const a=this;return e.map((e=>a.arrayChildren.walk(e,t)))}if(this.isTuple()){if(!Array.isArray(e))throw new Error("invalid tuple value");if(e.length!==this.components.length)throw new Error("array is wrong length");const a=this;return e.map(((e,n)=>a.components[n].walk(e,t)))}return t(this.type,e)}#o(e,t,a,n){if(this.isArray()){if(!Array.isArray(t))throw new Error("invalid array value");if(-1!==this.arrayLength&&t.length!==this.arrayLength)throw new Error("array is wrong length");const b=this.arrayChildren,f=t.slice();return f.forEach(((t,n)=>{b.#o(e,t,a,(e=>{f[n]=e}))})),void n(f)}if(this.isTuple()){const b=this.components;let f;if(Array.isArray(t))f=t.slice();else{if(null==t||"object"!=typeof t)throw new Error("invalid tuple value");f=b.map((e=>{if(!e.name)throw new Error("cannot use object value with unnamed components");if(!(e.name in t))throw new Error(`missing value for component ${e.name}`);return t[e.name]}))}if(f.length!==this.components.length)throw new Error("array is wrong length");return f.forEach(((t,n)=>{b[n].#o(e,t,a,(e=>{f[n]=e}))})),void n(f)}const b=a(this.type,t);b.then?e.push(async function(){n(await b)}()):n(b)}async walkAsync(e,t){const a=[],n=[e];return this.#o(a,e,t,(e=>{n[0]=e})),a.length&&await Promise.all(a),n[0]}static from(e,t){if(St.isParamType(e))return e;if("string"==typeof e)try{return St.from(mt(e),t)}catch(t){D(!1,"invalid param type","obj",e)}else if(e instanceof lt){let a="",n="",b=null;gt(e,et(["tuple"])).has("tuple")||e.peekType("OPEN_PAREN")?(n="tuple",b=e.popParams().map((e=>St.from(e))),a=`tuple(${b.map((e=>e.format())).join(",")})`):(a=It(e.popType("TYPE")),n=a);let f=null,d=null;for(;e.length&&e.peekType("BRACKET");){const t=e.pop();f=new St(Et,"",a,n,null,b,d,f),d=t.value,a+=t.text,n="array",b=null}let i=null;if(gt(e,it).has("indexed")){if(!t)throw new Error("");i=!0}const s=e.peekType("ID")?e.pop().text:"";if(e.length)throw new Error("leftover tokens");return new St(Et,s,a,n,i,b,d,f)}const a=e.name;D(!a||"string"==typeof a&&a.match(ot),"invalid name","obj.name",a);let n=e.indexed;null!=n&&(D(t,"parameter cannot be indexed","obj.indexed",e.indexed),n=!!n);let b=e.type,f=b.match(xt);if(f){const t=parseInt(f[2]||"-1"),d=St.from({type:f[1],components:e.components});return new St(Et,a||"",b,"array",n,null,t,d)}if("tuple"===b||b.startsWith("tuple(")||b.startsWith("(")){const t=null!=e.components?e.components.map((e=>St.from(e))):null;return new St(Et,a||"",b,"tuple",n,t,null,null)}return b=It(e.type),new St(Et,a||"",b,b,n,null,null,null)}static isParamType(e){return e&&e[Rt]===Ot}}class Ut{type;inputs;constructor(e,t,a){V(e,Et,"Fragment"),O(this,{type:t,inputs:a=Object.freeze(a.slice())})}static from(e){if("string"==typeof e){try{Ut.from(JSON.parse(e))}catch(e){}return Ut.from(mt(e))}if(e instanceof lt)switch(e.peekKeyword(ft)){case"constructor":return jt.from(e);case"error":return Ft.from(e);case"event":return Gt.from(e);case"fallback":case"receive":return Bt.from(e);case"function":return Ht.from(e);case"struct":return zt.from(e)}else if("object"==typeof e){switch(e.type){case"constructor":return jt.from(e);case"error":return Ft.from(e);case"event":return Gt.from(e);case"fallback":case"receive":return Bt.from(e);case"function":return Ht.from(e);case"struct":return zt.from(e)}C(!1,`unsupported type: ${e.type}`,"UNSUPPORTED_OPERATION",{operation:"Fragment.from"})}D(!1,"unsupported frgament object","obj",e)}static isConstructor(e){return jt.isFragment(e)}static isError(e){return Ft.isFragment(e)}static isEvent(e){return Gt.isFragment(e)}static isFunction(e){return Ht.isFragment(e)}static isStruct(e){return zt.isFragment(e)}}class Vt extends Ut{name;constructor(e,t,a,n){super(e,t,n),D("string"==typeof a&&a.match(ot),"invalid identifier","name",a),n=Object.freeze(n.slice()),O(this,{name:a})}}function Lt(e,t){return"("+t.map((t=>t.format(e))).join("full"===e?", ":",")+")"}class Ft extends Vt{constructor(e,t,a){super(e,"error",t,a),Object.defineProperty(this,Rt,{value:kt})}get selector(){return te(this.format("sighash")).substring(0,10)}format(e){if(null==e&&(e="sighash"),"json"===e)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});const t=[];return"sighash"!==e&&t.push("error"),t.push(this.name+Lt(e,this.inputs)),t.join(" ")}static from(e){if(Ft.isFragment(e))return e;if("string"==typeof e)return Ft.from(mt(e));if(e instanceof lt){const t=ht("error",e),a=vt(e);return _t(e),new Ft(Et,t,a)}return new Ft(Et,e.name,e.inputs?e.inputs.map(St.from):[])}static isFragment(e){return e&&e[Rt]===kt}}class Gt extends Vt{anonymous;constructor(e,t,a,n){super(e,"event",t,a),Object.defineProperty(this,Rt,{value:Pt}),O(this,{anonymous:n})}get topicHash(){return te(this.format("sighash"))}format(e){if(null==e&&(e="sighash"),"json"===e)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});const t=[];return"sighash"!==e&&t.push("event"),t.push(this.name+Lt(e,this.inputs)),"sighash"!==e&&this.anonymous&&t.push("anonymous"),t.join(" ")}static getTopicHash(e,t){return t=(t||[]).map((e=>St.from(e))),new Gt(Et,e,t,!1).topicHash}static from(e){if(Gt.isFragment(e))return e;if("string"==typeof e)try{return Gt.from(mt(e))}catch(t){D(!1,"invalid event fragment","obj",e)}else if(e instanceof lt){const t=ht("event",e),a=vt(e,!0),n=!!gt(e,et(["anonymous"])).has("anonymous");return _t(e),new Gt(Et,t,a,n)}return new Gt(Et,e.name,e.inputs?e.inputs.map((e=>St.from(e,!0))):[],!!e.anonymous)}static isFragment(e){return e&&e[Rt]===Pt}}class jt extends Ut{payable;gas;constructor(e,t,a,n,b){super(e,t,a),Object.defineProperty(this,Rt,{value:At}),O(this,{payable:n,gas:b})}format(e){if(C(null!=e&&"sighash"!==e,"cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),"json"===e)return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});const t=[`constructor${Lt(e,this.inputs)}`];return this.payable&&t.push("payable"),null!=this.gas&&t.push(`@${this.gas.toString()}`),t.join(" ")}static from(e){if(jt.isFragment(e))return e;if("string"==typeof e)try{return jt.from(mt(e))}catch(t){D(!1,"invalid constuctor fragment","obj",e)}else if(e instanceof lt){gt(e,et(["constructor"]));const t=vt(e),a=!!gt(e,tt).has("payable"),n=Mt(e);return _t(e),new jt(Et,"constructor",t,a,n)}return new jt(Et,"constructor",e.inputs?e.inputs.map(St.from):[],!!e.payable,null!=e.gas?e.gas:null)}static isFragment(e){return e&&e[Rt]===At}}class Bt extends Ut{payable;constructor(e,t,a){super(e,"fallback",t),Object.defineProperty(this,Rt,{value:Nt}),O(this,{payable:a})}format(e){const t=0===this.inputs.length?"receive":"fallback";if("json"===e){const e=this.payable?"payable":"nonpayable";return JSON.stringify({type:t,stateMutability:e})}return`${t}()${this.payable?" payable":""}`}static from(e){if(Bt.isFragment(e))return e;if("string"==typeof e)try{return Bt.from(mt(e))}catch(t){D(!1,"invalid fallback fragment","obj",e)}else if(e instanceof lt){const t=e.toString();if(D(e.peekKeyword(et(["fallback","receive"])),"type must be fallback or receive","obj",t),"receive"===e.popKeyword(et(["fallback","receive"]))){const t=vt(e);return D(0===t.length,"receive cannot have arguments","obj.inputs",t),gt(e,et(["payable"])),_t(e),new Bt(Et,[],!0)}let a=vt(e);a.length?D(1===a.length&&"bytes"===a[0].type,"invalid fallback inputs","obj.inputs",a.map((e=>e.format("minimal"))).join(", ")):a=[St.from("bytes")];const n=wt(e);if(D("nonpayable"===n||"payable"===n,"fallback cannot be constants","obj.stateMutability",n),gt(e,et(["returns"])).has("returns")){const t=vt(e);D(1===t.length&&"bytes"===t[0].type,"invalid fallback outputs","obj.outputs",t.map((e=>e.format("minimal"))).join(", "))}return _t(e),new Bt(Et,a,"payable"===n)}if("receive"===e.type)return new Bt(Et,[],!0);if("fallback"===e.type){const t=[St.from("bytes")],a="payable"===e.stateMutability;return new Bt(Et,t,a)}D(!1,"invalid fallback description","obj",e)}static isFragment(e){return e&&e[Rt]===Nt}}class Ht extends Vt{constant;outputs;stateMutability;payable;gas;constructor(e,t,a,n,b,f){super(e,"function",t,n),Object.defineProperty(this,Rt,{value:Ct}),O(this,{constant:"view"===a||"pure"===a,gas:f,outputs:b=Object.freeze(b.slice()),payable:"payable"===a,stateMutability:a})}get selector(){return te(this.format("sighash")).substring(0,10)}format(e){if(null==e&&(e="sighash"),"json"===e)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((t=>JSON.parse(t.format(e)))),outputs:this.outputs.map((t=>JSON.parse(t.format(e))))});const t=[];return"sighash"!==e&&t.push("function"),t.push(this.name+Lt(e,this.inputs)),"sighash"!==e&&("nonpayable"!==this.stateMutability&&t.push(this.stateMutability),this.outputs&&this.outputs.length&&(t.push("returns"),t.push(Lt(e,this.outputs))),null!=this.gas&&t.push(`@${this.gas.toString()}`)),t.join(" ")}static getSelector(e,t){return t=(t||[]).map((e=>St.from(e))),new Ht(Et,e,"view",t,[],null).selector}static from(e){if(Ht.isFragment(e))return e;if("string"==typeof e)try{return Ht.from(mt(e))}catch(t){D(!1,"invalid function fragment","obj",e)}else if(e instanceof lt){const t=ht("function",e),a=vt(e),n=wt(e);let b=[];gt(e,et(["returns"])).has("returns")&&(b=vt(e));const f=Mt(e);return _t(e),new Ht(Et,t,n,a,b,f)}let t=e.stateMutability;return null==t&&(t="payable","boolean"==typeof e.constant?(t="view",e.constant||(t="payable","boolean"!=typeof e.payable||e.payable||(t="nonpayable"))):"boolean"!=typeof e.payable||e.payable||(t="nonpayable")),new Ht(Et,e.name,t,e.inputs?e.inputs.map(St.from):[],e.outputs?e.outputs.map(St.from):[],null!=e.gas?e.gas:null)}static isFragment(e){return e&&e[Rt]===Ct}}class zt extends Vt{constructor(e,t,a){super(e,"struct",t,a),Object.defineProperty(this,Rt,{value:Dt})}format(){throw new Error("@TODO")}static from(e){if("string"==typeof e)try{return zt.from(mt(e))}catch(t){D(!1,"invalid struct fragment","obj",e)}else if(e instanceof lt){const t=ht("struct",e),a=vt(e);return _t(e),new zt(Et,t,a)}return new zt(Et,e.name,e.inputs?e.inputs.map(St.from):[])}static isFragment(e){return e&&e[Rt]===Dt}}const $t=new Map;$t.set(0,"GENERIC_PANIC"),$t.set(1,"ASSERT_FALSE"),$t.set(17,"OVERFLOW"),$t.set(18,"DIVIDE_BY_ZERO"),$t.set(33,"ENUM_RANGE_ERROR"),$t.set(34,"BAD_STORAGE_DATA"),$t.set(49,"STACK_UNDERFLOW"),$t.set(50,"ARRAY_RANGE_ERROR"),$t.set(65,"OUT_OF_MEMORY"),$t.set(81,"UNINITIALIZED_FUNCTION_CALL");const Xt=new RegExp(/^bytes([0-9]*)$/),Wt=new RegExp(/^(u?int)([0-9]*)$/);let qt=null,Jt=1024;class Kt{#y(e){if(e.isArray())return new je(this.#y(e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new Qe(e.components.map((e=>this.#y(e))),e.name);switch(e.baseType){case"address":return new Ve(e.name);case"bool":return new Be(e.name);case"string":return new Ze(e.name);case"bytes":return new ze(e.name);case"":return new We(e.name)}let t=e.type.match(Wt);if(t){let a=parseInt(t[2]||"256");return D(0!==a&&a<=256&&a%8==0,"invalid "+t[1]+" bit length","param",e),new Ye(a/8,"int"===t[1],e.name)}if(t=e.type.match(Xt),t){let a=parseInt(t[1]);return D(0!==a&&a<=32,"invalid bytes length","param",e),new $e(a,e.name)}D(!1,"invalid type","type",e.type)}getDefaultValue(e){const t=e.map((e=>this.#y(St.from(e))));return new Qe(t,"_").defaultValue()}encode(e,t){S(t.length,e.length,"types/values length mismatch");const a=e.map((e=>this.#y(St.from(e)))),n=new Qe(a,"_"),b=new xe;return n.encode(b,t),b.data}decode(e,t,a){const n=e.map((e=>this.#y(St.from(e))));return new Qe(n,"_").decode(new Ie(t,a,Jt))}static _setDefaultMaxInflation(e){D("number"==typeof e&&Number.isInteger(e),"invalid defaultMaxInflation factor","value",e),Jt=e}static defaultAbiCoder(){return null==qt&&(qt=new Kt),qt}static getBuiltinCallException(e,t,a){return function(e,t,a,n){let b="missing revert data",f=null,d=null;if(a){b="execution reverted";const e=F(a);if(a=H(a),0===e.length)b+=" (no data present; likely require(false) occurred",f="require(false)";else if(e.length%32!=4)b+=" (could not decode reason; invalid data length)";else if("0x08c379a0"===H(e.slice(0,4)))try{f=n.decode(["string"],e.slice(4))[0],d={signature:"Error(string)",name:"Error",args:[f]},b+=`: ${JSON.stringify(f)}`}catch(e){b+=" (could not decode reason; invalid string data)"}else if("0x4e487b71"===H(e.slice(0,4)))try{const t=Number(n.decode(["uint256"],e.slice(4))[0]);d={signature:"Panic(uint256)",name:"Panic",args:[t]},f=`Panic due to ${$t.get(t)||"UNKNOWN"}(${t})`,b+=`: ${f}`}catch(e){b+=" (could not decode panic code)"}else b+=" (unknown custom error)"}const i={to:t.to?Ae(t.to):null,data:t.data||"0x"};return t.from&&(i.from=Ae(t.from)),N(b,"CALL_EXCEPTION",{action:e,data:a,reason:f,transaction:i,invocation:null,revert:d})}(e,t,a,Kt.defaultAbiCoder())}}class Yt{fragment;name;signature;topic;args;constructor(e,t,a){const n=e.name,b=e.format();O(this,{fragment:e,name:n,signature:b,topic:t,args:a})}}class Zt{fragment;name;args;signature;selector;value;constructor(e,t,a,n){const b=e.name,f=e.format();O(this,{fragment:e,name:b,args:a,signature:f,selector:t,value:n})}}class Qt{fragment;name;args;signature;selector;constructor(e,t,a){const n=e.name,b=e.format();O(this,{fragment:e,name:n,args:a,signature:b,selector:t})}}class ea{hash;_isIndexed;static isIndexed(e){return!(!e||!e._isIndexed)}constructor(e){O(this,{hash:e,_isIndexed:!0})}}const ta={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},aa={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:e=>`reverted with reason string ${JSON.stringify(e)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:e=>{let t="unknown panic code";return e>=0&&e<=255&&ta[e.toString()]&&(t=ta[e.toString()]),`reverted with panic code 0x${e.toString(16)} (${t})`}}};class na{fragments;deploy;fallback;receive;#l;#m;#T;#h;constructor(e){let t=[];t="string"==typeof e?JSON.parse(e):e,this.#T=new Map,this.#l=new Map,this.#m=new Map;const a=[];for(const e of t)try{a.push(Ut.from(e))}catch(t){console.log(`[Warning] Invalid Fragment ${JSON.stringify(e)}:`,t.message)}O(this,{fragments:Object.freeze(a)});let n=null,b=!1;this.#h=this.getAbiCoder(),this.fragments.forEach(((e,t)=>{let a;switch(e.type){case"constructor":return this.deploy?void console.log("duplicate definition - constructor"):void O(this,{deploy:e});case"fallback":return void(0===e.inputs.length?b=!0:(D(!n||e.payable!==n.payable,"conflicting fallback fragments",`fragments[${t}]`,e),n=e,b=n.payable));case"function":a=this.#T;break;case"event":a=this.#m;break;case"error":a=this.#l;break;default:return}const f=e.format();a.has(f)||a.set(f,e)})),this.deploy||O(this,{deploy:jt.from("constructor()")}),O(this,{fallback:n,receive:b})}format(e){const t=e?"minimal":"full";return this.fragments.map((e=>e.format(t)))}formatJson(){const e=this.fragments.map((e=>e.format("json")));return JSON.stringify(e.map((e=>JSON.parse(e))))}getAbiCoder(){return Kt.defaultAbiCoder()}#g(e,t,a){if(j(e)){const t=e.toLowerCase();for(const e of this.#T.values())if(t===e.selector)return e;return null}if(-1===e.indexOf("(")){const n=[];for(const[t,a]of this.#T)t.split("(")[0]===e&&n.push(a);if(t){const e=t.length>0?t[t.length-1]:null;let a=t.length,b=!0;Ue.isTyped(e)&&"overrides"===e.type&&(b=!1,a--);for(let e=n.length-1;e>=0;e--){const t=n[e].inputs.length;t===a||b&&t===a-1||n.splice(e,1)}for(let e=n.length-1;e>=0;e--){const a=n[e].inputs;for(let b=0;b=a.length){if("overrides"===t[b].type)continue;n.splice(e,1);break}if(t[b].type!==a[b].baseType){n.splice(e,1);break}}}}if(1===n.length&&t&&t.length!==n[0].inputs.length){const e=t[t.length-1];(null==e||Array.isArray(e)||"object"!=typeof e)&&n.splice(0,1)}return 0===n.length?null:(n.length>1&&a&&D(!1,`ambiguous function description (i.e. matches ${n.map((e=>JSON.stringify(e.format()))).join(", ")})`,"key",e),n[0])}return this.#T.get(Ht.from(e).format())||null}getFunctionName(e){const t=this.#g(e,null,!1);return D(t,"no matching function","key",e),t.name}hasFunction(e){return!!this.#g(e,null,!1)}getFunction(e,t){return this.#g(e,t||null,!0)}forEachFunction(e){const t=Array.from(this.#T.keys());t.sort(((e,t)=>e.localeCompare(t)));for(let a=0;a=0;e--)n[e].inputs.length=0;e--){const a=n[e].inputs;for(let b=0;b1&&a&&D(!1,`ambiguous event description (i.e. matches ${n.map((e=>JSON.stringify(e.format()))).join(", ")})`,"key",e),n[0])}return this.#m.get(Gt.from(e).format())||null}getEventName(e){const t=this.#w(e,null,!1);return D(t,"no matching event","key",e),t.name}hasEvent(e){return!!this.#w(e,null,!1)}getEvent(e,t){return this.#w(e,t||null,!0)}forEachEvent(e){const t=Array.from(this.#m.keys());t.sort(((e,t)=>e.localeCompare(t)));for(let a=0;a1&&D(!1,`ambiguous error description (i.e. ${t.map((e=>JSON.stringify(e.format()))).join(", ")})`,"name",e),t[0])}if("Error(string)"===(e=Ft.from(e).format()))return Ft.from("error Error(string)");if("Panic(uint256)"===e)return Ft.from("error Panic(uint256)");return this.#l.get(e)||null}forEachError(e){const t=Array.from(this.#l.keys());t.sort(((e,t)=>e.localeCompare(t)));for(let a=0;a"string"===e.type?te(t):"bytes"===e.type?K(H(t)):("bool"===e.type&&"boolean"==typeof t?t=t?"0x01":"0x00":e.type.match(/^u?int/)?t=pe(t):e.type.match(/^bytes/)?t=X(t,32,!1):"address"===e.type&&this.#h.encode(["address"],[t]),X(H(t),32,!0));for(t.forEach(((t,b)=>{const f=e.inputs[b];f.indexed?null==t?a.push(null):"array"===f.baseType||"tuple"===f.baseType?D(!1,"filtering with tuples or arrays not supported","contract."+f.name,t):Array.isArray(t)?a.push(t.map((e=>n(f,e)))):a.push(n(f,t)):D(null==t,"cannot filter non-indexed parameters; must be null","contract."+f.name,t)}));a.length&&null===a[a.length-1];)a.pop();return a}encodeEventLog(e,t){if("string"==typeof e){const t=this.getEvent(e);D(t,"unknown event","eventFragment",e),e=t}const a=[],n=[],b=[];return e.anonymous||a.push(e.topicHash),D(t.length===e.inputs.length,"event arguments/values mismatch","values",t),e.inputs.forEach(((e,f)=>{const d=t[f];if(e.indexed)if("string"===e.type)a.push(te(d));else if("bytes"===e.type)a.push(K(d));else{if("tuple"===e.baseType||"array"===e.baseType)throw new Error("not implemented");a.push(this.#h.encode([e.type],[d]))}else n.push(e),b.push(d)})),{data:this.#h.encode(n,b),topics:a}}decodeEventLog(e,t,a){if("string"==typeof e){const t=this.getEvent(e);D(t,"unknown event","eventFragment",e),e=t}if(null!=a&&!e.anonymous){const t=e.topicHash;D(j(a[0],32)&&a[0].toLowerCase()===t,"fragment/topic mismatch","topics[0]",a[0]),a=a.slice(1)}const n=[],b=[],f=[];e.inputs.forEach(((e,t)=>{e.indexed?"string"===e.type||"bytes"===e.type||"tuple"===e.baseType||"array"===e.baseType?(n.push(St.from({type:"bytes32",name:e.name})),f.push(!0)):(n.push(e),f.push(!1)):(b.push(e),f.push(!1))}));const d=null!=a?this.#h.decode(n,z(a)):null,i=this.#h.decode(b,t,!0),s=[],c=[];let r=0,p=0;return e.inputs.forEach(((e,t)=>{let a=null;if(e.indexed)if(null==d)a=new ea(null);else if(f[t])a=new ea(d[p++]);else try{a=d[p++]}catch(e){a=e}else try{a=i[r++]}catch(e){a=e}s.push(a),c.push(e.name||null)})),ve.fromItems(s,c)}parseTransaction(e){const t=F(e.data,"tx.data"),a=de(null!=e.value?e.value:0,"tx.value"),n=this.getFunction(H(t.slice(0,4)));if(!n)return null;const b=this.#h.decode(n.inputs,t.slice(4));return new Zt(n,n.selector,b,a)}parseCallResult(e){throw new Error("@TODO")}parseLog(e){const t=this.getEvent(e.topics[0]);return!t||t.anonymous?null:new Yt(t,t.topicHash,this.decodeEventLog(t,e.data,e.topics))}parseError(e){const t=H(e),a=this.getError($(t,0,4));if(!a)return null;const n=this.#h.decode(a.inputs,$(t,4));return new Qt(a,a.selector,n)}static from(e){return e instanceof na?e:"string"==typeof e?new na(JSON.parse(e)):"function"==typeof e.formatJson?new na(e.formatJson()):"function"==typeof e.format?new na(e.format("json")):new na(e)}}function ba(e){return e&&"function"==typeof e.getAddress}async function fa(e,t){const a=await t;return null!=a&&"0x0000000000000000000000000000000000000000"!==a||(C("string"!=typeof e,"unconfigured name","UNCONFIGURED_NAME",{value:e}),D(!1,"invalid AddressLike value; did not resolve to a value address","target",e)),Ae(a)}function da(e,t){return"string"==typeof e?e.match(/^0x[0-9a-f]{40}$/i)?Ae(e):(C(null!=t,"ENS resolution requires a provider","UNSUPPORTED_OPERATION",{operation:"resolveName"}),fa(e,t.resolveName(e))):ba(e)?fa(e,e.getAddress()):e&&"function"==typeof e.then?fa(e,e):void D(!1,"unsupported addressable value","target",e)}function ia(e,t){return{address:Ae(e),storageKeys:t.map(((e,t)=>(D(j(e,32),"invalid slot",`storageKeys[${t}]`,e),e.toLowerCase())))}}const sa=BigInt(0);function ca(e){return null==e?null:e.toString()}Symbol.iterator;class ra{provider;transactionHash;blockHash;blockNumber;removed;address;data;topics;index;transactionIndex;constructor(e,t){this.provider=t;const a=Object.freeze(e.topics.slice());O(this,{transactionHash:e.transactionHash,blockHash:e.blockHash,blockNumber:e.blockNumber,removed:e.removed,address:e.address,data:e.data,topics:a,index:e.index,transactionIndex:e.transactionIndex})}toJSON(){const{address:e,blockHash:t,blockNumber:a,data:n,index:b,removed:f,topics:d,transactionHash:i,transactionIndex:s}=this;return{_type:"log",address:e,blockHash:t,blockNumber:a,data:n,index:b,removed:f,topics:d,transactionHash:i,transactionIndex:s}}async getBlock(){const e=await this.provider.getBlock(this.blockHash);return C(!!e,"failed to find transaction","UNKNOWN_ERROR",{}),e}async getTransaction(){const e=await this.provider.getTransaction(this.transactionHash);return C(!!e,"failed to find transaction","UNKNOWN_ERROR",{}),e}async getTransactionReceipt(){const e=await this.provider.getTransactionReceipt(this.transactionHash);return C(!!e,"failed to find transaction receipt","UNKNOWN_ERROR",{}),e}removedEvent(){return{orphan:"drop-log",log:{transactionHash:(e=this).transactionHash,blockHash:e.blockHash,blockNumber:e.blockNumber,address:e.address,data:e.data,topics:Object.freeze(e.topics.slice()),index:e.index}};var e}}class pa{provider;to;from;contractAddress;hash;index;blockHash;blockNumber;logsBloom;gasUsed;blobGasUsed;cumulativeGasUsed;gasPrice;blobGasPrice;type;status;root;#v;constructor(e,t){this.#v=Object.freeze(e.logs.map((e=>new ra(e,t))));let a=sa;null!=e.effectiveGasPrice?a=e.effectiveGasPrice:null!=e.gasPrice&&(a=e.gasPrice),O(this,{provider:t,to:e.to,from:e.from,contractAddress:e.contractAddress,hash:e.hash,index:e.index,blockHash:e.blockHash,blockNumber:e.blockNumber,logsBloom:e.logsBloom,gasUsed:e.gasUsed,cumulativeGasUsed:e.cumulativeGasUsed,blobGasUsed:e.blobGasUsed,gasPrice:a,blobGasPrice:e.blobGasPrice,type:e.type,status:e.status,root:e.root})}get logs(){return this.#v}toJSON(){const{to:e,from:t,contractAddress:a,hash:n,index:b,blockHash:f,blockNumber:d,logsBloom:i,logs:s,status:c,root:r}=this;return{_type:"TransactionReceipt",blockHash:f,blockNumber:d,contractAddress:a,cumulativeGasUsed:ca(this.cumulativeGasUsed),from:t,gasPrice:ca(this.gasPrice),blobGasUsed:ca(this.blobGasUsed),blobGasPrice:ca(this.blobGasPrice),gasUsed:ca(this.gasUsed),hash:n,index:b,logs:s,logsBloom:i,root:r,status:c,to:e}}get length(){return this.logs.length}[Symbol.iterator](){let e=0;return{next:()=>e{if(d)return null;const{blockNumber:e,nonce:t}=await R({blockNumber:this.provider.getBlockNumber(),nonce:this.provider.getTransactionCount(this.from)});if(t{if(null==e||0!==e.status)return e;C(!1,"transaction execution reverted","CALL_EXCEPTION",{action:"sendTransaction",data:null,reason:null,invocation:null,revert:null,transaction:{to:e.to,from:e.from,data:""},receipt:e})},c=await this.provider.getTransactionReceipt(this.hash);if(0===a)return s(c);if(c){if(await c.confirmations()>=a)return s(c)}else if(await i(),0===a)return null;const r=new Promise(((e,t)=>{const f=[],c=()=>{f.forEach((e=>e()))};if(f.push((()=>{d=!0})),n>0){const e=setTimeout((()=>{c(),t(N("wait for transaction timeout","TIMEOUT"))}),n);f.push((()=>{clearTimeout(e)}))}const r=async n=>{if(await n.confirmations()>=a){c();try{e(s(n))}catch(e){t(e)}}};if(f.push((()=>{this.provider.off(this.hash,r)})),this.provider.on(this.hash,r),b>=0){const e=async()=>{try{await i()}catch(e){if(P(e,"TRANSACTION_REPLACED"))return c(),void t(e)}d||this.provider.once("block",e)};f.push((()=>{this.provider.off("block",e)})),this.provider.once("block",e)}}));return await r}isMined(){return null!=this.blockHash}isLegacy(){return 0===this.type}isBerlin(){return 1===this.type}isLondon(){return 2===this.type}isCancun(){return 3===this.type}removedEvent(){return C(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),ya(this)}reorderedEvent(e){return C(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),C(!e||e.isMined(),"unmined 'other' transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),oa(this,e)}replaceableTransaction(e){D(Number.isInteger(e)&&e>=0,"invalid startBlock","startBlock",e);const t=new ua(this,this.provider);return t.#M=e,t}}function oa(e,t){return{orphan:"reorder-transaction",tx:e,other:t}}function ya(e){return{orphan:"drop-transaction",tx:e}}class la{filter;emitter;#_;constructor(e,t,a){this.#_=t,O(this,{emitter:e,filter:a})}async removeListener(){null!=this.#_&&await this.emitter.off(this.filter,this.#_)}}class ma extends ra{interface;fragment;args;constructor(e,t,a){super(e,e.provider),O(this,{args:t.decodeEventLog(a,e.data,e.topics),fragment:a,interface:t})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class Ta extends ra{error;constructor(e,t){super(e,e.provider),O(this,{error:t})}}class ha extends pa{#x;constructor(e,t,a){super(a,t),this.#x=e}get logs(){return super.logs.map((e=>{const t=e.topics.length?this.#x.getEvent(e.topics[0]):null;if(t)try{return new ma(e,this.#x,t)}catch(t){return new Ta(e,t)}return e}))}}class ga extends ua{#x;constructor(e,t,a){super(a,t),this.#x=e}async wait(e,t){const a=await super.wait(e,t);return null==a?null:new ha(this.#x,this.provider,a)}}class wa extends la{log;constructor(e,t,a,n){super(e,t,a),O(this,{log:n})}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}class va extends wa{constructor(e,t,a,n,b){super(e,t,a,new ma(b,e.interface,n)),O(this,{args:e.interface.decodeEventLog(n,this.log.data,this.log.topics),fragment:n})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}const Ma=BigInt(0);function _a(e){return e&&"function"==typeof e.call}function xa(e){return e&&"function"==typeof e.estimateGas}function Ia(e){return e&&"function"==typeof e.resolveName}function Ea(e){return e&&"function"==typeof e.sendTransaction}function Ra(e){if(null!=e){if(Ia(e))return e;if(e.provider)return e.provider}}class Oa{#I;fragment;constructor(e,t,a){if(O(this,{fragment:t}),t.inputs.lengthnull==a[t]?null:e.walkAsync(a[t],((e,t)=>"address"===e?Array.isArray(t)?Promise.all(t.map((e=>da(e,b)))):da(t,b):t)))));return e.interface.encodeFilterTopics(t,n)}()}getTopicFilter(){return this.#I}}function ka(e,t){return null==e?null:"function"==typeof e[t]?e:e.provider&&"function"==typeof e.provider[t]?e.provider:null}function Pa(e){return null==e?null:e.provider||null}async function Aa(e,t){const a=Ue.dereference(e,"overrides");D("object"==typeof a,"invalid overrides parameter","overrides",e);const n=function(e){const t={};e.to&&(t.to=e.to),e.from&&(t.from=e.from),e.data&&(t.data=H(e.data));const a="chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value".split(/,/);for(const n of a)n in e&&null!=e[n]&&(t[n]=de(e[n],`request.${n}`));const n="type,nonce".split(/,/);for(const a of n)a in e&&null!=e[a]&&(t[a]=re(e[a],`request.${a}`));return e.accessList&&(t.accessList=function(e){if(Array.isArray(e))return e.map(((t,a)=>Array.isArray(t)?(D(2===t.length,"invalid slot set",`value[${a}]`,t),ia(t[0],t[1])):(D(null!=t&&"object"==typeof t,"invalid address-slot set","value",e),ia(t.address,t.storageKeys))));D(null!=e&&"object"==typeof e,"invalid access list","value",e);const t=Object.keys(e).map((t=>{const a=e[t].reduce(((e,t)=>(e[t]=!0,e)),{});return ia(t,Object.keys(a).sort())}));return t.sort(((e,t)=>e.address.localeCompare(t.address))),t}(e.accessList)),"blockTag"in e&&(t.blockTag=e.blockTag),"enableCcipRead"in e&&(t.enableCcipRead=!!e.enableCcipRead),"customData"in e&&(t.customData=e.customData),"blobVersionedHashes"in e&&e.blobVersionedHashes&&(t.blobVersionedHashes=e.blobVersionedHashes.slice()),"kzg"in e&&(t.kzg=e.kzg),"blobs"in e&&e.blobs&&(t.blobs=e.blobs.map((e=>{return j(t=e,!0)||t instanceof Uint8Array?H(e):Object.assign({},e);var t}))),t}(a);return D(null==n.to||(t||[]).indexOf("to")>=0,"cannot override to","overrides.to",n.to),D(null==n.data||(t||[]).indexOf("data")>=0,"cannot override data","overrides.data",n.data),n.from&&(n.from=n.from),n}async function Na(e,t,a){const n=ka(e,"resolveName"),b=Ia(n)?n:null;return await Promise.all(t.map(((e,t)=>e.walkAsync(a[t],((e,t)=>(t=Ue.dereference(t,e),"address"===e?da(t,b):t))))))}function Ca(e){const t=async function(t){const a=await Aa(t,["data"]);a.to=await e.getAddress(),a.from&&(a.from=await da(a.from,Ra(e.runner)));const n=e.interface,b=de(a.value||Ma,"overrides.value")===Ma,f="0x"===(a.data||"0x");return!n.fallback||n.fallback.payable||!n.receive||f||b||D(!1,"cannot send data to receive or send value to non-payable fallback","overrides",t),D(n.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data),D(n.receive||n.fallback&&n.fallback.payable||b,"cannot send value to non-payable fallback","overrides.value",a.value),D(n.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data),a},a=async function(a){const n=e.runner;C(Ea(n),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const b=await n.sendTransaction(await t(a)),f=Pa(e.runner);return new ga(e.interface,f,b)},n=async e=>await a(e);return O(n,{_contract:e,estimateGas:async function(a){const n=ka(e.runner,"estimateGas");return C(xa(n),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await n.estimateGas(await t(a))},populateTransaction:t,send:a,staticCall:async function(a){const n=ka(e.runner,"call");C(_a(n),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const b=await t(a);try{return await n.call(b)}catch(t){if(A(t)&&t.data)throw e.interface.makeError(t.data,b);throw t}}}),n}const Da=Symbol.for("_ethersInternal_contract"),Sa=new WeakMap;function Ua(e){return Sa.get(e[Da])}async function Va(e,t){let a,n=null;if(Array.isArray(t)){const n=function(t){if(j(t,32))return t;const a=e.interface.getEvent(t);return D(a,"unknown fragment","name",t),a.topicHash};a=t.map((e=>null==e?null:Array.isArray(e)?e.map(n):n(e)))}else"*"===t?a=[null]:"string"==typeof t?j(t,32)?a=[t]:(n=e.interface.getEvent(t),D(n,"unknown fragment","event",t),a=[n.topicHash]):(b=t)&&"object"==typeof b&&"getTopicFilter"in b&&"function"==typeof b.getTopicFilter&&b.fragment?a=await t.getTopicFilter():"fragment"in t?(n=t.fragment,a=[n.topicHash]):D(!1,"unknown event name","event",t);var b;return a=a.map((e=>{if(null==e)return null;if(Array.isArray(e)){const t=Array.from(new Set(e.map((e=>e.toLowerCase()))).values());return 1===t.length?t[0]:(t.sort(),t)}return e.toLowerCase()})),{fragment:n,tag:a.map((e=>null==e?"null":Array.isArray(e)?e.join("|"):e)).join("&"),topics:a}}async function La(e,t){const{subs:a}=Ua(e);return a.get((await Va(e,t)).tag)||null}async function Fa(e,t,a){const n=Pa(e.runner);C(n,"contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:t});const{fragment:b,tag:f,topics:d}=await Va(e,a),{addr:i,subs:s}=Ua(e);let c=s.get(f);if(!c){const t={address:i||e,topics:d},r=t=>{let n=b;if(null==n)try{n=e.interface.getEvent(t.topics[0])}catch(e){}if(n){const f=n,d=b?e.interface.decodeEventLog(b,t.data,t.topics):[];ja(e,a,d,(n=>new va(e,n,a,f,t)))}else ja(e,a,[],(n=>new wa(e,n,a,t)))};let p=[];c={tag:f,listeners:[],start:()=>{p.length||p.push(n.on(t,r))},stop:async()=>{if(0==p.length)return;let e=p;p=[],await Promise.all(e),n.off(t,r)}},s.set(f,c)}return c}let Ga=Promise.resolve();async function ja(e,t,a,n){try{await Ga}catch(e){}const b=async function(e,t,a,n){await Ga;const b=await La(e,t);if(!b)return!1;const f=b.listeners.length;return b.listeners=b.listeners.filter((({listener:t,once:b})=>{const f=Array.from(a);n&&f.push(n(b?null:t));try{t.call(e,...f)}catch(e){}return!b})),0===b.listeners.length&&(b.stop(),Ua(e).subs.delete(b.tag)),f>0}(e,t,a,n);return Ga=b,await b}const Ba=["then"];class Ha{target;interface;runner;filters;[Da];fallback;constructor(e,t,a,n){D("string"==typeof e||ba(e),"invalid value for Contract target","target",e),null==a&&(a=null);const b=na.from(t);let f;O(this,{target:e,runner:a,interface:b}),Object.defineProperty(this,Da,{value:{}});let d=null,i=null;if(n){const e=Pa(a);i=new ga(this.interface,e,n)}let s=new Map;if("string"==typeof e)if(j(e))d=e,f=Promise.resolve(e);else{const t=ka(a,"resolveName");if(!Ia(t))throw N("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});f=t.resolveName(e).then((t=>{if(null==t)throw N("an ENS name used for a contract target must be correctly configured","UNCONFIGURED_NAME",{value:e});return Ua(this).addr=t,t}))}else f=e.getAddress().then((e=>{if(null==e)throw new Error("TODO");return Ua(this).addr=e,e}));var c;c={addrPromise:f,addr:d,deployTx:i,subs:s},Sa.set(this[Da],c);const r=new Proxy({},{get:(e,t,a)=>{if("symbol"==typeof t||Ba.indexOf(t)>=0)return Reflect.get(e,t,a);try{return this.getEvent(t)}catch(e){if(!P(e,"INVALID_ARGUMENT")||"key"!==e.argument)throw e}},has:(e,t)=>Ba.indexOf(t)>=0?Reflect.has(e,t):Reflect.has(e,t)||this.interface.hasEvent(String(t))});return O(this,{filters:r}),O(this,{fallback:b.receive||b.fallback?Ca(this):null}),new Proxy(this,{get:(e,t,a)=>{if("symbol"==typeof t||t in e||Ba.indexOf(t)>=0)return Reflect.get(e,t,a);try{return e.getFunction(t)}catch(e){if(!P(e,"INVALID_ARGUMENT")||"key"!==e.argument)throw e}},has:(e,t)=>"symbol"==typeof t||t in e||Ba.indexOf(t)>=0?Reflect.has(e,t):e.interface.hasFunction(t)})}connect(e){return new Ha(this.target,this.interface,e)}attach(e){return new Ha(e,this.interface,this.runner)}async getAddress(){return await Ua(this).addrPromise}async getDeployedCode(){const e=Pa(this.runner);C(e,"runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"getDeployedCode"});const t=await e.getCode(await this.getAddress());return"0x"===t?null:t}async waitForDeployment(){const e=this.deploymentTransaction();if(e)return await e.wait(),this;if(null!=await this.getDeployedCode())return this;const t=Pa(this.runner);return C(null!=t,"contract runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"waitForDeployment"}),new Promise(((e,a)=>{const n=async()=>{try{if(null!=await this.getDeployedCode())return e(this);t.once("block",n)}catch(e){a(e)}};n()}))}deploymentTransaction(){return Ua(this).deployTx}getFunction(e){"string"!=typeof e&&(e=e.format());const t=function(e,t){const a=function(...a){const n=e.interface.getFunction(t,a);return C(n,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t,args:a}}),n},n=async function(...t){const n=a(...t);let b={};if(n.inputs.length+1===t.length&&(b=await Aa(t.pop()),b.from&&(b.from=await da(b.from,Ra(e.runner)))),n.inputs.length!==t.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const f=await Na(e.runner,n.inputs,t);return Object.assign({},b,await R({to:e.getAddress(),data:e.interface.encodeFunctionData(n,f)}))},b=async function(...e){const t=await d(...e);return 1===t.length?t[0]:t},f=async function(...t){const a=e.runner;C(Ea(a),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const b=await a.sendTransaction(await n(...t)),f=Pa(e.runner);return new ga(e.interface,f,b)},d=async function(...t){const b=ka(e.runner,"call");C(_a(b),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const f=await n(...t);let d="0x";try{d=await b.call(f)}catch(t){if(A(t)&&t.data)throw e.interface.makeError(t.data,f);throw t}const i=a(...t);return e.interface.decodeFunctionResult(i,d)},i=async(...e)=>a(...e).constant?await b(...e):await f(...e);return O(i,{name:e.interface.getFunctionName(t),_contract:e,_key:t,getFragment:a,estimateGas:async function(...t){const a=ka(e.runner,"estimateGas");return C(xa(a),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await a.estimateGas(await n(...t))},populateTransaction:n,send:f,staticCall:b,staticCallResult:d}),Object.defineProperty(i,"fragment",{configurable:!1,enumerable:!0,get:()=>{const a=e.interface.getFunction(t);return C(a,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t}}),a}}),i}(this,e);return t}getEvent(e){return"string"!=typeof e&&(e=e.format()),function(e,t){const a=function(...a){const n=e.interface.getEvent(t,a);return C(n,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t,args:a}}),n},n=function(...t){return new Oa(e,a(...t),t)};return O(n,{name:e.interface.getEventName(t),_contract:e,_key:t,getFragment:a}),Object.defineProperty(n,"fragment",{configurable:!1,enumerable:!0,get:()=>{const a=e.interface.getEvent(t);return C(a,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t}}),a}}),n}(this,e)}async queryTransaction(e){throw new Error("@TODO")}async queryFilter(e,t,a){null==t&&(t=0),null==a&&(a="latest");const{addr:n,addrPromise:b}=Ua(this),f=n||await b,{fragment:d,topics:i}=await Va(this,e),s={address:f,topics:i,fromBlock:t,toBlock:a},c=Pa(this.runner);return C(c,"contract runner does not have a provider","UNSUPPORTED_OPERATION",{operation:"queryFilter"}),(await c.getLogs(s)).map((e=>{let t=d;if(null==t)try{t=this.interface.getEvent(e.topics[0])}catch(e){}if(t)try{return new ma(e,this.interface,t)}catch(t){return new Ta(e,t)}return new ra(e,c)}))}async on(e,t){const a=await Fa(this,"on",e);return a.listeners.push({listener:t,once:!1}),a.start(),this}async once(e,t){const a=await Fa(this,"once",e);return a.listeners.push({listener:t,once:!0}),a.start(),this}async emit(e,...t){return await ja(this,e,t,null)}async listenerCount(e){if(e){const t=await La(this,e);return t?t.listeners.length:0}const{subs:t}=Ua(this);let a=0;for(const{listeners:e}of t.values())a+=e.length;return a}async listeners(e){if(e){const t=await La(this,e);return t?t.listeners.map((({listener:e})=>e)):[]}const{subs:t}=Ua(this);let a=[];for(const{listeners:e}of t.values())a=a.concat(e.map((({listener:e})=>e)));return a}async off(e,t){const a=await La(this,e);if(!a)return this;if(t){const e=a.listeners.map((({listener:e})=>e)).indexOf(t);e>=0&&a.listeners.splice(e,1)}return null!=t&&0!==a.listeners.length||(a.stop(),Ua(this).subs.delete(a.tag)),this}async removeAllListeners(e){if(e){const t=await La(this,e);if(!t)return this;t.stop(),Ua(this).subs.delete(t.tag)}else{const{subs:e}=Ua(this);for(const{tag:t,stop:a}of e.values())a(),e.delete(t)}return this}async addListener(e,t){return await this.on(e,t)}async removeListener(e,t){return await this.off(e,t)}static buildClass(e){return class extends Ha{constructor(t,a=null){super(t,e,a)}}}static from(e,t,a){return null==a&&(a=null),new this(e,t,a)}}class za extends(function(){return Ha}()){}function $a(e){const t=[];for(;e;)t.unshift(255&e),e>>=8;return t}function Xa(e){if(Array.isArray(e)){let t=[];if(e.forEach((function(e){t=t.concat(Xa(e))})),t.length<=55)return t.unshift(192+t.length),t;const a=$a(t.length);return a.unshift(247+a.length),a.concat(t)}const t=Array.prototype.slice.call(F(e,"object"));if(1===t.length&&t[0]<=127)return t;if(t.length<=55)return t.unshift(128+t.length),t;const a=$a(t.length);return a.unshift(183+a.length),a.concat(t)}const Wa="0123456789abcdef";function qa(e){let t="0x";for(const a of Xa(e))t+=Wa[a>>4],t+=Wa[15&a];return t}class Ja{interface;bytecode;runner;constructor(e,t,a){const n=na.from(e);t instanceof Uint8Array||("object"==typeof t&&(t=t.object),t.startsWith("0x")||(t="0x"+t)),O(this,{bytecode:t=H(F(t)),interface:n,runner:a||null})}attach(e){return new Ha(e,this.interface,this.runner)}async getDeployTransaction(...e){let t={};const a=this.interface.deploy;if(a.inputs.length+1===e.length&&(t=await Aa(e.pop())),a.inputs.length!==e.length)throw new Error("incorrect number of arguments to constructor");const n=await Na(this.runner,a.inputs,e),b=z([this.bytecode,this.interface.encodeDeploy(n)]);return Object.assign({},t,{data:b})}async deploy(...e){const t=await this.getDeployTransaction(...e);C(this.runner&&"function"==typeof this.runner.sendTransaction,"factory runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const a=await this.runner.sendTransaction(t),n=function(e){const t=Ae(e.from);let a=de(e.nonce,"tx.nonce").toString(16);return a="0"===a?"0x":a.length%2?"0x0"+a:"0x"+a,Ae($(K(qa([t,a])),12))}(a);return new Ha(n,this.interface,this.runner,a)}connect(e){return new Ja(this.interface,this.bytecode,e)}static fromSolidity(e,t){D(null!=e,"bad compiler output","output",e),"string"==typeof e&&(e=JSON.parse(e));const a=e.abi;let n="";return e.bytecode?n=e.bytecode:e.evm&&e.evm.bytecode&&(n=e.evm.bytecode),new this(a,n,t)}}const Ka=[{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"},{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"ERC1155InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC1155InvalidApprover",type:"error"},{inputs:[{internalType:"uint256",name:"idsLength",type:"uint256"},{internalType:"uint256",name:"valuesLength",type:"uint256"}],name:"ERC1155InvalidArrayLength",type:"error"},{inputs:[{internalType:"address",name:"operator",type:"address"}],name:"ERC1155InvalidOperator",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC1155InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC1155InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"address",name:"owner",type:"address"}],name:"ERC1155MissingApprovalForAll",type:"error"}];class Ya{static createInterface(){return new na(Ka)}static connect(e,t){return new za(e,Ka,t)}}Ya.abi=Ka;const Za=[{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"}];class Qa{static createInterface(){return new na(Za)}static connect(e,t){return new za(e,Za,t)}}Qa.abi=Za;const en=[{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],name:"ERC721IncorrectOwner",type:"error"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"ERC721InsufficientApproval",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC721InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"operator",type:"address"}],name:"ERC721InvalidOperator",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"ERC721InvalidOwner",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC721InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC721InvalidSender",type:"error"},{inputs:[{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"ERC721NonexistentToken",type:"error"}];class tn{static createInterface(){return new na(en)}static connect(e,t){return new za(e,en,t)}}tn.abi=en;var an=Object.freeze({__proto__:null,IERC1155Errors__factory:Ya,IERC20Errors__factory:Qa,IERC721Errors__factory:tn}),nn=Object.freeze({__proto__:null,draftIerc6093Sol:an});const bn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class fn{static createInterface(){return new na(bn)}static connect(e,t){return new za(e,bn,t)}}fn.abi=bn;var dn=Object.freeze({__proto__:null,IERC20Metadata__factory:fn});const sn=[{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];let cn=class{static createInterface(){return new na(sn)}static connect(e,t){return new za(e,sn,t)}};cn.abi=sn;const rn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];let pn=class{static createInterface(){return new na(rn)}static connect(e,t){return new za(e,rn,t)}};pn.abi=rn;var un=Object.freeze({__proto__:null,ERC20__factory:cn,IERC20__factory:pn,extensions:dn}),on=Object.freeze({__proto__:null,erc20:un}),yn=Object.freeze({__proto__:null,interfaces:nn,token:on});const ln=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"}];class mn{static createInterface(){return new na(ln)}static connect(e,t){return new za(e,ln,t)}}mn.abi=ln;var Tn=Object.freeze({__proto__:null,Ownable__factory:mn});const hn=[{stateMutability:"payable",type:"fallback"},{stateMutability:"payable",type:"receive"}];class gn{static createInterface(){return new na(hn)}static connect(e,t){return new za(e,hn,t)}}gn.abi=hn;const wn=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"address",name:"_admin",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],vn="0x60806040526040516108dc3803806108dc8339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508290506100ee826101bf565b8051156101a6576000826001600160a01b0316826040518082805190602001908083835b602083106101315780518252601f199092019160209182019101610112565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610191576040519150601f19603f3d011682016040523d82523d6000602084013e610196565b606091505b50509050806101a457600080fd5b505b506101ae9050565b6101b782610231565b50505061025b565b6101d28161025560201b6103b41760201c565b61020d5760405162461bcd60e51b81526004018080602001828103825260368152602001806108a66036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61063c8061026a6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a815260200180610555603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260428152602001806105c56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603681526020018061058f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212200bf5c74f32000c92994fb0de053047d19f9c526eb1b1953df8bcb7d7e0df8d2864736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class Mn extends Ja{constructor(...e){e.length>1?super(...e):super(wn,vn,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(wn)}static connect(e,t){return new za(e,wn,t)}}Mn.bytecode=vn,Mn.abi=wn;const _n=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{stateMutability:"payable",type:"receive"}],xn="0x60806040526040516103123803806103128339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ec826101ab565b8051156101a4576000826001600160a01b0316826040518082805190602001908083835b6020831061012f5780518252601f199092019160209182019101610110565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461018f576040519150601f19603f3d011682016040523d82523d6000602084013e610194565b606091505b50509050806101a257600080fd5b505b5050610223565b6101be8161021d60201b6100271760201c565b6101f95760405162461bcd60e51b81526004018080602001828103825260368152602001806102dc6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b151590565b60ab806102316000396000f3fe608060405236601057600e6013565b005b600e5b60196025565b60256021602d565b6052565b565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156070573d6000f35b3d6000fdfea2646970667358221220621b7042bfb847b4073a3c58bdbea5295ce2e761b4e2307ca010caaac996d80c64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class In extends Ja{constructor(...e){e.length>1?super(...e):super(_n,xn,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(_n)}static connect(e,t){return new za(e,_n,t)}}In.bytecode=xn,In.abi=_n;var En=Object.freeze({__proto__:null,Proxy__factory:gn,TransparentUpgradeableProxy__factory:Mn,UpgradeableProxy__factory:In});const Rn=[{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],On="0x608060405234801561001057600080fd5b5060405162000c6238038062000c628339818101604052604081101561003557600080fd5b810190808051604051939291908464010000000082111561005557600080fd5b90830190602082018581111561006a57600080fd5b825164010000000081118282018810171561008457600080fd5b82525081516020918201929091019080838360005b838110156100b1578181015183820152602001610099565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b506040526020018051604051939291908464010000000082111561010157600080fd5b90830190602082018581111561011657600080fd5b825164010000000081118282018810171561013057600080fd5b82525081516020918201929091019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b50604052505082516101a4915060039060208501906101cd565b5080516101b89060049060208401906101cd565b50506005805460ff1916601217905550610260565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061020e57805160ff191683800117855561023b565b8280016001018555821561023b579182015b8281111561023b578251825591602001919060010190610220565b5061024792915061024b565b5090565b5b80821115610247576000815560010161024c565b6109f280620002706000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103f9565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610402565b6101736004803603602081101561021b57600080fd5b50356001600160a01b0316610450565b6100b661046b565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104cc565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610534565b610173600480360360408110156102a157600080fd5b506001600160a01b0381358116916020013516610548565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610573565b8484610577565b50600192915050565b60025490565b600061037f848484610663565b6103ef8461038b610573565b6103ea85604051806060016040528060288152602001610927602891396001600160a01b038a166000908152600160205260408120906103c9610573565b6001600160a01b0316815260208101919091526040016000205491906107be565b610577565b5060019392505050565b60055460ff1690565b600061036361040f610573565b846103ea8560016000610420610573565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610855565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104d9610573565b846103ea856040518060600160405280602581526020016109986025913960016000610503610573565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906107be565b6000610363610541610573565b8484610663565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105bc5760405162461bcd60e51b81526004018080602001828103825260248152602001806109746024913960400191505060405180910390fd5b6001600160a01b0382166106015760405162461bcd60e51b81526004018080602001828103825260228152602001806108df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106a85760405162461bcd60e51b815260040180806020018281038252602581526020018061094f6025913960400191505060405180910390fd5b6001600160a01b0382166106ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806108bc6023913960400191505060405180910390fd5b6106f88383836108b6565b61073581604051806060016040528060268152602001610901602691396001600160a01b03861660009081526020819052604090205491906107be565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107649082610855565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561084d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108125781810151838201526020016107fa565b50505050905090810190601f16801561083f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220347718b9db0288208ab5957df73278c6f781963df0e13918151971217fc2827964736f6c634300060c0033";class kn extends Ja{constructor(...e){e.length>1?super(...e):super(Rn,On,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Rn)}static connect(e,t){return new za(e,Rn,t)}}kn.bytecode=On,kn.abi=Rn;const Pn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burnFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class An{static createInterface(){return new na(Pn)}static connect(e,t){return new za(e,Pn,t)}}An.abi=Pn;const Nn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];let Cn=class{static createInterface(){return new na(Nn)}static connect(e,t){return new za(e,Nn,t)}};Cn.abi=Nn;var Dn=Object.freeze({__proto__:null,ERC20Burnable__factory:An,ERC20__factory:kn,IERC20__factory:Cn}),Sn=Object.freeze({__proto__:null,erc20:Dn});const Un=[{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}];class Vn{static createInterface(){return new na(Un)}static connect(e,t){return new za(e,Un,t)}}Vn.abi=Un;var Ln=Object.freeze({__proto__:null,Pausable__factory:Vn}),Fn=Object.freeze({__proto__:null,access:Tn,proxy:En,token:Sn,utils:Ln}),Gn=Object.freeze({__proto__:null,contracts:yn,contractsV3:Fn});const jn=[{inputs:[{internalType:"uint256",name:"in_xL",type:"uint256"},{internalType:"uint256",name:"in_xR",type:"uint256"}],name:"MiMCSponge",outputs:[{internalType:"uint256",name:"xL",type:"uint256"},{internalType:"uint256",name:"xR",type:"uint256"}],stateMutability:"pure",type:"function"}];class Bn{static createInterface(){return new na(jn)}static connect(e,t){return new za(e,jn,t)}}Bn.abi=jn;const Hn=[{inputs:[{internalType:"uint32",name:"_levels",type:"uint32"},{internalType:"contract IHasher",name:"_hasher",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}],zn="0x60c0604052600380546001600160401b031916905534801561002057600080fd5b50604051610a10380380610a1083398101604081905261003f91610385565b60008263ffffffff16116100a65760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106100fc5760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015260640161009d565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101845763ffffffff8116600090815260016020908152604080832085905590829052902082905561017a8383806101b8565b9150600101610137565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55506103f89050565b60006000805160206109f083398151915283106102175760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161009d565b6000805160206109f0833981519152821061027e5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161009d565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f191906103d4565b90925090506000805160206109f083398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a91906103d4565b509695505050505050565b6000806040838503121561039857600080fd5b825163ffffffff811681146103ac57600080fd5b60208401519092506001600160a01b03811681146103c957600080fd5b809150509250929050565b600080604083850312156103e757600080fd5b505080516020909101519092909150565b60805160a0516105d361041d60003960006101010152600061020f01526105d36000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063c2b40ae41161008c578063ec73295911610066578063ec732959146101e3578063ed33639f1461020a578063f178e47c14610249578063fc7e9c6f1461026957600080fd5b8063c2b40ae41461019b578063cd87a3b4146101bb578063e8295588146101c357600080fd5b8063414a37ba146100d45780634ecf518b146100fc5780636d9833e3146101385780638ea3099e1461015b57806390eeb02b1461016e578063ba70f7571461017e575b600080fd5b6100e960008051602061057e83398151915281565b6040519081526020015b60405180910390f35b6101237f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016100f3565b61014b6101463660046104d1565b610281565b60405190151581526020016100f3565b6100e96101693660046104ea565b6102ff565b6003546101239063ffffffff1681565b60035463ffffffff166000908152600260205260409020546100e9565b6100e96101a93660046104d1565b60026020526000908152604090205481565b610123601e81565b6100e96101d13660046104d1565b60016020526000908152604090205481565b6100e97f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6102317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100f3565b6100e96102573660046104d1565b60006020819052908152604090205481565b60035461012390640100000000900463ffffffff1681565b600081810361029257506000919050565b60035463ffffffff16805b63ffffffff811660009081526002602052604090205484036102c3575060019392505050565b8063ffffffff166000036102d55750601e5b806102df8161052b565b9150508163ffffffff168163ffffffff160361029d575060009392505050565b600060008051602061057e83398151915283106103635760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064015b60405180910390fd5b60008051602061057e83398151915282106103ca5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161035a565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d9190610559565b909250905060008051602061057e83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190610559565b509695505050505050565b6000602082840312156104e357600080fd5b5035919050565b6000806000606084860312156104ff57600080fd5b83356001600160a01b038116811461051657600080fd5b95602085013595506040909401359392505050565b600063ffffffff82168061054f57634e487b7160e01b600052601160045260246000fd5b6000190192915050565b6000806040838503121561056c57600080fd5b50508051602090910151909290915056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208761f09aabb074ee2c2a755f38291cbc57ea6dac47bc37dfa948986c4481869c64736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001";class $n extends Ja{constructor(...e){e.length>1?super(...e):super(Hn,zn,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Hn)}static connect(e,t){return new za(e,Hn,t)}}$n.bytecode=zn,$n.abi=Hn;var Xn=Object.freeze({__proto__:null,IHasher__factory:Bn,MerkleTreeWithHistory__factory:$n});const Wn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"_totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"who",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"}];class qn{static createInterface(){return new na(Wn)}static connect(e,t){return new za(e,Wn,t)}}qn.abi=Wn;const Jn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"_totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"who",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[],stateMutability:"nonpayable",type:"function"}];class Kn{static createInterface(){return new na(Jn)}static connect(e,t){return new za(e,Jn,t)}}Kn.abi=Jn;var Yn=Object.freeze({__proto__:null,ERC20Basic__factory:qn,IUSDT__factory:Kn});const Zn=[{stateMutability:"nonpayable",type:"fallback"}],Qn="0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea264697066735822122034c2432feedadd0f30a6f66555381c20922b6ab7c9b3ede4c27896b23e802a8264736f6c63430008190033";class eb extends Ja{constructor(...e){e.length>1?super(...e):super(Zn,Qn,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Zn)}static connect(e,t){return new za(e,Zn,t)}}eb.bytecode=Qn,eb.abi=Zn;const tb=[{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"mint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],ab="0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610113565b50600461006a8282610113565b5050506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010e576000816000526020600020601f850160051c810160208610156100eb5750805b601f850160051c820191505b8181101561010a578281556001016100f7565b5050505b505050565b81516001600160401b0381111561012c5761012c610072565b6101408161013a8454610088565b846100c2565b602080601f831160018114610175576000841561015d5750858301515b600019600386901b1c1916600185901b17855561010a565b600085815260208120601f198616915b828110156101a457888601518255948401946001909101908401610185565b50858210156101c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610785806101e16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea264697066735822122058942fcc650d3670455590fabbf6c5726b3ae7df7b57e75bc02cb2c66259d45b64736f6c63430008190033";class nb extends Ja{constructor(...e){e.length>1?super(...e):super(tb,ab,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(tb)}static connect(e,t){return new za(e,tb,t)}}nb.bytecode=ab,nb.abi=tb;const bb=[{inputs:[{internalType:"bytes",name:"_initCode",type:"bytes"},{internalType:"bytes32",name:"_salt",type:"bytes32"}],name:"deploy",outputs:[{internalType:"address payable",name:"createdContract",type:"address"}],stateMutability:"nonpayable",type:"function"}];let fb=class{static createInterface(){return new na(bb)}static connect(e,t){return new za(e,bb,t)}};fb.abi=bb;const db=[{inputs:[{internalType:"uint32",name:"_treeLevels",type:"uint32"},{internalType:"contract IHasher",name:"_hasher",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_leaf",type:"bytes32"}],name:"insert",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}],ib="0x60c0604052600380546001600160401b031916905534801561002057600080fd5b50604051610e3c380380610e3c83398101604081905261003f91610389565b818160008263ffffffff16116100a85760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106100fe5760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015260640161009f565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101865763ffffffff8116600090815260016020908152604080832085905590829052902082905561017c8383806101bc565b9150600101610139565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55506103fc92505050565b6000600080516020610e1c833981519152831061021b5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161009f565b600080516020610e1c83398151915282106102825760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161009f565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f591906103d8565b9092509050600080516020610e1c83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa15801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e91906103d8565b509695505050505050565b6000806040838503121561039c57600080fd5b825163ffffffff811681146103b057600080fd5b60208401519092506001600160a01b03811681146103cd57600080fd5b809150509250929050565b600080604083850312156103eb57600080fd5b505080516020909101519092909150565b60805160a0516109e6610436600039600081816101310152818161052701526105c901526000818161023f015261066101526109e66000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063c2b40ae41161008c578063ec73295911610066578063ec73295914610213578063ed33639f1461023a578063f178e47c14610279578063fc7e9c6f1461029957600080fd5b8063c2b40ae4146101cb578063cd87a3b4146101eb578063e8295588146101f357600080fd5b80636d9833e3116100c85780636d9833e3146101685780638ea3099e1461018b57806390eeb02b1461019e578063ba70f757146101ae57600080fd5b80632d287e43146100ef578063414a37ba146101045780634ecf518b1461012c575b600080fd5b6101026100fd36600461072c565b6102b1565b005b61011960008051602061099183398151915281565b6040519081526020015b60405180910390f35b6101537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610123565b61017b61017636600461072c565b6102be565b6040519015158152602001610123565b610119610199366004610745565b61033c565b6003546101539063ffffffff1681565b60035463ffffffff16600090815260026020526040902054610119565b6101196101d936600461072c565b60026020526000908152604090205481565b610153601e81565b61011961020136600461072c565b60016020526000908152604090205481565b6101197f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6102617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610123565b61011961028736600461072c565b60006020819052908152604090205481565b60035461015390640100000000900463ffffffff1681565b6102ba8161050e565b5050565b60008181036102cf57506000919050565b60035463ffffffff16805b63ffffffff81166000908152600260205260409020548403610300575060019392505050565b8063ffffffff166000036103125750601e5b8061031c8161079c565b9150508163ffffffff168163ffffffff16036102da575060009392505050565b600060008051602061099183398151915283106103a05760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064015b60405180910390fd5b60008051602061099183398151915282106104075760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610397565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a91906107bc565b909250905060008051602061099183398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156104df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050391906107bc565b509695505050505050565b600354600090640100000000900463ffffffff1661054d7f00000000000000000000000000000000000000000000000000000000000000006002610909565b63ffffffff168163ffffffff16036105c05760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610397565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561069e57610606600286610926565b63ffffffff166000036106405763ffffffff811660009081526001602090815260408083205491839052909120859055849350915061065c565b63ffffffff811660009081526020819052604090205492508391505b6106877f0000000000000000000000000000000000000000000000000000000000000000848461033c565b9350610694600286610949565b94506001016105c7565b50600354600090601e906106b99063ffffffff16600161096c565b6106c39190610926565b6003805463ffffffff191663ffffffff8316908117909155600090815260026020526040902085905590506106f986600161096c565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b60006020828403121561073e57600080fd5b5035919050565b60008060006060848603121561075a57600080fd5b83356001600160a01b038116811461077157600080fd5b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806107b2576107b2610786565b6000190192915050565b600080604083850312156107cf57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b600181815b80851115610833578163ffffffff0482111561081957610819610786565b8085161561082657918102915b93841c93908002906107fb565b509250929050565b60008261084a57506001610903565b8161085757506000610903565b816001811461086d5760028114610877576108a8565b6001915050610903565b60ff84111561088857610888610786565b6001841b915063ffffffff8211156108a2576108a2610786565b50610903565b5060208310610133831016604e8410600b84101617156108df575081810a63ffffffff8111156108da576108da610786565b610903565b6108e983836107f6565b8063ffffffff048211156108ff576108ff610786565b0290505b92915050565b600063ffffffff61091e81851682851661083b565b949350505050565b600063ffffffff8084168061093d5761093d6107e0565b92169190910692915050565b600063ffffffff80841680610960576109606107e0565b92169190910492915050565b63ffffffff81811683821601908082111561098957610989610786565b509291505056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220157f8209ab2f77037d0684fb5023c7036cedb727123539b4e3a1f03c335900f264736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001";class sb extends Ja{constructor(...e){e.length>1?super(...e):super(db,ib,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(db)}static connect(e,t){return new za(e,db,t)}}sb.bytecode=ib,sb.abi=db;var cb=Object.freeze({__proto__:null,BadRecipient__factory:eb,ERC20Mock__factory:nb,IDeployer__factory:fb,MerkleTreeWithHistoryMock__factory:sb,iusdtSol:Yn});const rb=[{inputs:[{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"uint256[6]",name:"_input",type:"uint256[6]"}],name:"verifyProof",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class pb{static createInterface(){return new na(rb)}static connect(e,t){return new za(e,rb,t)}}pb.abi=rb;const ub=[{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"commitment",type:"bytes32"},{indexed:!1,internalType:"uint32",name:"leafIndex",type:"uint32"},{indexed:!1,internalType:"uint256",name:"timestamp",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"commitments",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"}],name:"isSpent",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_nullifierHashes",type:"bytes32[]"}],name:"isSpentArray",outputs:[{internalType:"bool[]",name:"spent",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"nullifierHashes",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"verifier",outputs:[{internalType:"contract IVerifier",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}];class ob{static createInterface(){return new na(ub)}static connect(e,t){return new za(e,ub,t)}}ob.abi=ub;var yb=Object.freeze({__proto__:null,IVerifier__factory:pb,Tornado__factory:ob});const lb=[{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"proof",type:"bytes"},{internalType:"bytes32",name:"root",type:"bytes32"},{internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"address payable",name:"relayer",type:"address"},{internalType:"uint256",name:"fee",type:"uint256"},{internalType:"uint256",name:"refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"}];let mb=class{static createInterface(){return new na(lb)}static connect(e,t){return new za(e,lb,t)}};mb.abi=lb;const Tb=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes",name:"encryptedNote",type:"bytes"}],name:"EncryptedNote",type:"event"},{inputs:[{internalType:"bytes[]",name:"_encryptedNotes",type:"bytes[]"}],name:"backupNotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_tornado",type:"address"},{internalType:"bytes32",name:"_commitment",type:"bytes32"},{internalType:"bytes",name:"_encryptedNote",type:"bytes"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_tornado",type:"address"},{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"}],hb="0x608060405234801561001057600080fd5b506104f6806100206000396000f3fe6080604052600436106100345760003560e01c806313d98d13146100395780636485ba2a1461004e578063b438689f1461006e575b600080fd5b61004c6100473660046102c7565b610081565b005b34801561005a57600080fd5b5061004c610069366004610258565b61012a565b61004c61007c366004610321565b610198565b60405163b214faa560e01b81526001600160a01b0385169063b214faa59034906100af9087906004016103ec565b6000604051808303818588803b1580156100c857600080fd5b505af11580156100dc573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008838360405161011c9291906103f5565b60405180910390a250505050565b60005b8181101561019357337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061016357fe5b90506020028101906101759190610463565b6040516101839291906103f5565b60405180910390a260010161012d565b505050565b6040516310d056db60e11b81526001600160a01b038a16906321a0adb69034906101d4908c908c908c908c908c908c908c908c90600401610411565b6000604051808303818588803b1580156101ed57600080fd5b505af1158015610201573d6000803e3d6000fd5b5050505050505050505050505050565b60008083601f840112610222578182fd5b50813567ffffffffffffffff811115610239578182fd5b60208301915083602082850101111561025157600080fd5b9250929050565b6000806020838503121561026a578182fd5b823567ffffffffffffffff80821115610281578384fd5b818501915085601f830112610294578384fd5b8135818111156102a2578485fd5b86602080830285010111156102b5578485fd5b60209290920196919550909350505050565b600080600080606085870312156102dc578182fd5b84356102e7816104a8565b935060208501359250604085013567ffffffffffffffff811115610309578283fd5b61031587828801610211565b95989497509550505050565b60008060008060008060008060006101008a8c03121561033f578485fd5b893561034a816104a8565b985060208a013567ffffffffffffffff811115610365578586fd5b6103718c828d01610211565b90995097505060408a0135955060608a0135945060808a0135610393816104a8565b935060a08a01356103a3816104a8565b8093505060c08a0135915060e08a013590509295985092959850929598565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b90815260200190565b6000602082526104096020830184866103c2565b949350505050565b600060e0825261042560e083018a8c6103c2565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b6000808335601e19843603018112610479578283fd5b83018035915067ffffffffffffffff821115610493578283fd5b60200191503681900382131561025157600080fd5b6001600160a01b03811681146104bd57600080fd5b5056fea2646970667358221220a833625c5e7cc02dff95b380fd1e6d47b08cffea90c70cfe6739960deee47b8364736f6c634300060c0033";class gb extends Ja{constructor(...e){e.length>1?super(...e):super(Tb,hb,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Tb)}static connect(e,t){return new za(e,Tb,t)}}gb.bytecode=hb,gb.abi=Tb;var wb=Object.freeze({__proto__:null,ITornadoInstance__factory:mb,TornadoProxyLight__factory:gb});const vb=[{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class Mb{static createInterface(){return new na(vb)}static connect(e,t){return new za(e,vb,t)}}Mb.abi=vb;var _b=Object.freeze({__proto__:null,IERC20__factory:Mb});const xb=[{inputs:[{internalType:"contract IVerifier",name:"_verifier",type:"address"},{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"uint256",name:"_denomination",type:"uint256"},{internalType:"uint32",name:"_merkleTreeHeight",type:"uint32"},{internalType:"contract IERC20",name:"_token",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"commitment",type:"bytes32"},{indexed:!1,internalType:"uint32",name:"leafIndex",type:"uint32"},{indexed:!1,internalType:"uint256",name:"timestamp",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"commitments",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"}],name:"isSpent",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_nullifierHashes",type:"bytes32[]"}],name:"isSpentArray",outputs:[{internalType:"bool[]",name:"spent",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"nullifierHashes",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"verifier",outputs:[{internalType:"contract IVerifier",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}],Ib="0x610120604052600380546001600160401b031916905534801561002157600080fd5b50604051611db8380380611db883398101604081905261004091610420565b84848484808360008263ffffffff16116100ad5760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101035760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a4565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff16101561018b5763ffffffff8116600090815260016020908152604080832085905590829052902082905561018183838061023b565b915060010161013e565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816102195760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a4565b506001600160a01b0392831660c05260e052501661010052506104b892505050565b6000600080516020611d98833981519152831061029a5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a4565b600080516020611d9883398151915282106103015760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a4565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103749190610494565b9092509050600080516020611d9883398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd9190610494565b509695505050505050565b6001600160a01b038116811461041d57600080fd5b50565b600080600080600060a0868803121561043857600080fd5b855161044381610408565b602087015190955061045481610408565b60408701516060880151919550935063ffffffff8116811461047557600080fd5b608087015190925061048681610408565b809150509295509295909350565b600080604083850312156104a757600080fd5b505080516020909101519092909150565b60805160a05160c05160e05161010051611856610542600039600081816104ca01528181610cfa01528181610d34015261108e0152600081816102bb0152818161056f01528181610ccc01526110b20152600081816101a601526106d801526000818161022201528181610e150152610eb70152600081816104690152610f4f01526118566000f3fe6080604052600436106101355760003560e01c8063b214faa5116100ab578063e82955881161006f578063e8295588146103f6578063ec73295914610423578063ed33639f14610457578063f178e47c1461048b578063fc0c546a146104b8578063fc7e9c6f146104ec57600080fd5b8063b214faa514610347578063ba70f7571461035a578063c2b40ae414610384578063cd87a3b4146103b1578063e5285dcc146103c657600080fd5b80636d9833e3116100fd5780636d9833e314610259578063839df945146102795780638bca6d16146102a95780638ea3099e146102dd57806390eeb02b146102fd5780639fa12d0b1461031a57600080fd5b806317cc915c1461013a57806321a0adb61461017f5780632b7ac3f314610194578063414a37ba146101e05780634ecf518b14610210575b600080fd5b34801561014657600080fd5b5061016a61015536600461131d565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61019261018d36600461135e565b610511565b005b3480156101a057600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610176565b3480156101ec57600080fd5b5061020260008051602061180183398151915281565b604051908152602001610176565b34801561021c57600080fd5b506102447f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610176565b34801561026557600080fd5b5061016a61027436600461131d565b61081c565b34801561028557600080fd5b5061016a61029436600461131d565b60066020526000908152604090205460ff1681565b3480156102b557600080fd5b506102027f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e957600080fd5b506102026102f8366004611414565b61089a565b34801561030957600080fd5b506003546102449063ffffffff1681565b34801561032657600080fd5b5061033a610335366004611449565b610a67565b60405161017691906114be565b61019261035536600461131d565b610b23565b34801561036657600080fd5b5060035463ffffffff16600090815260026020526040902054610202565b34801561039057600080fd5b5061020261039f36600461131d565b60026020526000908152604090205481565b3480156103bd57600080fd5b50610244601e81565b3480156103d257600080fd5b5061016a6103e136600461131d565b60009081526005602052604090205460ff1690565b34801561040257600080fd5b5061020261041136600461131d565b60016020526000908152604090205481565b34801561042f57600080fd5b506102027f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561046357600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b506102026104a636600461131d565b60006020819052908152604090205481565b3480156104c457600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b5060035461024490640100000000900463ffffffff1681565b6002600454036105685760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156105dd5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015260640161055f565b60008581526005602052604090205460ff161561063c5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015260640161055f565b6106458661081c565b6106915760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015260640161055f565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f991610711918c918c91600401611504565b6020604051808303816000875af1158015610730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107549190611562565b6107995760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015260640161055f565b6000858152600560205260409020805460ff191660011790556107be84848484610c5a565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b600081810361082d57506000919050565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054840361085e575060019392505050565b8063ffffffff166000036108705750601e5b8061087a816115a1565b9150508163ffffffff168163ffffffff1603610838575060009392505050565b600060008051602061180183398151915283106108f95760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015260640161055f565b60008051602061180183398151915282106109605760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b606482015260840161055f565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906115c1565b909250905060008051602061180183398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5c91906115c1565b509695505050505050565b60608167ffffffffffffffff811115610a8257610a826115fb565b604051908082528060200260200182016040528015610aab578160200160208202803683370190505b50905060005b82811015610b1c57610aea848483818110610ace57610ace611611565b9050602002013560009081526005602052604090205460ff1690565b15610b14576001828281518110610b0357610b03611611565b911515602092830291909101909101525b600101610ab1565b5092915050565b600260045403610b755760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055f565b600260045560008181526006602052604090205460ff1615610be35760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b606482015260840161055f565b6000610bee82610dfc565b6000838152600660205260409020805460ff191660011790559050610c1161101a565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b803414610cc25760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b606482015260840161055f565b610d2184610cf0847f0000000000000000000000000000000000000000000000000000000000000000611627565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906110d8565b8115610d5b57610d5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684846110d8565b8015610df6576000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050905080610df4576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015610df2573d6000803e3d6000fd5b505b505b50505050565b600354600090640100000000900463ffffffff16610e3b7f00000000000000000000000000000000000000000000000000000000000000006002611751565b63ffffffff168163ffffffff1603610eae5760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b606482015260840161055f565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015610f8c57610ef460028661176e565b63ffffffff16600003610f2e5763ffffffff8116600090815260016020908152604080832054918390529091208590558493509150610f4a565b63ffffffff811660009081526020819052604090205492508391505b610f757f0000000000000000000000000000000000000000000000000000000000000000848461089a565b9350610f82600286611791565b9450600101610eb5565b50600354600090601e90610fa79063ffffffff1660016117b4565b610fb1919061176e565b6003805463ffffffff191663ffffffff831690811790915560009081526002602052604090208590559050610fe78660016117b4565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b34156110815760405162461bcd60e51b815260206004820152603060248201527f4554482076616c756520697320737570706f73656420746f206265203020666f60448201526f7220455243323020696e7374616e636560801b606482015260840161055f565b6110d66001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f00000000000000000000000000000000000000000000000000000000000000006111f1565b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161113491906117d1565b6000604051808303816000865af19150503d8060008114611171576040519150601f19603f3d011682016040523d82523d6000602084013e611176565b606091505b50915091508161118857805181602001fd5b805115806111a55750808060200190518101906111a59190611562565b610df45760405162461bcd60e51b815260206004820152601e60248201527f5361666545524332303a20736166655472616e73666572206661696c65640000604482015260640161055f565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161125591906117d1565b6000604051808303816000865af19150503d8060008114611292576040519150601f19603f3d011682016040523d82523d6000602084013e611297565b606091505b5091509150816112a957805181602001fd5b805115806112c65750808060200190518101906112c69190611562565b610df25760405162461bcd60e51b815260206004820152602260248201527f5361666545524332303a20736166655472616e7366657246726f6d206661696c604482015261195960f21b606482015260840161055f565b60006020828403121561132f57600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b50565b803561135981611336565b919050565b60008060008060008060008060e0898b03121561137a57600080fd5b883567ffffffffffffffff8082111561139257600080fd5b818b0191508b601f8301126113a657600080fd5b8135818111156113b557600080fd5b8c60208285010111156113c757600080fd5b60209283019a509850508901359550604089013594506113e960608a0161134e565b93506113f760808a0161134e565b925060a0890135915060c089013590509295985092959890939650565b60008060006060848603121561142957600080fd5b833561143481611336565b95602085013595506040909401359392505050565b6000806020838503121561145c57600080fd5b823567ffffffffffffffff8082111561147457600080fd5b818501915085601f83011261148857600080fd5b81358181111561149757600080fd5b8660208260051b85010111156114ac57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156114f85783511515835292840192918401916001016114da565b50909695505050505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b600681101561155657815183529183019190830190600101611539565b50505050949350505050565b60006020828403121561157457600080fd5b8151801515811461158457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806115b7576115b761158b565b6000190192915050565b600080604083850312156115d457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8181038181111561163a5761163a61158b565b92915050565b600181815b8085111561167d578163ffffffff048211156116635761166361158b565b8085161561167057918102915b93841c9390800290611645565b509250929050565b6000826116945750600161163a565b816116a15750600061163a565b81600181146116b757600281146116c1576116f2565b600191505061163a565b60ff8411156116d2576116d261158b565b6001841b915063ffffffff8211156116ec576116ec61158b565b5061163a565b5060208310610133831016604e8410600b8410161715611729575081810a63ffffffff8111156117245761172461158b565b61163a565b6117338383611640565b8063ffffffff048211156117495761174961158b565b029392505050565b600063ffffffff611766818516828516611685565b949350505050565b600063ffffffff80841680611785576117856115e5565b92169190910692915050565b600063ffffffff808416806117a8576117a86115e5565b92169190910492915050565b63ffffffff818116838216019080821115610b1c57610b1c61158b565b6000825160005b818110156117f257602081860181015185830152016117d8565b50600092019182525091905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207a10ff661aea94ed5894f53cfa2fee06318fa49138057f7bd1b36d8fe228d9da64736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001";class Eb extends Ja{constructor(...e){e.length>1?super(...e):super(xb,Ib,e[0])}getDeployTransaction(e,t,a,n,b,f){return super.getDeployTransaction(e,t,a,n,b,f||{})}deploy(e,t,a,n,b,f){return super.deploy(e,t,a,n,b,f||{})}connect(e){return super.connect(e)}static createInterface(){return new na(xb)}static connect(e,t){return new za(e,xb,t)}}Eb.bytecode=Ib,Eb.abi=xb;const Rb=[{inputs:[{internalType:"contract IVerifier",name:"_verifier",type:"address"},{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"uint256",name:"_denomination",type:"uint256"},{internalType:"uint32",name:"_merkleTreeHeight",type:"uint32"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"commitment",type:"bytes32"},{indexed:!1,internalType:"uint32",name:"leafIndex",type:"uint32"},{indexed:!1,internalType:"uint256",name:"timestamp",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"commitments",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"}],name:"isSpent",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_nullifierHashes",type:"bytes32[]"}],name:"isSpentArray",outputs:[{internalType:"bool[]",name:"spent",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"nullifierHashes",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"verifier",outputs:[{internalType:"contract IVerifier",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}],Ob="0x610100604052600380546001600160401b031916905534801561002157600080fd5b50604051611b68380380611b688339810160408190526100409161041b565b83838383808360008263ffffffff16116100ad5760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101035760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a4565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff16101561018b5763ffffffff81166000908152600160209081526040808320859055908290529020829055610181838380610236565b915060010161013e565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816102195760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a4565b506001600160a01b0390921660c0525060e0525061049d92505050565b6000600080516020611b4883398151915283106102955760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a4565b600080516020611b4883398151915282106102fc5760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a4565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa15801561034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036f9190610479565b9092509050600080516020611b4883398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f89190610479565b509695505050505050565b6001600160a01b038116811461041857600080fd5b50565b6000806000806080858703121561043157600080fd5b845161043c81610403565b602086015190945061044d81610403565b60408601516060870151919450925063ffffffff8116811461046e57600080fd5b939692955090935050565b6000806040838503121561048c57600080fd5b505080516020909101519092909150565b60805160a05160c05160e051611641610507600039600081816102b00152818161053001528181610d0401526110a201526000818161019b015261069901526000818161021701528181610e9b0152610f3d01526000818161045e0152610fd501526116416000f3fe60806040526004361061012a5760003560e01c80639fa12d0b116100ab578063e5285dcc1161006f578063e5285dcc146103bb578063e8295588146103eb578063ec73295914610418578063ed33639f1461044c578063f178e47c14610480578063fc7e9c6f146104ad57600080fd5b80639fa12d0b1461030f578063b214faa51461033c578063ba70f7571461034f578063c2b40ae414610379578063cd87a3b4146103a657600080fd5b80636d9833e3116100f25780636d9833e31461024e578063839df9451461026e5780638bca6d161461029e5780638ea3099e146102d257806390eeb02b146102f257600080fd5b806317cc915c1461012f57806321a0adb6146101745780632b7ac3f314610189578063414a37ba146101d55780634ecf518b14610205575b600080fd5b34801561013b57600080fd5b5061015f61014a366004611137565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610187610182366004611178565b6104d2565b005b34801561019557600080fd5b506101bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161016b565b3480156101e157600080fd5b506101f76000805160206115ec83398151915281565b60405190815260200161016b565b34801561021157600080fd5b506102397f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161016b565b34801561025a57600080fd5b5061015f610269366004611137565b6107dd565b34801561027a57600080fd5b5061015f610289366004611137565b60066020526000908152604090205460ff1681565b3480156102aa57600080fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506101f76102ed36600461122e565b61085b565b3480156102fe57600080fd5b506003546102399063ffffffff1681565b34801561031b57600080fd5b5061032f61032a366004611263565b610a28565b60405161016b91906112d8565b61018761034a366004611137565b610ae4565b34801561035b57600080fd5b5060035463ffffffff166000908152600260205260409020546101f7565b34801561038557600080fd5b506101f7610394366004611137565b60026020526000908152604090205481565b3480156103b257600080fd5b50610239601e81565b3480156103c757600080fd5b5061015f6103d6366004611137565b60009081526005602052604090205460ff1690565b3480156103f757600080fd5b506101f7610406366004611137565b60016020526000908152604090205481565b34801561042457600080fd5b506101f77f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561045857600080fd5b506101bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b506101f761049b366004611137565b60006020819052908152604090205481565b3480156104b957600080fd5b5060035461023990640100000000900463ffffffff1681565b6002600454036105295760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f000000000000000000000000000000000000000000000000000000000000000082111561059e5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c75650000000000006044820152606401610520565b60008581526005602052604090205460ff16156105fd5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e74006044820152606401610520565b610606866107dd565b6106525760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610520565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f9916106d2918c918c9160040161131e565b6020604051808303816000875af11580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610715919061137c565b61075a5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610520565b6000858152600560205260409020805460ff1916600117905561077f84848484610c1b565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b60008181036107ee57506000919050565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054840361081f575060019392505050565b8063ffffffff166000036108315750601e5b8061083b816113bb565b9150508163ffffffff168163ffffffff16036107f9575060009392505050565b60006000805160206115ec83398151915283106108ba5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c646044820152606401610520565b6000805160206115ec83398151915282106109215760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610520565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099491906113db565b90925090506000805160206115ec83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d91906113db565b509695505050505050565b60608167ffffffffffffffff811115610a4357610a43611415565b604051908082528060200260200182016040528015610a6c578160200160208202803683370190505b50905060005b82811015610add57610aab848483818110610a8f57610a8f61142b565b9050602002013560009081526005602052604090205460ff1690565b15610ad5576001828281518110610ac457610ac461142b565b911515602092830291909101909101525b600101610a72565b5092915050565b600260045403610b365760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610520565b600260045560008181526006602052604090205460ff1615610ba45760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b6064820152608401610520565b6000610baf82610e82565b6000838152600660205260409020805460ff191660011790559050610bd26110a0565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b3415610c875760405162461bcd60e51b815260206004820152603560248201527f4d6573736167652076616c756520697320737570706f73656420746f206265206044820152747a65726f20666f722045544820696e7374616e636560581b6064820152608401610520565b8015610cf25760405162461bcd60e51b815260206004820152603460248201527f526566756e642076616c756520697320737570706f73656420746f206265207a60448201527365726f20666f722045544820696e7374616e636560601b6064820152608401610520565b60006001600160a01b038516610d28847f0000000000000000000000000000000000000000000000000000000000000000611441565b604051600081818185875af1925050503d8060008114610d64576040519150601f19603f3d011682016040523d82523d6000602084013e610d69565b606091505b5050905080610dc85760405162461bcd60e51b815260206004820152602560248201527f7061796d656e7420746f205f726563697069656e7420646964206e6f7420676f604482015264207468727560d81b6064820152608401610520565b8215610e7b576040516001600160a01b038516908490600081818185875af1925050503d8060008114610e17576040519150601f19603f3d011682016040523d82523d6000602084013e610e1c565b606091505b50508091505080610e7b5760405162461bcd60e51b815260206004820152602360248201527f7061796d656e7420746f205f72656c6179657220646964206e6f7420676f207460448201526268727560e81b6064820152608401610520565b5050505050565b600354600090640100000000900463ffffffff16610ec17f0000000000000000000000000000000000000000000000000000000000000000600261156b565b63ffffffff168163ffffffff1603610f345760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610520565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561101257610f7a600286611588565b63ffffffff16600003610fb45763ffffffff8116600090815260016020908152604080832054918390529091208590558493509150610fd0565b63ffffffff811660009081526020819052604090205492508391505b610ffb7f0000000000000000000000000000000000000000000000000000000000000000848461085b565b93506110086002866115ab565b9450600101610f3b565b50600354600090601e9061102d9063ffffffff1660016115ce565b6110379190611588565b6003805463ffffffff191663ffffffff83169081179091556000908152600260205260409020859055905061106d8660016115ce565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000034146111355760405162461bcd60e51b815260206004820152603860248201527f506c656173652073656e6420606d697844656e6f6d696e6174696f6e6020455460448201527f4820616c6f6e672077697468207472616e73616374696f6e00000000000000006064820152608401610520565b565b60006020828403121561114957600080fd5b5035919050565b6001600160a01b038116811461116557600080fd5b50565b803561117381611150565b919050565b60008060008060008060008060e0898b03121561119457600080fd5b883567ffffffffffffffff808211156111ac57600080fd5b818b0191508b601f8301126111c057600080fd5b8135818111156111cf57600080fd5b8c60208285010111156111e157600080fd5b60209283019a5098505089013595506040890135945061120360608a01611168565b935061121160808a01611168565b925060a0890135915060c089013590509295985092959890939650565b60008060006060848603121561124357600080fd5b833561124e81611150565b95602085013595506040909401359392505050565b6000806020838503121561127657600080fd5b823567ffffffffffffffff8082111561128e57600080fd5b818501915085601f8301126112a257600080fd5b8135818111156112b157600080fd5b8660208260051b85010111156112c657600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156113125783511515835292840192918401916001016112f4565b50909695505050505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b600681101561137057815183529183019190830190600101611353565b50505050949350505050565b60006020828403121561138e57600080fd5b8151801515811461139e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8216806113d1576113d16113a5565b6000190192915050565b600080604083850312156113ee57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115611454576114546113a5565b92915050565b600181815b80851115611497578163ffffffff0482111561147d5761147d6113a5565b8085161561148a57918102915b93841c939080029061145f565b509250929050565b6000826114ae57506001611454565b816114bb57506000611454565b81600181146114d157600281146114db5761150c565b6001915050611454565b60ff8411156114ec576114ec6113a5565b6001841b915063ffffffff821115611506576115066113a5565b50611454565b5060208310610133831016604e8410600b8410161715611543575081810a63ffffffff81111561153e5761153e6113a5565b611454565b61154d838361145a565b8063ffffffff04821115611563576115636113a5565b029392505050565b600063ffffffff61158081851682851661149f565b949350505050565b600063ffffffff8084168061159f5761159f6113ff565b92169190910692915050565b600063ffffffff808416806115c2576115c26113ff565b92169190910492915050565b63ffffffff818116838216019080821115610add57610add6113a556fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220b7ae6fa49d2dc33b05a35e194c48ba72870663895936d093d6708dda191f86f164736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001";class kb extends Ja{constructor(...e){e.length>1?super(...e):super(Rb,Ob,e[0])}getDeployTransaction(e,t,a,n,b){return super.getDeployTransaction(e,t,a,n,b||{})}deploy(e,t,a,n,b){return super.deploy(e,t,a,n,b||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Rb)}static connect(e,t){return new za(e,Rb,t)}}kb.bytecode=Ob,kb.abi=Rb;const Pb=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"who",type:"address"},{indexed:!1,internalType:"bytes",name:"data",type:"bytes"}],name:"Echo",type:"event"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"echo",outputs:[],stateMutability:"nonpayable",type:"function"}],Ab="0x6080604052348015600f57600080fd5b506101638061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c83836040516100809291906100fe565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff808211156100b757600080fd5b818501915085601f8301126100cb57600080fd5b8135818111156100da57600080fd5b8660208285010111156100ec57600080fd5b60209290920196919550909350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220cadc2288aafcfeb373ae536503c025419ca51a0b1642ad003ff215a6bff8658464736f6c63430008190033";class Nb extends Ja{constructor(...e){e.length>1?super(...e):super(Pb,Ab,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Pb)}static connect(e,t){return new za(e,Pb,t)}}Nb.bytecode=Ab,Nb.abi=Pb;const Cb=[{inputs:[{internalType:"bytes",name:"proof",type:"bytes"},{internalType:"uint256[6]",name:"input",type:"uint256[6]"}],name:"verifyProof",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}],Db="0x6080604052348015600f57600080fd5b506110d08061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063695ef6f914610030575b600080fd5b61004361003e366004610eca565b610057565b604051901515815260200160405180910390f35b6000808380602001905181019061006e9190610f71565b905060005b60088160ff161015610129577f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47828260ff16600881106100b5576100b5610ff0565b6020020151106101175760405162461bcd60e51b815260206004820152602260248201527f76657269666965722d70726f6f662d656c656d656e742d6774652d7072696d656044820152612d7160f01b60648201526084015b60405180910390fd5b806101218161101c565b915050610073565b50610132610ca2565b6040805180820182528351815260208085015181830152908352815160808082018452858401518285019081526060808801519084015282528351808501855290860151815260a08601518184015281830152838201528151808301835260c0850151815260e0850151918101919091529082015260006101b1610321565b90506000604051806040016040528060008152602001600081525090506101f38183608001516000600781106101e9576101e9610ff0565b60200201516107ec565b905060005b60068110156102df577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187826006811061023457610234610ff0565b6020020151106102865760405162461bcd60e51b815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015260640161010e565b6102d5826102d0856080015184600161029f919061103b565b600781106102af576102af610ff0565b60200201518a85600681106102c6576102c6610ff0565b602002015161088d565b6107ec565b91506001016101f8565b506103146102f0846000015161091b565b846020015184600001518560200151858760400151896040015189606001516109d5565b9450505050505b92915050565b610329610cf3565b6040805180820182527f2dbfc3ec62a3eee5a3b4b464bcf1f8527bbca12adea0f1f12033cd4f61b0e09181527f19e55bd0b72c126da18665039556776642ff82e2f347f24fcea2475f4db087df6020808301919091529083528151608080820184527f1ae724ab134e5a7c6bd8a116fa5505b259522c0f164a5e8126e3ec7d34465f6e8285019081527e9f1bcdc853f8e3531756bb625b0d1dc014f4ab57c3f79f4f4e2e7ef7e0ead6606080850191909152908352845180860186527f23a8ca5760457e726365b92fd0ceb486665797cd68c35dcffd8e4ae8066691e981527f13ec7182c9fd68331a10f8be0fe885d730de5c7f89aa7d0b7bafaa009bbc9e3e818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835180820185527f2f0c63d0c53b3dfbca27b6b43ae7fbf55a38d78a21470996485b03128accc2088186019081527e556502356e37ed150db2e36531b0f275fd6835c0fc1945922e270b48c48a86828501528152845180860186527f02644c27b5dbd793592a70b735e22c798a5e309fa17a992a7dc2a050e01b298f81527f194776b6a53439d7336f389d2a8f6651e40885f5ca2538b0dc9cb534fb23f7fa818601528185015282860152835180850185527f23df1bc9165e9c1c9b2bc036d8ebdd10e7aeae7e5e8019fde68aec7c818bb23e81527f0b6c92080d37c5fb2ddf30892a33665e5478432ef3f71ac8768ecbbe62c7789281850152818601805191909152845180860186527f1c7b2adf45e046caea000956b2ecb2d8617e710d2a7bb201a95ea276f92307b481527f2b15f07536f45948cf4abe6596637d902ffabb18c8c2f5c151544c294ce4a672818601528151850152845180860186527f1cecfe92882a8c835a47bf01bfa655cf628cbba7f81cf4042179fd13edcd6a3981527f0154bfbb2cb786ca247d4b69183d1751f267bbc7656be8d0f0e7a5a47e2c1101818601528151860152845180860186527f1584616a7423efcc72f69ea84fa0b2bc01433677297f4e8351bebfc15bcd0cda81527f0623755b1488526daa9fecf0e11b110dd6df12c461579d792e1db65af523c8be81860152815190930192909252835180850185527f12fbb5bfca9d61357ba2d641604cf4852e21ef54faa180fe539c18994dc1da5a81527f2f09dd9972a1af5f7bcfccf3d7ab600c9d898ea6d6933150ba0ae228ece17e5f81850152825190910152825180840184527f0adb513796fdf2103022c64151ce05f7c7a6d9200e8d819fa59e654fc4bfe83c81527f2d64f72ef4eddf9ca032058ed2bf691758387e913a77cf99d6a3cfb37c8ba7ee81840152815160a0015282518084019093527f21e7c9bffda74bfd2c4393b6803d775545de6fa89145f4a23476241d9881b66183527f0bbe41e52237ac13eb7b01f3cb999b7394d08734e71b1c3ada62713e17eb560c918301919091525160c0015290565b6040805180820190915260008082526020820152610808610d44565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061084257fe5b50806108855760405162461bcd60e51b81526020600482015260126024820152711c185a5c9a5b99cb5859190b59985a5b195960721b604482015260640161010e565b505092915050565b60408051808201909152600080825260208201526108a9610d62565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806108d857fe5b50806108855760405162461bcd60e51b81526020600482015260126024820152711c185a5c9a5b99cb5b5d5b0b59985a5b195960721b604482015260640161010e565b6040805180820190915260008082526020820152815115801561094057506020820151155b1561095e575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516109a3919061104e565b6109cd907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611070565b905292915050565b60408051608080820183528a825260208083018a90528284018890526060808401879052845192830185528b83528282018a9052828501889052820185905283516018808252610320820190955260009491859190839082016103008036833701905050905060005b6004811015610c1f576000610a54826006611083565b9050858260048110610a6857610a68610ff0565b60200201515183610a7a83600061103b565b81518110610a8a57610a8a610ff0565b602002602001018181525050858260048110610aa857610aa8610ff0565b60200201516020015183826001610abf919061103b565b81518110610acf57610acf610ff0565b602002602001018181525050848260048110610aed57610aed610ff0565b6020020151515183610b0083600261103b565b81518110610b1057610b10610ff0565b602002602001018181525050848260048110610b2e57610b2e610ff0565b6020020151516001602002015183610b4783600361103b565b81518110610b5757610b57610ff0565b602002602001018181525050848260048110610b7557610b75610ff0565b602002015160200151600060028110610b9057610b90610ff0565b602002015183610ba183600461103b565b81518110610bb157610bb1610ff0565b602002602001018181525050848260048110610bcf57610bcf610ff0565b602002015160200151600160028110610bea57610bea610ff0565b602002015183610bfb83600561103b565b81518110610c0b57610c0b610ff0565b602090810291909101015250600101610a3e565b50610c28610d80565b6000602082602086026020860160086107d05a03fa90508080610c4757fe5b5080610c8d5760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b604482015260640161010e565b505115159d9c50505050505050505050505050565b6040805160a081019091526000606082018181526080830191909152815260208101610ccc610d9e565b8152602001610cee604051806040016040528060008152602001600081525090565b905290565b6040805160e08101909152600060a0820181815260c0830191909152815260208101610d1d610d9e565b8152602001610d2a610d9e565b8152602001610d37610d9e565b8152602001610cee610dbe565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280610db1610df7565b8152602001610cee610df7565b6040518060e001604052806007905b6040805180820190915260008082526020820152815260200190600190039081610dcd5790505090565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e5457610e54610e15565b604052919050565b600082601f830112610e6d57600080fd5b60405160c0810181811067ffffffffffffffff82111715610e9057610e90610e15565b6040528060c0840185811115610ea557600080fd5b845b81811015610ebf578035835260209283019201610ea7565b509195945050505050565b60008060e08385031215610edd57600080fd5b823567ffffffffffffffff80821115610ef557600080fd5b818501915085601f830112610f0957600080fd5b8135602082821115610f1d57610f1d610e15565b610f2f601f8301601f19168201610e2b565b92508183528781838601011115610f4557600080fd5b81818501828501376000818385010152829550610f6488828901610e5c565b9450505050509250929050565b6000610100808385031215610f8557600080fd5b83601f840112610f9457600080fd5b60405181810181811067ffffffffffffffff82111715610fb657610fb6610e15565b604052908301908085831115610fcb57600080fd5b845b83811015610fe5578051825260209182019101610fcd565b509095945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361103257611032611006565b60010192915050565b8082018082111561031b5761031b611006565b60008261106b57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561031b5761031b611006565b808202811582820484141761031b5761031b61100656fea2646970667358221220f45b9b217fe8de0faa784c9b47a788ed44f7beab2c4749dda027f1862d4a28df64736f6c63430008190033";class Sb extends Ja{constructor(...e){e.length>1?super(...e):super(Cb,Db,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Cb)}static connect(e,t){return new za(e,Cb,t)}}Sb.bytecode=Db,Sb.abi=Cb;const Ub=[{inputs:[{internalType:"address",name:"_governance",type:"address"},{internalType:"contract IERC20",name:"_comp",type:"address"},{internalType:"contract IVerifier",name:"_verifier",type:"address"},{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"uint256",name:"_denomination",type:"uint256"},{internalType:"uint32",name:"_merkleTreeHeight",type:"uint32"},{internalType:"contract IERC20",name:"_token",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"commitment",type:"bytes32"},{indexed:!1,internalType:"uint32",name:"leafIndex",type:"uint32"},{indexed:!1,internalType:"uint256",name:"timestamp",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"FIELD_SIZE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"ROOT_HISTORY_SIZE",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"ZERO_VALUE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimComp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"commitments",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"comp",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentRootIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"filledSubtrees",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastRoot",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IHasher",name:"_hasher",type:"address"},{internalType:"bytes32",name:"_left",type:"bytes32"},{internalType:"bytes32",name:"_right",type:"bytes32"}],name:"hashLeftRight",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"hasher",outputs:[{internalType:"contract IHasher",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_root",type:"bytes32"}],name:"isKnownRoot",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"}],name:"isSpent",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_nullifierHashes",type:"bytes32[]"}],name:"isSpentArray",outputs:[{internalType:"bool[]",name:"spent",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"levels",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"nextIndex",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"nullifierHashes",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"verifier",outputs:[{internalType:"contract IVerifier",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"zeros",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"}],Vb="0x610160604052600380546001600160401b031916905534801561002157600080fd5b5060405161205a38038061205a8339810160408190526100409161048f565b848484848484848484808360008263ffffffff16116100b25760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106101085760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e203332000060448201526064016100a9565b63ffffffff821660a0526001600160a01b0381166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff1610156101905763ffffffff811660009081526001602090815260408083208590559082905290208290556101868383806102aa565b9150600101610143565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55505060016004558161021e5760405162461bcd60e51b815260206004820152602560248201527f64656e6f6d696e6174696f6e2073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084016100a9565b506001600160a01b0392831660c05260e05250908116610100528a16935061028c925050505760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420434f4d5020746f6b656e206164647265737300000000000060448201526064016100a9565b5050506001600160a01b03938416610120525050166101405261054e565b600060008051602061203a83398151915283106103095760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c6460448201526064016100a9565b60008051602061203a83398151915282106103705760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b60648201526084016100a9565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e3919061052a565b909250905060008051602061203a83398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061052a565b509695505050505050565b6001600160a01b038116811461048c57600080fd5b50565b600080600080600080600060e0888a0312156104aa57600080fd5b87516104b581610477565b60208901519097506104c681610477565b60408901519096506104d781610477565b60608901519095506104e881610477565b608089015160a08a0151919550935063ffffffff8116811461050957600080fd5b60c089015190925061051a81610477565b8091505092959891949750929550565b6000806040838503121561053d57600080fd5b505080516020909101519092909150565b60805160a05160c05160e051610100516101205161014051611a3e6105fc6000396000818161017d01526105d40152600081816102e5015261060501526000818161057801528181610ecc01528181610f0601526112600152600081816103690152818161074101528181610e9e015261128401526000818161023801526108aa01526000818161029c01528181610fe7015261108901526000818161051701526111210152611a3e6000f3fe6080604052600436106101665760003560e01c806390eeb02b116100d1578063e5285dcc1161008a578063ed33639f11610064578063ed33639f14610505578063f178e47c14610539578063fc0c546a14610566578063fc7e9c6f1461059a57600080fd5b8063e5285dcc14610474578063e8295588146104a4578063ec732959146104d157600080fd5b806390eeb02b146103ab5780639fa12d0b146103c8578063b214faa5146103f5578063ba70f75714610408578063c2b40ae414610432578063cd87a3b41461045f57600080fd5b80634ecf518b116101235780634ecf518b1461028a5780635aa6e675146102d35780636d9833e314610307578063839df945146103275780638bca6d16146103575780638ea3099e1461038b57600080fd5b8063109d0af81461016b57806317cc915c146101bc5780631bd85bdb146101fc57806321a0adb6146102135780632b7ac3f314610226578063414a37ba1461025a575b600080fd5b34801561017757600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c857600080fd5b506101ec6101d73660046114ef565b60056020526000908152604090205460ff1681565b60405190151581526020016101b3565b34801561020857600080fd5b506102116105bf565b005b61021161022136600461152d565b6106e3565b34801561023257600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026657600080fd5b5061027c6000805160206119e983398151915281565b6040519081526020016101b3565b34801561029657600080fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b3565b3480156102df57600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031357600080fd5b506101ec6103223660046114ef565b6109ee565b34801561033357600080fd5b506101ec6103423660046114ef565b60066020526000908152604090205460ff1681565b34801561036357600080fd5b5061027c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039757600080fd5b5061027c6103a63660046115e3565b610a6c565b3480156103b757600080fd5b506003546102be9063ffffffff1681565b3480156103d457600080fd5b506103e86103e3366004611618565b610c39565b6040516101b3919061168d565b6102116104033660046114ef565b610cf5565b34801561041457600080fd5b5060035463ffffffff1660009081526002602052604090205461027c565b34801561043e57600080fd5b5061027c61044d3660046114ef565b60026020526000908152604090205481565b34801561046b57600080fd5b506102be601e81565b34801561048057600080fd5b506101ec61048f3660046114ef565b60009081526005602052604090205460ff1690565b3480156104b057600080fd5b5061027c6104bf3660046114ef565b60016020526000908152604090205481565b3480156104dd57600080fd5b5061027c7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b34801561051157600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054557600080fd5b5061027c6105543660046114ef565b60006020819052908152604090205481565b34801561057257600080fd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a657600080fd5b506003546102be90640100000000900463ffffffff1681565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067191906116d3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e091906116ec565b50565b60026004540361073a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156107af5760405162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c75650000000000006044820152606401610731565b60008581526005602052604090205460ff161561080e5760405162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e74006044820152606401610731565b610817866109ee565b6108635760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610731565b6040805160c081018252878152602081018790526001600160a01b038681168284015285811660608301526080820185905260a08201849052915163695ef6f960e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695ef6f9916108e3918c918c91600401611715565b6020604051808303816000875af1158015610902573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092691906116ec565b61096b5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610731565b6000858152600560205260409020805460ff1916600117905561099084848484610e2c565b604080516001600160a01b03868116825260208201889052918101849052908416907fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319060600160405180910390a250506001600455505050505050565b60008181036109ff57506000919050565b60035463ffffffff16805b63ffffffff81166000908152600260205260409020548403610a30575060019392505050565b8063ffffffff16600003610a425750601e5b80610a4c81611789565b9150508163ffffffff168163ffffffff1603610a0a575060009392505050565b60006000805160206119e98339815191528310610acb5760405162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c646044820152606401610731565b6000805160206119e98339815191528210610b325760405162461bcd60e51b815260206004820152602160248201527f5f72696768742073686f756c6420626520696e7369646520746865206669656c6044820152601960fa1b6064820152608401610731565b60405163f47d33b560e01b81526004810184905260006024820181905284916001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba591906117a9565b90925090506000805160206119e983398151915284830860405163f47d33b560e01b815260048101829052602481018390529092506001600160a01b0387169063f47d33b5906044016040805180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e91906117a9565b509695505050505050565b60608167ffffffffffffffff811115610c5457610c546117e3565b604051908082528060200260200182016040528015610c7d578160200160208202803683370190505b50905060005b82811015610cee57610cbc848483818110610ca057610ca06117f9565b9050602002013560009081526005602052604090205460ff1690565b15610ce6576001828281518110610cd557610cd56117f9565b911515602092830291909101909101525b600101610c83565b5092915050565b600260045403610d475760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610731565b600260045560008181526006602052604090205460ff1615610db55760405162461bcd60e51b815260206004820152602160248201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656044820152601960fa1b6064820152608401610731565b6000610dc082610fce565b6000838152600660205260409020805460ff191660011790559050610de36111ec565b6040805163ffffffff8316815242602082015283917fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196910160405180910390a250506001600455565b803414610e945760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b6064820152608401610731565b610ef384610ec2847f000000000000000000000000000000000000000000000000000000000000000061180f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906112aa565b8115610f2d57610f2d6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684846112aa565b8015610fc8576000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f80576040519150601f19603f3d011682016040523d82523d6000602084013e610f85565b606091505b5050905080610fc6576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015610fc4573d6000803e3d6000fd5b505b505b50505050565b600354600090640100000000900463ffffffff1661100d7f00000000000000000000000000000000000000000000000000000000000000006002611939565b63ffffffff168163ffffffff16036110805760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610731565b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561115e576110c6600286611956565b63ffffffff166000036111005763ffffffff811660009081526001602090815260408083205491839052909120859055849350915061111c565b63ffffffff811660009081526020819052604090205492508391505b6111477f00000000000000000000000000000000000000000000000000000000000000008484610a6c565b9350611154600286611979565b9450600101611087565b50600354600090601e906111799063ffffffff16600161199c565b6111839190611956565b6003805463ffffffff191663ffffffff8316908117909155600090815260026020526040902085905590506111b986600161199c565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b34156112535760405162461bcd60e51b815260206004820152603060248201527f4554482076616c756520697320737570706f73656420746f206265203020666f60448201526f7220455243323020696e7374616e636560801b6064820152608401610731565b6112a86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f00000000000000000000000000000000000000000000000000000000000000006113c3565b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161130691906119b9565b6000604051808303816000865af19150503d8060008114611343576040519150601f19603f3d011682016040523d82523d6000602084013e611348565b606091505b50915091508161135a57805181602001fd5b8051158061137757508080602001905181019061137791906116ec565b610fc65760405162461bcd60e51b815260206004820152601e60248201527f5361666545524332303a20736166655472616e73666572206661696c656400006044820152606401610731565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161142791906119b9565b6000604051808303816000865af19150503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b50915091508161147b57805181602001fd5b8051158061149857508080602001905181019061149891906116ec565b610fc45760405162461bcd60e51b815260206004820152602260248201527f5361666545524332303a20736166655472616e7366657246726f6d206661696c604482015261195960f21b6064820152608401610731565b60006020828403121561150157600080fd5b5035919050565b6001600160a01b03811681146106e057600080fd5b803561152881611508565b919050565b60008060008060008060008060e0898b03121561154957600080fd5b883567ffffffffffffffff8082111561156157600080fd5b818b0191508b601f83011261157557600080fd5b81358181111561158457600080fd5b8c602082850101111561159657600080fd5b60209283019a509850508901359550604089013594506115b860608a0161151d565b93506115c660808a0161151d565b925060a0890135915060c089013590509295985092959890939650565b6000806000606084860312156115f857600080fd5b833561160381611508565b95602085013595506040909401359392505050565b6000806020838503121561162b57600080fd5b823567ffffffffffffffff8082111561164357600080fd5b818501915085601f83011261165757600080fd5b81358181111561166657600080fd5b8660208260051b850101111561167b57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156116c75783511515835292840192918401916001016116a9565b50909695505050505050565b6000602082840312156116e557600080fd5b5051919050565b6000602082840312156116fe57600080fd5b8151801515811461170e57600080fd5b9392505050565b60e081528260e08201526000610100848682850137600081868501015280601f19601f87011684010191505060208083018460005b60068110156117675781518352918301919083019060010161174a565b50505050949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff82168061179f5761179f611773565b6000190192915050565b600080604083850312156117bc57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8181038181111561182257611822611773565b92915050565b600181815b80851115611865578163ffffffff0482111561184b5761184b611773565b8085161561185857918102915b93841c939080029061182d565b509250929050565b60008261187c57506001611822565b8161188957506000611822565b816001811461189f57600281146118a9576118da565b6001915050611822565b60ff8411156118ba576118ba611773565b6001841b915063ffffffff8211156118d4576118d4611773565b50611822565b5060208310610133831016604e8410600b8410161715611911575081810a63ffffffff81111561190c5761190c611773565b611822565b61191b8383611828565b8063ffffffff0482111561193157611931611773565b029392505050565b600063ffffffff61194e81851682851661186d565b949350505050565b600063ffffffff8084168061196d5761196d6117cd565b92169190910692915050565b600063ffffffff80841680611990576119906117cd565b92169190910492915050565b63ffffffff818116838216019080821115610cee57610cee611773565b6000825160005b818110156119da57602081860181015185830152016119c0565b50600092019182525091905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212207136b381e40b7e1e84fceaba3022a28e73ab509289c831db484f05c7303d32a464736f6c6343000819003330644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001";class Lb extends Ja{constructor(...e){e.length>1?super(...e):super(Ub,Vb,e[0])}getDeployTransaction(e,t,a,n,b,f,d,i){return super.getDeployTransaction(e,t,a,n,b,f,d,i||{})}deploy(e,t,a,n,b,f,d,i){return super.deploy(e,t,a,n,b,f,d,i||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Ub)}static connect(e,t){return new za(e,Ub,t)}}Lb.bytecode=Vb,Lb.abi=Ub;var Fb=Object.freeze({__proto__:null,CTornado__factory:Lb,ERC20Tornado__factory:Eb,ETHTornado__factory:kb,Echoer__factory:Nb,Verifier__factory:Sb,interfaces:_b,merkleTreeWithHistorySol:Xn,mocks:cb,tornadoProxyLightSol:wb,tornadoSol:yb});const Gb=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"label",type:"bytes32"},{indexed:!1,internalType:"address",name:"owner",type:"address"}],name:"NewOwner",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!1,internalType:"address",name:"resolver",type:"address"}],name:"NewResolver",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!1,internalType:"uint64",name:"ttl",type:"uint64"}],name:"NewTTL",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!1,internalType:"address",name:"owner",type:"address"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"recordExists",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"resolver",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setApprovalForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"address",name:"owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"resolver",type:"address"},{internalType:"uint64",name:"ttl",type:"uint64"}],name:"setRecord",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"address",name:"resolver",type:"address"}],name:"setResolver",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"bytes32",name:"label",type:"bytes32"},{internalType:"address",name:"owner",type:"address"}],name:"setSubnodeOwner",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"bytes32",name:"label",type:"bytes32"},{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"resolver",type:"address"},{internalType:"uint64",name:"ttl",type:"uint64"}],name:"setSubnodeRecord",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"uint64",name:"ttl",type:"uint64"}],name:"setTTL",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"ttl",outputs:[{internalType:"uint64",name:"",type:"uint64"}],stateMutability:"view",type:"function"}];class jb{static createInterface(){return new na(Gb)}static connect(e,t){return new za(e,Gb,t)}}jb.abi=Gb;const Bb=[{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"addr",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"string",name:"key",type:"string"}],name:"text",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Hb{static createInterface(){return new na(Bb)}static connect(e,t){return new za(e,Bb,t)}}Hb.abi=Bb;const zb=[{inputs:[{internalType:"address",name:"relayer",type:"address"}],name:"getRelayerBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"address",name:"toResolve",type:"address"}],name:"isRelayerRegistered",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}];class $b{static createInterface(){return new na(zb)}static connect(e,t){return new za(e,zb,t)}}$b.abi=zb;const Xb=[{inputs:[{internalType:"address",name:"_IENSRegistry",type:"address"},{internalType:"address",name:"_IRelayerRegistry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"ENSRegistry",outputs:[{internalType:"contract IENSRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"RelayerRegistry",outputs:[{internalType:"contract IRelayerRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_relayers",type:"bytes32[]"},{internalType:"string[]",name:"_subdomains",type:"string[]"}],name:"relayersData",outputs:[{components:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"bool",name:"isRegistered",type:"bool"},{internalType:"string[20]",name:"records",type:"string[20]"}],internalType:"struct Relayer[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"}],Wb="0x60c060405234801561001057600080fd5b50604051610b74380380610b7483398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c610a9b6100d96000398060b2528061040352806104f1525080608e528061013a528061021b5250610a9b6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631cb120d61461004657806339c16356146100645780634d47d7751461006c575b600080fd5b61004e61008c565b60405161005b9190610891565b60405180910390f35b61004e6100b0565b61007f61007a366004610702565b6100d4565b60405161005b91906108bf565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b606080835167ffffffffffffffff811180156100ef57600080fd5b5060405190808252806020026020018201604052801561012957816020015b6101166105cd565b81526020019060019003908161010e5790505b50905060005b84518110156105c5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be386838151811061017357fe5b60200260200101516040518263ffffffff1660e01b8152600401610197919061099d565b60206040518083038186803b1580156101af57600080fd5b505afa1580156101c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e791906106d4565b8282815181106101f357fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630178b8bf87848151811061025457fe5b60200260200101516040518263ffffffff1660e01b8152600401610278919061099d565b60206040518083038186803b15801561029057600080fd5b505afa1580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c891906106d4565b905060005b85518110156104005760008784815181106102e457fe5b60200260200101518783815181106102f857fe5b60200260200101516040516020016103109190610875565b60405160208183030381529060405280519060200120604051602001610337929190610867565b60408051601f19818403018152908290528051602090910120631674750f60e21b825291506001600160a01b038416906359d1d43c9061037b9084906004016109a6565b60006040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103cf91908101906107dc565b8585815181106103db57fe5b60200260200101516060015183601481106103f257fe5b6020020152506001016102cd565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b69fd4ab84848151811061043c57fe5b60200260200101516000015185858151811061045457fe5b6020026020010151600001516040518363ffffffff1660e01b815260040161047d9291906108a5565b60206040518083038186803b15801561049557600080fd5b505afa1580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd91906107bc565b8383815181106104d957fe5b602002602001015160400190151590811515815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b971a6bf84848151811061052a57fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016105529190610891565b60206040518083038186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a2919061084f565b8383815181106105ae57fe5b60209081029190910181015101525060010161012f565b509392505050565b604051806080016040528060006001600160a01b0316815260200160008152602001600015158152602001610600610605565b905290565b6040518061028001604052806014905b60608152602001906001900390816106155790505090565b600082601f83011261063d578081fd5b813561065061064b826109f1565b6109ca565b818152915060208083019084810160005b848110156106c9578135870188603f82011261067c57600080fd5b8381013561068c61064b82610a11565b81815260408b818486010111156106a257600080fd5b82818501888401375060009181018601919091528552509282019290820190600101610661565b505050505092915050565b6000602082840312156106e5578081fd5b81516001600160a01b03811681146106fb578182fd5b9392505050565b60008060408385031215610714578081fd5b823567ffffffffffffffff8082111561072b578283fd5b818501915085601f83011261073e578283fd5b813561074c61064b826109f1565b80828252602080830192508086018a82838702890101111561076c578788fd5b8796505b8487101561078e578035845260019690960195928101928101610770565b5090965087013593505050808211156107a5578283fd5b506107b28582860161062d565b9150509250929050565b6000602082840312156107cd578081fd5b815180151581146106fb578182fd5b6000602082840312156107ed578081fd5b815167ffffffffffffffff811115610803578182fd5b8201601f81018413610813578182fd5b805161082161064b82610a11565b818152856020838501011115610835578384fd5b610846826020830160208601610a35565b95945050505050565b600060208284031215610860578081fd5b5051919050565b918252602082015260400190565b60008251610887818460208701610a35565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561099057878503603f19018452815180516001600160a01b03168652868101518787015260408082015115159087015260609081015160809187018290529086016103008701895b601481101561097b57888203607f1901835283518051610950818561099d565b61095d82828f8601610a35565b958c0195948c0194601f91909101601f191601925050600101610930565b509650505092850192908501906001016108e4565b5092979650505050505050565b90815260200190565b908152604060208201819052600390820152621d5c9b60ea1b606082015260800190565b60405181810167ffffffffffffffff811182821017156109e957600080fd5b604052919050565b600067ffffffffffffffff821115610a07578081fd5b5060209081020190565b600067ffffffffffffffff821115610a27578081fd5b50601f01601f191660200190565b60005b83811015610a50578181015183820152602001610a38565b83811115610a5f576000848401525b5050505056fea2646970667358221220628a366714cdda82fe91d785ad928e44e4b9f7976ed987e5fef72d207582dbaf64736f6c634300060c0033";class qb extends Ja{constructor(...e){e.length>1?super(...e):super(Xb,Wb,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Xb)}static connect(e,t){return new za(e,Xb,t)}}qb.bytecode=Wb,qb.abi=Xb;var Jb=Object.freeze({__proto__:null,IENSRegistry__factory:jb,IENSResolver__factory:Hb,IRelayerRegistry__factory:$b,RelayerAggregator__factory:qb});const Kb=[{inputs:[{internalType:"address",name:"_ensRegistry",type:"address"},{internalType:"address",name:"_relayerRegistry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"ENSRegistry",outputs:[{internalType:"contract IENSRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"RelayerRegistry",outputs:[{internalType:"contract IRelayerRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Governance",name:"governance",type:"address"}],name:"getAllProposals",outputs:[{components:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"},{internalType:"enum Governance.ProposalState",name:"state",type:"uint8"}],internalType:"struct GovernanceAggregator.Proposal[]",name:"proposals",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Governance",name:"governance",type:"address"},{internalType:"address[]",name:"accs",type:"address[]"}],name:"getGovernanceBalances",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Governance",name:"governance",type:"address"},{internalType:"address",name:"account",type:"address"}],name:"getUserData",outputs:[{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"latestProposalId",type:"uint256"},{internalType:"uint256",name:"latestProposalIdState",type:"uint256"},{internalType:"uint256",name:"timelock",type:"uint256"},{internalType:"address",name:"delegatee",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"_relayers",type:"bytes32[]"},{internalType:"string[]",name:"_subdomains",type:"string[]"}],name:"relayersData",outputs:[{components:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"bool",name:"isRegistered",type:"bool"},{internalType:"string[20]",name:"records",type:"string[20]"}],internalType:"struct Relayer[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"}],Yb="0x60c060405234801561001057600080fd5b5060405161155d38038061155d83398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c6114826100db6000398061024b528061059c528061068a52508061022752806102d352806103b452506114826000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063029fcae7146100675780631cb120d61461009057806339c16356146100a55780634d47d775146100ad5780639853d922146100cd578063f4eeefe9146100ed575b600080fd5b61007a610075366004610fa1565b610111565b60405161008791906112ee565b60405180910390f35b610098610225565b6040516100879190611118565b610098610249565b6100c06100bb366004610e93565b61026d565b6040516100879190611210565b6100e06100db366004610dcc565b61075e565b6040516100879190611146565b6101006100fb366004610f69565b6109dd565b60405161008795949392919061135f565b60608167ffffffffffffffff8111801561012a57600080fd5b50604051908082528060200260200182016040528015610154578160200160208202803683370190505b50905060005b8281101561021d57846001600160a01b0316639ae697bf85858481811061017d57fe5b90506020020160208101906101929190610dcc565b6040518263ffffffff1660e01b81526004016101ae9190611118565b60206040518083038186803b1580156101c657600080fd5b505afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906110b5565b82828151811061020a57fe5b602090810291909101015260010161015a565b509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b606080835167ffffffffffffffff8111801561028857600080fd5b506040519080825280602002602001820160405280156102c257816020015b6102af610c79565b8152602001906001900390816102a75790505b50905060005b845181101561021d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be386838151811061030c57fe5b60200260200101516040518263ffffffff1660e01b81526004016103309190611332565b60206040518083038186803b15801561034857600080fd5b505afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190610def565b82828151811061038c57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630178b8bf8784815181106103ed57fe5b60200260200101516040518263ffffffff1660e01b81526004016104119190611332565b60206040518083038186803b15801561042957600080fd5b505afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610def565b905060005b855181101561059957600087848151811061047d57fe5b602002602001015187838151811061049157fe5b60200260200101516040516020016104a991906110fc565b604051602081830303815290604052805190602001206040516020016104d09291906110ee565b60408051601f19818403018152908290528051602090910120631674750f60e21b825291506001600160a01b038416906359d1d43c9061051490849060040161133b565b60006040518083038186803b15801561052c57600080fd5b505afa158015610540573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105689190810190611042565b85858151811061057457fe5b602002602001015160600151836014811061058b57fe5b602002015250600101610466565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b69fd4ab8484815181106105d557fe5b6020026020010151600001518585815181106105ed57fe5b6020026020010151600001516040518363ffffffff1660e01b815260040161061692919061112c565b60206040518083038186803b15801561062e57600080fd5b505afa158015610642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106669190610f4d565b83838151811061067257fe5b602002602001015160400190151590811515815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b971a6bf8484815181106106c357fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016106eb9190611118565b60206040518083038186803b15801561070357600080fd5b505afa158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b91906110b5565b83838151811061074757fe5b6020908102919091018101510152506001016102c8565b6060816001600160a01b031663da35c6646040518163ffffffff1660e01b815260040160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d191906110b5565b67ffffffffffffffff811180156107e757600080fd5b5060405190808252806020026020018201604052801561082157816020015b61080e610cb1565b8152602001906001900390816108065790505b50905060005b81518110156109d7576000806000806000806000808a6001600160a01b031663013cf08b8a6001016040518263ffffffff1660e01b815260040161086b9190611332565b6101006040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc9190610e0b565b97509750975097509750975097509750604051806101200160405280896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001831515815260200182151581526020018c6001600160a01b0316633e4f49e68c6001016040518263ffffffff1660e01b815260040161094d9190611332565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190611023565b60068111156109a857fe5b8152508a8a815181106109b757fe5b602002602001018190525050505050505050508080600101915050610827565b50919050565b6000806000806000866001600160a01b0316639ae697bf876040518263ffffffff1660e01b8152600401610a119190611118565b60206040518083038186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6191906110b5565b6040516317977c6160e01b81529095506001600160a01b038816906317977c6190610a90908990600401611118565b60206040518083038186803b158015610aa857600080fd5b505afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae091906110b5565b93508315610b7257604051631f27a4f360e11b81526001600160a01b03881690633e4f49e690610b14908790600401611332565b60206040518083038186803b158015610b2c57600080fd5b505afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190611023565b6006811115610b6f57fe5b92505b60405163a72edda360e01b81526001600160a01b0388169063a72edda390610b9e908990600401611118565b60206040518083038186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906110b5565b604051631976849960e21b81529092506001600160a01b038816906365da126490610c1d908990600401611118565b60206040518083038186803b158015610c3557600080fd5b505afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190610def565b90509295509295909350565b604051806080016040528060006001600160a01b0316815260200160008152602001600015158152602001610cac610cfd565b905290565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905290610100820190610cac565b6040518061028001604052806014905b6060815260200190600190039081610d0d5790505090565b600082601f830112610d35578081fd5b8135610d48610d43826113b2565b61138b565b818152915060208083019084810160005b84811015610dc1578135870188603f820112610d7457600080fd5b83810135610d84610d43826113d2565b81815260408b81848601011115610d9a57600080fd5b82818501888401375060009181018601919091528552509282019290820190600101610d59565b505050505092915050565b600060208284031215610ddd578081fd5b8135610de881611426565b9392505050565b600060208284031215610e00578081fd5b8151610de881611426565b600080600080600080600080610100898b031215610e27578384fd5b8851610e3281611426565b60208a0151909850610e4381611426565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151610e718161143e565b60e08a0151909250610e828161143e565b809150509295985092959890939650565b60008060408385031215610ea5578182fd5b823567ffffffffffffffff80821115610ebc578384fd5b818501915085601f830112610ecf578384fd5b8135610edd610d43826113b2565b80828252602080830192508086018a828387028901011115610efd578889fd5b8896505b84871015610f1f578035845260019690960195928101928101610f01565b509096508701359350505080821115610f36578283fd5b50610f4385828601610d25565b9150509250929050565b600060208284031215610f5e578081fd5b8151610de88161143e565b60008060408385031215610f7b578182fd5b8235610f8681611426565b91506020830135610f9681611426565b809150509250929050565b600080600060408486031215610fb5578283fd5b8335610fc081611426565b9250602084013567ffffffffffffffff80821115610fdc578384fd5b818601915086601f830112610fef578384fd5b813581811115610ffd578485fd5b8760208083028501011115611010578485fd5b6020830194508093505050509250925092565b600060208284031215611034578081fd5b815160078110610de8578182fd5b600060208284031215611053578081fd5b815167ffffffffffffffff811115611069578182fd5b8201601f81018413611079578182fd5b8051611087610d43826113d2565b81815285602083850101111561109b578384fd5b6110ac8260208301602086016113f6565b95945050505050565b6000602082840312156110c6578081fd5b5051919050565b6001600160a01b03169052565b15159052565b600781106110ea57fe5b9052565b918252602082015260400190565b6000825161110e8184602087016113f6565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561120357815180516001600160a01b031685528681015161118a888701826110cd565b508086015185870152606080820151908601526080808201519086015260a0808201519086015260c0808201516111c3828801826110da565b505060e0808201516111d7828801826110da565b505061010090810151906111ed868201836110e0565b5050610120939093019290850190600101611163565b5091979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e157878503603f19018452815180516001600160a01b03168652868101518787015260408082015115159087015260609081015160809187018290529086016103008701895b60148110156112cc57888203607f19018352835180516112a18185611332565b6112ae82828f86016113f6565b958c0195948c0194601f91909101601f191601925050600101611281565b50965050509285019290850190600101611235565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113265783518352928401929184019160010161130a565b50909695505050505050565b90815260200190565b908152604060208201819052600390820152621d5c9b60ea1b606082015260800190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405181810167ffffffffffffffff811182821017156113aa57600080fd5b604052919050565b600067ffffffffffffffff8211156113c8578081fd5b5060209081020190565b600067ffffffffffffffff8211156113e8578081fd5b50601f01601f191660200190565b60005b838110156114115781810151838201526020016113f9565b83811115611420576000848401525b50505050565b6001600160a01b038116811461143b57600080fd5b50565b801515811461143b57600080fdfea26469706673582212209edead2cf5d16a9f09d7d75c5aa042cb00130c9febd0bf0e908fbf9c3f34f1a164736f6c634300060c0033";class Zb extends Ja{constructor(...e){e.length>1?super(...e):super(Kb,Yb,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Kb)}static connect(e,t){return new za(e,Kb,t)}}Zb.bytecode=Yb,Zb.abi=Kb;const Qb=[{inputs:[{internalType:"contract Governance",name:"governance",type:"address"}],name:"getAllProposals",outputs:[{components:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"},{internalType:"enum Governance.ProposalState",name:"state",type:"uint8"}],internalType:"struct GovernanceAggregator.Proposal[]",name:"proposals",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Governance",name:"governance",type:"address"},{internalType:"address[]",name:"accs",type:"address[]"}],name:"getGovernanceBalances",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Governance",name:"governance",type:"address"},{internalType:"address",name:"account",type:"address"}],name:"getUserData",outputs:[{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"latestProposalId",type:"uint256"},{internalType:"uint256",name:"latestProposalIdState",type:"uint256"},{internalType:"uint256",name:"timelock",type:"uint256"},{internalType:"address",name:"delegatee",type:"address"}],stateMutability:"view",type:"function"}],ef="0x608060405234801561001057600080fd5b50610ab8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063029fcae7146100465780639853d9221461006f578063f4eeefe91461008f575b600080fd5b61005961005436600461082b565b6100b3565b60405161006691906109e3565b60405180910390f35b61008261007d36600461072c565b6101c7565b6040516100669190610919565b6100a261009d3660046107f3565b610446565b604051610066959493929190610a30565b60608167ffffffffffffffff811180156100cc57600080fd5b506040519080825280602002602001820160405280156100f6578160200160208202803683370190505b50905060005b828110156101bf57846001600160a01b0316639ae697bf85858481811061011f57fe5b9050602002016020810190610134919061072c565b6040518263ffffffff1660e01b81526004016101509190610905565b60206040518083038186803b15801561016857600080fd5b505afa15801561017c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a091906108cc565b8282815181106101ac57fe5b60209081029190910101526001016100fc565b509392505050565b6060816001600160a01b031663da35c6646040518163ffffffff1660e01b815260040160206040518083038186803b15801561020257600080fd5b505afa158015610216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023a91906108cc565b67ffffffffffffffff8111801561025057600080fd5b5060405190808252806020026020018201604052801561028a57816020015b6102776106e2565b81526020019060019003908161026f5790505b50905060005b8151811015610440576000806000806000806000808a6001600160a01b031663013cf08b8a6001016040518263ffffffff1660e01b81526004016102d49190610a27565b6101006040518083038186803b1580156102ed57600080fd5b505afa158015610301573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610325919061076b565b97509750975097509750975097509750604051806101200160405280896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001831515815260200182151581526020018c6001600160a01b0316633e4f49e68c6001016040518263ffffffff1660e01b81526004016103b69190610a27565b60206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906108ad565b600681111561041157fe5b8152508a8a8151811061042057fe5b602002602001018190525050505050505050508080600101915050610290565b50919050565b6000806000806000866001600160a01b0316639ae697bf876040518263ffffffff1660e01b815260040161047a9190610905565b60206040518083038186803b15801561049257600080fd5b505afa1580156104a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca91906108cc565b6040516317977c6160e01b81529095506001600160a01b038816906317977c61906104f9908990600401610905565b60206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054991906108cc565b935083156105db57604051631f27a4f360e11b81526001600160a01b03881690633e4f49e69061057d908790600401610a27565b60206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd91906108ad565b60068111156105d857fe5b92505b60405163a72edda360e01b81526001600160a01b0388169063a72edda390610607908990600401610905565b60206040518083038186803b15801561061f57600080fd5b505afa158015610633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065791906108cc565b604051631976849960e21b81529092506001600160a01b038816906365da126490610686908990600401610905565b60206040518083038186803b15801561069e57600080fd5b505afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d6919061074f565b90509295509295909350565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b60006020828403121561073d578081fd5b813561074881610a5c565b9392505050565b600060208284031215610760578081fd5b815161074881610a5c565b600080600080600080600080610100898b031215610787578384fd5b885161079281610a5c565b60208a01519098506107a381610a5c565b8097505060408901519550606089015194506080890151935060a0890151925060c08901516107d181610a74565b60e08a01519092506107e281610a74565b809150509295985092959890939650565b60008060408385031215610805578182fd5b823561081081610a5c565b9150602083013561082081610a5c565b809150509250929050565b60008060006040848603121561083f578283fd5b833561084a81610a5c565b9250602084013567ffffffffffffffff80821115610866578384fd5b818601915086601f830112610879578384fd5b813581811115610887578485fd5b876020808302850101111561089a578485fd5b6020830194508093505050509250925092565b6000602082840312156108be578081fd5b815160078110610748578182fd5b6000602082840312156108dd578081fd5b5051919050565b6001600160a01b03169052565b15159052565b6007811061090157fe5b9052565b6001600160a01b0391909116815260200190565b602080825282518282018190526000919060409081850190868401855b828110156109d657815180516001600160a01b031685528681015161095d888701826108e4565b508086015185870152606080820151908601526080808201519086015260a0808201519086015260c080820151610996828801826108f1565b505060e0808201516109aa828801826108f1565b505061010090810151906109c0868201836108f7565b5050610120939093019290850190600101610936565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610a1b578351835292840192918401916001016109ff565b50909695505050505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6001600160a01b0381168114610a7157600080fd5b50565b8015158114610a7157600080fdfea2646970667358221220c68e065ff95a2c91c1e5904ff4ba8c709291d5227b10049b437e89d35c33af4d64736f6c634300060c0033";class tf extends Ja{constructor(...e){e.length>1?super(...e):super(Qb,ef,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Qb)}static connect(e,t){return new za(e,Qb,t)}}tf.bytecode=ef,tf.abi=Qb;var af=Object.freeze({__proto__:null,Aggregator__factory:Zb,GovernanceAggregator__factory:tf,relayerAggregatorSol:Jb});const nf=[{inputs:[{internalType:"contract IDeployer",name:"_deployer",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"addr",type:"address"}],name:"Deployed",type:"event"},{inputs:[{internalType:"bytes",name:"_initCode",type:"bytes"},{internalType:"bytes32",name:"_salt",type:"bytes32"}],name:"deploy",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"contract IDeployer",name:"",type:"address"}],stateMutability:"view",type:"function"}],bf="0x60a060405234801561001057600080fd5b506040516103a93803806103a98339818101604052602081101561003357600080fd5b50516001600160a01b0381161561004a5780610060565b73ce0042b868300000d44a59004da54a005ffdcf9f5b60601b6001600160601b031916608052604051309032907f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec2090600090a35060805160601c6102e96100c06000398061010d528061029152506102e96000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634af63f021461003b578063d5f39488146100e5575b600080fd5b6100e36004803603604081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610109915050565b005b6100ed61028f565b604080516001600160a01b039092168252519081900360200190f35b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634af63f0284846040518363ffffffff1660e01b81526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561018e578181015183820152602001610176565b50505050905090810190601f1680156101bb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d602081101561020557600080fd5b505190506001600160a01b038116610254576040805162461bcd60e51b815260206004820152600d60248201526c11195c1b1bde4819985a5b1959609a1b604482015290519081900360640190fd5b6040516001600160a01b0382169033907f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec2090600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000008156fea26469706673582212209824ac82969e56106968b899123a2ecac48f942b4ed3dcae2ced58022879d32364736f6c634300060c0033";class ff extends Ja{constructor(...e){e.length>1?super(...e):super(nf,bf,e[0])}getDeployTransaction(e,t){return super.getDeployTransaction(e,t||{})}deploy(e,t){return super.deploy(e,t||{})}connect(e){return super.connect(e)}static createInterface(){return new na(nf)}static connect(e,t){return new za(e,nf,t)}}ff.bytecode=bf,ff.abi=nf;const df=[{inputs:[{internalType:"bytes",name:"_initCode",type:"bytes"},{internalType:"bytes32",name:"_salt",type:"bytes32"}],name:"deploy",outputs:[{internalType:"address payable",name:"createdContract",type:"address"}],stateMutability:"nonpayable",type:"function"}];class sf{static createInterface(){return new na(df)}static connect(e,t){return new za(e,df,t)}}sf.abi=df;var cf=Object.freeze({__proto__:null,Deployer__factory:ff,IDeployer__factory:sf});const rf=[{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address",name:"_spender",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"}],name:"approveExactToken",outputs:[],stateMutability:"nonpayable",type:"function"}];class pf{static createInterface(){return new na(rf)}static connect(e,t){return new za(e,rf,t)}}pf.abi=rf;const uf=[{inputs:[{internalType:"address",name:"_governance",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract ITornadoInstance",name:"instance",type:"address"},{indexed:!1,internalType:"enum InstanceRegistry.InstanceState",name:"state",type:"uint8"}],name:"InstanceStateUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"tornadoRouter",type:"address"}],name:"RouterRegistered",type:"event"},{inputs:[],name:"getAllInstanceAddresses",outputs:[{internalType:"contract ITornadoInstance[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAllInstances",outputs:[{components:[{internalType:"contract ITornadoInstance",name:"addr",type:"address"},{components:[{internalType:"bool",name:"isERC20",type:"bool"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"enum InstanceRegistry.InstanceState",name:"state",type:"uint8"},{internalType:"uint24",name:"uniswapPoolSwappingFee",type:"uint24"},{internalType:"uint32",name:"protocolFeePercentage",type:"uint32"}],internalType:"struct InstanceRegistry.Instance",name:"instance",type:"tuple"}],internalType:"struct InstanceRegistry.Tornado[]",name:"result",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"instance",type:"address"}],name:"getPoolToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"contract ITornadoInstance",name:"addr",type:"address"},{components:[{internalType:"bool",name:"isERC20",type:"bool"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"enum InstanceRegistry.InstanceState",name:"state",type:"uint8"},{internalType:"uint24",name:"uniswapPoolSwappingFee",type:"uint24"},{internalType:"uint32",name:"protocolFeePercentage",type:"uint32"}],internalType:"struct InstanceRegistry.Instance",name:"instance",type:"tuple"}],internalType:"struct InstanceRegistry.Tornado[]",name:"_instances",type:"tuple[]"},{internalType:"address",name:"_router",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"instanceIds",outputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],name:"instances",outputs:[{internalType:"bool",name:"isERC20",type:"bool"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"enum InstanceRegistry.InstanceState",name:"state",type:"uint8"},{internalType:"uint24",name:"uniswapPoolSwappingFee",type:"uint24"},{internalType:"uint32",name:"protocolFeePercentage",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_instanceId",type:"uint256"}],name:"removeInstance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"contract ITornadoRouter",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"instance",type:"address"},{internalType:"uint32",name:"newFee",type:"uint32"}],name:"setProtocolFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"routerAddress",type:"address"}],name:"setTornadoRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"contract ITornadoInstance",name:"addr",type:"address"},{components:[{internalType:"bool",name:"isERC20",type:"bool"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"enum InstanceRegistry.InstanceState",name:"state",type:"uint8"},{internalType:"uint24",name:"uniswapPoolSwappingFee",type:"uint24"},{internalType:"uint32",name:"protocolFeePercentage",type:"uint32"}],internalType:"struct InstanceRegistry.Instance",name:"instance",type:"tuple"}],internalType:"struct InstanceRegistry.Tornado",name:"_tornado",type:"tuple"}],name:"updateInstance",outputs:[],stateMutability:"nonpayable",type:"function"}],of="0x60a060405234801561001057600080fd5b5060405161146738038061146783398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c6113c46100a3600039806103e552806105c052806105ed528061073a52806107e652506113c46000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636c9be937116100715780636c9be9371461014d578063908e3b371461016057806392b65a4114610173578063b5b899b714610186578063cf552c8914610199578063f887ea40146101ac576100b4565b8063032bb443146100b957806310c13ac3146100e65780631ad058a9146100fb5780634ba16d9d1461011057806352c228e3146101235780635aa6e67514610138575b600080fd5b6100cc6100c7366004610e89565b6101b4565b6040516100dd959493929190611194565b60405180910390f35b6100ee6101fe565b6040516100dd9190611097565b61010e610109366004610ec8565b6102af565b005b61010e61011e366004610e89565b6103da565b61012b61047f565b6040516100dd91906110e4565b6101406105be565b6040516100dd9190611069565b61010e61015b366004610fd3565b6105e2565b61014061016e366004610e89565b610709565b61010e610181366004610f80565b61072f565b610140610194366004611005565b6107b4565b61010e6101a7366004611005565b6107db565b610140610a77565b60016020526000908152604090205460ff8082169161010081046001600160a01b031691600160a81b82041690600160b01b810462ffffff1690600160c81b900463ffffffff1685565b60025460609067ffffffffffffffff8111801561021a57600080fd5b50604051908082528060200260200182016040528015610244578160200160208202803683370190505b50905060005b6002548110156102ab576002818154811061026157fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061028b57fe5b6001600160a01b039092166020928302919091019091015260010161024a565b5090565b600054610100900460ff16806102c857506102c8610a8c565b806102d6575060005460ff16155b6102fb5760405162461bcd60e51b81526004016102f290611214565b60405180910390fd5b600054610100900460ff16158015610326576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038516021781555b83518110156103c25761036e84828151811061036157fe5b6020026020010151610a92565b600284828151811061037c57fe5b6020908102919091018101515182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610349565b5080156103d5576000805461ff00191690555b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104225760405162461bcd60e51b81526004016102f2906112c2565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517f94df8c3a8087dce110e5fbc5acf380c83c94bbd31b2c8ed4c08e1396a696e1a890610474908390611069565b60405180910390a150565b60025460609067ffffffffffffffff8111801561049b57600080fd5b506040519080825280602002602001820160405280156104d557816020015b6104c2610d64565b8152602001906001900390816104ba5790505b50905060005b6002548110156102ab576000600282815481106104f457fe5b60009182526020808320909101546040805180820182526001600160a01b03928316808252808652600180865295839020835160a081018552815460ff8082161515835261010082049097168289015292985092969587019592949093850192600160a81b909204169081111561056757fe5b600181111561057257fe5b81529054600160b01b810462ffffff166020830152600160c81b900463ffffffff16604090910152905283518490849081106105aa57fe5b6020908102919091010152506001016104db565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461062a5760405162461bcd60e51b81526004016102f2906112c2565b600061063c6080830160608401610fb8565b600181111561064757fe5b14156106655760405162461bcd60e51b81526004016102f29061128b565b6000600160006106786020850185610e89565b6001600160a01b03168152602081019190915260400160002054600160a81b900460ff1660018111156106a757fe5b14156106ef5760026106bc6020830183610e89565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b61070661070136839003830183610fea565b610a92565b50565b6001600160a01b038082166000908152600160205260409020546101009004165b919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107775760405162461bcd60e51b81526004016102f2906112c2565b6001600160a01b039091166000908152600160205260409020805463ffffffff909216600160c81b0263ffffffff60c81b19909216919091179055565b600281815481106107c157fe5b6000918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108235760405162461bcd60e51b81526004016102f2906112c2565b60006002828154811061083257fe5b60009182526020808320909101546001600160a01b03908116808452600190925260409092205490925060ff8116916101009091041681156109705760008054604051636eb1769f60e11b81526001600160a01b038085169263dd62ed3e926108aa926201000090920490911690889060040161107d565b60206040518083038186803b1580156108c257600080fd5b505afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa919061101d565b9050801561096e5760008054604051633ef1078360e01b8152620100009091046001600160a01b031691633ef107839161093b9186918991906004016111db565b600060405180830381600087803b15801561095557600080fd5b505af1158015610969573d6000803e3d6000fd5b505050505b505b6001600160a01b038316600090815260016020526040902080546001600160e81b03191690556002805460001981019081106109a857fe5b600091825260209091200154600280546001600160a01b0390921691869081106109ce57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610a0757fe5b6001900381819060005260206000200160006101000a8154906001600160a01b0302191690559055826001600160a01b03167f02826f62d88a4d9f1978eb9c06f8663f642d032908e65a915d5898f3585421c06000604051610a6991906111ff565b60405180910390a250505050565b6000546201000090046001600160a01b031681565b303b1590565b60208181015182516001600160a01b0390811660009081526001808552604091829020845181549686015160ff1990971690151517610100600160a81b0319166101009690941695909502929092178085559083015192939291839160ff60a81b191690600160a81b908490811115610b0757fe5b02179055506060820151815460809093015163ffffffff16600160c81b0263ffffffff60c81b1962ffffff909216600160b01b0262ffffff60b01b19909416939093171691909117905560208101515115610d1457600081600001516001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190610eac565b90508160200151602001516001600160a01b0316816001600160a01b031614610c0e5760405162461bcd60e51b81526004016102f290611262565b600080548351604051636eb1769f60e11b81526001600160a01b038086169363dd62ed3e93610c4b9362010000909204909216919060040161107d565b60206040518083038186803b158015610c6357600080fd5b505afa158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b919061101d565b905080610d11576000548351604051633ef1078360e01b8152620100009092046001600160a01b031691633ef1078391610cde91869190600019906004016111db565b600060405180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050505b50505b80600001516001600160a01b03167f02826f62d88a4d9f1978eb9c06f8663f642d032908e65a915d5898f3585421c0826020015160400151604051610d5991906111ff565b60405180910390a250565b604051806040016040528060006001600160a01b03168152602001610d87610d8c565b905290565b6040805160a0810182526000808252602082018190529091820190815260006020820181905260409091015290565b8035610dc681611348565b92915050565b803560028110610dc657600080fd5b600081830360c0811215610ded578182fd5b610df760406112ea565b91508235610e0481611348565b825260a0601f1982011215610e1857600080fd5b50610e2360a06112ea565b6020830135610e318161135d565b81526040830135610e4181611348565b6020820152610e538460608501610dcc565b60408201526080830135610e668161136b565b606082015260a0830135610e798161137c565b6080820152602082015292915050565b600060208284031215610e9a578081fd5b8135610ea581611348565b9392505050565b600060208284031215610ebd578081fd5b8151610ea581611348565b60008060408385031215610eda578081fd5b823567ffffffffffffffff811115610ef0578182fd5b8301601f81018513610f00578182fd5b8035610f13610f0e82611311565b6112ea565b808282526020808301925080850160c08a838288028901011115610f35578788fd5b8796505b85871015610f6157610f4b8b83610ddb565b8552600196909601959382019390810190610f39565b5050819650610f7289828a01610dbb565b955050505050509250929050565b60008060408385031215610f92578182fd5b8235610f9d81611348565b91506020830135610fad8161137c565b809150509250929050565b600060208284031215610fc9578081fd5b610ea58383610dcc565b600060c08284031215610fe4578081fd5b50919050565b600060c08284031215610ffb578081fd5b610ea58383610ddb565b600060208284031215611016578081fd5b5035919050565b60006020828403121561102e578081fd5b5051919050565b15159052565b6001600160a01b03169052565b6002811061105257fe5b9052565b62ffffff169052565b63ffffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156110d85783516001600160a01b0316835292840192918401916001016110b3565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156111875781516111158151611331565b855286015180516111299088870190611035565b868101516111398787018261103b565b5085810151606061114c81880183611048565b8201519050608061115f87820183611056565b9190910151905061117360a086018261105f565b5060c0939093019290850190600101611101565b5091979650505050505050565b85151581526001600160a01b038516602082015260a081016111b58561133d565b604083015262ffffff8416606083015263ffffffff831660808301529695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020810161120c8361133d565b825292915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600f908201526e24b731b7b93932b1ba103a37b5b2b760891b604082015260600190565b6020808252601f908201527f5573652072656d6f7665496e7374616e6365282920666f722072656d6f766500604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60405181810167ffffffffffffffff8111828210171561130957600080fd5b604052919050565b600067ffffffffffffffff821115611327578081fd5b5060209081020190565b6001600160a01b031690565b806002811061072a57fe5b6001600160a01b038116811461070657600080fd5b801515811461070657600080fd5b62ffffff8116811461070657600080fd5b63ffffffff8116811461070657600080fdfea26469706673582212207c46c875176b62100d16a46c273e615cd9eb5336dbcd238b33b227f39ff9106564736f6c634300060c0033";class yf extends Ja{constructor(...e){e.length>1?super(...e):super(uf,of,e[0])}getDeployTransaction(e,t){return super.getDeployTransaction(e,t||{})}deploy(e,t){return super.deploy(e,t||{})}connect(e){return super.connect(e)}static createInterface(){return new na(uf)}static connect(e,t){return new za(e,uf,t)}}yf.bytecode=of,yf.abi=uf;var lf=Object.freeze({__proto__:null,ITornadoRouter__factory:pf,InstanceRegistry__factory:yf});const mf=[{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Tf{static createInterface(){return new na(mf)}static connect(e,t){return new za(e,mf,t)}}Tf.abi=mf;const hf=[{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"instanceFeeWithUpdate",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"nonpayable",type:"function"}];class gf{static createInterface(){return new na(hf)}static connect(e,t){return new za(e,hf,t)}}gf.abi=hf;const wf=[{inputs:[{internalType:"address",name:"_torn",type:"address"},{internalType:"address",name:"_governance",type:"address"},{internalType:"address",name:"_ens",type:"address"},{internalType:"address",name:"_staking",type:"address"},{internalType:"address",name:"_feeManager",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"minStakeAmount",type:"uint256"}],name:"MinimumStakeAmount",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"}],name:"RelayerBalanceNullified",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"relayer",type:"bytes32"},{indexed:!1,internalType:"string",name:"ensName",type:"string"},{indexed:!1,internalType:"address",name:"relayerAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"stakedAmount",type:"uint256"}],name:"RelayerRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"}],name:"RelayerUnregistered",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"tornadoRouter",type:"address"}],name:"RouterRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"amountStakeAdded",type:"uint256"}],name:"StakeAddedToRelayer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"uint256",name:"amountBurned",type:"uint256"}],name:"StakeBurned",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"address",name:"worker",type:"address"}],name:"WorkerRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"relayer",type:"address"},{indexed:!1,internalType:"address",name:"worker",type:"address"}],name:"WorkerUnregistered",type:"event"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"relayer",type:"address"},{internalType:"contract ITornadoInstance",name:"pool",type:"address"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"ens",outputs:[{internalType:"contract IENS",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeManager",outputs:[{internalType:"contract IFeeManager",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"}],name:"getRelayerBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"}],name:"getRelayerEnsHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tornadoRouter",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"toResolve",type:"address"}],name:"isRelayer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"address",name:"toResolve",type:"address"}],name:"isRelayerRegistered",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"minStakeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"}],name:"nullifyBalance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"ensName",type:"string"},{internalType:"uint256",name:"stake",type:"uint256"},{internalType:"address[]",name:"workersToRegister",type:"address[]"}],name:"register",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"ensName",type:"string"},{internalType:"uint256",name:"stake",type:"uint256"},{internalType:"address[]",name:"workersToRegister",type:"address[]"},{internalType:"address",name:"relayer",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"registerPermit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"address",name:"worker",type:"address"}],name:"registerWorker",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"relayers",outputs:[{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"bytes32",name:"ensHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"minAmount",type:"uint256"}],name:"setMinStakeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tornadoRouterAddress",type:"address"}],name:"setTornadoRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"uint256",name:"stake",type:"uint256"}],name:"stakeToRelayer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"uint256",name:"stake",type:"uint256"},{internalType:"address",name:"staker",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"stakeToRelayerPermit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"staking",outputs:[{internalType:"contract TornadoStakingRewards",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tornadoRouter",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"}],name:"unregisterRelayer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"worker",type:"address"}],name:"unregisterWorker",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"workers",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],vf="0x6101206040523480156200001257600080fd5b5060405162001fab38038062001fab83398101604081905262000035916200006d565b6001600160601b0319606095861b811660805293851b841660a05291841b831660c052831b821660e05290911b166101005262000105565b600080600080600060a0868803121562000085578081fd5b85516200009281620000ec565b6020870151909550620000a581620000ec565b6040870151909450620000b881620000ec565b6060870151909350620000cb81620000ec565b6080870151909250620000de81620000ec565b809150509295509295909350565b6001600160a01b03811681146200010257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c611e1662000195600039806106785280610bf352508061075452806108af5280610ea852806111685250806105625280610f99525080610351528061080952806108dc52806109e75280610ce4525080610a205280610aa95280610c375280610e8552806111455250611e166000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80635aa6e675116100de578063c4d66de811610097578063e37e8bcc11610071578063e37e8bcc14610305578063e43fdb3c14610318578063eb4af0451461032b578063f18876841461033e57610173565b8063c4d66de8146102d7578063d0fb0203146102ea578063d990231d146102f257610173565b80635aa6e6751461026e57806385a2968314610276578063adf898a414610289578063ae53941c14610291578063b69fd4ab146102b1578063b971a6bf146102c457610173565b80634ba16d9d116101305780634ba16d9d146101f75780634cb16c2e1461020a5780634cf088d9146102125780634d4efd041461021a5780635300f8411461022d578063541d55481461024e57610173565b806314d92307146101785780632e6506491461018d5780633523dc85146101a05780633f15457f146101b35780634048a257146101d157806345a11cec146101e4575b600080fd5b61018b610186366004611612565b610346565b005b61018b61019b36600461164a565b610414565b61018b6101ae366004611612565b610460565b6101bb610560565b6040516101c891906118f5565b60405180910390f35b6101bb6101df366004611612565b610584565b61018b6101f2366004611682565b61059f565b61018b610205366004611612565b6107fe565b6101bb610898565b6101bb6108ad565b61018b610228366004611612565b6108d1565b61024061023b366004611612565b6109ac565b6040516101c89291906118cb565b61026161025c366004611612565b6109c5565b6040516101c891906119a1565b6101bb6109e5565b61018b6102843660046116f7565b610a09565b6101bb610aa7565b6102a461029f366004611612565b610acb565b6040516101c891906119ac565b6102616102bf36600461164a565b610af9565b6102a46102d2366004611612565b610b20565b61018b6102e5366004611612565b610b4b565b6101bb610bf1565b61018b6103003660046116cc565b610c15565b61018b6103133660046117fc565b610c20565b61018b610326366004611785565b610cc4565b61018b6103393660046118b3565b610cd9565b6102a4610d56565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103975760405162461bcd60e51b815260040161038e90611ae4565b60405180910390fd5b6103a0816108d1565b6001600160a01b038116600090815260026020908152604080832083815560010183905560039091529081902080546001600160a01b0319169055517f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c383521906104099083906118f5565b60405180910390a150565b3360008181526003602052604090205483906001600160a01b038083169116146104505760405162461bcd60e51b815260040161038e90611c83565b61045a8484610d5c565b50505050565b6001600160a01b03811633146104a9576001600160a01b038181166000908152600360205260409020541633146104a95760405162461bcd60e51b815260040161038e90611cd8565b6001600160a01b0380821660008181526003602052604090205490911614156104e45760405162461bcd60e51b815260040161038e90611b8b565b6001600160a01b03808216600090815260036020526040908190205490517fb2a8e18b9e887f502d65c1683e60b723fa582a6903ea4e8eb23907a19c1ce8a0926105319216908490611909565b60405180910390a16001600160a01b0316600090815260036020526040902080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602052600090815260409020546001600160a01b031681565b6000546201000090046001600160a01b031633146105cf5760405162461bcd60e51b815260040161038e90611a64565b6001600160a01b03808416600090815260036020526040902054168061062d576001600160a01b0383811660009081526003602052604090205416156106275760405162461bcd60e51b815260040161038e90611be8565b506107f9565b826001600160a01b0316816001600160a01b03161461065e5760405162461bcd60e51b815260040161038e90611c83565b604051630bbefce160e21b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632efbf384906106ad9086906004016118f5565b602060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff919061162e565b6001600160a01b03858116600090815260026020526040902054911691506107279082610df5565b6001600160a01b038086166000908152600260205260409081902092909255905163338610af60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063338610af9061078b9084906004016119ac565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050507f659f33fc6677bebf3a9bf3101092792e31f35766d0358e54577bdd91a655f6a084826040516107ee929190611988565b60405180910390a150505b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108465760405162461bcd60e51b815260040161038e90611ae4565b6000805462010000600160b01b031916620100006001600160a01b038416021790556040517f94df8c3a8087dce110e5fbc5acf380c83c94bbd31b2c8ed4c08e1396a696e1a8906104099083906118f5565b6000546201000090046001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109195760405162461bcd60e51b815260040161038e90611ae4565b6001600160a01b038082166000818152600360205260409020549091169081146109555760405162461bcd60e51b815260040161038e90611d74565b6001600160a01b03811660009081526002602052604080822091909155517fafa759fb3c68e89eaaba359f0930ab40c24875b73cc9e2f6a38b0180019eb8f3906109a09084906118f5565b60405180910390a15050565b6002602052600090815260409020805460019091015482565b6001600160a01b0390811660009081526003602052604090205416151590565b7f000000000000000000000000000000000000000000000000000000000000000081565b60405163d505accf60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90610a6190889030908b908a908a908a908a90600401611947565b600060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b50505050610a9e858888610e3e565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03908116600090815260036020908152604080832054909316825260029052206001015490565b6001600160a01b038181166000908152600360205260409020548116908316145b92915050565b6001600160a01b03908116600090815260036020908152604080832054909316825260029052205490565b600054610100900460ff1680610b645750610b64610f4c565b80610b72575060005460ff16155b610b8e5760405162461bcd60e51b815260040161038e90611b3d565b600054610100900460ff16158015610bb9576000805460ff1961ff0019909116610100171660011790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610bed576000805461ff00191690555b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bed338383610e3e565b60405163d505accf60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90610c7890889030908d908a908a908a908a90600401611947565b600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b50505050610cb8858b8b8b8b8b610f52565b50505050505050505050565b610cd2338686868686610f52565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d215760405162461bcd60e51b815260040161038e90611ae4565b60018190556040517f404663163d528ec45288abc4389b81bd96fabf858ff57577ebd4ee7f15d7b0a6906104099083906119ac565b60015481565b6001600160a01b038181166000908152600360205260409020541615610d945760405162461bcd60e51b815260040161038e90611b0d565b6001600160a01b038181166000908152600360205260409081902080546001600160a01b03191692851692909217909155517fcde75bd02c5f739608c891bcd9aa6809e6c4a7035ac7b9f3fd5fea756db74724906109a09084908490611909565b6000610e3783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611287565b9392505050565b6001600160a01b0380831660008181526003602052604090205490911614610e785760405162461bcd60e51b815260040161038e90611abf565b610ecd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016847f0000000000000000000000000000000000000000000000000000000000000000846112b3565b6001600160a01b038216600090815260026020526040902054610ef190829061130b565b6001600160a01b0383166000908152600260205260409081902091909155517f1275dbe2a271b2b822e60f1d44894fa5fb337e7e2dc6a200205b1a5b17c07d6490610f3f9084908490611988565b60405180910390a1505050565b303b1590565b6000610f9386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061133092505050565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302571be3836040518263ffffffff1660e01b8152600401610fe391906119ac565b60206040518083038186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611033919061162e565b905073d4416b13d2b3a9abae7acd5d6c2bbdbe256864016001600160a01b0382168114156110735760405162461bcd60e51b815260040161038e90611c15565b816001600160a01b0316896001600160a01b0316146110a45760405162461bcd60e51b815260040161038e90611ca9565b6001600160a01b0389811660009081526003602052604090205416156110dc5760405162461bcd60e51b815260040161038e90611bbb565b6001600160a01b03891660009081526002602052604090206001810154156111165760405162461bcd60e51b815260040161038e90611a38565b6001548710156111385760405162461bcd60e51b815260040161038e90611d50565b61118d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b7f00000000000000000000000000000000000000000000000000000000000000008a6112b3565b7f1275dbe2a271b2b822e60f1d44894fa5fb337e7e2dc6a200205b1a5b17c07d648a886040516111be929190611988565b60405180910390a1868155600181018490556001600160a01b038a16600081815260036020526040812080546001600160a01b0319169092179091555b8581101561123b57600087878381811061121157fe5b90506020020160208101906112269190611612565b90506112328c82610d5c565b506001016111fb565b507f9ca7c9c762eff27b021608f232b4c4b8f9b8bf9a3d322297e47cc4209a67d5e2848a8a8d8b6040516112739594939291906119b5565b60405180910390a150505050505050505050565b600081848411156112ab5760405162461bcd60e51b815260040161038e9190611a05565b505050900390565b61045a846323b872dd60e01b8585856040516024016112d493929190611923565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261133d565b600082820183811015610e375760405162461bcd60e51b815260040161038e90611a88565b6000610b1a8260006113cc565b6060611392826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114369092919063ffffffff16565b8051909150156107f957808060200190518101906113b09190611765565b6107f95760405162461bcd60e51b815260040161038e90611d06565b6000818351116113de57506000610b1a565b60006113ea848461144d565b90506113fb848285016001016113cc565b611406858584611492565b6040516020016114179291906118cb565b6040516020818303038152906040528051906020012091505092915050565b606061144584846000856114ae565b949350505050565b6000805b8351818401141580156114855750838184018151811061146d57fe5b6020910101516001600160f81b031916601760f91b14155b15610e3757600101611451565b6000835182840111156114a457600080fd5b5091016020012090565b60606114b985611572565b6114d55760405162461bcd60e51b815260040161038e90611c4c565b60006060866001600160a01b031685876040516114f291906118d9565b60006040518083038185875af1925050503d806000811461152f576040519150601f19603f3d011682016040523d82523d6000602084013e611534565b606091505b509150915081156115485791506114459050565b8051156115585780518082602001fd5b8360405162461bcd60e51b815260040161038e9190611a05565b3b151590565b60008083601f840112611589578182fd5b50813567ffffffffffffffff8111156115a0578182fd5b60208301915083602080830285010111156115ba57600080fd5b9250929050565b60008083601f8401126115d2578182fd5b50813567ffffffffffffffff8111156115e9578182fd5b6020830191508360208285010111156115ba57600080fd5b803560ff81168114610b1a57600080fd5b600060208284031215611623578081fd5b8135610e3781611dc8565b60006020828403121561163f578081fd5b8151610e3781611dc8565b6000806040838503121561165c578081fd5b823561166781611dc8565b9150602083013561167781611dc8565b809150509250929050565b600080600060608486031215611696578081fd5b83356116a181611dc8565b925060208401356116b181611dc8565b915060408401356116c181611dc8565b809150509250925092565b600080604083850312156116de578182fd5b82356116e981611dc8565b946020939093013593505050565b600080600080600080600060e0888a031215611711578283fd5b873561171c81611dc8565b965060208801359550604088013561173381611dc8565b9450606088013593506117498960808a01611601565b925060a0880135915060c0880135905092959891949750929550565b600060208284031215611776578081fd5b81518015158114610e37578182fd5b60008060008060006060868803121561179c578081fd5b853567ffffffffffffffff808211156117b3578283fd5b6117bf89838a016115c1565b90975095506020880135945060408801359150808211156117de578283fd5b506117eb88828901611578565b969995985093965092949392505050565b6000806000806000806000806000806101008b8d03121561181b578283fd5b8a3567ffffffffffffffff80821115611832578485fd5b61183e8e838f016115c1565b909c509a5060208d0135995060408d013591508082111561185d578485fd5b5061186a8d828e01611578565b90985096505060608b013561187e81611dc8565b945060808b013593506118948c60a08d01611601565b925060c08b0135915060e08b013590509295989b9194979a5092959850565b6000602082840312156118c4578081fd5b5035919050565b918252602082015260400190565b600082516118eb818460208701611d9c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600086825260806020830152846080830152848660a084013760a08583018101919091526001600160a01b039390931660408201526060810191909152601f909201601f19169091010192915050565b6000602082528251806020840152611a24816040850160208701611d9c565b601f01601f19169190910160400192915050565b6020808252601290820152717265676973746572656420616c726561647960701b604082015260600190565b6020808252600a90820152696f6e6c792070726f787960b01b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600b908201526a085c9959da5cdd195c995960aa1b604082015260600190565b6020808252600f908201526e6f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526016908201527563616e277420737465616c20616e206164647265737360501b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526016908201527531b0b73a103ab73932b3b4b9ba32b91036b0b9ba32b960511b604082015260600190565b60208082526013908201527231b0b73a103932b3b4b9ba32b91030b3b0b4b760691b604082015260600190565b60208082526013908201527227b7363c9031bab9ba37b6903932b630bcb2b960691b604082015260600190565b6020808252601a908201527f6f6e6c7920756e7772617070656420656e7320646f6d61696e73000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600c908201526b37b7363c903932b630bcb2b960a11b604082015260600190565b60208082526015908201527437b7363c9032b739903237b6b0b4b71037bbb732b960591b604082015260600190565b60208082526014908201527337b7363c9037bbb732b91037b3103bb7b935b2b960611b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600a9082015269216d696e5f7374616b6560b01b604082015260600190565b6020808252600e908201526d36bab9ba1031329036b0b9ba32b960911b604082015260600190565b60005b83811015611db7578181015183820152602001611d9f565b8381111561045a5750506000910152565b6001600160a01b0381168114611ddd57600080fd5b5056fea26469706673582212206f4cc4f67dba9ba55aab193d3511cc31e3b32c37cef7bd7df74b3ebff2b3ca5b64736f6c634300060c0033";class Mf extends Ja{constructor(...e){e.length>1?super(...e):super(wf,vf,e[0])}getDeployTransaction(e,t,a,n,b,f){return super.getDeployTransaction(e,t,a,n,b,f||{})}deploy(e,t,a,n,b,f){return super.deploy(e,t,a,n,b,f||{})}connect(e){return super.connect(e)}static createInterface(){return new na(wf)}static connect(e,t){return new za(e,wf,t)}}Mf.bytecode=vf,Mf.abi=wf;var _f=Object.freeze({__proto__:null,IENS__factory:Tf,IFeeManager__factory:gf,RelayerRegistry__factory:Mf});const xf=[{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"resolver",outputs:[{internalType:"contract Resolver",name:"",type:"address"}],stateMutability:"view",type:"function"}];class If{static createInterface(){return new na(xf)}static connect(e,t){return new za(e,xf,t)}}If.abi=xf;const Ef=[{inputs:[{internalType:"bytes32[]",name:"domains",type:"bytes32[]"}],name:"bulkResolve",outputs:[{internalType:"address[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"resolve",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],Rf="0x608060405234801561001057600080fd5b5061036d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635c23bdf51461003b578063f9e5423414610074575b600080fd5b6100586004803603602081101561005157600080fd5b5035610167565b604080516001600160a01b039092168252519081900360200190f35b6101176004803603602081101561008a57600080fd5b8101906020810181356401000000008111156100a557600080fd5b8201836020820111156100b757600080fd5b803590602001918460208302840111640100000000831117156100d957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610292945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561015357818101518382015260200161013b565b505050509050019250505060405180910390f35b600080610172610333565b60011461019357738595bfb0d940dfedc98943fa8a907091203f25ee6101a4565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b9050806001600160a01b0316630178b8bf846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101ea57600080fd5b505afa1580156101fe573d6000803e3d6000fd5b505050506040513d602081101561021457600080fd5b505160408051631d9dabef60e11b81526004810186905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d602081101561028957600080fd5b50519392505050565b6060815167ffffffffffffffff811180156102ac57600080fd5b506040519080825280602002602001820160405280156102d6578160200160208202803683370190505b50905060005b825181101561032d576103018382815181106102f457fe5b6020026020010151610167565b82828151811061030d57fe5b6001600160a01b03909216602092830291909101909101526001016102dc565b50919050565b469056fea26469706673582212201849a5e31df8347ec61f3d54e8cef603101becea24443df7d4e43cc42ff12a7564736f6c634300060c0033";class Of extends Ja{constructor(...e){e.length>1?super(...e):super(Ef,Rf,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Ef)}static connect(e,t){return new za(e,Ef,t)}}Of.bytecode=Rf,Of.abi=Ef;const kf=[{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"addr",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Pf{static createInterface(){return new na(kf)}static connect(e,t){return new za(e,kf,t)}}Pf.abi=kf;var Af=Object.freeze({__proto__:null,ENS__factory:If,EnsResolve__factory:Of,Resolver__factory:Pf});const Nf=[{inputs:[{internalType:"bytes32",name:"tokenAddress",type:"bytes32"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Airdrop.Recipient[]",name:"targets",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"bytes32[]",name:"domains",type:"bytes32[]"}],name:"bulkResolve",outputs:[{internalType:"address[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"addr",type:"bytes32"}],name:"resolve",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],Cf="0x608060405234801561001057600080fd5b5060405161039938038061039983398101604081905261002f91610220565b8181600061003c836101aa565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161006c91906102e4565b60206040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bc91906102cc565b116100e25760405162461bcd60e51b81526004016100d990610311565b60405180910390fd5b60005b82518110156101a557816001600160a01b031663a9059cbb84838151811061010957fe5b60200260200101516000015185848151811061012157fe5b6020026020010151602001516040518363ffffffff1660e01b815260040161014a9291906102f8565b602060405180830381600087803b15801561016457600080fd5b505af1158015610178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019c91906101f9565b506001016100e5565b506000ff5b60601c90565b6000604082840312156101c1578081fd5b6101cb6040610353565b82519091506001600160a01b03811681146101e557600080fd5b808252506020820151602082015292915050565b60006020828403121561020a578081fd5b81518015158114610219578182fd5b9392505050565b6000806040808486031215610233578182fd5b8351602080860151919450906001600160401b03811115610252578384fd5b8501601f81018713610262578384fd5b805161027561027082610379565b610353565b81815283810190838501868402850186018b1015610291578788fd5b8794505b838510156102bb576102a78b826101b0565b835260019490940193918501918601610295565b508096505050505050509250929050565b6000602082840312156102dd578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60208082526022908201527f42616c616e636520697320302c2061697264726f7020616c726561647920646f6040820152616e6560f01b606082015260800190565b6040518181016001600160401b038111828210171561037157600080fd5b604052919050565b60006001600160401b0382111561038e578081fd5b506020908102019056fe";class Df extends Ja{constructor(...e){e.length>1?super(...e):super(Nf,Cf,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Nf)}static connect(e,t){return new za(e,Nf,t)}}Df.bytecode=Cf,Df.abi=Nf;const Sf=[{inputs:[{internalType:"bytes32",name:"_node",type:"bytes32"}],name:"addr",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"registry",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"resolver",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_node",type:"bytes32"},{internalType:"address",name:"_addr",type:"address"}],name:"setAddr",outputs:[],stateMutability:"nonpayable",type:"function"}],Uf="0x608060405234801561001057600080fd5b5061044b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630178b8bf1461005c5780633b3b57de146100855780637ef5029814610098578063ac9650d8146100ab578063d5fa2b00146100cb575b600080fd5b61006f61006a3660046102bc565b6100e0565b60405161007c919061031e565b60405180910390f35b61006f6100933660046102bc565b6100e5565b61006f6100a63660046102bc565b610100565b6100be6100b936600461024d565b61011b565b60405161007c9190610332565b6100de6100d93660046102d4565b61021f565b005b503090565b6000908152602081905260409020546001600160a01b031690565b6000602081905290815260409020546001600160a01b031681565b60608167ffffffffffffffff8111801561013457600080fd5b5060405190808252806020026020018201604052801561016857816020015b60608152602001906001900390816101535790505b50905060005b8281101561021857600060603086868581811061018757fe5b905060200281019061019991906103c9565b6040516101a792919061030e565b600060405180830381855af49150503d80600081146101e2576040519150601f19603f3d011682016040523d82523d6000602084013e6101e7565b606091505b5091509150816101f657600080fd5b8084848151811061020357fe5b6020908102919091010152505060010161016e565b5092915050565b60009182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000806020838503121561025f578182fd5b823567ffffffffffffffff80821115610276578384fd5b818501915085601f830112610289578384fd5b813581811115610297578485fd5b86602080830285010111156102aa578485fd5b60209290920196919550909350505050565b6000602082840312156102cd578081fd5b5035919050565b600080604083850312156102e6578182fd5b8235915060208301356001600160a01b0381168114610303578182fd5b809150509250929050565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156103bc57878503603f1901845281518051808752885b8181101561038c578281018901518882018a01528801610371565b8181111561039c578989838a0101525b50601f01601f191695909501860194509285019290850190600101610357565b5092979650505050505050565b6000808335601e198436030181126103df578283fd5b83018035915067ffffffffffffffff8211156103f9578283fd5b60200191503681900382131561040e57600080fd5b925092905056fea26469706673582212202e44de42b72aec6265acc191876b290bc887c846ffca216ac5d28a16fd49092564736f6c634300060c0033";class Vf extends Ja{constructor(...e){e.length>1?super(...e):super(Sf,Uf,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Sf)}static connect(e,t){return new za(e,Sf,t)}}Vf.bytecode=Uf,Vf.abi=Sf;const Lf=[{inputs:[{internalType:"address",name:"_governance",type:"address"},{internalType:"uint256",name:"_pausePeriod",type:"uint256"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct TORN.Recipient[]",name:"_vesting",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"target",type:"address"}],name:"Allowed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"target",type:"address"}],name:"Disallowed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address[]",name:"target",type:"address[]"}],name:"addToAllowedList",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"allowedTransferee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burnFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canUnpauseAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainID",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"decision",type:"bool"}],name:"changeTransferability",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"fakeTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"target",type:"address[]"}],name:"removeFromAllowedList",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address payable",name:"_to",type:"address"},{internalType:"uint256",name:"_balance",type:"uint256"}],name:"rescueTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"}],name:"setChainId",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_fakeTimestamp",type:"uint256"}],name:"setFakeTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],Ff="0x60c06040523480156200001157600080fd5b506040516200298e3803806200298e8339810160408190526200003491620006d6565b604080518082018252600b81526a0a8dee4dcc2c8de86c2e6d60ab1b6020808301918252835180850190945260048452632a27a92760e11b90840152815186938693869390926200008891600391620005e4565b5080516200009e906004906020840190620005e4565b50506005805460ff1916601217905550620000b8620001f8565b506008805460ff199081169091556001600160601b0319606085901b1660a0526001600160a01b0384166000908152600960205260408120805490921660011790915583905b82518110156200017b5760008382815181106200011757fe5b60200260200101516000015190506200014f818584815181106200013757fe5b602002602001015160200151620002b460201b60201c565b6001600160a01b03166000908152600960205260409020805460ff1916600190811790915501620000fe565b506200019f836200018b62000397565b620003b360201b62000d721790919060201c565b608052620001ac620003e4565b620001b66200045b565b6a084595161401484a00000014620001eb5760405162461bcd60e51b8152600401620001e290620008a8565b60405180910390fd5b5050505050505062000946565b6000806200020562000461565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200023462000467565b805160209182012060408051808201825260018152603160f81b90840152516200028693927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918791309101620007be565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b6001600160a01b038216620002dd5760405162461bcd60e51b8152600401620001e290620008df565b620002eb6000838362000501565b6200030781600254620003b360201b62000d721790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200033a91839062000d72620003b3821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200038b90859062000916565b60405180910390a35050565b6000620003ae620005bc60201b62000d9e1760201c565b905090565b600082820183811015620003db5760405162461bcd60e51b8152600401620001e290620007ea565b90505b92915050565b60085460ff16156200040a5760405162461bcd60e51b8152600401620001e2906200087e565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862000442620005d7565b604051620004519190620007aa565b60405180910390a1565b60025490565b600b5490565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905090565b62000519838383620005b760201b620007421760201c565b62000523620005db565b15806200054857506001600160a01b03831660009081526009602052604090205460ff165b806200056c57506001600160a01b03821660009081526009602052604090205460ff165b6200058b5760405162461bcd60e51b8152600401620001e29062000858565b6001600160a01b038216301415620005b75760405162461bcd60e51b8152600401620001e29062000821565b505050565b6000600a54600014620005d257600a54620003ae565b504290565b3390565b60085460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200062757805160ff191683800117855562000657565b8280016001018555821562000657579182015b82811115620006575782518255916020019190600101906200063a565b506200066592915062000669565b5090565b5b808211156200066557600081556001016200066a565b80516001600160a01b0381168114620003de57600080fd5b600060408284031215620006aa578081fd5b620006b660406200091f565b9050620006c4838362000680565b81526020820151602082015292915050565b600080600060608486031215620006eb578283fd5b620006f7858562000680565b9250602080850151925060408086015160018060401b03808211156200071b578485fd5b818801915088601f8301126200072f578485fd5b8151818111156200073e578586fd5b6200074d85868302016200091f565b8181528581019250838601858302850187018c10156200076b578788fd5b8794505b828510156200079957620007848c8262000698565b8452600194909401939286019285016200076f565b508096505050505050509250925092565b6001600160a01b0391909116815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601c908201527f544f524e3a20696e636f727265637420646973747269627574696f6e00000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200093e57600080fd5b604052919050565b60805160a05160601c612008620009866000398061056f52806106975280610764528061081d5280610a215250806107bc5280610d2052506120086000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637ecebe0011610104578063adb61832116100a2578063d505accf11610071578063d505accf1461038d578063dc0f0d12146103a0578063dd62ed3e146103a8578063ef0e2ff4146103bb576101cf565b8063adb6183214610357578063adc879e91461035f578063c565882714610367578063cea9d26f1461037a576101cf565b806395d89b41116100de57806395d89b41146103215780639a8a059214610329578063a457c2d714610331578063a9059cbb14610344576101cf565b80637ecebe00146102e857806381893c7c146102fb578063885ad0cf1461030e576101cf565b80633c8d76d1116101715780635c975abb1161014b5780635c975abb146102a75780635d4545a0146102af57806370a08231146102c257806379cc6790146102d5576101cf565b80633c8d76d11461026a57806342966c681461027f5780635aa6e67514610292576101cf565b806318160ddd116101ad57806318160ddd1461022757806323b872dd1461022f578063313ce567146102425780633950935114610257576101cf565b806301ec0fab146101d457806306fdde03146101f2578063095ea7b314610207575b600080fd5b6101dc6103ce565b6040516101e99190611e68565b60405180910390f35b6101fa6103d4565b6040516101e99190611943565b61021a610215366004611708565b61046b565b6040516101e991906118ba565b6101dc610489565b61021a61023d366004611653565b61048f565b61024a610516565b6040516101e99190611e71565b61021a610265366004611708565b61051f565b61027d610278366004611733565b61056d565b005b61027d61028d36600461181c565b610681565b61029a610695565b6040516101e9919061188d565b61021a6106b9565b61021a6102bd3660046115ff565b6106c2565b6101dc6102d03660046115ff565b6106d7565b61027d6102e3366004611708565b6106f2565b6101dc6102f63660046115ff565b610747565b61027d6103093660046117d0565b610762565b61027d61031c366004611733565b61081b565b6101fa610922565b6101dc610983565b61021a61033f366004611708565b610989565b61021a610352366004611708565b6109f1565b6101dc610a05565b6101dc610a14565b61027d61037536600461181c565b610a1a565b61027d610388366004611808565b610a1f565b61027d61039b366004611693565b610bdd565b6101dc610d1e565b6101dc6103b636600461161b565b610d42565b61027d6103c936600461181c565b610d6d565b600a5481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104605780601f1061043557610100808354040283529160200191610460565b820191906000526020600020905b81548152906001019060200180831161044357829003601f168201915b505050505090505b90565b600061047f610478610db7565b8484610dbb565b5060015b92915050565b60025490565b600061049c848484610e6f565b61050c846104a8610db7565b61050785604051806060016040528060288152602001611f62602891396001600160a01b038a166000908152600160205260408120906104e6610db7565b6001600160a01b031681526020810191909152604001600020549190610f84565b610dbb565b5060019392505050565b60055460ff1690565b600061047f61052c610db7565b84610507856001600061053d610db7565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d72565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661059f610db7565b6001600160a01b0316146105ce5760405162461bcd60e51b81526004016105c590611de4565b60405180910390fd5b60005b815181101561067d576000600960008484815181106105ec57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d3082828151811061065857fe5b602002602001015160405161066d919061188d565b60405180910390a16001016105d1565b5050565b61069261068c610db7565b82610fb0565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085460ff1690565b60096020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b600061072482604051806060016040528060248152602001611f8a6024913961071d866103b6610db7565b9190610f84565b905061073883610732610db7565b83610dbb565b6107428383610fb0565b505050565b6001600160a01b031660009081526006602052604090205490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610794610db7565b6001600160a01b0316146107ba5760405162461bcd60e51b81526004016105c590611de4565b7f00000000000000000000000000000000000000000000000000000000000000006107e3610a05565b116108005760405162461bcd60e51b81526004016105c590611bd9565b80156108135761080e611092565b610692565b6106926110fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661084d610db7565b6001600160a01b0316146108735760405162461bcd60e51b81526004016105c590611de4565b60005b815181101561067d5760016009600084848151811061089157fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc058282815181106108fd57fe5b6020026020010151604051610912919061188d565b60405180910390a1600101610876565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104605780601f1061043557610100808354040283529160200191610460565b600b5481565b600061047f610996610db7565b8461050785604051806060016040528060258152602001611fae60259139600160006109c0610db7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610f84565b600061047f6109fe610db7565b8484610e6f565b6000610a0f610d9e565b905090565b600b5490565b600a55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a51610db7565b6001600160a01b031614610a775760405162461bcd60e51b81526004016105c590611de4565b6001600160a01b038216610a9d5760405162461bcd60e51b81526004016105c590611d58565b6001600160a01b038316610b06574760008215610ac357610abe8284611157565b610ac5565b815b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610afe573d6000803e3d6000fd5b505050610742565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610b3590309060040161188d565b60206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190611834565b905060008215610b9e57610b998284611157565b610ba0565b815b905060008111610bc25760405162461bcd60e51b81526004016105c590611e31565b610bd66001600160a01b038616858361116d565b5050505050565b83610be6610a05565b1115610c045760405162461bcd60e51b81526004016105c590611ace565b6001600160a01b0387166000908152600660209081526040808320549051610c57927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c91016118c5565b6040516020818303038152906040528051906020012090506000611901610c7c6111c3565b83604051602001610c8f93929190611868565b6040516020818303038152906040528051906020012090506000610cb582878787611202565b9050896001600160a01b0316816001600160a01b031614610ce85760405162461bcd60e51b81526004016105c590611c20565b6001600160a01b038a16600090815260066020526040902080546001019055610d128a8a8a610dbb565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b55565b600082820183811015610d975760405162461bcd60e51b81526004016105c590611a60565b9392505050565b6000600a54600014610db257600a54610a0f565b504290565b3390565b6001600160a01b038316610de15760405162461bcd60e51b81526004016105c590611cdd565b6001600160a01b038216610e075760405162461bcd60e51b81526004016105c590611a1e565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e62908590611e68565b60405180910390a3505050565b6001600160a01b038316610e955760405162461bcd60e51b81526004016105c590611c98565b6001600160a01b038216610ebb5760405162461bcd60e51b81526004016105c5906119ad565b610ec68383836112fa565b610f0381604051806060016040528060268152602001611f3c602691396001600160a01b0386166000908152602081905260409020549190610f84565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610f329082610d72565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e62908590611e68565b60008184841115610fa85760405162461bcd60e51b81526004016105c59190611943565b505050900390565b6001600160a01b038216610fd65760405162461bcd60e51b81526004016105c590611c57565b610fe2826000836112fa565b61101f81604051806060016040528060228152602001611f1a602291396001600160a01b0385166000908152602081905260409020549190610f84565b6001600160a01b0383166000908152602081905260409020556002546110459082611399565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611086908590611e68565b60405180910390a35050565b60085460ff166110b45760405162461bcd60e51b81526004016105c5906119f0565b6008805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110e7610db7565b6040516110f4919061188d565b60405180910390a1565b60085460ff16156111215760405162461bcd60e51b81526004016105c590611b6d565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e7610db7565b60008183106111665781610d97565b5090919050565b6107428363a9059cbb60e01b848460405160240161118c9291906118a1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526113db565b600080600760006111d2610a14565b8152602081019190915260400160002054905080156111f2579050610468565b6111fa61146a565b915050610468565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112445760405162461bcd60e51b81526004016105c590611b2b565b8360ff16601b148061125957508360ff16601c145b6112755760405162461bcd60e51b81526004016105c590611b97565b60006001868686866040516000815260200160405260405161129a9493929190611925565b6020604051602081039080840390855afa1580156112bc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112ef5760405162461bcd60e51b81526004016105c590611976565b90505b949350505050565b611305838383610742565b61130d6106b9565b158061133157506001600160a01b03831660009081526009602052604090205460ff165b8061135457506001600160a01b03821660009081526009602052604090205460ff165b6113705760405162461bcd60e51b81526004016105c590611b05565b6001600160a01b0382163014156107425760405162461bcd60e51b81526004016105c590611a97565b6000610d9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f84565b6060611430826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115209092919063ffffffff16565b805190915015610742578080602001905181019061144e91906117ec565b6107425760405162461bcd60e51b81526004016105c590611d9a565b600080611475610a14565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6114a26103d4565b805160209182012060408051808201825260018152603160f81b90840152516114f293927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69187913091016118f9565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b60606112f284846000856060611535856115ee565b6115515760405162461bcd60e51b81526004016105c590611d21565b60006060866001600160a01b0316858760405161156e919061184c565b60006040518083038185875af1925050503d80600081146115ab576040519150601f19603f3d011682016040523d82523d6000602084013e6115b0565b606091505b509150915081156115c45791506112f29050565b8051156115d45780518082602001fd5b8360405162461bcd60e51b81526004016105c59190611943565b3b151590565b803561048381611ef6565b600060208284031215611610578081fd5b8135610d9781611ef6565b6000806040838503121561162d578081fd5b823561163881611ef6565b9150602083013561164881611ef6565b809150509250929050565b600080600060608486031215611667578081fd5b833561167281611ef6565b9250602084013561168281611ef6565b929592945050506040919091013590565b600080600080600080600060e0888a0312156116ad578283fd5b87356116b881611ef6565b965060208801356116c881611ef6565b95506040880135945060608801359350608088013560ff811681146116eb578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561171a578182fd5b823561172581611ef6565b946020939093013593505050565b60006020808385031215611745578182fd5b823567ffffffffffffffff81111561175b578283fd5b8301601f8101851361176b578283fd5b803561177e61177982611ea6565b611e7f565b818152838101908385018584028501860189101561179a578687fd5b8694505b838510156117c4576117b089826115f4565b83526001949094019391850191850161179e565b50979650505050505050565b6000602082840312156117e1578081fd5b8135610d9781611f0b565b6000602082840312156117fd578081fd5b8151610d9781611f0b565b600080600060608486031215611667578283fd5b60006020828403121561182d578081fd5b5035919050565b600060208284031215611845578081fd5b5051919050565b6000825161185e818460208701611ec6565b9190910192915050565b60f09390931b6001600160f01b03191683526002830191909152602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152611962816040850160208701611ec6565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252601d908201527f45524332305065726d69743a206578706972656420646561646c696e65000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526027908201527f544f524e3a2063616e6e6f74206368616e6765207472616e736665726162696c6040820152661a5d1e481e595d60ca1b606082015260800190565b6020808252601e908201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602d908201527f544f524e3a206f6e6c7920676f7665726e616e63652063616e20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611e9e57600080fd5b604052919050565b600067ffffffffffffffff821115611ebc578081fd5b5060209081020190565b60005b83811015611ee1578181015183820152602001611ec9565b83811115611ef0576000848401525b50505050565b6001600160a01b038116811461069257600080fd5b801515811461069257600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c25cb2cef98080abbebec9b5719a4f46d638fbe559a3ab7a9de64272855c3c1064736f6c634300060c0033";class Gf extends Ja{constructor(...e){e.length>1?super(...e):super(Lf,Ff,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Lf)}static connect(e,t){return new za(e,Lf,t)}}Gf.bytecode=Ff,Gf.abi=Lf;const jf=[{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"fakeTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_fakeTimestamp",type:"uint256"}],name:"setFakeTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"}],Bf="0x608060405234801561001057600080fd5b5060d28061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c806301ec0fab146041578063adb61832146059578063c565882714605f575b600080fd5b6047607b565b60408051918252519081900360200190f35b60476081565b607960048036036020811015607357600080fd5b50356097565b005b60005481565b60008054156090576000546092565b425b905090565b60005556fea2646970667358221220b2410460a5b24aec9983bcf8349aa3b589a0dff9120af5b704feae536a65813064736f6c634300060c0033";class Hf extends Ja{constructor(...e){e.length>1?super(...e):super(jf,Bf,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(jf)}static connect(e,t){return new za(e,jf,t)}}Hf.bytecode=Bf,Hf.abi=jf;const zf=[{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"address",name:"_beneficiary",type:"address"},{internalType:"uint256",name:"_startTimestamp",type:"uint256"},{internalType:"uint256",name:"_cliffInMonths",type:"uint256"},{internalType:"uint256",name:"_durationInMonths",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Released",type:"event"},{inputs:[],name:"SECONDS_PER_MONTH",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"beneficiary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"cliffInMonths",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"durationInMonths",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"fakeTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"release",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"released",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_fakeTimestamp",type:"uint256"}],name:"setFakeTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"vestedAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],$f="0x61012060405234801561001157600080fd5b50604051610d2e380380610d2e833981810160405260a081101561003457600080fd5b5080516020820151604083015160608401516080909401519293919290919084848484846001600160a01b0384166100b3576040805162461bcd60e51b815260206004820152601b60248201527f42656e65666963696172792063616e6e6f7420626520656d7074790000000000604482015290519081900360640190fd5b80821115610108576040805162461bcd60e51b815260206004820152601e60248201527f436c6966662069732067726561746572207468616e206475726174696f6e0000604482015290519081900360640190fd5b6001600160601b0319606086811b821660a05285901b1660805261010081905260c082905282156101395782610141565b610141610154565b60e0525061018698505050505050505050565b600061016861016d60201b6105b81760201c565b905090565b600060015460001461018157600154610168565b504290565b60805160601c60a05160601c60c05160e05161010051610b366101f86000398061024452806103bc528061041e52508061019352806101cf52806105725250806102115280610534525080610289528061030952806104b5528061059652508061016d52806104d75250610b366000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063928d89ae11610071578063928d89ae146101195780639613252114610121578063adb6183214610129578063c565882714610131578063e6fd48bc1461014e578063fc0c546a14610156576100b4565b806301ec0fab146100b957806310786deb146100d357806338af3eed146100db57806344b1231f146100ff57806367097a4b1461010757806386d1a69f1461010f575b600080fd5b6100c161015e565b60408051918252519081900360200190f35b6100c1610164565b6100e361016b565b604080516001600160a01b039092168252519081900360200190f35b6100c161018f565b6100c161041c565b610117610440565b005b6100c1610532565b6100c1610556565b6100c161055c565b6101176004803603602081101561014757600080fd5b503561056b565b6100c1610570565b6100e3610594565b60015481565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006101ba61055c565b10156101c857506000610419565b60006101fc7f00000000000000000000000000000000000000000000000000000000000000006101f661055c565b906105d1565b9050600061020d8262278d0061061c565b90507f000000000000000000000000000000000000000000000000000000000000000081101561024257600092505050610419565b7f0000000000000000000000000000000000000000000000000000000000000000811061030557604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156102cf57600080fd5b505afa1580156102e3573d6000803e3d6000fd5b505050506040513d60208110156102f957600080fd5b50519250610419915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561037457600080fd5b505afa158015610388573d6000803e3d6000fd5b505050506040513d602081101561039e57600080fd5b505160008054919250906103b390839061065e565b905060006103eb7f00000000000000000000000000000000000000000000000000000000000000006103e584876106b8565b9061061c565b90506000610404600054836105d190919063ffffffff16565b90506104108482610711565b96505050505050505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061044a61018f565b905060008111610498576040805162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b604482015290519081900360640190fd5b6000546104a5908261065e565b6000556104fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610727565b6040805182815290517ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5659181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b60006105666105b8565b905090565b600155565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001546000146105cc57600154610566565b504290565b600061061383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061077e565b90505b92915050565b600061061383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610815565b600082820183811015610613576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826106c757506000610616565b828202828482816106d457fe5b04146106135760405162461bcd60e51b8152600401808060200182810382526021815260200180610ab66021913960400191505060405180910390fd5b60008183106107205781610613565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261077990849061087a565b505050565b6000818484111561080d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107d25781810151838201526020016107ba565b50505050905090810190601f1680156107ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836108645760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156107d25781810151838201526020016107ba565b50600083858161087057fe5b0495945050505050565b60606108cf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661092b9092919063ffffffff16565b805190915015610779578080602001905160208110156108ee57600080fd5b50516107795760405162461bcd60e51b815260040180806020018281038252602a815260200180610ad7602a913960400191505060405180910390fd5b606061093a8484600085610942565b949350505050565b606061094d85610aaf565b61099e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106109dd5780518252601f1990920191602091820191016109be565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a3f576040519150601f19603f3d011682016040523d82523d6000602084013e610a44565b606091505b50915091508115610a5857915061093a9050565b805115610a685780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156107d25781810151838201526020016107ba565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220852e02606e74d747094138d7e10fc9f005278a953559d85ca961b67f95c9fa8f64736f6c634300060c0033";class Xf extends Ja{constructor(...e){e.length>1?super(...e):super(zf,$f,e[0])}getDeployTransaction(e,t,a,n,b,f){return super.getDeployTransaction(e,t,a,n,b,f||{})}deploy(e,t,a,n,b,f){return super.deploy(e,t,a,n,b,f||{})}connect(e){return super.connect(e)}static createInterface(){return new na(zf)}static connect(e,t){return new za(e,zf,t)}}Xf.bytecode=$f,Xf.abi=zf;const Wf=[{inputs:[{internalType:"bytes32",name:"_torn",type:"bytes32"},{internalType:"bytes32",name:"_governance",type:"bytes32"},{internalType:"uint256",name:"_duration",type:"uint256"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Voucher.Recipient[]",name:"_airdrops",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"allowedTransferee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"domains",type:"bytes32[]"}],name:"bulkResolve",outputs:[{internalType:"address[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"expiresAt",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"fakeTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"redeem",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"rescueExpiredTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"addr",type:"bytes32"}],name:"resolve",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_fakeTimestamp",type:"uint256"}],name:"setFakeTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],qf="0x60e06040523480156200001157600080fd5b5060405162001b7838038062001b78833981016040819052620000349162000476565b8383838360405180606001604052806026815260200162001b5260269139604051806040016040528060058152602001643b2a27a92760d91b8152508160039080519060200190620000889291906200038d565b5080516200009e9060049060208401906200038d565b50506005805460ff1916601217905550620000b984620001b7565b60601b6001600160601b031916608052620000d483620001b7565b60601b6001600160601b03191660c0526200010782620000f3620001bd565b620001d960201b6200089d1790919060201c565b60a05260005b8151811015620001a857620001598282815181106200012857fe5b6020026020010151600001518383815181106200014157fe5b6020026020010151602001516200021160201b60201c565b6001600660008484815181106200016c57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200010d565b5050505050505050506200061d565b60601c90565b6000620001d4620002f460201b620008c91760201c565b905090565b6000828201838110156200020a5760405162461bcd60e51b8152600401620002019062000548565b60405180910390fd5b9392505050565b6001600160a01b0382166200023a5760405162461bcd60e51b81526004016200020190620005b6565b62000248600083836200030f565b6200026481600254620001d960201b6200089d1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002979183906200089d620001d9821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620002e8908590620005ed565b60405180910390a35050565b60006007546000146200030a57600754620001d4565b504290565b620003278383836200038860201b620008e21760201c565b6001600160a01b03821615806200034557506001600160a01b038316155b806200036957506001600160a01b03831660009081526006602052604090205460ff165b620003885760405162461bcd60e51b815260040162000201906200057f565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003d057805160ff191683800117855562000400565b8280016001018555821562000400579182015b8281111562000400578251825591602001919060010190620003e3565b506200040e92915062000412565b5090565b5b808211156200040e576000815560010162000413565b6000604082840312156200043b578081fd5b620004476040620005f6565b82519091506001600160a01b03811681146200046257600080fd5b808252506020820151602082015292915050565b600080600080608085870312156200048c578384fd5b8451935060208086015193506040808701519350606087015160018060401b0380821115620004b9578485fd5b818901915089601f830112620004cd578485fd5b815181811115620004dc578586fd5b620004eb8586830201620005f6565b8181528581019250838601858302850187018d101562000509578788fd5b8794505b828510156200053757620005228d8262000429565b8452600194909401939286019285016200050d565b50989b979a50959850505050505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200061557600080fd5b604052919050565b60805160601c60a05160c05160601c6114e46200066e6000398061046952806106de5250806104c352806105f752806106945250806105d3528061066852806106ff52806107a352506114e46000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638622a689116100b8578063adf898a41161007c578063adf898a414610269578063be040fb014610271578063c39ef8551461027b578063c565882714610283578063dd62ed3e14610296578063f9e54234146102a957610142565b80638622a6891461022b57806395d89b4114610233578063a457c2d71461023b578063a9059cbb1461024e578063adb618321461026157610142565b8063313ce5671161010a578063313ce567146101b557806339509351146101ca5780635aa6e675146101dd5780635c23bdf5146101f25780635d4545a01461020557806370a082311461021857610142565b806301ec0fab1461014757806306fdde0314610165578063095ea7b31461017a57806318160ddd1461019a57806323b872dd146101a2575b600080fd5b61014f6102c9565b60405161015c9190611376565b60405180910390f35b61016d6102cf565b60405161015c9190611087565b61018d610188366004610ed7565b610365565b60405161015c919061107c565b61014f610383565b61018d6101b0366004610e97565b610389565b6101bd610410565b60405161015c919061137f565b61018d6101d8366004610ed7565b610419565b6101e5610467565b60405161015c9190611002565b6101e5610200366004610fb6565b61048b565b61018d610213366004610e48565b610491565b61014f610226366004610e48565b6104a6565b61014f6104c1565b61016d6104e5565b61018d610249366004610ed7565b610546565b61018d61025c366004610ed7565b6105ae565b61014f6105c2565b6101e56105d1565b6102796105f5565b005b610279610692565b610279610291366004610fb6565b6107cc565b61014f6102a4366004610e63565b6107d1565b6102bc6102b7366004610f01565b6107fc565b60405161015c919061102f565b60075481565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b820191906000526020600020905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b60006103796103726108e7565b84846108eb565b5060015b92915050565b60025490565b600061039684848461099f565b610406846103a26108e7565b61040185604051806060016040528060288152602001611462602891396001600160a01b038a166000908152600160205260408120906103e06108e7565b6001600160a01b031681526020810191909152604001600020549190610ab4565b6108eb565b5060019392505050565b60055460ff1690565b60006103796104266108e7565b8461040185600160006104376108e7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061089d565b7f000000000000000000000000000000000000000000000000000000000000000081565b60601c90565b60066020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b60006103796105536108e7565b846104018560405180606001604052806025815260200161148a602591396001600061057d6108e7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610ab4565b60006103796105bb6108e7565b848461099f565b60006105cc6108c9565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061061e6105c2565b106106445760405162461bcd60e51b815260040161063b90611176565b60405180910390fd5b600061064f336104a6565b905061065b3382610ae0565b61068f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383610bc2565b50565b7f00000000000000000000000000000000000000000000000000000000000000006106bb6105c2565b10156106d95760405162461bcd60e51b815260040161063b906111ad565b6107ca7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016107499190611002565b60206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107999190610fce565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190610bc2565b565b600755565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060815167ffffffffffffffff8111801561081657600080fd5b50604051908082528060200260200182016040528015610840578160200160208202803683370190505b50905060005b82518110156108975761086b83828151811061085e57fe5b602002602001015161048b565b82828151811061087757fe5b6001600160a01b0390921660209283029190910190910152600101610846565b50919050565b6000828201838110156108c25760405162461bcd60e51b815260040161063b9061113f565b9392505050565b60006007546000146108dd576007546105cc565b504290565b505050565b3390565b6001600160a01b0383166109115760405162461bcd60e51b815260040161063b906112b1565b6001600160a01b0382166109375760405162461bcd60e51b815260040161063b906110fd565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610992908590611376565b60405180910390a3505050565b6001600160a01b0383166109c55760405162461bcd60e51b815260040161063b9061126c565b6001600160a01b0382166109eb5760405162461bcd60e51b815260040161063b906110ba565b6109f6838383610c18565b610a338160405180606001604052806026815260200161143c602691396001600160a01b0386166000908152602081905260409020549190610ab4565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610a62908261089d565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610992908590611376565b60008184841115610ad85760405162461bcd60e51b815260040161063b9190611087565b505050900390565b6001600160a01b038216610b065760405162461bcd60e51b815260040161063b9061122b565b610b1282600083610c18565b610b4f8160405180606001604052806022815260200161141a602291396001600160a01b0385166000908152602081905260409020549190610ab4565b6001600160a01b038316600090815260208190526040902055600254610b759082610c7f565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bb6908590611376565b60405180910390a35050565b6108e28363a9059cbb60e01b8484604051602401610be1929190611016565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610cc1565b610c238383836108e2565b6001600160a01b0382161580610c4057506001600160a01b038316155b80610c6357506001600160a01b03831660009081526006602052604090205460ff165b6108e25760405162461bcd60e51b815260040161063b906111f4565b60006108c283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ab4565b6060610d16826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d509092919063ffffffff16565b8051909150156108e25780806020019051810190610d349190610f96565b6108e25760405162461bcd60e51b815260040161063b9061132c565b6060610d5f8484600085610d67565b949350505050565b6060610d7285610e2b565b610d8e5760405162461bcd60e51b815260040161063b906112f5565b60006060866001600160a01b03168587604051610dab9190610fe6565b60006040518083038185875af1925050503d8060008114610de8576040519150601f19603f3d011682016040523d82523d6000602084013e610ded565b606091505b50915091508115610e01579150610d5f9050565b805115610e115780518082602001fd5b8360405162461bcd60e51b815260040161063b9190611087565b3b151590565b80356001600160a01b038116811461037d57600080fd5b600060208284031215610e59578081fd5b6108c28383610e31565b60008060408385031215610e75578081fd5b610e7f8484610e31565b9150610e8e8460208501610e31565b90509250929050565b600080600060608486031215610eab578081fd5b8335610eb681611404565b92506020840135610ec681611404565b929592945050506040919091013590565b60008060408385031215610ee9578182fd5b610ef38484610e31565b946020939093013593505050565b60006020808385031215610f13578182fd5b823567ffffffffffffffff811115610f29578283fd5b8301601f81018513610f39578283fd5b8035610f4c610f47826113b4565b61138d565b8181528381019083850185840285018601891015610f68578687fd5b8694505b83851015610f8a578035835260019490940193918501918501610f6c565b50979650505050505050565b600060208284031215610fa7578081fd5b815180151581146108c2578182fd5b600060208284031215610fc7578081fd5b5035919050565b600060208284031215610fdf578081fd5b5051919050565b60008251610ff88184602087016113d4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156110705783516001600160a01b03168352928401929184019160010161104b565b50909695505050505050565b901515815260200190565b60006020825282518060208401526110a68160408501602087016113d4565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f41697264726f702072656465656d20706572696f642068617320656e64656400604082015260600190565b60208082526027908201527f41697264726f702072656465656d20706572696f6420686173206e6f7420656e604082015266191959081e595d60ca1b606082015260800190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156113ac57600080fd5b604052919050565b600067ffffffffffffffff8211156113ca578081fd5b5060209081020190565b60005b838110156113ef5781810151838201526020016113d7565b838111156113fe576000848401525b50505050565b6001600160a01b038116811461068f57600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220794126baf4ea3c44b9afb84b4d8a20535aca899e75471e5d9bb4c8e671aabde664736f6c634300060c0033546f726e61646f4361736820766f756368657220666f72206561726c792061646f7074657273";class Jf extends Ja{constructor(...e){e.length>1?super(...e):super(Wf,qf,e[0])}getDeployTransaction(e,t,a,n,b){return super.getDeployTransaction(e,t,a,n,b||{})}deploy(e,t,a,n,b){return super.deploy(e,t,a,n,b||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Wf)}static connect(e,t){return new za(e,Wf,t)}}Jf.bytecode=qf,Jf.abi=Wf;var Kf=Object.freeze({__proto__:null,AirdropMock__factory:Df,ENSMock__factory:Vf,TORNMock__factory:Gf,Timestamp__factory:Hf,VestingMock__factory:Xf,VoucherMock__factory:Jf});const Yf=[{inputs:[{internalType:"bytes32",name:"tokenAddress",type:"bytes32"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Airdrop.Recipient[]",name:"targets",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"bytes32[]",name:"domains",type:"bytes32[]"}],name:"bulkResolve",outputs:[{internalType:"address[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"resolve",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],Zf="0x60806040523480156200001157600080fd5b506040516200054038038062000540833981016040819052620000349162000396565b60006200004183620001c2565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040162000073919062000467565b60206040518083038186803b1580156200008c57600080fd5b505afa158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c791906200044e565b11620000f05760405162461bcd60e51b8152600401620000e7906200049d565b60405180910390fd5b60005b8251811015620001bd57816001600160a01b031663a9059cbb8483815181106200011957fe5b6020026020010151600001518584815181106200013257fe5b6020026020010151602001516040518363ffffffff1660e01b81526004016200015d9291906200047b565b602060405180830381600087803b1580156200017857600080fd5b505af11580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000374565b50600101620000f3565b506000ff5b600080620001cf62000310565b600114620001f257738595bfb0d940dfedc98943fa8a907091203f25ee62000203565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906200023490869060040162000494565b60206040518083038186803b1580156200024d57600080fd5b505afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000288919062000355565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401620002b5919062000494565b60206040518083038186803b158015620002ce57600080fd5b505afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000355565b9392505050565b4690565b60006040828403121562000326578081fd5b620003326040620004df565b90508151620003418162000526565b808252506020820151602082015292915050565b60006020828403121562000367578081fd5b8151620003098162000526565b60006020828403121562000386578081fd5b8151801515811462000309578182fd5b6000806040808486031215620003aa578182fd5b8351602080860151919450906001600160401b03811115620003ca578384fd5b8501601f81018713620003db578384fd5b8051620003f2620003ec8262000506565b620004df565b81815283810190838501868402850186018b10156200040f578788fd5b8794505b838510156200043d57620004288b8262000314565b83526001949094019391850191860162000413565b508096505050505050509250929050565b60006020828403121562000460578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b60208082526022908201527f42616c616e636520697320302c2061697264726f7020616c726561647920646f6040820152616e6560f01b606082015260800190565b6040518181016001600160401b0381118282101715620004fe57600080fd5b604052919050565b60006001600160401b038211156200051c578081fd5b5060209081020190565b6001600160a01b03811681146200053c57600080fd5b5056fe";class Qf extends Ja{constructor(...e){e.length>1?super(...e):super(Yf,Zf,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Yf)}static connect(e,t){return new za(e,Yf,t)}}Qf.bytecode=Zf,Qf.abi=Yf;const ed=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainID",outputs:[{internalType:"uint256",name:"_chainID",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class td{static createInterface(){return new na(ed)}static connect(e,t){return new za(e,ed,t)}}td.abi=ed;const ad=[{inputs:[{internalType:"address",name:"_governance",type:"address"},{internalType:"uint256",name:"_pausePeriod",type:"uint256"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct TORN.Recipient[]",name:"_vestings",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"target",type:"address"}],name:"Allowed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"target",type:"address"}],name:"Disallowed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address[]",name:"target",type:"address[]"}],name:"addToAllowedList",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"allowedTransferee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burnFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canUnpauseAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainID",outputs:[{internalType:"uint256",name:"_chainID",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"decision",type:"bool"}],name:"changeTransferability",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"target",type:"address[]"}],name:"removeFromAllowedList",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address payable",name:"_to",type:"address"},{internalType:"uint256",name:"_balance",type:"uint256"}],name:"rescueTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],nd="0x60c06040523480156200001157600080fd5b506040516200288338038062002883833981016040819052620000349162000699565b604080518082018252600b81526a0a8dee4dcc2c8de86c2e6d60ab1b6020808301918252835180850190945260048452632a27a92760e11b9084015281519192916200008391600391620005a7565b50805162000099906004906020840190620005a7565b50506005805460ff1916601217905550620000b3620001f0565b506008805460ff199081169091556001600160601b0319606085901b1660a0526001600160a01b0384166000908152600960205260408120805490921660011790915583905b8251811015620001765760008382815181106200011257fe5b60200260200101516000015190506200014a818584815181106200013257fe5b602002602001015160200151620002ac60201b60201c565b6001600160a01b03166000908152600960205260409020805460ff1916600190811790915501620000f9565b506200019a83620001866200038f565b6200039360201b62000cbd1790919060201c565b608052620001a7620003c4565b620001b16200043b565b6a084595161401484a00000014620001e65760405162461bcd60e51b8152600401620001dd906200086b565b60405180910390fd5b5050505062000909565b600080620001fd62000441565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200022c62000445565b805160209182012060408051808201825260018152603160f81b90840152516200027e93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691879130910162000781565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b6001600160a01b038216620002d55760405162461bcd60e51b8152600401620001dd90620008a2565b620002e360008383620004df565b620002ff816002546200039360201b62000cbd1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200033291839062000cbd62000393821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000383908590620008d9565b60405180910390a35050565b4290565b600082820183811015620003bb5760405162461bcd60e51b8152600401620001dd90620007ad565b90505b92915050565b60085460ff1615620003ea5760405162461bcd60e51b8152600401620001dd9062000841565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004226200059a565b6040516200043191906200076d565b60405180910390a1565b60025490565b4690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620004d55780601f10620004a957610100808354040283529160200191620004d5565b820191906000526020600020905b815481529060010190602001808311620004b757829003601f168201915b5050505050905090565b620004f78383836200059560201b620006aa1760201c565b620005016200059e565b15806200052657506001600160a01b03831660009081526009602052604090205460ff165b806200054a57506001600160a01b03821660009081526009602052604090205460ff165b620005695760405162461bcd60e51b8152600401620001dd906200081b565b6001600160a01b038216301415620005955760405162461bcd60e51b8152600401620001dd90620007e4565b505050565b3390565b60085460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005ea57805160ff19168380011785556200061a565b828001600101855582156200061a579182015b828111156200061a578251825591602001919060010190620005fd565b50620006289291506200062c565b5090565b5b808211156200062857600081556001016200062d565b80516001600160a01b0381168114620003be57600080fd5b6000604082840312156200066d578081fd5b620006796040620008e2565b905062000687838362000643565b81526020820151602082015292915050565b600080600060608486031215620006ae578283fd5b620006ba858562000643565b9250602080850151925060408086015160018060401b0380821115620006de578485fd5b818801915088601f830112620006f2578485fd5b81518181111562000701578586fd5b620007108586830201620008e2565b8181528581019250838601858302850187018c10156200072e578788fd5b8794505b828510156200075c57620007478c826200065b565b84526001949094019392860192850162000732565b508096505050505050509250925092565b6001600160a01b0391909116815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601c908201527f544f524e3a20696e636f727265637420646973747269627574696f6e00000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b03811182821017156200090157600080fd5b604052919050565b60805160a05160601c611f3a62000949600039806104d752806105ff52806106cc528061078552806109715250806107245280610c705250611f3a6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806379cc6790116100de578063a9059cbb11610097578063cea9d26f11610071578063cea9d26f146102fb578063d505accf1461030e578063dc0f0d1214610321578063dd62ed3e1461032957610173565b8063a9059cbb146102d8578063adb61832146102eb578063adc879e9146102f357610173565b806379cc6790146102715780637ecebe001461028457806381893c7c14610297578063885ad0cf146102aa57806395d89b41146102bd578063a457c2d7146102c557610173565b80633c8d76d1116101305780633c8d76d11461020657806342966c681461021b5780635aa6e6751461022e5780635c975abb146102435780635d4545a01461024b57806370a082311461025e57610173565b806306fdde0314610178578063095ea7b31461019657806318160ddd146101b657806323b872dd146101cb578063313ce567146101de57806339509351146101f3575b600080fd5b61018061033c565b60405161018d9190611875565b60405180910390f35b6101a96101a436600461163a565b6103d3565b60405161018d91906117ec565b6101be6103f1565b60405161018d9190611d9a565b6101a96101d9366004611585565b6103f7565b6101e661047e565b60405161018d9190611da3565b6101a961020136600461163a565b610487565b610219610214366004611665565b6104d5565b005b61021961022936600461174e565b6105e9565b6102366105fd565b60405161018d91906117bf565b6101a9610621565b6101a9610259366004611531565b61062a565b6101be61026c366004611531565b61063f565b61021961027f36600461163a565b61065a565b6101be610292366004611531565b6106af565b6102196102a5366004611702565b6106ca565b6102196102b8366004611665565b610783565b61018061088a565b6101a96102d336600461163a565b6108eb565b6101a96102e636600461163a565b610953565b6101be610967565b6101be61096b565b61021961030936600461173a565b61096f565b61021961031c3660046115c5565b610b2d565b6101be610c6e565b6101be61033736600461154d565b610c92565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c85780601f1061039d576101008083540402835291602001916103c8565b820191906000526020600020905b8154815290600101906020018083116103ab57829003601f168201915b505050505090505b90565b60006103e76103e0610ce9565b8484610ced565b5060015b92915050565b60025490565b6000610404848484610da1565b61047484610410610ce9565b61046f85604051806060016040528060288152602001611e94602891396001600160a01b038a1660009081526001602052604081209061044e610ce9565b6001600160a01b031681526020810191909152604001600020549190610eb6565b610ced565b5060019392505050565b60055460ff1690565b60006103e7610494610ce9565b8461046f85600160006104a5610ce9565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610cbd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610507610ce9565b6001600160a01b0316146105365760405162461bcd60e51b815260040161052d90611d16565b60405180910390fd5b60005b81518110156105e55760006009600084848151811061055457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d308282815181106105c057fe5b60200260200101516040516105d591906117bf565b60405180910390a1600101610539565b5050565b6105fa6105f4610ce9565b82610ee2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085460ff1690565b60096020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b600061068c82604051806060016040528060248152602001611ebc6024913961068586610337610ce9565b9190610eb6565b90506106a08361069a610ce9565b83610ced565b6106aa8383610ee2565b505050565b6001600160a01b031660009081526006602052604090205490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106fc610ce9565b6001600160a01b0316146107225760405162461bcd60e51b815260040161052d90611d16565b7f000000000000000000000000000000000000000000000000000000000000000061074b610967565b116107685760405162461bcd60e51b815260040161052d90611b0b565b801561077b57610776610fc4565b6105fa565b6105fa611030565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107b5610ce9565b6001600160a01b0316146107db5760405162461bcd60e51b815260040161052d90611d16565b60005b81518110156105e5576001600960008484815181106107f957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc0582828151811061086557fe5b602002602001015160405161087a91906117bf565b60405180910390a16001016107de565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c85780601f1061039d576101008083540402835291602001916103c8565b60006103e76108f8610ce9565b8461046f85604051806060016040528060258152602001611ee06025913960016000610922610ce9565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610eb6565b60006103e7610960610ce9565b8484610da1565b4290565b4690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109a1610ce9565b6001600160a01b0316146109c75760405162461bcd60e51b815260040161052d90611d16565b6001600160a01b0382166109ed5760405162461bcd60e51b815260040161052d90611c8a565b6001600160a01b038316610a56574760008215610a1357610a0e8284611089565b610a15565b815b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610a4e573d6000803e3d6000fd5b5050506106aa565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610a859030906004016117bf565b60206040518083038186803b158015610a9d57600080fd5b505afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611766565b905060008215610aee57610ae98284611089565b610af0565b815b905060008111610b125760405162461bcd60e51b815260040161052d90611d63565b610b266001600160a01b038616858361109f565b5050505050565b83610b36610967565b1115610b545760405162461bcd60e51b815260040161052d90611a00565b6001600160a01b0387166000908152600660209081526040808320549051610ba7927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c91016117f7565b6040516020818303038152906040528051906020012090506000611901610bcc6110f5565b83604051602001610bdf9392919061179a565b6040516020818303038152906040528051906020012090506000610c0582878787611134565b9050896001600160a01b0316816001600160a01b031614610c385760405162461bcd60e51b815260040161052d90611b52565b6001600160a01b038a16600090815260066020526040902080546001019055610c628a8a8a610ced565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610ce25760405162461bcd60e51b815260040161052d90611992565b9392505050565b3390565b6001600160a01b038316610d135760405162461bcd60e51b815260040161052d90611c0f565b6001600160a01b038216610d395760405162461bcd60e51b815260040161052d90611950565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d94908590611d9a565b60405180910390a3505050565b6001600160a01b038316610dc75760405162461bcd60e51b815260040161052d90611bca565b6001600160a01b038216610ded5760405162461bcd60e51b815260040161052d906118df565b610df883838361122c565b610e3581604051806060016040528060268152602001611e6e602691396001600160a01b0386166000908152602081905260409020549190610eb6565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e649082610cbd565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d94908590611d9a565b60008184841115610eda5760405162461bcd60e51b815260040161052d9190611875565b505050900390565b6001600160a01b038216610f085760405162461bcd60e51b815260040161052d90611b89565b610f148260008361122c565b610f5181604051806060016040528060228152602001611e4c602291396001600160a01b0385166000908152602081905260409020549190610eb6565b6001600160a01b038316600090815260208190526040902055600254610f7790826112cb565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fb8908590611d9a565b60405180910390a35050565b60085460ff16610fe65760405162461bcd60e51b815260040161052d90611922565b6008805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611019610ce9565b60405161102691906117bf565b60405180910390a1565b60085460ff16156110535760405162461bcd60e51b815260040161052d90611a9f565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611019610ce9565b60008183106110985781610ce2565b5090919050565b6106aa8363a9059cbb60e01b84846040516024016110be9291906117d3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261130d565b6000806007600061110461096b565b8152602081019190915260400160002054905080156111245790506103d0565b61112c61139c565b9150506103d0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156111765760405162461bcd60e51b815260040161052d90611a5d565b8360ff16601b148061118b57508360ff16601c145b6111a75760405162461bcd60e51b815260040161052d90611ac9565b6000600186868686604051600081526020016040526040516111cc9493929190611857565b6020604051602081039080840390855afa1580156111ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112215760405162461bcd60e51b815260040161052d906118a8565b90505b949350505050565b6112378383836106aa565b61123f610621565b158061126357506001600160a01b03831660009081526009602052604090205460ff165b8061128657506001600160a01b03821660009081526009602052604090205460ff165b6112a25760405162461bcd60e51b815260040161052d90611a37565b6001600160a01b0382163014156106aa5760405162461bcd60e51b815260040161052d906119c9565b6000610ce283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610eb6565b6060611362826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114529092919063ffffffff16565b8051909150156106aa5780806020019051810190611380919061171e565b6106aa5760405162461bcd60e51b815260040161052d90611ccc565b6000806113a761096b565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d461033c565b805160209182012060408051808201825260018152603160f81b908401525161142493927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691879130910161182b565b60408051601f1981840301815291815281516020928301206000948552600790925290922082905550905090565b60606112248484600085606061146785611520565b6114835760405162461bcd60e51b815260040161052d90611c53565b60006060866001600160a01b031685876040516114a0919061177e565b60006040518083038185875af1925050503d80600081146114dd576040519150601f19603f3d011682016040523d82523d6000602084013e6114e2565b606091505b509150915081156114f65791506112249050565b8051156115065780518082602001fd5b8360405162461bcd60e51b815260040161052d9190611875565b3b151590565b80356103eb81611e28565b600060208284031215611542578081fd5b8135610ce281611e28565b6000806040838503121561155f578081fd5b823561156a81611e28565b9150602083013561157a81611e28565b809150509250929050565b600080600060608486031215611599578081fd5b83356115a481611e28565b925060208401356115b481611e28565b929592945050506040919091013590565b600080600080600080600060e0888a0312156115df578283fd5b87356115ea81611e28565b965060208801356115fa81611e28565b95506040880135945060608801359350608088013560ff8116811461161d578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561164c578182fd5b823561165781611e28565b946020939093013593505050565b60006020808385031215611677578182fd5b823567ffffffffffffffff81111561168d578283fd5b8301601f8101851361169d578283fd5b80356116b06116ab82611dd8565b611db1565b81815283810190838501858402850186018910156116cc578687fd5b8694505b838510156116f6576116e28982611526565b8352600194909401939185019185016116d0565b50979650505050505050565b600060208284031215611713578081fd5b8135610ce281611e3d565b60006020828403121561172f578081fd5b8151610ce281611e3d565b600080600060608486031215611599578283fd5b60006020828403121561175f578081fd5b5035919050565b600060208284031215611777578081fd5b5051919050565b60008251611790818460208701611df8565b9190910192915050565b60f09390931b6001600160f01b03191683526002830191909152602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082528251806020840152611894816040850160208701611df8565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526017908201527f544f524e3a20696e76616c696420726563697069656e74000000000000000000604082015260600190565b6020808252601d908201527f45524332305065726d69743a206578706972656420646561646c696e65000000604082015260600190565b6020808252600c908201526b1513d4938e881c185d5cd95960a21b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526027908201527f544f524e3a2063616e6e6f74206368616e6765207472616e736665726162696c6040820152661a5d1e481e595d60ca1b606082015260800190565b6020808252601e908201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602d908201527f544f524e3a206f6e6c7920676f7665726e616e63652063616e20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611dd057600080fd5b604052919050565b600067ffffffffffffffff821115611dee578081fd5b5060209081020190565b60005b83811015611e13578181015183820152602001611dfb565b83811115611e22576000848401525b50505050565b6001600160a01b03811681146105fa57600080fd5b80151581146105fa57600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fd515804eca384cb14c99861e60dc5364ae65ba9ddfdfe00d195788ee631d01064736f6c634300060c0033";class bd extends Ja{constructor(...e){e.length>1?super(...e):super(ad,nd,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ad)}static connect(e,t){return new za(e,ad,t)}}bd.bytecode=nd,bd.abi=ad;const fd=[{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"address",name:"_beneficiary",type:"address"},{internalType:"uint256",name:"_startTimestamp",type:"uint256"},{internalType:"uint256",name:"_cliffInMonths",type:"uint256"},{internalType:"uint256",name:"_durationInMonths",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Released",type:"event"},{inputs:[],name:"SECONDS_PER_MONTH",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"beneficiary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"cliffInMonths",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"durationInMonths",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"release",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"released",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"startTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"vestedAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],dd="0x61012060405234801561001157600080fd5b50604051610c8c380380610c8c833981810160405260a081101561003457600080fd5b508051602082015160408301516060840151608090940151929391929091906001600160a01b0384166100ae576040805162461bcd60e51b815260206004820152601b60248201527f42656e65666963696172792063616e6e6f7420626520656d7074790000000000604482015290519081900360640190fd5b80821115610103576040805162461bcd60e51b815260206004820152601e60248201527f436c6966662069732067726561746572207468616e206475726174696f6e0000604482015290519081900360640190fd5b6001600160601b0319606086811b821660a05285901b1660805261010081905260c08290528215610134578261013c565b61013c61014a565b60e0525061014e9350505050565b4290565b60805160601c60a05160601c60c05160e05161010051610acc6101c060003980610203528061037b52806103dd525080610152528061018e52806105215250806101d052806104f352508061024852806102c85280610474528061054552508061012c52806104965250610acc6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063928d89ae11610066578063928d89ae146100fb5780639613252114610103578063adb618321461010b578063e6fd48bc14610113578063fc0c546a1461011b5761009e565b806310786deb146100a357806338af3eed146100bd57806344b1231f146100e157806367097a4b146100e957806386d1a69f146100f1575b600080fd5b6100ab610123565b60408051918252519081900360200190f35b6100c561012a565b604080516001600160a01b039092168252519081900360200190f35b6100ab61014e565b6100ab6103db565b6100f96103ff565b005b6100ab6104f1565b6100ab610515565b6100ab61051b565b6100ab61051f565b6100c5610543565b62278d0081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000061017961051b565b1015610187575060006103d8565b60006101bb7f00000000000000000000000000000000000000000000000000000000000000006101b561051b565b90610567565b905060006101cc8262278d006105b2565b90507f0000000000000000000000000000000000000000000000000000000000000000811015610201576000925050506103d8565b7f000000000000000000000000000000000000000000000000000000000000000081106102c457604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561028e57600080fd5b505afa1580156102a2573d6000803e3d6000fd5b505050506040513d60208110156102b857600080fd5b505192506103d8915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d602081101561035d57600080fd5b505160008054919250906103729083906105f4565b905060006103aa7f00000000000000000000000000000000000000000000000000000000000000006103a4848761064e565b906105b2565b905060006103c36000548361056790919063ffffffff16565b90506103cf84826106a7565b96505050505050505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061040961014e565b905060008111610457576040805162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b604482015290519081900360640190fd5b60005461046490826105f4565b6000556104bb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836106bd565b6040805182815290517ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5659181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b4290565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006105a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610714565b90505b92915050565b60006105a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506107ab565b6000828201838110156105a9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261065d575060006105ac565b8282028284828161066a57fe5b04146105a95760405162461bcd60e51b8152600401808060200182810382526021815260200180610a4c6021913960400191505060405180910390fd5b60008183106106b657816105a9565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261070f908490610810565b505050565b600081848411156107a35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610768578181015183820152602001610750565b50505050905090810190601f1680156107955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836107fa5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610768578181015183820152602001610750565b50600083858161080657fe5b0495945050505050565b6060610865826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108c19092919063ffffffff16565b80519091501561070f5780806020019051602081101561088457600080fd5b505161070f5760405162461bcd60e51b815260040180806020018281038252602a815260200180610a6d602a913960400191505060405180910390fd5b60606108d084846000856108d8565b949350505050565b60606108e385610a45565b610934576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106109735780518252601f199092019160209182019101610954565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146109d5576040519150601f19603f3d011682016040523d82523d6000602084013e6109da565b606091505b509150915081156109ee5791506108d09050565b8051156109fe5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315610768578181015183820152602001610750565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212203b3e8370e345374172efb9e3693b20807c318ecfcc569df94f28df8a94f2727a64736f6c634300060c0033";class id extends Ja{constructor(...e){e.length>1?super(...e):super(fd,dd,e[0])}getDeployTransaction(e,t,a,n,b,f){return super.getDeployTransaction(e,t,a,n,b,f||{})}deploy(e,t,a,n,b,f){return super.deploy(e,t,a,n,b,f||{})}connect(e){return super.connect(e)}static createInterface(){return new na(fd)}static connect(e,t){return new za(e,fd,t)}}id.bytecode=dd,id.abi=fd;const sd=[{inputs:[{internalType:"bytes32",name:"_torn",type:"bytes32"},{internalType:"bytes32",name:"_governance",type:"bytes32"},{internalType:"uint256",name:"_duration",type:"uint256"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Voucher.Recipient[]",name:"_airdrops",type:"tuple[]"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"allowedTransferee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"blockTimestamp",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"domains",type:"bytes32[]"}],name:"bulkResolve",outputs:[{internalType:"address[]",name:"result",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"expiresAt",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"redeem",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"rescueExpiredTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"resolve",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],cd="0x60e06040523480156200001157600080fd5b5060405162001d8d38038062001d8d833981016040819052620000349162000593565b60405180606001604052806026815260200162001d6760269139604051806040016040528060058152602001643b2a27a92760d91b81525081600390805190602001906200008492919062000497565b5080516200009a90600490602084019062000497565b50506005805460ff1916601217905550620000b584620001af565b60601b6001600160601b031916608052620000d083620001af565b60601b6001600160601b03191660c0526200010382620000ef620002fd565b6200030160201b6200098d1790919060201c565b60a05260005b8151811015620001a457620001558282815181106200012457fe5b6020026020010151600001518383815181106200013d57fe5b6020026020010151602001516200033260201b60201c565b6001600660008484815181106200016857fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000109565b505050505062000753565b600080620001bc62000415565b600114620001df57738595bfb0d940dfedc98943fa8a907091203f25ee620001f0565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906200022190869060040162000665565b60206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000574565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401620002a2919062000665565b60206040518083038186803b158015620002bb57600080fd5b505afa158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062000574565b9392505050565b4290565b600082820183811015620002f65760405162461bcd60e51b815260040162000329906200066e565b60405180910390fd5b6001600160a01b0382166200035b5760405162461bcd60e51b81526004016200032990620006dc565b620003696000838362000419565b62000385816002546200030160201b6200098d1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620003b89183906200098d62000301821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200040990859062000665565b60405180910390a35050565b4690565b620004318383836200049260201b620009b21760201c565b6001600160a01b03821615806200044f57506001600160a01b038316155b806200047357506001600160a01b03831660009081526006602052604090205460ff165b620004925760405162461bcd60e51b81526004016200032990620006a5565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004da57805160ff19168380011785556200050a565b828001600101855582156200050a579182015b828111156200050a578251825591602001919060010190620004ed565b50620005189291506200051c565b5090565b5b808211156200051857600081556001016200051d565b60006040828403121562000545578081fd5b62000551604062000713565b9050815162000560816200073a565b808252506020820151602082015292915050565b60006020828403121562000586578081fd5b8151620002f6816200073a565b60008060008060808587031215620005a9578283fd5b8451935060208086015193506040808701519350606087015160018060401b0380821115620005d6578485fd5b818901915089601f830112620005ea578485fd5b815181811115620005f9578586fd5b62000608858683020162000713565b8181528581019250838601858302850187018d101562000626578788fd5b8794505b8285101562000654576200063f8d8262000533565b8452600194909401939286019285016200062a565b50989b979a50959850505050505050565b90815260200190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6040518181016001600160401b03811182821017156200073257600080fd5b604052919050565b6001600160a01b03811681146200075057600080fd5b50565b60805160601c60a05160c05160601c6115c3620007a46000398061043152806107d35250806105c352806106ec52806107895250806106c8528061075d52806107f4528061089852506115c36000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638622a689116100ad578063adf898a411610071578063adf898a41461024b578063be040fb014610253578063c39ef8551461025d578063dd62ed3e14610265578063f9e54234146102785761012c565b80638622a6891461020d57806395d89b4114610215578063a457c2d71461021d578063a9059cbb14610230578063adb61832146102435761012c565b806339509351116100f457806339509351146101ac5780635aa6e675146101bf5780635c23bdf5146101d45780635d4545a0146101e757806370a08231146101fa5761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461016f57806323b872dd14610184578063313ce56714610197575b600080fd5b610139610298565b604051610146919061116f565b60405180910390f35b61016261015d366004610fb5565b61032e565b604051610146919061115b565b61017761034b565b6040516101469190611166565b610162610192366004610f75565b610351565b61019f6103d8565b604051610146919061145e565b6101626101ba366004610fb5565b6103e1565b6101c761042f565b60405161014691906110e1565b6101c76101e2366004611095565b610453565b6101626101f5366004610f05565b610591565b610177610208366004610f05565b6105a6565b6101776105c1565b6101396105e5565b61016261022b366004610fb5565b610646565b61016261023e366004610fb5565b6106ae565b6101776106c2565b6101c76106c6565b61025b6106ea565b005b61025b610787565b610177610273366004610f3d565b6108c1565b61028b610286366004610fe0565b6108ec565b604051610146919061110e565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103245780601f106102f957610100808354040283529160200191610324565b820191906000526020600020905b81548152906001019060200180831161030757829003601f168201915b5050505050905090565b600061034261033b6109b7565b84846109bb565b50600192915050565b60025490565b600061035e848484610a6f565b6103ce8461036a6109b7565b6103c985604051806060016040528060288152602001611541602891396001600160a01b038a166000908152600160205260408120906103a86109b7565b6001600160a01b031681526020810191909152604001600020549190610b84565b6109bb565b5060019392505050565b60055460ff1690565b60006103426103ee6109b7565b846103c985600160006103ff6109b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061098d565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008061045e610bb0565b60011461047f57738595bfb0d940dfedc98943fa8a907091203f25ee610490565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906104bf908690600401611166565b60206040518083038186803b1580156104d757600080fd5b505afa1580156104eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050f9190610f21565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b815260040161053a9190611166565b60206040518083038186803b15801561055257600080fd5b505afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190610f21565b9392505050565b60066020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103245780601f106102f957610100808354040283529160200191610324565b60006103426106536109b7565b846103c985604051806060016040528060258152602001611569602591396001600061067d6109b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610b84565b60006103426106bb6109b7565b8484610a6f565b4290565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006107136106c2565b106107395760405162461bcd60e51b81526004016107309061125e565b60405180910390fd5b6000610744336105a6565b90506107503382610bb4565b6107846001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383610c96565b50565b7f00000000000000000000000000000000000000000000000000000000000000006107b06106c2565b10156107ce5760405162461bcd60e51b815260040161073090611295565b6108bf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161083e91906110e1565b60206040518083038186803b15801561085657600080fd5b505afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088e91906110ad565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190610c96565b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060815167ffffffffffffffff8111801561090657600080fd5b50604051908082528060200260200182016040528015610930578160200160208202803683370190505b50905060005b82518110156109875761095b83828151811061094e57fe5b6020026020010151610453565b82828151811061096757fe5b6001600160a01b0390921660209283029190910190910152600101610936565b50919050565b60008282018381101561058a5760405162461bcd60e51b815260040161073090611227565b505050565b3390565b6001600160a01b0383166109e15760405162461bcd60e51b815260040161073090611399565b6001600160a01b038216610a075760405162461bcd60e51b8152600401610730906111e5565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a62908590611166565b60405180910390a3505050565b6001600160a01b038316610a955760405162461bcd60e51b815260040161073090611354565b6001600160a01b038216610abb5760405162461bcd60e51b8152600401610730906111a2565b610ac6838383610cec565b610b038160405180606001604052806026815260200161151b602691396001600160a01b0386166000908152602081905260409020549190610b84565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610b32908261098d565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a62908590611166565b60008184841115610ba85760405162461bcd60e51b8152600401610730919061116f565b505050900390565b4690565b6001600160a01b038216610bda5760405162461bcd60e51b815260040161073090611313565b610be682600083610cec565b610c23816040518060600160405280602281526020016114f9602291396001600160a01b0385166000908152602081905260409020549190610b84565b6001600160a01b038316600090815260208190526040902055600254610c499082610d53565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c8a908590611166565b60405180910390a35050565b6109b28363a9059cbb60e01b8484604051602401610cb59291906110f5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d95565b610cf78383836109b2565b6001600160a01b0382161580610d1457506001600160a01b038316155b80610d3757506001600160a01b03831660009081526006602052604090205460ff165b6109b25760405162461bcd60e51b8152600401610730906112dc565b600061058a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b84565b6060610dea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e249092919063ffffffff16565b8051909150156109b25780806020019051810190610e089190611075565b6109b25760405162461bcd60e51b815260040161073090611414565b6060610e338484600085610e3b565b949350505050565b6060610e4685610eff565b610e625760405162461bcd60e51b8152600401610730906113dd565b60006060866001600160a01b03168587604051610e7f91906110c5565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b50915091508115610ed5579150610e339050565b805115610ee55780518082602001fd5b8360405162461bcd60e51b8152600401610730919061116f565b3b151590565b600060208284031215610f16578081fd5b813561058a816114e3565b600060208284031215610f32578081fd5b815161058a816114e3565b60008060408385031215610f4f578081fd5b8235610f5a816114e3565b91506020830135610f6a816114e3565b809150509250929050565b600080600060608486031215610f89578081fd5b8335610f94816114e3565b92506020840135610fa4816114e3565b929592945050506040919091013590565b60008060408385031215610fc7578182fd5b8235610fd2816114e3565b946020939093013593505050565b60006020808385031215610ff2578182fd5b823567ffffffffffffffff811115611008578283fd5b8301601f81018513611018578283fd5b803561102b61102682611493565b61146c565b8181528381019083850185840285018601891015611047578687fd5b8694505b8385101561106957803583526001949094019391850191850161104b565b50979650505050505050565b600060208284031215611086578081fd5b8151801515811461058a578182fd5b6000602082840312156110a6578081fd5b5035919050565b6000602082840312156110be578081fd5b5051919050565b600082516110d78184602087016114b3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561114f5783516001600160a01b03168352928401929184019160010161112a565b50909695505050505050565b901515815260200190565b90815260200190565b600060208252825180602084015261118e8160408501602087016114b3565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f41697264726f702072656465656d20706572696f642068617320656e64656400604082015260600190565b60208082526027908201527f41697264726f702072656465656d20706572696f6420686173206e6f7420656e604082015266191959081e595d60ca1b606082015260800190565b6020808252601e908201527f45524332303a207472616e73666572206973206e6f7420616c6c6f7765640000604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561148b57600080fd5b604052919050565b600067ffffffffffffffff8211156114a9578081fd5b5060209081020190565b60005b838110156114ce5781810151838201526020016114b6565b838111156114dd576000848401525b50505050565b6001600160a01b038116811461078457600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209b2d6f14167bc062b61418b8fca6b7946d243420e3df874c9632acb30079c69b64736f6c634300060c0033546f726e61646f4361736820766f756368657220666f72206561726c792061646f7074657273";class rd extends Ja{constructor(...e){e.length>1?super(...e):super(sd,cd,e[0])}getDeployTransaction(e,t,a,n,b){return super.getDeployTransaction(e,t,a,n,b||{})}deploy(e,t,a,n,b){return super.deploy(e,t,a,n,b||{})}connect(e){return super.connect(e)}static createInterface(){return new na(sd)}static connect(e,t){return new za(e,sd,t)}}rd.bytecode=cd,rd.abi=sd;var pd=Object.freeze({__proto__:null,Airdrop__factory:Qf,ERC20Permit__factory:td,TORN__factory:bd,Vesting__factory:id,Voucher__factory:rd,ensSol:Af,mocks:Kf});const ud=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"address",name:"_admin",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"callToOwner",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"changeOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"delegateToOwner",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"getCurrentOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeToOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],od="0x608060405260405162000e6738038062000e67833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150839050828282828281620000ff82620001f6565b805115620001bd576000826001600160a01b0316826040518082805190602001908083835b60208310620001455780518252601f19909201916020918201910162000124565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620001a7576040519150601f19603f3d011682016040523d82523d6000602084013e620001ac565b606091505b5050905080620001bb57600080fd5b505b50620001c69050565b620001d1826200026d565b505050505050620001ed336200029160201b620008ab1760201c565b50505062000308565b6200020c81620002bd60201b620008d51760201c565b620002495760405162461bcd60e51b815260040180806020018281038252603681526020018062000e316036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b806200029c620002c3565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610b1980620003186000396000f3fe6080604052600436106100955760003560e01c80635c60da1b116100595780635c60da1b146102fe5780638f2839701461032f578063a18a186b14610362578063a6f9dae114610377578063f851a440146103aa576100a4565b806323711ab1146100ac57806323c735f1146101625780632e44e0e0146101955780633659cfe61461024b5780634f1ef2861461027e576100a4565b366100a4576100a26103bf565b005b6100a26103bf565b6100a2600480360360408110156100c257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ed57600080fd5b8201836020820111156100ff57600080fd5b8035906020019184600183028401116401000000008311171561012157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103d9945050505050565b34801561016e57600080fd5b506100a26004803603602081101561018557600080fd5b50356001600160a01b03166104e7565b6100a2600480360360408110156101ab57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101d657600080fd5b8201836020820111156101e857600080fd5b8035906020019184600183028401116401000000008311171561020a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610546945050505050565b34801561025757600080fd5b506100a26004803603602081101561026e57600080fd5b50356001600160a01b031661063a565b6100a26004803603604081101561029457600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111640100000000831117156102f357600080fd5b509092509050610671565b34801561030a57600080fd5b5061031361071e565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b506100a26004803603602081101561035257600080fd5b50356001600160a01b031661075b565b34801561036e57600080fd5b50610313610815565b34801561038357600080fd5b506100a26004803603602081101561039a57600080fd5b50356001600160a01b0316610824565b3480156103b657600080fd5b50610313610880565b6103c76103d7565b6103d76103d26108db565b610900565b565b336103e2610924565b6001600160a01b03161461042c576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061046a5780518252601f19909201916020918201910161044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b606091505b5091509150816104e157805181602001fd5b50505050565b336104f0610924565b6001600160a01b03161461053a576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b6105438161093d565b50565b3361054f610924565b6001600160a01b031614610599576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b031634846040518082805190602001908083835b602083106105d85780518252601f1990920191602091820191016105b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b61064261097d565b6001600160a01b0316336001600160a01b03161415610669576106648161093d565b610543565b6105436103bf565b61067961097d565b6001600160a01b0316336001600160a01b031614156107115761069b8361093d565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146106f8576040519150601f19603f3d011682016040523d82523d6000602084013e6106fd565b606091505b505090508061070b57600080fd5b50610719565b6107196103bf565b505050565b600061072861097d565b6001600160a01b0316336001600160a01b03161415610750576107496108db565b9050610758565b6107586103bf565b90565b61076361097d565b6001600160a01b0316336001600160a01b03161415610669576001600160a01b0381166107c15760405162461bcd60e51b815260040180806020018281038252603a815260200180610a74603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6107ea61097d565b604080516001600160a01b03928316815291841660208301528051918290030190a1610664816109a2565b600061081f610924565b905090565b3361082d610924565b6001600160a01b031614610877576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b610543816108ab565b600061088a61097d565b6001600160a01b0316336001600160a01b031614156107505761074961097d565b806108b46109c6565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b600061092e6109c6565b546001600160a01b0316919050565b61094681610a0b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610a14816108d5565b610a4f5760405162461bcd60e51b8152600401808060200182810382526036815260200180610aae6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122001f07e10d1eeadbd61da070e50227b529a3ec4b8f2e780a0e6bc1dc6028ba95764736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class yd extends Ja{constructor(...e){e.length>1?super(...e):super(ud,od,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ud)}static connect(e,t){return new za(e,ud,t)}}yd.bytecode=od,yd.abi=ud;const ld=[{inputs:[{internalType:"address",name:"_torn",type:"address"},{internalType:"address",name:"_governance",type:"address"},{internalType:"address",name:"_registry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"instance",type:"address"},{indexed:!1,internalType:"uint256",name:"newFee",type:"uint256"}],name:"FeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint24",name:"newFee",type:"uint24"}],name:"UniswapTornPoolSwappingFeeChanged",type:"event"},{inputs:[],name:"PROTOCOL_FEE_DIVIDER",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"calculatePoolFee",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeDeviations",outputs:[{components:[{internalType:"address",name:"instance",type:"address"},{internalType:"int256",name:"deviation",type:"int256"}],internalType:"struct FeeManager.Deviation[]",name:"results",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint24",name:"_uniswapPoolSwappingFee",type:"uint24"}],name:"getTokenPriceRatio",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],name:"instanceFee",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],name:"instanceFeeUpdated",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"instanceFeeWithUpdate",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"registry",outputs:[{internalType:"contract InstanceRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"newPeriod",type:"uint32"}],name:"setPeriodForTWAPOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_price",type:"uint256"}],name:"setTokenPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"_uniswapTornPoolSwappingFee",type:"uint24"}],name:"setUniswapTornPoolSwappingFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"newLimit",type:"uint24"}],name:"setUpdateFeeTimeLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"uniswapTimePeriod",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"uniswapTornPoolSwappingFee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"updateAllFees",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"updateFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateFeeTimeLimit",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance[]",name:"_instances",type:"address[]"}],name:"updateFees",outputs:[],stateMutability:"nonpayable",type:"function"}],md="0x60e06040523480156200001157600080fd5b5060405162001ca738038062001ca783398101604081905262000034916200005c565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c611b866200012160003980610350528061061452806108915280610a42525080610539528061064c528061072d528061082252508061059852806107ad5250611b866000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806380eb7bf0116100ad578063bcc5ee6411610071578063bcc5ee641461024b578063c51c229714610253578063d8718fb114610266578063e1f121561461027b578063f522d6d61461028e5761012c565b806380eb7bf014610202578063a028752014610215578063adf898a414610228578063aeb3077a14610230578063b19a2972146102385761012c565b8063603a54fe116100f4578063603a54fe146101ac57806369574fef146101bf5780637b103999146101d25780637ccd2f48146101da57806380679eb3146101ef5761012c565b806305e34364146101315780632efbf3841461015a578063431f63c91461017a5780634bf0a5421461018f5780635aa6e675146101a4575b600080fd5b61014461013f366004611848565b610296565b6040516101519190611ab4565b60405180910390f35b61016d610168366004611848565b6102a8565b60405161015191906118d5565b61018d6101883660046115bc565b610305565b005b61019761034b565b6040516101519190611911565b61016d610537565b61016d6101ba366004611848565b61055b565b6101446101cd366004611584565b610576565b61016d610612565b6101e2610636565b6040516101519190611aa4565b61018d6101fd366004611898565b610641565b61018d610210366004611848565b61069c565b61018d610223366004611864565b610722565b61016d6107ab565b6101446107cf565b61018d6102463660046115e7565b6107d5565b6101e2610805565b61018d610261366004611864565b610817565b61026e610874565b6040516101519190611abd565b61016d610289366004611848565b610887565b61018d610a3d565b60026020526000908152604090205481565b600080546001600160a01b038316825260026020526040822054600160381b90910462ffffff16429190910311156102e3576102e38261069c565b506001600160a01b03808216600090815260016020526040902054165b919050565b3361030e610ad7565b6001600160a01b03161461033d5760405162461bcd60e51b815260040161033490611a06565b60405180910390fd5b6103478282610af0565b5050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b1580156103a757600080fd5b505afa1580156103bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103e3919081019061167f565b9050805167ffffffffffffffff811180156103fd57600080fd5b5060405190808252806020026020018201604052801561043757816020015b6104246114b2565b81526020019060019003908161041c5790505b50915060005b815181101561053257600061046483838151811061045757fe5b6020026020010151610887565b6001600160a01b03169050600081156104e0576103e8826001600087878151811061048b57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166103e8026001600160a01b0316816104db57fe5b040390505b60405180604001604052808585815181106104f757fe5b60200260200101516001600160a01b031681526020018281525085848151811061051d57fe5b6020908102919091010152505060010161043d565b505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052600090815260409020546001600160a01b031681565b600061058183610b19565b610600576040805180820182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682528516602080830191909152825180840190935260005462ffffff80821685528616918401919091526105fb929063ffffffff630100000090910416610b44565b610609565b61060983610b19565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461067657600080fd5b6000805463ffffffff90921663010000000266ffffffff00000019909216919091179055565b60006106a782610887565b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b03191695871695909517909455600290528290204290559051919250907f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a906107169084906118d5565b60405180910390a25050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461075757600080fd5b6000805462ffffff191662ffffff83811691909117918290556040517fbfe65cfc2359076c4468c9b895156c309c78f94fb09f6d2fc0463c4ca9a71ac2926107a0921690611aa4565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b61271081565b60005b8151811015610347576107fd8282815181106107f057fe5b602002602001015161069c565b6001016107d8565b600054600160381b900462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084c57600080fd5b6000805462ffffff909216600160381b0269ffffff0000000000000019909216919091179055565b6000546301000000900463ffffffff1681565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443876040518263ffffffff1660e01b81526004016108db91906118d5565b60a06040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b91906117cd565b9450945050935093508063ffffffff1660001415610950576000945050505050610300565b6001600160a01b038316158015610965575083155b61096f5782610985565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b925060006109938484610576565b9050610a32612710610a2c8463ffffffff16610a2685610a2c670de0b6b3a76400008e6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ee57600080fd5b505afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190611880565b90610b90565b90610bca565b979650505050505050565b610ad57f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b158015610a9957600080fd5b505afa158015610aad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610246919081019061167f565b565b6000610ae1610c0c565b546001600160a01b0316919050565b6000610afa610c61565b6001600160a01b03909316600090815260209390935250604090912055565b600080610b24610c61565b6001600160a01b0390931660009081526020939093525050604090205490565b60208084015190830151600091610b5b9184610c98565b84518451610b7e91670de0b6b3a764000091610b78919087610c98565b90610cc2565b81610b8557fe5b0490505b9392505050565b600082610b9f5750600061060c565b82820282848281610bac57fe5b04146106095760405162461bcd60e51b815260040161033490611a63565b600061060983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ce6565b6000807fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b360001c604051602001610c439190611ab4565b60408051601f19818403018152919052805160209091012092915050565b6000807f6521c13ddfc30471ec629848a30b01f73c36737d417c11843e7a9afa6985e84860001c604051602001610c439190611ab4565b6000610cba8473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28585610d1d565b949350505050565b6000821580610cdd57505081810281838281610cda57fe5b04145b61060c57600080fd5b60008183610d075760405162461bcd60e51b815260040161033491906119b3565b506000838581610d1357fe5b0495945050505050565b600080846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906118b4565b60ff16600a0a90506001600160a01b038681169086161415610dbd576001600160801b03169050610cba565b604051630b4c774160e11b8152610e5e90610e5690731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610e00908b908b908b906004016118e9565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e509190611568565b85610e6f565b828888611004565b915050610cba565b50949350505050565b600063ffffffff8216610e945760405162461bcd60e51b815260040161033490611a2c565b60408051600280825260608083018452926020830190803683370190505090508281600081518110610ec257fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610eeb57fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526060906001600160a01b0386169063883bdbfd90610f2f908590600401611969565b60006040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f83919081019061170b565b509050600081600081518110610f9557fe5b602002602001015182600181518110610faa57fe5b60200260200101510390508463ffffffff168160060b81610fc757fe5b05935060008160060b128015610fee57508463ffffffff168160060b81610fea57fe5b0715155b15610ffb57600019909301925b50505092915050565b600080611010866110ee565b90506001600160801b036001600160a01b0382161161107f576001600160a01b038082168002908481169086161061105f5761105a600160c01b876001600160801b031683611407565b611077565b61107781876001600160801b0316600160c01b611407565b925050610e66565b600061109e6001600160a01b0383168068010000000000000000611407565b9050836001600160a01b0316856001600160a01b0316106110d6576110d1600160801b876001600160801b031683611407565b610a32565b610a3281876001600160801b0316600160801b611407565b60008060008360020b12611105578260020b61110d565b8260020b6000035b9050620d89e88111156111325760405162461bcd60e51b815260040161033490611a48565b60006001821661114657600160801b611158565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561118c576ffff97272373d413259a46990580e213a0260801c5b60048216156111ab576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156111ca576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156111e9576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611208576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611227576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611246576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611266576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611286576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156112a6576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156112c6576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156112e6576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611306576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611326576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611346576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611367576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611387576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156113a6576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156113c3576b048a170391f7dc42444e8fa20260801c5b60008460020b13156113de5780600019816113da57fe5b0490505b6401000000008106156113f25760016113f5565b60005b60ff16602082901c0192505050919050565b600080806000198587098686029250828110908390030390508061143d576000841161143257600080fd5b508290049050610b89565b80841161144957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604080518082019091526000808252602082015290565b600082601f8301126114d9578081fd5b81516114ec6114e782611af5565b611ace565b81815291506020808301908481018184028601820187101561150d57600080fd5b60005b8481101561153557815161152381611b15565b84529282019290820190600101611510565b505050505092915050565b803561060c81611b15565b805161060c81611b15565b8051600681900b811461060c57600080fd5b600060208284031215611579578081fd5b815161060981611b15565b60008060408385031215611596578081fd5b82356115a181611b15565b915060208301356115b181611b2d565b809150509250929050565b600080604083850312156115ce578182fd5b82356115d981611b15565b946020939093013593505050565b600060208083850312156115f9578182fd5b823567ffffffffffffffff81111561160f578283fd5b8301601f8101851361161f578283fd5b803561162d6114e782611af5565b8181528381019083850185840285018601891015611649578687fd5b8694505b838510156116735761165f8982611540565b83526001949094019391850191850161164d565b50979650505050505050565b60006020808385031215611691578182fd5b825167ffffffffffffffff8111156116a7578283fd5b8301601f810185136116b7578283fd5b80516116c56114e782611af5565b81815283810190838501858402850186018910156116e1578687fd5b8694505b83851015611673576116f7898261154b565b8352600194909401939185019185016116e5565b6000806040838503121561171d578182fd5b825167ffffffffffffffff80821115611734578384fd5b818501915085601f830112611747578384fd5b81516117556114e782611af5565b80828252602080830192508086018a828387028901011115611775578889fd5b8896505b8487101561179f5761178b8b82611556565b845260019690960195928101928101611779565b5088015190965093505050808211156117b6578283fd5b506117c3858286016114c9565b9150509250929050565b600080600080600060a086880312156117e4578081fd5b855180151581146117f3578182fd5b602087015190955061180481611b15565b604087015190945060028110611818578182fd5b606087015190935061182981611b2d565b608087015190925061183a81611b3e565b809150509295509295909350565b600060208284031215611859578081fd5b813561060981611b15565b600060208284031215611875578081fd5b813561060981611b2d565b600060208284031215611891578081fd5b5051919050565b6000602082840312156118a9578081fd5b813561060981611b3e565b6000602082840312156118c5578081fd5b815160ff81168114610609578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b602080825282518282018190526000919060409081850190868401855b8281101561195c57815180516001600160a01b0316855286015186850152928401929085019060010161192e565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156119a757835163ffffffff1683529284019291840191600101611985565b50909695505050505050565b6000602080835283518082850152825b818110156119df578581018301518582016040015282016119c3565b818111156119f05783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b2737ba1030b71037bbb732b960a11b604082015260600190565b602080825260029082015261042560f41b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b62ffffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60405181810167ffffffffffffffff81118282101715611aed57600080fd5b604052919050565b600067ffffffffffffffff821115611b0b578081fd5b5060209081020190565b6001600160a01b0381168114611b2a57600080fd5b50565b62ffffff81168114611b2a57600080fd5b63ffffffff81168114611b2a57600080fdfea2646970667358221220e716ce7751ca9331e897d31f3744c6916e2f742be6df42551b069b566751df4c64736f6c634300060c0033";class Td extends Ja{constructor(...e){e.length>1?super(...e):super(ld,md,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ld)}static connect(e,t){return new za(e,ld,t)}}Td.bytecode=md,Td.abi=ld;const hd=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"callToOwner",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"changeOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"delegateToOwner",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"getCurrentOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeToOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],gd="0x608060405260405162000e6038038062000e60833981810160405260408110156200002957600080fd5b8151602083018051604051929492938301929190846401000000008211156200005157600080fd5b9083019060208201858111156200006757600080fd5b82516401000000008111828201881017156200008257600080fd5b82525081516020918201929091019080838360005b83811015620000b157818101518382015260200162000097565b50505050905090810190601f168015620000df5780820380516001836020036101000a031916815260200191505b50604052508391508290508130828281620000fa82620001ef565b805115620001b8576000826001600160a01b0316826040518082805190602001908083835b60208310620001405780518252601f1990920191602091820191016200011f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620001a2576040519150601f19603f3d011682016040523d82523d6000602084013e620001a7565b606091505b5050905080620001b657600080fd5b505b50620001c19050565b620001cc8262000266565b5050505050620001e7336200028a60201b620008ab1760201c565b505062000301565b6200020581620002b660201b620008d51760201c565b620002425760405162461bcd60e51b815260040180806020018281038252603681526020018062000e2a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b8062000295620002bc565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610b1980620003116000396000f3fe6080604052600436106100955760003560e01c80635c60da1b116100595780635c60da1b146102fe5780638f2839701461032f578063a18a186b14610362578063a6f9dae114610377578063f851a440146103aa576100a4565b806323711ab1146100ac57806323c735f1146101625780632e44e0e0146101955780633659cfe61461024b5780634f1ef2861461027e576100a4565b366100a4576100a26103bf565b005b6100a26103bf565b6100a2600480360360408110156100c257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ed57600080fd5b8201836020820111156100ff57600080fd5b8035906020019184600183028401116401000000008311171561012157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103d9945050505050565b34801561016e57600080fd5b506100a26004803603602081101561018557600080fd5b50356001600160a01b03166104e7565b6100a2600480360360408110156101ab57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101d657600080fd5b8201836020820111156101e857600080fd5b8035906020019184600183028401116401000000008311171561020a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610546945050505050565b34801561025757600080fd5b506100a26004803603602081101561026e57600080fd5b50356001600160a01b031661063a565b6100a26004803603604081101561029457600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111640100000000831117156102f357600080fd5b509092509050610671565b34801561030a57600080fd5b5061031361071e565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b506100a26004803603602081101561035257600080fd5b50356001600160a01b031661075b565b34801561036e57600080fd5b50610313610815565b34801561038357600080fd5b506100a26004803603602081101561039a57600080fd5b50356001600160a01b0316610824565b3480156103b657600080fd5b50610313610880565b6103c76103d7565b6103d76103d26108db565b610900565b565b336103e2610924565b6001600160a01b03161461042c576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061046a5780518252601f19909201916020918201910161044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b606091505b5091509150816104e157805181602001fd5b50505050565b336104f0610924565b6001600160a01b03161461053a576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b6105438161093d565b50565b3361054f610924565b6001600160a01b031614610599576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b60006060836001600160a01b031634846040518082805190602001908083835b602083106105d85780518252601f1990920191602091820191016105b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146104ca576040519150601f19603f3d011682016040523d82523d6000602084013e6104cf565b61064261097d565b6001600160a01b0316336001600160a01b03161415610669576106648161093d565b610543565b6105436103bf565b61067961097d565b6001600160a01b0316336001600160a01b031614156107115761069b8361093d565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146106f8576040519150601f19603f3d011682016040523d82523d6000602084013e6106fd565b606091505b505090508061070b57600080fd5b50610719565b6107196103bf565b505050565b600061072861097d565b6001600160a01b0316336001600160a01b03161415610750576107496108db565b9050610758565b6107586103bf565b90565b61076361097d565b6001600160a01b0316336001600160a01b03161415610669576001600160a01b0381166107c15760405162461bcd60e51b815260040180806020018281038252603a815260200180610a74603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6107ea61097d565b604080516001600160a01b03928316815291841660208301528051918290030190a1610664816109a2565b600061081f610924565b905090565b3361082d610924565b6001600160a01b031614610877576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71037bbb732b960a11b604482015290519081900360640190fd5b610543816108ab565b600061088a61097d565b6001600160a01b0316336001600160a01b031614156107505761074961097d565b806108b46109c6565b80546001600160a01b0319166001600160a01b039290921691909117905550565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b600061092e6109c6565b546001600160a01b0316919050565b61094681610a0b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b604080517fb4d03667d60278cc15e9a68fa7679dc39ebe71350c4566a2c23c26580da4e0b3602080830191909152825180830382018152918301909252805191012090565b610a14816108d5565b610a4f5760405162461bcd60e51b8152600401808060200182810382526036815260200180610aae6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220486b8f46c84e133fdcdf09d6e85ae28603a923477471dc965d4d7f5f3634234c64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class wd extends Ja{constructor(...e){e.length>1?super(...e):super(hd,gd,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(hd)}static connect(e,t){return new za(e,hd,t)}}wd.bytecode=gd,wd.abi=hd;var vd=Object.freeze({__proto__:null,TestnetAdminProxy__factory:yd,TestnetFeeManager__factory:Td,TestnetGovernanceProxy__factory:wd});const Md=[{inputs:[{internalType:"address",name:"account",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class _d{static createInterface(){return new na(Md)}static connect(e,t){return new za(e,Md,t)}}_d.abi=Md;const xd=[{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawTorn",outputs:[],stateMutability:"nonpayable",type:"function"}];let Id=class{static createInterface(){return new na(xd)}static connect(e,t){return new za(e,xd,t)}};Id.abi=xd;const Ed=[{inputs:[{internalType:"address",name:"governanceAddress",type:"address"},{internalType:"address",name:"tornAddress",type:"address"},{internalType:"address",name:"_relayerRegistry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!1,internalType:"uint256",name:"rewardsClaimed",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!1,internalType:"uint256",name:"rewards",type:"uint256"}],name:"RewardsUpdated",type:"event"},{inputs:[],name:"Governance",outputs:[{internalType:"contract ITornadoGovernance",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"accumulatedRewardPerTorn",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"accumulatedRewardRateOnLastUpdate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"accumulatedRewards",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"addBurnRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"checkReward",outputs:[{internalType:"uint256",name:"rewards",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getReward",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"ratioConstant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"relayerRegistry",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"setReward",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amountLockedBeforehand",type:"uint256"}],name:"updateRewardsOnLockedBalanceChange",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawTorn",outputs:[],stateMutability:"nonpayable",type:"function"}],Rd="0x6101006040523480156200001257600080fd5b50604051620011e4380380620011e48339810160408190526200003591620000e0565b6001600160601b0319606084811b821660a05283811b821660c05282901b1660e052604080516318160ddd60e01b815290516001600160a01b038416916318160ddd916004808301926020929190829003018186803b1580156200009857600080fd5b505afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d3919062000133565b6080525062000165915050565b600080600060608486031215620000f5578283fd5b835162000102816200014c565b602085015190935062000115816200014c565b604085015190925062000128816200014c565b809150509250925092565b60006020828403121562000145578081fd5b5051919050565b6001600160a01b03811681146200016257600080fd5b50565b60805160a05160601c60c05160601c60e05160601c610ff0620001f4600039806101eb52806104f652508061023a52806104815280610574528061084252806108d75250806101b9528061026952806103ab5280610550528061059b52806106e5528061078052806107e452806108f952508061036a528061052c528061065f52806109f55250610ff06000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063adf898a41161008c578063e0d3265211610066578063e0d326521461016d578063e113335f14610175578063eacccaf014610188578063f58073b11461019b576100cf565b8063adf898a41461013f578063c3c90e6414610147578063d7ada20d1461015a576100cf565b8063338610af146100d45780633d18b912146100e957806347ff589d146100f157806373f273fc1461010f57806380a120411461012f5780639453911214610137575b600080fd5b6100e76100e2366004610d78565b6101ae565b005b6100e76103a3565b6100f96104f4565b6040516101069190610dc4565b60405180910390f35b61012261011d366004610cf5565b610518565b6040516101069190610f6c565b61012261052a565b6100f961054e565b6100f9610572565b610122610155366004610cf5565b610596565b610122610168366004610cf5565b6106c2565b6101226106d4565b6100e7610183366004610d11565b6106da565b6100e7610196366004610d11565b610775565b6100e76101a9366004610d78565b6107d9565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061020d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6102325760405162461bcd60e51b815260040161022990610ec5565b60405180910390fd5b61039d6103947f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639daafec76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5c565b6040518263ffffffff1660e01b81526004016103149190610dc4565b60206040518083038186803b15801561032c57600080fd5b505afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190610d90565b61038e847f0000000000000000000000000000000000000000000000000000000000000000610921565b90610964565b600154906109a6565b60015550565b600061044a337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639ae697bf336040518263ffffffff1660e01b81526004016103f59190610dc4565b60206040518083038186803b15801561040d57600080fd5b505afa158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610d90565b6109cb565b336000908152600360205260409020549091506104689082906109a6565b336000818152600360205260408120559091506104b0907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083610a85565b336001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe826040516104e99190610f6c565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639ae697bf846040518263ffffffff1660e01b81526004016105e59190610dc4565b60206040518083038186803b1580156105fd57600080fd5b505afa158015610611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106359190610d90565b90508015610697576001600160a01b038316600090815260026020526040902054600154610694917f00000000000000000000000000000000000000000000000000000000000000009161038e91859161068e91610ae0565b90610921565b91505b6001600160a01b0383166000908152600360205260409020546106bb9083906109a6565b9392505050565b60026020526000908152604090205481565b60015481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107225760405162461bcd60e51b815260040161022990610e5b565b600061072e83836109cb565b6001600160a01b03841660009081526003602052604090205490915061075490826109a6565b6001600160a01b039093166000908152600360205260409020929092555050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107bd5760405162461bcd60e51b815260040161022990610e5b565b6001600160a01b03909116600090815260036020526040902055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108215760405162461bcd60e51b815260040161022990610e5b565b6000198114156108ca576040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610877903090600401610dc4565b60206040518083038186803b15801561088f57600080fd5b505afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610d90565b90505b61091e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610a85565b50565b6000826109305750600061095e565b8282028284828161093d57fe5b041461095b5760405162461bcd60e51b815260040161022990610e84565b90505b92915050565b600061095b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b22565b60008282018381101561095b5760405162461bcd60e51b815260040161022990610e24565b60008115610a27576001600160a01b038316600090815260026020526040902054600154610a24917f00000000000000000000000000000000000000000000000000000000000000009161038e91869161068e91610ae0565b90505b6001546001600160a01b038416600081815260026020526040908190209290925590517f39fe62076cf7adf3c60e355a2da5a4f17a958ca319e8eba385a6c09a8b64901690610a77908490610f6c565b60405180910390a292915050565b610adb8363a9059cbb60e01b8484604051602401610aa4929190610dd8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b59565b505050565b600061095b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610be8565b60008183610b435760405162461bcd60e51b81526004016102299190610df1565b506000838581610b4f57fe5b0495945050505050565b6060610bae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c149092919063ffffffff16565b805190915015610adb5780806020019051810190610bcc9190610d3c565b610adb5760405162461bcd60e51b815260040161022990610f22565b60008184841115610c0c5760405162461bcd60e51b81526004016102299190610df1565b505050900390565b6060610c238484600085610c2b565b949350505050565b6060610c3685610cef565b610c525760405162461bcd60e51b815260040161022990610eeb565b60006060866001600160a01b03168587604051610c6f9190610da8565b60006040518083038185875af1925050503d8060008114610cac576040519150601f19603f3d011682016040523d82523d6000602084013e610cb1565b606091505b50915091508115610cc5579150610c239050565b805115610cd55780518082602001fd5b8360405162461bcd60e51b81526004016102299190610df1565b3b151590565b600060208284031215610d06578081fd5b813561095b81610fa5565b60008060408385031215610d23578081fd5b8235610d2e81610fa5565b946020939093013593505050565b600060208284031215610d4d578081fd5b8151801515811461095b578182fd5b600060208284031215610d6d578081fd5b815161095b81610fa5565b600060208284031215610d89578081fd5b5035919050565b600060208284031215610da1578081fd5b5051919050565b60008251610dba818460208701610f75565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610e10816040850160208701610f75565b601f01601f19169190910160400192915050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e6f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b90815260200190565b60005b83811015610f90578181015183820152602001610f78565b83811115610f9f576000848401525b50505050565b6001600160a01b038116811461091e57600080fdfea2646970667358221220007ef4aab133b842800388614e081de933a2da981d94088bca1e1a924db5174764736f6c634300060c0033";class Od extends Ja{constructor(...e){e.length>1?super(...e):super(Ed,Rd,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Ed)}static connect(e,t){return new za(e,Ed,t)}}Od.bytecode=Rd,Od.abi=Ed;var kd=Object.freeze({__proto__:null,ITornadoGovernance__factory:_d,ITornadoVault__factory:Id,TornadoStakingRewards__factory:Od});const Pd=[{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"}];class Ad{static createInterface(){return new na(Pd)}static connect(e,t){return new za(e,Pd,t)}}Ad.abi=Pd;const Nd=[{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"}];class Cd{static createInterface(){return new na(Nd)}static connect(e,t){return new za(e,Nd,t)}}Cd.abi=Nd;const Dd=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"feeProtocol0Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol0New",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1New",type:"uint8"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Swap",type:"event"}];class Sd{static createInterface(){return new na(Dd)}static connect(e,t){return new za(e,Dd,t)}}Sd.abi=Dd;const Ud=[{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Vd{static createInterface(){return new na(Ud)}static connect(e,t){return new za(e,Ud,t)}}Vd.abi=Ud;const Ld=[{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint8",name:"feeProtocol0",type:"uint8"},{internalType:"uint8",name:"feeProtocol1",type:"uint8"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"}];class Fd{static createInterface(){return new na(Ld)}static connect(e,t){return new za(e,Ld,t)}}Fd.abi=Ld;const Gd=[{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"_liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint8",name:"feeProtocol",type:"uint8"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int16",name:"wordPosition",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tick",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"}];class jd{static createInterface(){return new na(Gd)}static connect(e,t){return new za(e,Gd,t)}}jd.abi=Gd;var Bd=Object.freeze({__proto__:null,IUniswapV3PoolActions__factory:Ad,IUniswapV3PoolDerivedState__factory:Cd,IUniswapV3PoolEvents__factory:Sd,IUniswapV3PoolImmutables__factory:Vd,IUniswapV3PoolOwnerActions__factory:Fd,IUniswapV3PoolState__factory:jd});const Hd=[{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!0,internalType:"int24",name:"tickSpacing",type:"int24"}],name:"FeeAmountEnabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"int24",name:"tickSpacing",type:"int24"},{indexed:!1,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"createPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],name:"enableFeeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"}],name:"feeAmountTickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"getPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"}];class zd{static createInterface(){return new na(Hd)}static connect(e,t){return new za(e,Hd,t)}}zd.abi=Hd;const $d=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"feeProtocol0Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol0New",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1New",type:"uint8"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"_liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"feeProtocol0",type:"uint8"},{internalType:"uint8",name:"feeProtocol1",type:"uint8"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint8",name:"feeProtocol",type:"uint8"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"wordPosition",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tick",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Xd{static createInterface(){return new na($d)}static connect(e,t){return new za(e,$d,t)}}Xd.abi=$d;var Wd=Object.freeze({__proto__:null,IUniswapV3Factory__factory:zd,IUniswapV3Pool__factory:Xd,pool:Bd}),qd=Object.freeze({__proto__:null,interfaces:Wd}),Jd=Object.freeze({__proto__:null,contracts:qd}),Kd=Object.freeze({__proto__:null,v3Core:Jd});const Yd=[{inputs:[],name:"denomination",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"commitment",type:"bytes32"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"proof",type:"bytes"},{internalType:"bytes32",name:"root",type:"bytes32"},{internalType:"bytes32",name:"nullifierHash",type:"bytes32"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"address payable",name:"relayer",type:"address"},{internalType:"uint256",name:"fee",type:"uint256"},{internalType:"uint256",name:"refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"}];class Zd{static createInterface(){return new na(Yd)}static connect(e,t){return new za(e,Yd,t)}}Zd.abi=Yd;var Qd=Object.freeze({__proto__:null,ITornadoInstance__factory:Zd});const ei=[{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"}];class ti{static createInterface(){return new na(ei)}static connect(e,t){return new za(e,ei,t)}}ti.abi=ei;var ai=Object.freeze({__proto__:null,IERC20Decimals__factory:ti}),ni=Object.freeze({__proto__:null,uniswapV3OracleHelperSol:ai});const bi=[{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"text",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"value",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],fi="0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600160008190556040805180820190915260058082526464756d6d7960d81b60209092019182526101ac9291906101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea26469706673582212204b4d54284aeff9c7c570415da4a9efb9bf7115fe94a322210f9981c1c7ae107a64736f6c634300060c0033";class di extends Ja{constructor(...e){e.length>1?super(...e):super(bi,fi,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(bi)}static connect(e,t){return new za(e,bi,t)}}di.bytecode=fi,di.abi=bi;const ii=[{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"text",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"value",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],si="0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600260005560408051808201909152600680825265323ab6b6bc9960d11b60209092019182526101ac916001916101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea2646970667358221220056d994e19772e421a19f4bcf8cb09061d5645867c4c352106bf6b809fb5de3664736f6c634300060c0033";class ci extends Ja{constructor(...e){e.length>1?super(...e):super(ii,si,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ii)}static connect(e,t){return new za(e,ii,t)}}ci.bytecode=si,ci.abi=ii;var ri=Object.freeze({__proto__:null,DummySecond__factory:ci,Dummy__factory:di});const pi=[{inputs:[{internalType:"uint256",name:"delay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"}];class ui{static createInterface(){return new na(pi)}static connect(e,t){return new za(e,pi,t)}}ui.abi=pi;const oi=[{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"}],yi="0x608060405234801561001057600080fd5b5060c48061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063373058b814602d575b600080fd5b60336035565b005b6040805163e4917d9f60e01b81526203f48060048201529051309163e4917d9f91602480830192600092919082900301818387803b158015607557600080fd5b505af11580156088573d6000803e3d6000fd5b5050505056fea264697066735822122080cc4a797d58ff69ba6d6a0d2a3849574ef67da2d75c41e66a86d3f6e162209d64736f6c634300060c0033";class li extends Ja{constructor(...e){e.length>1?super(...e):super(oi,yi,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(oi)}static connect(e,t){return new za(e,oi,t)}}li.bytecode=yi,li.abi=oi;var mi=Object.freeze({__proto__:null,IGovernance__factory:ui,ProposalStateChangeGovernance__factory:li});const Ti=[{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"}];class hi{static createInterface(){return new na(Ti)}static connect(e,t){return new za(e,Ti,t)}}hi.abi=Ti;const gi=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"x",type:"uint256"}],name:"Overriden",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"newVariable",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"time_",type:"uint256"}],name:"setTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"torna",type:"address"}],name:"setTorn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"time",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"}],wi="0x6080604052426041553480156200001557600080fd5b50600054610100900460ff168062000032575062000032620000cd565b8062000041575060005460ff16155b620000695760405162461bcd60e51b8152600401620000609062000114565b60405180910390fd5b600054610100900460ff1615801562000095576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000b3620000d3565b8015620000c6576000805461ff00191690555b5062000162565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6123ac80620001726000396000f3fe60806040526004361061023b5760003560e01c8063a0a2b5731161012e578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f14610664578063ea0217cf14610684578063ece40cc1146106a4578063f0b76892146106c4578063fe0d94c1146106e45761023b565b8063ce25d71c146105d8578063d6159fe5146105ed578063d6f0948c14610602578063da35c66414610622578063e23a9a52146106375761023b565b8063b54426c8116100f2578063b54426c814610538578063b5f6a74314610558578063b859f11b14610578578063c0c0e82014610598578063c4d66de8146105b85761023b565b8063a0a2b573146104b9578063a6c26603146104d9578063a72edda3146104ee578063adf898a41461050e578063b1610d7e146105235761023b565b80636198e339116101bc57806370b0f6601161018057806370b0f6601461042f5780638d7a72f31461044f57806392ab89bb146104645780639a9e3b6e146104795780639ae697bf146104995761023b565b80636198e3391461039857806365da1264146103b8578063671dd275146103e55780636a661755146103fa5780636dc2dc6c1461040f5761023b565b806337f135d71161020357806337f135d7146103015780633e4f49e614610316578063587a6ecb1461034357806358e9fff0146103585780635c19a95c146103785761023b565b8063013cf08b1461024057806302ec8f9e1461027d57806315373e3d1461029f57806316ada547146102bf57806317977c61146102e1575b600080fd5b34801561024c57600080fd5b5061026061025b366004611cd6565b6106f7565b604051610274989796959493929190611de5565b60405180910390f35b34801561028957600080fd5b5061029d610298366004611cd6565b61075c565b005b3480156102ab57600080fd5b5061029d6102ba366004611d1a565b610789565b3480156102cb57600080fd5b506102d4610798565b6040516102749190612323565b3480156102ed57600080fd5b506102d46102fc366004611acd565b61079e565b34801561030d57600080fd5b506102d46107b0565b34801561032257600080fd5b50610336610331366004611cd6565b6107b6565b6040516102749190611ea3565b34801561034f57600080fd5b506102d46108f9565b34801561036457600080fd5b506102d4610373366004611ae8565b6108ff565b34801561038457600080fd5b5061029d610393366004611acd565b61094d565b3480156103a457600080fd5b5061029d6103b3366004611cd6565b610a6f565b3480156103c457600080fd5b506103d86103d3366004611acd565b610ba6565b6040516102749190611d94565b3480156103f157600080fd5b506102d4610bc1565b34801561040657600080fd5b506102d4610bc7565b34801561041b57600080fd5b5061029d61042a366004611cd6565b610bcd565b34801561043b57600080fd5b5061029d61044a366004611cd6565b610c12565b34801561045b57600080fd5b506102d4610c36565b34801561047057600080fd5b5061029d610c3c565b34801561048557600080fd5b5061029d610494366004611cd6565b610cc3565b3480156104a557600080fd5b506102d46104b4366004611acd565b610ce7565b3480156104c557600080fd5b5061029d6104d4366004611cd6565b610cf9565b3480156104e557600080fd5b506102d4610cfe565b3480156104fa57600080fd5b506102d4610509366004611acd565b610d04565b34801561051a57600080fd5b506103d8610d16565b34801561052f57600080fd5b506102d4610d25565b34801561054457600080fd5b5061029d610553366004611cd6565b610d2b565b34801561056457600080fd5b5061029d610573366004611acd565b610d35565b34801561058457600080fd5b5061029d610593366004611bf5565b610d57565b3480156105a457600080fd5b5061029d6105b3366004611cd6565b610e0e565b3480156105c457600080fd5b5061029d6105d3366004611acd565b610e32565b3480156105e457600080fd5b506102d4611075565b3480156105f957600080fd5b506102d461107b565b34801561060e57600080fd5b506102d461061d366004611b48565b611081565b34801561062e57600080fd5b506102d4611097565b34801561064357600080fd5b50610657610652366004611cee565b6110a1565b60405161027491906122fe565b34801561067057600080fd5b5061029d61067f366004611cd6565b611113565b34801561069057600080fd5b5061029d61069f366004611cd6565b611137565b3480156106b057600080fd5b5061029d6106bf366004611cd6565b61115b565b3480156106d057600080fd5b5061029d6106df366004611b96565b61117f565b61029d6106f2366004611cd6565b6111ff565b603d818154811061070457fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146107845760405162461bcd60e51b815260040161077b90612101565b60405180910390fd5b603555565b610794338383611240565b5050565b60415481565b603e6020526000908152604090205481565b60335481565b60006107c0611097565b82111580156107cf5750600082115b6107eb5760405162461bcd60e51b815260040161077b90612237565b6000603d83815481106107fa57fe5b906000526020600020906008020190508060020154610817611471565b116108265760009150506108f4565b8060030154610833611471565b116108425760019150506108f4565b8060050154816004015411158061086457506035548160050154826004015401105b156108735760029150506108f4565b600681015460ff161561088a5760059150506108f4565b6108af6034546108a9603354846003015461147790919063ffffffff16565b90611477565b6108b7611471565b106108c65760069150506108f4565b60335460038201546108d791611477565b6108df611471565b106108ee5760049150506108f4565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461093a5760405162461bcd60e51b815260040161077b906122c7565b61094584848461149c565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061098357506001600160a01b0382163014155b801561099757506001600160a01b03821615155b80156109b55750806001600160a01b0316826001600160a01b031614155b6109d15760405162461bcd60e51b815260040161077b90612138565b6001600160a01b03811615610a17576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a87611471565b11610aa45760405162461bcd60e51b815260040161077b90612064565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610af29183906117ea565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610b35918590600401611da8565b602060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190611cba565b610ba35760405162461bcd60e51b815260040161077b9061209b565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610bec5760405162461bcd60e51b815260040161077b90612101565b6033548110610c0d5760405162461bcd60e51b815260040161077b90612020565b603a55565b333014610c315760405162461bcd60e51b815260040161077b90612101565b603755565b60425481565b336000908152603c60205260409020546001600160a01b031680610c725760405162461bcd60e51b815260040161077b9061227d565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610ce25760405162461bcd60e51b815260040161077b90612101565b603455565b603b6020526000908152604090205481565b604155565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610ba33382611816565b604080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015610de857336001600160a01b0316603c6000868481518110610d7d57fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610dc25760405162461bcd60e51b815260040161077b906122c7565b610de0848281518110610dd157fe5b60200260200101518484611240565b600101610d5a565b50336000908152603b602052604090205415610e0957610e09338383611240565b505050565b333014610e2d5760405162461bcd60e51b815260040161077b90612101565b603955565b600054610100900460ff1680610e4b5750610e4b6118fb565b80610e59575060005460ff16155b610e755760405162461bcd60e51b815260040161077b906121e9565b600054610100900460ff16158015610ea0576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611060611901565b8015610794576000805461ff00191690555050565b60395481565b60375481565b600061108e33848461149c565b90505b92915050565b603d546000190190565b6110a96119c7565b603d83815481106110b657fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146111325760405162461bcd60e51b815260040161077b90612101565b603355565b3330146111565760405162461bcd60e51b815260040161077b90612101565b603855565b33301461117a5760405162461bcd60e51b815260040161077b90612101565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906111bb90899030908a908a908a908a908a90600401611e2b565b600060405180830381600087803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050506111f78686611816565b505050505050565b6103e76042556040517fc22c84ebcf25b30190d2b53474def7b552efd2018ef8acaf6bed1b67e8d2be7c90611235908390612323565b60405180910390a150565b600161124b836107b6565b600681111561125657fe5b146112735760405162461bcd60e51b815260040161077b90611f45565b6000603d838154811061128257fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806112e15760405162461bcd60e51b815260040161077b9061216f565b825460ff1615611330578254610100900460ff1615611317576001830154600485015461130d91611942565b6004850155611330565b6001830154600585015461132a91611942565b60058501555b841561134f5760048401546113459082611477565b6004850155611364565b600584015461135e9082611477565b60058501555b6006840154610100900460ff161580156113945750603954611392611387611471565b600387015490611942565b105b156113d85760058401546004850154111582151581146113d65760068501805461ff001916610100179055603a5460038601546113d091611477565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611423938b9361141e9391926108a992839190611477565b611984565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516114609190612323565b60405180910390a450505050505050565b60415490565b60008282018381101561108e5760405162461bcd60e51b815260040161077b90611fe9565b6001600160a01b0383166000908152603b60205260408120546036548110156114d75760405162461bcd60e51b815260040161077b90611f8c565b6114e0846119c1565b6114fc5760405162461bcd60e51b815260040161077b906121a6565b6001600160a01b0385166000908152603e6020526040902054801561156e576000611526826107b6565b9050600181600681111561153657fe5b141580156115505750600081600681111561154d57fe5b14155b61156c5760405162461bcd60e51b815260040161077b90611eca565b505b600061157e6037546108a9611471565b905060006115976038548361147790919063ffffffff16565b90506115a16119e7565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611753611097565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611795928d9261141e9290916108a9919082908a90611477565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516117d59493929190611e6c565b60405180910390a39998505050505050505050565b6000818484111561180e5760405162461bcd60e51b815260040161077b9190611eb7565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061184a90859030908690600401611dc1565b602060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189c9190611cba565b6118b85760405162461bcd60e51b815260040161077b906120ca565b6001600160a01b0382166000908152603b60205260409020546118db9082611477565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b600061108e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ea565b6001600160a01b0382166000908152603f6020526040902054811115610794576001600160a01b03919091166000908152603f6020526040902055565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461109157600080fd5b803561109181612368565b600082601f830112611a74578081fd5b813567ffffffffffffffff811115611a8a578182fd5b611a9d601f8201601f191660200161232c565b9150808252836020828501011115611ab457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611ade578081fd5b61108e8383611a42565b600080600060608486031215611afc578182fd5b8335611b0781612353565b92506020840135611b1781612353565b9150604084013567ffffffffffffffff811115611b32578182fd5b611b3e86828701611a64565b9150509250925092565b60008060408385031215611b5a578182fd5b8235611b6581612353565b9150602083013567ffffffffffffffff811115611b80578182fd5b611b8c85828601611a64565b9150509250929050565b60008060008060008060c08789031215611bae578182fd5b611bb88888611a42565b95506020870135945060408701359350606087013560ff81168114611bdb578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611c09578283fd5b833567ffffffffffffffff80821115611c20578485fd5b818601915086601f830112611c33578485fd5b813581811115611c41578586fd5b60209150818102611c5383820161232c565b8281528381019085850183870186018c1015611c6d57898afd5b8996505b84871015611c9757611c838c82611a42565b835260019690960195918501918501611c71565b5097505050508501359250611cb190508560408601611a59565b90509250925092565b600060208284031215611ccb578081fd5b815161108e81612368565b600060208284031215611ce7578081fd5b5035919050565b60008060408385031215611d00578182fd5b82359150611d118460208501611a42565b90509250929050565b60008060408385031215611d2c578182fd5b823591506020830135611d3e81612368565b809150509250929050565b60008151808452815b81811015611d6e57602081850181015186830182015201611d52565b81811115611d7f5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611e996080830184611d49565b9695505050505050565b6020810160078310611eb157fe5b91905290565b60006020825261108e6020830184611d49565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561234b57600080fd5b604052919050565b6001600160a01b0381168114610ba357600080fd5b8015158114610ba357600080fdfea264697066735822122077147b2d24ffd383c4a2d0eb254eb72ba4274421278e284354c4848ff7c9df0164736f6c634300060c0033";class vi extends Ja{constructor(...e){e.length>1?super(...e):super(gi,wi,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(gi)}static connect(e,t){return new za(e,gi,t)}}vi.bytecode=wi,vi.abi=gi;const Mi=[{inputs:[{internalType:"address",name:"_newLogic",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"newLogic",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],_i="0x60a060405234801561001057600080fd5b506040516101da3803806101da83398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610148610092600039806065528060a252506101486000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806305ccb23e1461003b578063373058b814610059575b600080fd5b610043610063565b60405161005091906100fe565b60405180910390f35b610061610087565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b604051631b2ce7f360e11b81523090633659cfe6906100ca907f0000000000000000000000000000000000000000000000000000000000000000906004016100fe565b600060405180830381600087803b1580156100e457600080fd5b505af11580156100f8573d6000803e3d6000fd5b50505050565b6001600160a01b039190911681526020019056fea26469706673582212207d2c2c988cd8f64fa7efb7ef33cfeee3b01f81a501e4a71ae8a63d6a5e269eb664736f6c634300060c0033";class xi extends Ja{constructor(...e){e.length>1?super(...e):super(Mi,_i,e[0])}getDeployTransaction(e,t){return super.getDeployTransaction(e,t||{})}deploy(e,t){return super.deploy(e,t||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Mi)}static connect(e,t){return new za(e,Mi,t)}}xi.bytecode=_i,xi.abi=Mi;var Ii=Object.freeze({__proto__:null,IProxy__factory:hi,NewImplementation__factory:vi,ProposalUpgrade__factory:xi});const Ei=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"time_",type:"uint256"}],name:"setTimestamp",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"torna",type:"address"}],name:"setTorn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"time",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"}],Ri="0x6080604052426041553480156200001557600080fd5b50600054610100900460ff168062000032575062000032620000cd565b8062000041575060005460ff16155b620000695760405162461bcd60e51b8152600401620000609062000114565b60405180910390fd5b600054610100900460ff1615801562000095576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000b3620000d3565b8015620000c6576000805461ff00191690555b5062000162565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6125c980620001726000396000f3fe6080604052600436106102305760003560e01c8063a0a2b5731161012e578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f14610644578063ea0217cf14610664578063ece40cc114610684578063f0b76892146106a4578063fe0d94c1146106c457610230565b8063ce25d71c146105b8578063d6159fe5146105cd578063d6f0948c146105e2578063da35c66414610602578063e23a9a521461061757610230565b8063b54426c8116100f2578063b54426c814610518578063b5f6a74314610538578063b859f11b14610558578063c0c0e82014610578578063c4d66de81461059857610230565b8063a0a2b57314610499578063a6c26603146104b9578063a72edda3146104ce578063adf898a4146104ee578063b1610d7e1461050357610230565b80635c19a95c116101bc5780636dc2dc6c116101805780636dc2dc6c1461040457806370b0f6601461042457806392ab89bb146104445780639a9e3b6e146104595780639ae697bf1461047957610230565b80635c19a95c1461036d5780636198e3391461038d57806365da1264146103ad578063671dd275146103da5780636a661755146103ef57610230565b806317977c611161020357806317977c61146102d657806337f135d7146102f65780633e4f49e61461030b578063587a6ecb1461033857806358e9fff01461034d57610230565b8063013cf08b1461023557806302ec8f9e1461027257806315373e3d1461029457806316ada547146102b4575b600080fd5b34801561024157600080fd5b50610255610250366004611e01565b6106d7565b604051610269989796959493929190611f0d565b60405180910390f35b34801561027e57600080fd5b5061029261028d366004611e01565b61073c565b005b3480156102a057600080fd5b506102926102af366004611e45565b610769565b3480156102c057600080fd5b506102c9610778565b6040516102699190612510565b3480156102e257600080fd5b506102c96102f1366004611bf8565b61077e565b34801561030257600080fd5b506102c9610790565b34801561031757600080fd5b5061032b610326366004611e01565b610796565b6040516102699190611fcb565b34801561034457600080fd5b506102c96108d9565b34801561035957600080fd5b506102c9610368366004611c13565b6108df565b34801561037957600080fd5b50610292610388366004611bf8565b61092d565b34801561039957600080fd5b506102926103a8366004611e01565b610a4f565b3480156103b957600080fd5b506103cd6103c8366004611bf8565b610b86565b6040516102699190611ebc565b3480156103e657600080fd5b506102c9610ba1565b3480156103fb57600080fd5b506102c9610ba7565b34801561041057600080fd5b5061029261041f366004611e01565b610bad565b34801561043057600080fd5b5061029261043f366004611e01565b610bf2565b34801561045057600080fd5b50610292610c16565b34801561046557600080fd5b50610292610474366004611e01565b610c9d565b34801561048557600080fd5b506102c9610494366004611bf8565b610cc1565b3480156104a557600080fd5b506102926104b4366004611e01565b610cd3565b3480156104c557600080fd5b506102c9610cd8565b3480156104da57600080fd5b506102c96104e9366004611bf8565b610cde565b3480156104fa57600080fd5b506103cd610cf0565b34801561050f57600080fd5b506102c9610cff565b34801561052457600080fd5b50610292610533366004611e01565b610d05565b34801561054457600080fd5b50610292610553366004611bf8565b610d0f565b34801561056457600080fd5b50610292610573366004611d20565b610d31565b34801561058457600080fd5b50610292610593366004611e01565b610de8565b3480156105a457600080fd5b506102926105b3366004611bf8565b610e0c565b3480156105c457600080fd5b506102c961104f565b3480156105d957600080fd5b506102c9611055565b3480156105ee57600080fd5b506102c96105fd366004611c73565b61105b565b34801561060e57600080fd5b506102c9611071565b34801561062357600080fd5b50610637610632366004611e19565b61107b565b60405161026991906124eb565b34801561065057600080fd5b5061029261065f366004611e01565b6110ed565b34801561067057600080fd5b5061029261067f366004611e01565b611111565b34801561069057600080fd5b5061029261069f366004611e01565b611135565b3480156106b057600080fd5b506102926106bf366004611cc1565b611159565b6102926106d2366004611e01565b6111d9565b603d81815481106106e457fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146107645760405162461bcd60e51b815260040161075b906122b7565b60405180910390fd5b603555565b61077433838361136b565b5050565b60415481565b603e6020526000908152604090205481565b60335481565b60006107a0611071565b82111580156107af5750600082115b6107cb5760405162461bcd60e51b815260040161075b906123ed565b6000603d83815481106107da57fe5b9060005260206000209060080201905080600201546107f761159c565b116108065760009150506108d4565b806003015461081361159c565b116108225760019150506108d4565b8060050154816004015411158061084457506035548160050154826004015401105b156108535760029150506108d4565b600681015460ff161561086a5760059150506108d4565b61088f60345461088960335484600301546115a290919063ffffffff16565b906115a2565b61089761159c565b106108a65760069150506108d4565b60335460038201546108b7916115a2565b6108bf61159c565b106108ce5760049150506108d4565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461091a5760405162461bcd60e51b815260040161075b9061247d565b6109258484846115c7565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061096357506001600160a01b0382163014155b801561097757506001600160a01b03821615155b80156109955750806001600160a01b0316826001600160a01b031614155b6109b15760405162461bcd60e51b815260040161075b906122ee565b6001600160a01b038116156109f7576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a6761159c565b11610a845760405162461bcd60e51b815260040161075b9061221a565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610ad2918390611915565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610b15918590600401611ed0565b602060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190611de5565b610b835760405162461bcd60e51b815260040161075b90612251565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610bcc5760405162461bcd60e51b815260040161075b906122b7565b6033548110610bed5760405162461bcd60e51b815260040161075b906121d6565b603a55565b333014610c115760405162461bcd60e51b815260040161075b906122b7565b603755565b336000908152603c60205260409020546001600160a01b031680610c4c5760405162461bcd60e51b815260040161075b90612433565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610cbc5760405162461bcd60e51b815260040161075b906122b7565b603455565b603b6020526000908152604090205481565b604155565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610b833382611941565b604080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015610dc257336001600160a01b0316603c6000868481518110610d5757fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610d9c5760405162461bcd60e51b815260040161075b9061247d565b610dba848281518110610dab57fe5b6020026020010151848461136b565b600101610d34565b50336000908152603b602052604090205415610de357610de333838361136b565b505050565b333014610e075760405162461bcd60e51b815260040161075b906122b7565b603955565b600054610100900460ff1680610e255750610e25611a26565b80610e33575060005460ff16155b610e4f5760405162461bcd60e51b815260040161075b9061239f565b600054610100900460ff16158015610e7a576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561103a611a2c565b8015610774576000805461ff00191690555050565b60395481565b60375481565b60006110683384846115c7565b90505b92915050565b603d546000190190565b611083611af2565b603d838154811061109057fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b33301461110c5760405162461bcd60e51b815260040161075b906122b7565b603355565b3330146111305760405162461bcd60e51b815260040161075b906122b7565b603855565b3330146111545760405162461bcd60e51b815260040161075b906122b7565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061119590899030908a908a908a908a908a90600401611f53565b600060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b505050506111d18686611941565b505050505050565b60046111e482610796565b60068111156111ef57fe5b1461120c5760405162461bcd60e51b815260040161075b90612035565b6000603d828154811061121b57fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661125681611a6d565b6112725760405162461bcd60e51b815260040161075b90611ff2565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b038516916112b691611ea0565b600060405180830381855af49150503d80600081146112f1576040519150601f19603f3d011682016040523d82523d6000602084013e6112f6565b606091505b50915091508161133957805115611321578060405162461bcd60e51b815260040161075b9190611fdf565b60405162461bcd60e51b815260040161075b906124b4565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b600161137683610796565b600681111561138157fe5b1461139e5760405162461bcd60e51b815260040161075b906120fb565b6000603d83815481106113ad57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061140c5760405162461bcd60e51b815260040161075b90612325565b825460ff161561145b578254610100900460ff1615611442576001830154600485015461143891611a73565b600485015561145b565b6001830154600585015461145591611a73565b60058501555b841561147a57600484015461147090826115a2565b600485015561148f565b600584015461148990826115a2565b60058501555b6006840154610100900460ff161580156114bf57506039546114bd6114b261159c565b600387015490611a73565b105b156115035760058401546004850154111582151581146115015760068501805461ff001916610100179055603a5460038601546114fb916115a2565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461154e938b93611549939192610889928391906115a2565b611ab5565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b58460405161158b9190612510565b60405180910390a450505050505050565b60415490565b6000828201838110156110685760405162461bcd60e51b815260040161075b9061219f565b6001600160a01b0383166000908152603b60205260408120546036548110156116025760405162461bcd60e51b815260040161075b90612142565b61160b84611a6d565b6116275760405162461bcd60e51b815260040161075b9061235c565b6001600160a01b0385166000908152603e6020526040902054801561169957600061165182610796565b9050600181600681111561166157fe5b1415801561167b5750600081600681111561167857fe5b14155b6116975760405162461bcd60e51b815260040161075b90612080565b505b60006116a960375461088961159c565b905060006116c2603854836115a290919063ffffffff16565b90506116cc611b12565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff1990931692909217949094161790559061187e611071565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a549293506118c0928d92611549929091610889919082908a906115a2565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516119009493929190611f94565b60405180910390a39998505050505050505050565b600081848411156119395760405162461bcd60e51b815260040161075b9190611fdf565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061197590859030908690600401611ee9565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190611de5565b6119e35760405162461bcd60e51b815260040161075b90612280565b6001600160a01b0382166000908152603b6020526040902054611a0690826115a2565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b600061106883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611915565b6001600160a01b0382166000908152603f6020526040902054811115610774576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461106b57600080fd5b803561106b81612585565b600082601f830112611b9f578081fd5b813567ffffffffffffffff811115611bb5578182fd5b611bc8601f8201601f1916602001612519565b9150808252836020828501011115611bdf57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c09578081fd5b6110688383611b6d565b600080600060608486031215611c27578182fd5b8335611c3281612570565b92506020840135611c4281612570565b9150604084013567ffffffffffffffff811115611c5d578182fd5b611c6986828701611b8f565b9150509250925092565b60008060408385031215611c85578182fd5b8235611c9081612570565b9150602083013567ffffffffffffffff811115611cab578182fd5b611cb785828601611b8f565b9150509250929050565b60008060008060008060c08789031215611cd9578182fd5b611ce38888611b6d565b95506020870135945060408701359350606087013560ff81168114611d06578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611d34578283fd5b833567ffffffffffffffff80821115611d4b578485fd5b818601915086601f830112611d5e578485fd5b813581811115611d6c578586fd5b60209150818102611d7e838201612519565b8281528381019085850183870186018c1015611d9857898afd5b8996505b84871015611dc257611dae8c82611b6d565b835260019690960195918501918501611d9c565b5097505050508501359250611ddc90508560408601611b84565b90509250925092565b600060208284031215611df6578081fd5b815161106881612585565b600060208284031215611e12578081fd5b5035919050565b60008060408385031215611e2b578182fd5b82359150611e3c8460208501611b6d565b90509250929050565b60008060408385031215611e57578182fd5b823591506020830135611e6981612585565b809150509250929050565b60008151808452611e8c816020860160208601612540565b601f01601f19169290920160200192915050565b60008251611eb2818460208701612540565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611fc16080830184611e74565b9695505050505050565b6020810160078310611fd957fe5b91905290565b6000602082526110686020830184611e74565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561253857600080fd5b604052919050565b60005b8381101561255b578181015183820152602001612543565b8381111561256a576000848401525b50505050565b6001600160a01b0381168114610b8357600080fd5b8015158114610b8357600080fdfea264697066735822122079a24ea0dc3d5ef34041a37a137cef69305763e031faa841e2db8f078345f2af64736f6c634300060c0033";class Oi extends Ja{constructor(...e){e.length>1?super(...e):super(Ei,Ri,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Ei)}static connect(e,t){return new za(e,Ei,t)}}Oi.bytecode=Ri,Oi.abi=Ei;const ki=[{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"output",type:"address"}],name:"Debug",type:"event"},{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"}],Pi="0x608060405234801561001057600080fd5b506103d5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063373058b814610030575b600080fd5b61003861003a565b005b6000604051610048906100fa565b604051809103906000f080158015610064573d6000803e3d6000fd5b509050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100a257600080fd5b505af11580156100b6573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f330da4cde831ccab151372275307c2f0cce2bcce846635cd66e6908f10d203639350908190036020019150a150565b610298806101088339019056fe608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631f1bd692146100465780633fa4f245146100c35780638129fc1c146100dd575b600080fd5b61004e6100e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610088578181015183820152602001610070565b50505050905090810190601f1680156100b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100cb610174565b60408051918252519081900360200190f35b6100e561017a565b005b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561016c5780601f106101415761010080835404028352916020019161016c565b820191906000526020600020905b81548152906001019060200180831161014f57829003601f168201915b505050505081565b60005481565b600160008190556040805180820190915260058082526464756d6d7960d81b60209092019182526101ac9291906101af565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101f057805160ff191683800117855561021d565b8280016001018555821561021d579182015b8281111561021d578251825591602001919060010190610202565b5061022992915061022d565b5090565b5b80821115610229576000815560010161022e56fea26469706673582212204b4d54284aeff9c7c570415da4a9efb9bf7115fe94a322210f9981c1c7ae107a64736f6c634300060c0033a26469706673582212205967b156db23a5fd2372953049f5c366f68a9f95cfa116f9fbd6d0c8e7bdaa6364736f6c634300060c0033";class Ai extends Ja{constructor(...e){e.length>1?super(...e):super(ki,Pi,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ki)}static connect(e,t){return new za(e,ki,t)}}Ai.bytecode=Pi,Ai.abi=ki;var Ni=Object.freeze({__proto__:null,MockGovernance__factory:Oi,Proposal__factory:Ai,dummySol:ri,proposalStateChangeGovernanceSol:mi,proposalUpgradeSol:Ii});const Ci=[{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"}],Di="0x608060405234801561001057600080fd5b50610563806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a6c2660311610097578063d6159fe511610066578063d6159fe5146101e2578063e4917d9f146101ea578063ea0217cf14610207578063ece40cc11461022457610100565b8063a6c26603146101ad578063b1610d7e146101b5578063c0c0e820146101bd578063ce25d71c146101da57610100565b80636a661755116100d35780636a6617551461014e5780636dc2dc6c1461015657806370b0f660146101735780639a9e3b6e1461019057610100565b806302ec8f9e1461010557806337f135d714610124578063587a6ecb1461013e578063671dd27514610146575b600080fd5b6101226004803603602081101561011b57600080fd5b5035610241565b005b61012c610288565b60408051918252519081900360200190f35b61012c61028e565b61012c610294565b61012c61029a565b6101226004803603602081101561016c57600080fd5b50356102a0565b6101226004803603602081101561018957600080fd5b5035610327565b610122600480360360208110156101a657600080fd5b503561036e565b61012c6103b5565b61012c6103bb565b610122600480360360208110156101d357600080fd5b50356103c1565b61012c610408565b61012c61040e565b6101226004803603602081101561020057600080fd5b5035610414565b6101226004803603602081101561021d57600080fd5b503561045b565b6101226004803603602081101561023a57600080fd5b50356104a2565b333014610283576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600255565b60005481565b60075481565b60025481565b60015481565b3330146102e2576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b60005481106103225760405162461bcd60e51b81526004018080602001828103825260248152602001806104ea6024913960400191505060405180910390fd5b600755565b333014610369576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600455565b3330146103b0576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600155565b60035481565b60055481565b333014610403576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600655565b60065481565b60045481565b333014610456576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600055565b33301461049d576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b600555565b3330146104e4576040805162461bcd60e51b8152602060048201526018602482015260008051602061050e833981519152604482015290519081900360640190fd5b60035556fe476f7665726e616e63653a20696e636f727265637420766f7465457874656e6454696d65476f7665726e616e63653a20756e617574686f72697a65640000000000000000a26469706673582212208fff4d62d622acc801ece8b6a7cc281f67f5959bf09e0ca68afde2a0ab0bc83164736f6c634300060c0033";class Si extends Ja{constructor(...e){e.length>1?super(...e):super(Ci,Di,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Ci)}static connect(e,t){return new za(e,Ci,t)}}Si.bytecode=Di,Si.abi=Ci;const Ui=[{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}];class Vi{static createInterface(){return new na(Ui)}static connect(e,t){return new za(e,Ui,t)}}Vi.abi=Ui;const Li=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"}];class Fi{static createInterface(){return new na(Li)}static connect(e,t){return new za(e,Li,t)}}Fi.abi=Li;const Gi=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"}],ji="0x60806040523480156200001157600080fd5b50600054610100900460ff16806200002e57506200002e620000c9565b806200003d575060005460ff16155b620000655760405162461bcd60e51b81526004016200005c9062000110565b60405180910390fd5b600054610100900460ff1615801562000091576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000af620000cf565b8015620000c2576000805461ff00191690555b506200015e565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b612524806200016e6000396000f3fe60806040526004361061020f5760003560e01c8063a6c2660311610118578063d6159fe5116100a0578063e4917d9f1161006f578063e4917d9f146105ce578063ea0217cf146105ee578063ece40cc11461060e578063f0b768921461062e578063fe0d94c11461064e5761020f565b8063d6159fe514610557578063d6f0948c1461056c578063da35c6641461058c578063e23a9a52146105a15761020f565b8063b54426c8116100e7578063b54426c8146104c2578063b859f11b146104e2578063c0c0e82014610502578063c4d66de814610522578063ce25d71c146105425761020f565b8063a6c2660314610463578063a72edda314610478578063adf898a414610498578063b1610d7e146104ad5761020f565b80636198e3391161019b5780636dc2dc6c1161016a5780636dc2dc6c146103ce57806370b0f660146103ee57806392ab89bb1461040e5780639a9e3b6e146104235780639ae697bf146104435761020f565b80636198e3391461035757806365da126414610377578063671dd275146103a45780636a661755146103b95761020f565b806337f135d7116101e257806337f135d7146102c05780633e4f49e6146102d5578063587a6ecb1461030257806358e9fff0146103175780635c19a95c146103375761020f565b8063013cf08b1461021457806302ec8f9e1461025157806315373e3d1461027357806317977c6114610293575b600080fd5b34801561022057600080fd5b5061023461022f366004611d5c565b610661565b604051610248989796959493929190611e68565b60405180910390f35b34801561025d57600080fd5b5061027161026c366004611d5c565b6106c6565b005b34801561027f57600080fd5b5061027161028e366004611da0565b6106f3565b34801561029f57600080fd5b506102b36102ae366004611b53565b610702565b604051610248919061246b565b3480156102cc57600080fd5b506102b3610714565b3480156102e157600080fd5b506102f56102f0366004611d5c565b61071a565b6040516102489190611f26565b34801561030e57600080fd5b506102b361085d565b34801561032357600080fd5b506102b3610332366004611b6e565b610863565b34801561034357600080fd5b50610271610352366004611b53565b6108b1565b34801561036357600080fd5b50610271610372366004611d5c565b6109d3565b34801561038357600080fd5b50610397610392366004611b53565b610b0a565b6040516102489190611e17565b3480156103b057600080fd5b506102b3610b25565b3480156103c557600080fd5b506102b3610b2b565b3480156103da57600080fd5b506102716103e9366004611d5c565b610b31565b3480156103fa57600080fd5b50610271610409366004611d5c565b610b76565b34801561041a57600080fd5b50610271610b9a565b34801561042f57600080fd5b5061027161043e366004611d5c565b610c21565b34801561044f57600080fd5b506102b361045e366004611b53565b610c45565b34801561046f57600080fd5b506102b3610c57565b34801561048457600080fd5b506102b3610493366004611b53565b610c5d565b3480156104a457600080fd5b50610397610c6f565b3480156104b957600080fd5b506102b3610c7e565b3480156104ce57600080fd5b506102716104dd366004611d5c565b610c84565b3480156104ee57600080fd5b506102716104fd366004611c7b565b610c8e565b34801561050e57600080fd5b5061027161051d366004611d5c565b610d45565b34801561052e57600080fd5b5061027161053d366004611b53565b610d69565b34801561054e57600080fd5b506102b3610fac565b34801561056357600080fd5b506102b3610fb2565b34801561057857600080fd5b506102b3610587366004611bce565b610fb8565b34801561059857600080fd5b506102b3610fce565b3480156105ad57600080fd5b506105c16105bc366004611d74565b610fd8565b6040516102489190612446565b3480156105da57600080fd5b506102716105e9366004611d5c565b61104a565b3480156105fa57600080fd5b50610271610609366004611d5c565b61106e565b34801561061a57600080fd5b50610271610629366004611d5c565b611092565b34801561063a57600080fd5b50610271610649366004611c1c565b6110b6565b61027161065c366004611d5c565b611136565b603d818154811061066e57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b3330146106ee5760405162461bcd60e51b81526004016106e590612212565b60405180910390fd5b603555565b6106fe3383836112c8565b5050565b603e6020526000908152604090205481565b60335481565b6000610724610fce565b82111580156107335750600082115b61074f5760405162461bcd60e51b81526004016106e590612348565b6000603d838154811061075e57fe5b90600052602060002090600802019050806002015461077b6114f9565b1161078a576000915050610858565b80600301546107976114f9565b116107a6576001915050610858565b806005015481600401541115806107c857506035548160050154826004015401105b156107d7576002915050610858565b600681015460ff16156107ee576005915050610858565b61081360345461080d60335484600301546114fd90919063ffffffff16565b906114fd565b61081b6114f9565b1061082a576006915050610858565b603354600382015461083b916114fd565b6108436114f9565b10610852576004915050610858565b60039150505b919050565b603a5481565b6001600160a01b038381166000908152603c6020526040812054909116331461089e5760405162461bcd60e51b81526004016106e5906123d8565b6108a9848484611522565b949350505050565b336000818152603c60205260409020546001600160a01b0390811691908316148015906108e757506001600160a01b0382163014155b80156108fb57506001600160a01b03821615155b80156109195750806001600160a01b0316826001600160a01b031614155b6109355760405162461bcd60e51b81526004016106e590612249565b6001600160a01b0381161561097b576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f60205260409020546109eb6114f9565b11610a085760405162461bcd60e51b81526004016106e590612175565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610a56918390611870565b336000818152603b602052604090819020929092558154915163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610a99918590600401611e2b565b602060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190611d40565b610b075760405162461bcd60e51b81526004016106e5906121ac565b50565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610b505760405162461bcd60e51b81526004016106e590612212565b6033548110610b715760405162461bcd60e51b81526004016106e590612131565b603a55565b333014610b955760405162461bcd60e51b81526004016106e590612212565b603755565b336000908152603c60205260409020546001600160a01b031680610bd05760405162461bcd60e51b81526004016106e59061238e565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610c405760405162461bcd60e51b81526004016106e590612212565b603455565b603b6020526000908152604090205481565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610b07338261189c565b60005b8351811015610d1f57336001600160a01b0316603c6000868481518110610cb457fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610cf95760405162461bcd60e51b81526004016106e5906123d8565b610d17848281518110610d0857fe5b602002602001015184846112c8565b600101610c91565b50336000908152603b602052604090205415610d4057610d403383836112c8565b505050565b333014610d645760405162461bcd60e51b81526004016106e590612212565b603955565b600054610100900460ff1680610d825750610d82611981565b80610d90575060005460ff16155b610dac5760405162461bcd60e51b81526004016106e5906122fa565b600054610100900460ff16158015610dd7576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055610f97611987565b80156106fe576000805461ff00191690555050565b60395481565b60375481565b6000610fc5338484611522565b90505b92915050565b603d546000190190565b610fe0611a4d565b603d8381548110610fed57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146110695760405162461bcd60e51b81526004016106e590612212565b603355565b33301461108d5760405162461bcd60e51b81526004016106e590612212565b603855565b3330146110b15760405162461bcd60e51b81526004016106e590612212565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906110f290899030908a908a908a908a908a90600401611eae565b600060405180830381600087803b15801561110c57600080fd5b505af1158015611120573d6000803e3d6000fd5b5050505061112e868661189c565b505050505050565b60046111418261071a565b600681111561114c57fe5b146111695760405162461bcd60e51b81526004016106e590611f90565b6000603d828154811061117857fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b03166111b3816119c8565b6111cf5760405162461bcd60e51b81526004016106e590611f4d565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161121391611dfb565b600060405180830381855af49150503d806000811461124e576040519150601f19603f3d011682016040523d82523d6000602084013e611253565b606091505b5091509150816112965780511561127e578060405162461bcd60e51b81526004016106e59190611f3a565b60405162461bcd60e51b81526004016106e59061240f565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b60016112d38361071a565b60068111156112de57fe5b146112fb5760405162461bcd60e51b81526004016106e590612056565b6000603d838154811061130a57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806113695760405162461bcd60e51b81526004016106e590612280565b825460ff16156113b8578254610100900460ff161561139f5760018301546004850154611395916119ce565b60048501556113b8565b600183015460058501546113b2916119ce565b60058501555b84156113d75760048401546113cd90826114fd565b60048501556113ec565b60058401546113e690826114fd565b60058501555b6006840154610100900460ff1615801561141c575060395461141a61140f6114f9565b6003870154906119ce565b105b1561146057600584015460048501541115821515811461145e5760068501805461ff001916610100179055603a546003860154611458916114fd565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a5460038701546114ab938b936114a693919261080d928391906114fd565b611a10565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516114e8919061246b565b60405180910390a450505050505050565b4290565b600082820183811015610fc55760405162461bcd60e51b81526004016106e5906120fa565b6001600160a01b0383166000908152603b602052604081205460365481101561155d5760405162461bcd60e51b81526004016106e59061209d565b611566846119c8565b6115825760405162461bcd60e51b81526004016106e5906122b7565b6001600160a01b0385166000908152603e602052604090205480156115f45760006115ac8261071a565b905060018160068111156115bc57fe5b141580156115d6575060008160068111156115d357fe5b14155b6115f25760405162461bcd60e51b81526004016106e590611fdb565b505b600061160460375461080d6114f9565b9050600061161d603854836114fd90919063ffffffff16565b9050611627611a6d565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906117d9610fce565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a5492935061181b928d926114a692909161080d919082908a906114fd565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d60405161185b9493929190611eef565b60405180910390a39998505050505050505050565b600081848411156118945760405162461bcd60e51b81526004016106e59190611f3a565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906118d090859030908690600401611e44565b602060405180830381600087803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190611d40565b61193e5760405162461bcd60e51b81526004016106e5906121db565b6001600160a01b0382166000908152603b602052604090205461196190826114fd565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b6000610fc583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611870565b6001600160a01b0382166000908152603f60205260409020548111156106fe576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b0381168114610fc857600080fd5b8035610fc8816124e0565b600082601f830112611afa578081fd5b813567ffffffffffffffff811115611b10578182fd5b611b23601f8201601f1916602001612474565b9150808252836020828501011115611b3a57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611b64578081fd5b610fc58383611ac8565b600080600060608486031215611b82578182fd5b8335611b8d816124cb565b92506020840135611b9d816124cb565b9150604084013567ffffffffffffffff811115611bb8578182fd5b611bc486828701611aea565b9150509250925092565b60008060408385031215611be0578182fd5b8235611beb816124cb565b9150602083013567ffffffffffffffff811115611c06578182fd5b611c1285828601611aea565b9150509250929050565b60008060008060008060c08789031215611c34578182fd5b611c3e8888611ac8565b95506020870135945060408701359350606087013560ff81168114611c61578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611c8f578283fd5b833567ffffffffffffffff80821115611ca6578485fd5b818601915086601f830112611cb9578485fd5b813581811115611cc7578586fd5b60209150818102611cd9838201612474565b8281528381019085850183870186018c1015611cf357898afd5b8996505b84871015611d1d57611d098c82611ac8565b835260019690960195918501918501611cf7565b5097505050508501359250611d3790508560408601611adf565b90509250925092565b600060208284031215611d51578081fd5b8151610fc5816124e0565b600060208284031215611d6d578081fd5b5035919050565b60008060408385031215611d86578182fd5b82359150611d978460208501611ac8565b90509250929050565b60008060408385031215611db2578182fd5b823591506020830135611dc4816124e0565b809150509250929050565b60008151808452611de781602086016020860161249b565b601f01601f19169290920160200192915050565b60008251611e0d81846020870161249b565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611f1c6080830184611dcf565b9695505050505050565b6020810160078310611f3457fe5b91905290565b600060208252610fc56020830184611dcf565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b6020808252601590820152741513d4938e881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561249357600080fd5b604052919050565b60005b838110156124b657818101518382015260200161249e565b838111156124c5576000848401525b50505050565b6001600160a01b0381168114610b0757600080fd5b8015158114610b0757600080fdfea26469706673582212208c8a57d0dd9da76417112ba79eab1d38dbdf5e0a8bc014651f10bebe82ce8f9b64736f6c634300060c0033";class Bi extends Ja{constructor(...e){e.length>1?super(...e):super(Gi,ji,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Gi)}static connect(e,t){return new za(e,Gi,t)}}Bi.bytecode=ji,Bi.abi=Gi;var Hi=Object.freeze({__proto__:null,Configuration__factory:Si,Core__factory:Vi,Delegation__factory:Fi,Governance__factory:Bi,mocks:Ni});const zi=[{inputs:[{internalType:"address",name:"_gasCompensationVault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"gasCompensationVault",outputs:[{internalType:"contract IGasCompensationVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_gasCompensationsLimit",type:"uint256"}],name:"setGasCompensations",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawFromHelper",outputs:[],stateMutability:"nonpayable",type:"function"}];class $i{static createInterface(){return new na(zi)}static connect(e,t){return new za(e,zi,t)}}$i.abi=zi;const Xi=[{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"compensateGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawToGovernance",outputs:[],stateMutability:"nonpayable",type:"function"}];class Wi{static createInterface(){return new na(Xi)}static connect(e,t){return new za(e,Xi,t)}}Wi.abi=Xi;var qi=Object.freeze({__proto__:null,GasCompensator__factory:$i,IGasCompensationVault__factory:Wi});const Ji=[{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawTorn",outputs:[],stateMutability:"nonpayable",type:"function"}];class Ki{static createInterface(){return new na(Ji)}static connect(e,t){return new za(e,Ji,t)}}Ki.abi=Ji;var Yi=Object.freeze({__proto__:null,ITornadoVault__factory:Ki});const Zi=[{inputs:[{internalType:"address",name:"_gasCompLogic",type:"address"},{internalType:"address",name:"_userVault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"checkIfQuorumReached",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"gasCompensationVault",outputs:[{internalType:"contract IGasCompensationVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"account",type:"address"}],name:"hasAccountVoted",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"returnMultisigAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"gasCompensationsLimit",type:"uint256"}],name:"setGasCompensations",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawFromHelper",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],Qi="0x60c06040523480156200001157600080fd5b5060405162002e3138038062002e31833981016040819052620000349162000153565b60005482908290610100900460ff1680620000545750620000546200010c565b8062000063575060005460ff16155b6200008b5760405162461bcd60e51b8152600401620000829062000191565b60405180910390fd5b600054610100900460ff16158015620000b7576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000d562000112565b8015620000e8576000805461ff00191690555b506001600160601b0319606091821b811660805291901b1660a05250620001f89050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000806040838503121562000166578182fd5b82516200017381620001df565b60208401519092506200018681620001df565b809150509250929050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0381168114620001f557600080fd5b50565b60805160601c60a05160601c612bf162000240600039806108c55280610e525280610f4a52806114505280611ee1525080610d545280610fb75280611cf75250612bf16000f3fe60806040526004361061026b5760003560e01c80639ae697bf11610144578063d6159fe5116100b6578063e525aa081161007a578063e525aa08146106ff578063ea0217cf1461071f578063ece40cc11461073f578063ef3f8bb11461075f578063f0b768921461077f578063fe0d94c11461079f57610272565b8063d6159fe514610668578063d6f0948c1461067d578063da35c6641461069d578063e23a9a52146106b2578063e4917d9f146106df57610272565b8063b1610d7e11610108578063b1610d7e146105be578063b54426c8146105d3578063b859f11b146105f3578063c0c0e82014610613578063c4d66de814610633578063ce25d71c1461065357610272565b80639ae697bf1461053f5780639daafec71461055f578063a6c2660314610574578063a72edda314610589578063adf898a4146105a957610272565b80635c19a95c116101dd5780636dc2dc6c116101a15780636dc2dc6c1461049557806370b0f660146104b55780638b34a960146104d557806392ab89bb146104ea578063932d5157146104ff5780639a9e3b6e1461051f57610272565b80635c19a95c1461040b5780636198e3391461042b57806365da12641461044b578063671dd2751461046b5780636a6617551461048057610272565b806332687ec11161022f57806332687ec11461034557806337f135d7146103725780633e4f49e61461038757806354fd4d50146103b4578063587a6ecb146103d657806358e9fff0146103eb57610272565b8063013cf08b1461027757806302ec8f9e146102b457806315373e3d146102d657806317977c61146102f657806324b0435f1461032357610272565b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046123c5565b6107b2565b6040516102ab9897969594939291906124d1565b60405180910390f35b3480156102c057600080fd5b506102d46102cf3660046123c5565b610817565b005b3480156102e257600080fd5b506102d46102f1366004612409565b610844565b34801561030257600080fd5b506103166103113660046121bc565b610947565b6040516102ab9190612b38565b34801561032f57600080fd5b50610338610959565b6040516102ab9190612480565b34801561035157600080fd5b506103656103603660046123c5565b610971565b6040516102ab919061258f565b34801561037e57600080fd5b506103166109bf565b34801561039357600080fd5b506103a76103a23660046123c5565b6109c5565b6040516102ab919061259a565b3480156103c057600080fd5b506103c9610b01565b6040516102ab91906125ae565b3480156103e257600080fd5b50610316610b38565b3480156103f757600080fd5b506103166104063660046121d7565b610b3e565b34801561041757600080fd5b506102d46104263660046121bc565b610b8c565b34801561043757600080fd5b506102d46104463660046123c5565b610cae565b34801561045757600080fd5b506103386104663660046121bc565b610dc0565b34801561047757600080fd5b50610316610ddb565b34801561048c57600080fd5b50610316610de1565b3480156104a157600080fd5b506102d46104b03660046123c5565b610de7565b3480156104c157600080fd5b506102d46104d03660046123c5565b610e2c565b3480156104e157600080fd5b50610338610e50565b3480156104f657600080fd5b506102d4610e74565b34801561050b57600080fd5b506102d461051a3660046123c5565b610efb565b34801561052b57600080fd5b506102d461053a3660046123c5565b610f7f565b34801561054b57600080fd5b5061031661055a3660046121bc565b610fa3565b34801561056b57600080fd5b50610338610fb5565b34801561058057600080fd5b50610316610fd9565b34801561059557600080fd5b506103166105a43660046121bc565b610fdf565b3480156105b557600080fd5b50610338610ff1565b3480156105ca57600080fd5b50610316611000565b3480156105df57600080fd5b506102d46105ee3660046123c5565b611006565b3480156105ff57600080fd5b506102d461060e3660046122e4565b611013565b34801561061f57600080fd5b506102d461062e3660046123c5565b611061565b34801561063f57600080fd5b506102d461064e3660046121bc565b611085565b34801561065f57600080fd5b506103166112c9565b34801561067457600080fd5b506103166112cf565b34801561068957600080fd5b50610316610698366004612237565b6112d5565b3480156106a957600080fd5b506103166112eb565b3480156106be57600080fd5b506106d26106cd3660046123dd565b6112f5565b6040516102ab9190612b13565b3480156106eb57600080fd5b506102d46106fa3660046123c5565b611367565b34801561070b57600080fd5b5061036561071a3660046123dd565b61138b565b34801561072b57600080fd5b506102d461073a3660046123c5565b6113ce565b34801561074b57600080fd5b506102d461075a3660046123c5565b6113f2565b34801561076b57600080fd5b506102d461077a3660046123c5565b611416565b34801561078b57600080fd5b506102d461079a366004612285565b6114a5565b6102d46107ad3660046123c5565b611525565b603d81815481106107bf57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461083f5760405162461bcd60e51b815260040161083690612881565b60405180910390fd5b603555565b3361084f833361138b565b158015610862575061086083610971565b155b333214610870576000610874565b6152085b61ffff1681156109355760005a905061088e3387876116b7565b60006108ab6127106108a5856108a55a87906118e8565b9061192a565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce807906108fc9088908590600401612494565b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b505050505050610940565b6109403386866116b7565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d838154811061098357fe5b906000526020600020906008020160050154603d84815481106109a257fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b60006109cf6112eb565b82111580156109de5750600082115b6109fa5760405162461bcd60e51b8152600401610836906129de565b6000603d8381548110610a0957fe5b906000526020600020906008020190508060020154610a2661194f565b11610a355760009150506109ba565b8060030154610a4261194f565b11610a515760019150506109ba565b80600501548160040154111580610a7357506035548160050154826004015401105b15610a825760029150506109ba565b600681015460ff1615610a995760059150506109ba565b610ab86034546108a5603354846003015461192a90919063ffffffff16565b610ac061194f565b10610acf5760069150506109ba565b6033546003820154610ae09161192a565b610ae861194f565b10610af75760049150506109ba565b60039150506109ba565b60408051808201909152601981527f322e6c6f74746572792d616e642d6761732d7570677261646500000000000000602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610b795760405162461bcd60e51b815260040161083690612a6e565b610b84848484611953565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bc257506001600160a01b0382163014155b8015610bd657506001600160a01b03821615155b8015610bf45750806001600160a01b0316826001600160a01b031614155b610c105760405162461bcd60e51b8152600401610836906128b8565b6001600160a01b03811615610c56576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610cc661194f565b11610ce35760405162461bcd60e51b8152600401610836906127e9565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610d31918390611ca1565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610d9291908590600401612494565b600060405180830381600087803b158015610dac57600080fd5b505af1158015610940573d6000803e3d6000fd5b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e065760405162461bcd60e51b815260040161083690612881565b6033548110610e275760405162461bcd60e51b8152600401610836906127a5565b603a55565b333014610e4b5760405162461bcd60e51b815260040161083690612881565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610eaa5760405162461bcd60e51b815260040161083690612a24565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f03610959565b6001600160a01b0316336001600160a01b031614610f335760405162461bcd60e51b8152600401610836906129b7565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610d92908490600401612b38565b333014610f9e5760405162461bcd60e51b815260040161083690612881565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b6110103382611ccd565b50565b60008351116110345760405162461bcd60e51b815260040161083690612857565b61105c838383611044863361138b565b158015611057575061105586610971565b155b611dd2565b505050565b3330146110805760405162461bcd60e51b815260040161083690612881565b603955565b600054610100900460ff168061109e575061109e612016565b806110ac575060005460ff16155b6110c85760405162461bcd60e51b815260040161083690612969565b600054610100900460ff161580156110f3576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff1990941693909317169190911790556112b361201c565b80156112c5576000805461ff00191690555b5050565b60395481565b60375481565b60006112e2338484611953565b90505b92915050565b603d546000190190565b6112fd6120b6565b603d838154811061130a57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146113865760405162461bcd60e51b815260040161083690612881565b603355565b6000603d838154811061139a57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146113ed5760405162461bcd60e51b815260040161083690612881565b603855565b3330146114115760405162461bcd60e51b815260040161083690612881565b603655565b61141e610959565b6001600160a01b0316336001600160a01b03161461144e5760405162461bcd60e51b8152600401610836906129b7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc611485834761205d565b6040518115909202916000818181858888f1935050505061101057600080fd5b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf906114e190899030908a908a908a908a908a90600401612517565b600060405180830381600087803b1580156114fb57600080fd5b505af115801561150f573d6000803e3d6000fd5b5050505061151d8686611ccd565b505050505050565b6004611530826109c5565b600681111561153b57fe5b146115585760405162461bcd60e51b815260040161083690612604565b6000603d828154811061156757fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b03166115a281612073565b6115be5760405162461bcd60e51b8152600401610836906125c1565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161160291612464565b600060405180830381855af49150503d806000811461163d576040519150601f19603f3d011682016040523d82523d6000602084013e611642565b606091505b5091509150816116855780511561166d578060405162461bcd60e51b815260040161083691906125ae565b60405162461bcd60e51b815260040161083690612aa5565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b60016116c2836109c5565b60068111156116cd57fe5b146116ea5760405162461bcd60e51b8152600401610836906126ca565b6000603d83815481106116f957fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806117585760405162461bcd60e51b8152600401610836906128ef565b825460ff16156117a7578254610100900460ff161561178e5760018301546004850154611784916118e8565b60048501556117a7565b600183015460058501546117a1916118e8565b60058501555b84156117c65760048401546117bc908261192a565b60048501556117db565b60058401546117d5908261192a565b60058501555b6006840154610100900460ff1615801561180b57506039546118096117fe61194f565b6003870154906118e8565b105b1561184f57600584015460048501541115821515811461184d5760068501805461ff001916610100179055603a5460038601546118479161192a565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461189a938b936118959391926108a59283919061192a565b612079565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5846040516118d79190612b38565b60405180910390a450505050505050565b60006112e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ca1565b6000828201838110156112e25760405162461bcd60e51b81526004016108369061276e565b4290565b6001600160a01b0383166000908152603b602052604081205460365481101561198e5760405162461bcd60e51b815260040161083690612711565b61199784612073565b6119b35760405162461bcd60e51b815260040161083690612926565b6001600160a01b0385166000908152603e60205260409020548015611a255760006119dd826109c5565b905060018160068111156119ed57fe5b14158015611a0757506000816006811115611a0457fe5b14155b611a235760405162461bcd60e51b81526004016108369061264f565b505b6000611a356037546108a561194f565b90506000611a4e6038548361192a90919063ffffffff16565b9050611a586120d6565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611c0a6112eb565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611c4c928d926118959290916108a5919082908a9061192a565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d604051611c8c9493929190612558565b60405180910390a39998505050505050505050565b60008184841115611cc55760405162461bcd60e51b815260040161083691906125ae565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd90611d219085907f00000000000000000000000000000000000000000000000000000000000000009086906004016124ad565b602060405180830381600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906123a9565b611d8f5760405162461bcd60e51b815260040161083690612820565b6001600160a01b0382166000908152603b6020526040902054611db2908261192a565b6001600160a01b039092166000908152603b602052604090209190915550565b3381328214611de2576000611de6565b6152085b61ffff168115611f515760005a905060005b8851811015611eaf576000898281518110611e0f57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e4f57506001600160a01b03811633145b611e6b5760405162461bcd60e51b815260040161083690612a6e565b861580611e7f5750611e7d898261138b565b155b611e9b5760405162461bcd60e51b815260040161083690612adc565b611ea6818a8a6116b7565b50600101611df8565b506000611ec76127106108a5856108a55a87906118e8565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611f189088908590600401612494565b600060405180830381600087803b158015611f3257600080fd5b505af1158015611f46573d6000803e3d6000fd5b50505050505061200d565b60005b875181101561200b576000888281518110611f6b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611fab57506001600160a01b03811633145b611fc75760405162461bcd60e51b815260040161083690612a6e565b851580611fdb5750611fd9888261138b565b155b611ff75760405162461bcd60e51b815260040161083690612adc565b6120028189896116b7565b50600101611f54565b505b50505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b600081831061206c57816112e2565b5090919050565b3b151590565b6001600160a01b0382166000908152603f60205260409020548111156112c5576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146112e557600080fd5b80356112e581612bad565b600082601f830112612163578081fd5b813567ffffffffffffffff811115612179578182fd5b61218c601f8201601f1916602001612b41565b91508082528360208285010111156121a357600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156121cd578081fd5b6112e28383612131565b6000806000606084860312156121eb578182fd5b83356121f681612b98565b9250602084013561220681612b98565b9150604084013567ffffffffffffffff811115612221578182fd5b61222d86828701612153565b9150509250925092565b60008060408385031215612249578182fd5b823561225481612b98565b9150602083013567ffffffffffffffff81111561226f578182fd5b61227b85828601612153565b9150509250929050565b60008060008060008060c0878903121561229d578182fd5b6122a78888612131565b95506020870135945060408701359350606087013560ff811681146122ca578283fd5b9598949750929560808101359460a0909101359350915050565b6000806000606084860312156122f8578283fd5b833567ffffffffffffffff8082111561230f578485fd5b818601915086601f830112612322578485fd5b813581811115612330578586fd5b60209150818102612342838201612b41565b8281528381019085850183870186018c101561235c57898afd5b8996505b84871015612386576123728c82612131565b835260019690960195918501918501612360565b50975050505085013592506123a090508560408601612148565b90509250925092565b6000602082840312156123ba578081fd5b81516112e281612bad565b6000602082840312156123d6578081fd5b5035919050565b600080604083850312156123ef578182fd5b823591506124008460208501612131565b90509250929050565b6000806040838503121561241b578182fd5b82359150602083013561242d81612bad565b809150509250929050565b60008151808452612450816020860160208601612b68565b601f01601f19169290920160200192915050565b60008251612476818460208701612b68565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b0386168252846020830152836040830152608060608301526125856080830184612438565b9695505050505050565b901515815260200190565b60208101600783106125a857fe5b91905290565b6000602082526112e26020830184612438565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612b6057600080fd5b604052919050565b60005b83811015612b83578181015183820152602001612b6b565b83811115612b92576000848401525b50505050565b6001600160a01b038116811461101057600080fd5b801515811461101057600080fdfea2646970667358221220a9ae24380315e86f1632949f167f44c17322fe48a1385357edbfdf8bc543469764736f6c634300060c0033";class es extends Ja{constructor(...e){e.length>1?super(...e):super(Zi,Qi,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Zi)}static connect(e,t){return new za(e,Zi,t)}}es.bytecode=Qi,es.abi=Zi;const ts=[{inputs:[{internalType:"address",name:"_userVault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"pure",type:"function"}],as="0x60a06040523480156200001157600080fd5b506040516200277e3803806200277e833981016040819052620000349162000142565b600054610100900460ff168062000050575062000050620000fb565b806200005f575060005460ff16155b620000875760405162461bcd60e51b81526004016200007e9062000172565b60405180910390fd5b600054610100900460ff16158015620000b3576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000d162000101565b8015620000e4576000805461ff00191690555b5060601b6001600160601b031916608052620001c0565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60006020828403121562000154578081fd5b81516001600160a01b03811681146200016b578182fd5b9392505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60805160601c612596620001e860003980610af15280610cb3528061194752506125966000f3fe6080604052600436106102255760003560e01c80639daafec711610123578063ce25d71c116100ab578063e4917d9f1161006f578063e4917d9f1461061b578063ea0217cf1461063b578063ece40cc11461065b578063f0b768921461067b578063fe0d94c11461069b57610225565b8063ce25d71c1461058f578063d6159fe5146105a4578063d6f0948c146105b9578063da35c664146105d9578063e23a9a52146105ee57610225565b8063b1610d7e116100f2578063b1610d7e146104fa578063b54426c81461050f578063b859f11b1461052f578063c0c0e8201461054f578063c4d66de81461056f57610225565b80639daafec71461049b578063a6c26603146104b0578063a72edda3146104c5578063adf898a4146104e557610225565b80635c19a95c116101b15780636dc2dc6c116101755780636dc2dc6c1461040657806370b0f6601461042657806392ab89bb146104465780639a9e3b6e1461045b5780639ae697bf1461047b57610225565b80635c19a95c1461036f5780636198e3391461038f57806365da1264146103af578063671dd275146103dc5780636a661755146103f157610225565b806337f135d7116101f857806337f135d7146102d65780633e4f49e6146102eb57806354fd4d5014610318578063587a6ecb1461033a57806358e9fff01461034f57610225565b8063013cf08b1461022a57806302ec8f9e1461026757806315373e3d1461028957806317977c61146102a9575b600080fd5b34801561023657600080fd5b5061024a610245366004611dfd565b6106ae565b60405161025e989796959493929190611f09565b60405180910390f35b34801561027357600080fd5b50610287610282366004611dfd565b610713565b005b34801561029557600080fd5b506102876102a4366004611e41565b610740565b3480156102b557600080fd5b506102c96102c4366004611bf4565b61074f565b60405161025e91906124dd565b3480156102e257600080fd5b506102c9610761565b3480156102f757600080fd5b5061030b610306366004611dfd565b610767565b60405161025e9190611fc7565b34801561032457600080fd5b5061032d6108aa565b60405161025e9190611fdb565b34801561034657600080fd5b506102c96108d5565b34801561035b57600080fd5b506102c961036a366004611c0f565b6108db565b34801561037b57600080fd5b5061028761038a366004611bf4565b610929565b34801561039b57600080fd5b506102876103aa366004611dfd565b610a4b565b3480156103bb57600080fd5b506103cf6103ca366004611bf4565b610b64565b60405161025e9190611eb8565b3480156103e857600080fd5b506102c9610b7f565b3480156103fd57600080fd5b506102c9610b85565b34801561041257600080fd5b50610287610421366004611dfd565b610b8b565b34801561043257600080fd5b50610287610441366004611dfd565b610bd0565b34801561045257600080fd5b50610287610bf4565b34801561046757600080fd5b50610287610476366004611dfd565b610c7b565b34801561048757600080fd5b506102c9610496366004611bf4565b610c9f565b3480156104a757600080fd5b506103cf610cb1565b3480156104bc57600080fd5b506102c9610cd5565b3480156104d157600080fd5b506102c96104e0366004611bf4565b610cdb565b3480156104f157600080fd5b506103cf610ced565b34801561050657600080fd5b506102c9610cfc565b34801561051b57600080fd5b5061028761052a366004611dfd565b610d02565b34801561053b57600080fd5b5061028761054a366004611d1c565b610d0f565b34801561055b57600080fd5b5061028761056a366004611dfd565b610dc6565b34801561057b57600080fd5b5061028761058a366004611bf4565b610dea565b34801561059b57600080fd5b506102c961102d565b3480156105b057600080fd5b506102c9611033565b3480156105c557600080fd5b506102c96105d4366004611c6f565b611039565b3480156105e557600080fd5b506102c961104f565b3480156105fa57600080fd5b5061060e610609366004611e15565b611059565b60405161025e91906124b8565b34801561062757600080fd5b50610287610636366004611dfd565b6110cb565b34801561064757600080fd5b50610287610656366004611dfd565b6110ef565b34801561066757600080fd5b50610287610676366004611dfd565b611113565b34801561068757600080fd5b50610287610696366004611cbd565b611137565b6102876106a9366004611dfd565b6111b7565b603d81815481106106bb57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461073b5760405162461bcd60e51b815260040161073290612284565b60405180910390fd5b603555565b61074b338383611349565b5050565b603e6020526000908152604090205481565b60335481565b600061077161104f565b82111580156107805750600082115b61079c5760405162461bcd60e51b8152600401610732906123ba565b6000603d83815481106107ab57fe5b9060005260206000209060080201905080600201546107c861157a565b116107d75760009150506108a5565b80600301546107e461157a565b116107f35760019150506108a5565b8060050154816004015411158061081557506035548160050154826004015401105b156108245760029150506108a5565b600681015460ff161561083b5760059150506108a5565b61086060345461085a603354846003015461157e90919063ffffffff16565b9061157e565b61086861157a565b106108775760069150506108a5565b60335460038201546108889161157e565b61089061157a565b1061089f5760049150506108a5565b60039150505b919050565b60408051808201909152601181527019173b30bab63a16b6b4b3b930ba34b7b760791b602082015290565b603a5481565b6001600160a01b038381166000908152603c602052604081205490911633146109165760405162461bcd60e51b81526004016107329061244a565b6109218484846115a3565b949350505050565b336000818152603c60205260409020546001600160a01b03908116919083161480159061095f57506001600160a01b0382163014155b801561097357506001600160a01b03821615155b80156109915750806001600160a01b0316826001600160a01b031614155b6109ad5760405162461bcd60e51b8152600401610732906122bb565b6001600160a01b038116156109f3576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000908152603f6020526040902054610a6361157a565b11610a805760405162461bcd60e51b815260040161073290612216565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054610ace9183906118f1565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610b2f91908590600401611ecc565b600060405180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b5050505050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610baa5760405162461bcd60e51b815260040161073290612284565b6033548110610bcb5760405162461bcd60e51b8152600401610732906121d2565b603a55565b333014610bef5760405162461bcd60e51b815260040161073290612284565b603755565b336000908152603c60205260409020546001600160a01b031680610c2a5760405162461bcd60e51b815260040161073290612400565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b333014610c9a5760405162461bcd60e51b815260040161073290612284565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b610d0c338261191d565b50565b60005b8351811015610da057336001600160a01b0316603c6000868481518110610d3557fe5b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541614610d7a5760405162461bcd60e51b81526004016107329061244a565b610d98848281518110610d8957fe5b60200260200101518484611349565b600101610d12565b50336000908152603b602052604090205415610dc157610dc1338383611349565b505050565b333014610de55760405162461bcd60e51b815260040161073290612284565b603955565b600054610100900460ff1680610e035750610e03611a22565b80610e11575060005460ff16155b610e2d5760405162461bcd60e51b81526004016107329061236c565b600054610100900460ff16158015610e58576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611018611a28565b801561074b576000805461ff00191690555050565b60395481565b60375481565b60006110463384846115a3565b90505b92915050565b603d546000190190565b611061611aee565b603d838154811061106e57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146110ea5760405162461bcd60e51b815260040161073290612284565b603355565b33301461110e5760405162461bcd60e51b815260040161073290612284565b603855565b3330146111325760405162461bcd60e51b815260040161073290612284565b603655565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061117390899030908a908a908a908a908a90600401611f4f565b600060405180830381600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506111af868661191d565b505050505050565b60046111c282610767565b60068111156111cd57fe5b146111ea5760405162461bcd60e51b815260040161073290612031565b6000603d82815481106111f957fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661123481611a69565b6112505760405162461bcd60e51b815260040161073290611fee565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161129491611e9c565b600060405180830381855af49150503d80600081146112cf576040519150601f19603f3d011682016040523d82523d6000602084013e6112d4565b606091505b509150915081611317578051156112ff578060405162461bcd60e51b81526004016107329190611fdb565b60405162461bcd60e51b815260040161073290612481565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b600161135483610767565b600681111561135f57fe5b1461137c5760405162461bcd60e51b8152600401610732906120f7565b6000603d838154811061138b57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806113ea5760405162461bcd60e51b8152600401610732906122f2565b825460ff1615611439578254610100900460ff1615611420576001830154600485015461141691611a6f565b6004850155611439565b6001830154600585015461143391611a6f565b60058501555b841561145857600484015461144e908261157e565b600485015561146d565b6005840154611467908261157e565b60058501555b6006840154610100900460ff1615801561149d575060395461149b61149061157a565b600387015490611a6f565b105b156114e15760058401546004850154111582151581146114df5760068501805461ff001916610100179055603a5460038601546114d99161157e565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a54600387015461152c938b9361152793919261085a9283919061157e565b611ab1565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b58460405161156991906124dd565b60405180910390a450505050505050565b4290565b6000828201838110156110465760405162461bcd60e51b81526004016107329061219b565b6001600160a01b0383166000908152603b60205260408120546036548110156115de5760405162461bcd60e51b81526004016107329061213e565b6115e784611a69565b6116035760405162461bcd60e51b815260040161073290612329565b6001600160a01b0385166000908152603e6020526040902054801561167557600061162d82610767565b9050600181600681111561163d57fe5b141580156116575750600081600681111561165457fe5b14155b6116735760405162461bcd60e51b81526004016107329061207c565b505b600061168560375461085a61157a565b9050600061169e6038548361157e90919063ffffffff16565b90506116a8611b0e565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff1990931692909217949094161790559061185a61104f565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a5492935061189c928d9261152792909161085a919082908a9061157e565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516118dc9493929190611f90565b60405180910390a39998505050505050505050565b600081848411156119155760405162461bcd60e51b81526004016107329190611fdb565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906119719085907f0000000000000000000000000000000000000000000000000000000000000000908690600401611ee5565b602060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c39190611de1565b6119df5760405162461bcd60e51b81526004016107329061224d565b6001600160a01b0382166000908152603b6020526040902054611a02908261157e565b6001600160a01b039092166000908152603b602052604090209190915550565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b3b151590565b600061104683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f1565b6001600160a01b0382166000908152603f602052604090205481111561074b576001600160a01b03919091166000908152603f6020526040902055565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b038116811461104957600080fd5b803561104981612552565b600082601f830112611b9b578081fd5b813567ffffffffffffffff811115611bb1578182fd5b611bc4601f8201601f19166020016124e6565b9150808252836020828501011115611bdb57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c05578081fd5b6110468383611b69565b600080600060608486031215611c23578182fd5b8335611c2e8161253d565b92506020840135611c3e8161253d565b9150604084013567ffffffffffffffff811115611c59578182fd5b611c6586828701611b8b565b9150509250925092565b60008060408385031215611c81578182fd5b8235611c8c8161253d565b9150602083013567ffffffffffffffff811115611ca7578182fd5b611cb385828601611b8b565b9150509250929050565b60008060008060008060c08789031215611cd5578182fd5b611cdf8888611b69565b95506020870135945060408701359350606087013560ff81168114611d02578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215611d30578283fd5b833567ffffffffffffffff80821115611d47578485fd5b818601915086601f830112611d5a578485fd5b813581811115611d68578586fd5b60209150818102611d7a8382016124e6565b8281528381019085850183870186018c1015611d9457898afd5b8996505b84871015611dbe57611daa8c82611b69565b835260019690960195918501918501611d98565b5097505050508501359250611dd890508560408601611b80565b90509250925092565b600060208284031215611df2578081fd5b815161104681612552565b600060208284031215611e0e578081fd5b5035919050565b60008060408385031215611e27578182fd5b82359150611e388460208501611b69565b90509250929050565b60008060408385031215611e53578182fd5b823591506020830135611e6581612552565b809150509250929050565b60008151808452611e8881602086016020860161250d565b601f01601f19169290920160200192915050565b60008251611eae81846020870161250d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152611fbd6080830184611e70565b9695505050505050565b6020810160078310611fd557fe5b91905290565b6000602082526110466020830184611e70565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561250557600080fd5b604052919050565b60005b83811015612528578181015183820152602001612510565b83811115612537576000848401525b50505050565b6001600160a01b0381168114610d0c57600080fd5b8015158114610d0c57600080fdfea26469706673582212204b0042571b6576e17c0708c8f251958898bb0e0a9f340387b1eed439d732af7264736f6c634300060c0033";class ns extends Ja{constructor(...e){e.length>1?super(...e):super(ts,as,e[0])}getDeployTransaction(e,t){return super.getDeployTransaction(e,t||{})}deploy(e,t){return super.deploy(e,t||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ts)}static connect(e,t){return new za(e,ts,t)}}ns.bytecode=as,ns.abi=ts;var bs=Object.freeze({__proto__:null,GovernanceGasUpgrade__factory:es,GovernanceVaultUpgrade__factory:ns,gasCompensatorSol:qi,interfaces:Yi});const fs=[{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amountLockedBeforehand",type:"uint256"}],name:"updateRewardsOnLockedBalanceChange",outputs:[],stateMutability:"nonpayable",type:"function"}];class ds{static createInterface(){return new na(fs)}static connect(e,t){return new za(e,fs,t)}}ds.abi=fs;var is=Object.freeze({__proto__:null,ITornadoStakingRewards__factory:ds});const ss=[{inputs:[{internalType:"address",name:"stakingRewardsAddress",type:"address"},{internalType:"address",name:"gasCompLogic",type:"address"},{internalType:"address",name:"userVaultAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"bytes",name:"errorData",type:"bytes"}],name:"RewardUpdateFailed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"}],name:"RewardUpdateSuccessful",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"Staking",outputs:[{internalType:"contract ITornadoStakingRewards",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"checkIfQuorumReached",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"gasCompensationVault",outputs:[{internalType:"contract IGasCompensationVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"account",type:"address"}],name:"hasAccountVoted",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"returnMultisigAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"gasCompensationsLimit",type:"uint256"}],name:"setGasCompensations",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawFromHelper",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],cs="0x60e06040523480156200001157600080fd5b50604051620032a6380380620032a6833981016040819052620000349162000165565b81818181600060019054906101000a900460ff1680620000595750620000596200011e565b8062000068575060005460ff16155b620000905760405162461bcd60e51b81526004016200008790620001b8565b60405180910390fd5b600054610100900460ff16158015620000bc576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000da62000124565b8015620000ed576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200021f92505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000806000606084860312156200017a578283fd5b8351620001878162000206565b60208501519093506200019a8162000206565b6040850151909250620001ad8162000206565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200021c57600080fd5b50565b60805160601c60a05160601c60c05160601c6130246200028260003980610cf652806110b7528061169852806117c95250806108e55280610ead5280610fa552806116145280612164525080611040528061200d528061240e52506130246000f3fe6080604052600436106102765760003560e01c80639ae697bf1161014f578063d6159fe5116100c1578063ea0217cf1161007a578063ea0217cf1461072a578063ece40cc11461074a578063ef3f8bb11461076a578063f0b768921461078a578063f57df22e146107aa578063fe0d94c1146107bf5761027d565b8063d6159fe514610673578063d6f0948c14610688578063da35c664146106a8578063e23a9a52146106bd578063e4917d9f146106ea578063e525aa081461070a5761027d565b8063b1610d7e11610113578063b1610d7e146105c9578063b54426c8146105de578063b859f11b146105fe578063c0c0e8201461061e578063c4d66de81461063e578063ce25d71c1461065e5761027d565b80639ae697bf1461054a5780639daafec71461056a578063a6c266031461057f578063a72edda314610594578063adf898a4146105b45761027d565b80635c19a95c116101e85780636dc2dc6c116101ac5780636dc2dc6c146104a057806370b0f660146104c05780638b34a960146104e057806392ab89bb146104f5578063932d51571461050a5780639a9e3b6e1461052a5761027d565b80635c19a95c146104165780636198e3391461043657806365da126414610456578063671dd275146104765780636a6617551461048b5761027d565b806332687ec11161023a57806332687ec11461035057806337f135d71461037d5780633e4f49e61461039257806354fd4d50146103bf578063587a6ecb146103e157806358e9fff0146103f65761027d565b8063013cf08b1461028257806302ec8f9e146102bf57806315373e3d146102e157806317977c611461030157806324b0435f1461032e5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046127f8565b6107d2565b6040516102b6989796959493929190612904565b60405180910390f35b3480156102cb57600080fd5b506102df6102da3660046127f8565b610837565b005b3480156102ed57600080fd5b506102df6102fc36600461283c565b610864565b34801561030d57600080fd5b5061032161031c3660046125ef565b610967565b6040516102b69190612f6b565b34801561033a57600080fd5b50610343610979565b6040516102b691906128b3565b34801561035c57600080fd5b5061037061036b3660046127f8565b610991565b6040516102b691906129c2565b34801561038957600080fd5b506103216109df565b34801561039e57600080fd5b506103b26103ad3660046127f8565b6109e5565b6040516102b691906129cd565b3480156103cb57600080fd5b506103d4610b21565b6040516102b691906129e1565b3480156103ed57600080fd5b50610321610b58565b34801561040257600080fd5b5061032161041136600461260a565b610b5e565b34801561042257600080fd5b506102df6104313660046125ef565b610bac565b34801561044257600080fd5b506102df6104513660046127f8565b610cce565b34801561046257600080fd5b506103436104713660046125ef565b610e1b565b34801561048257600080fd5b50610321610e36565b34801561049757600080fd5b50610321610e3c565b3480156104ac57600080fd5b506102df6104bb3660046127f8565b610e42565b3480156104cc57600080fd5b506102df6104db3660046127f8565b610e87565b3480156104ec57600080fd5b50610343610eab565b34801561050157600080fd5b506102df610ecf565b34801561051657600080fd5b506102df6105253660046127f8565b610f56565b34801561053657600080fd5b506102df6105453660046127f8565b611008565b34801561055657600080fd5b506103216105653660046125ef565b61102c565b34801561057657600080fd5b5061034361103e565b34801561058b57600080fd5b50610321611062565b3480156105a057600080fd5b506103216105af3660046125ef565b611068565b3480156105c057600080fd5b5061034361107a565b3480156105d557600080fd5b50610321611089565b3480156105ea57600080fd5b506102df6105f93660046127f8565b61108f565b34801561060a57600080fd5b506102df610619366004612717565b6111d8565b34801561062a57600080fd5b506102df6106393660046127f8565b611226565b34801561064a57600080fd5b506102df6106593660046125ef565b61124a565b34801561066a57600080fd5b5061032161148d565b34801561067f57600080fd5b50610321611493565b34801561069457600080fd5b506103216106a336600461266a565b611499565b3480156106b457600080fd5b506103216114af565b3480156106c957600080fd5b506106dd6106d8366004612810565b6114b9565b6040516102b69190612f46565b3480156106f657600080fd5b506102df6107053660046127f8565b61152b565b34801561071657600080fd5b50610370610725366004612810565b61154f565b34801561073657600080fd5b506102df6107453660046127f8565b611592565b34801561075657600080fd5b506102df6107653660046127f8565b6115b6565b34801561077657600080fd5b506102df6107853660046127f8565b6115da565b34801561079657600080fd5b506102df6107a53660046126b8565b61166c565b3480156107b657600080fd5b506103436117c7565b6102df6107cd3660046127f8565b6117eb565b603d81815481106107df57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461085f5760405162461bcd60e51b815260040161085690612cb4565b60405180910390fd5b603555565b3361086f833361154f565b158015610882575061088083610991565b155b333214610890576000610894565b6152085b61ffff1681156109555760005a90506108ae33878761197d565b60006108cb6127106108c5856108c55a8790611bae565b90611bf0565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061091c90889085906004016128c7565b600060405180830381600087803b15801561093657600080fd5b505af115801561094a573d6000803e3d6000fd5b505050505050610960565b61096033868661197d565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109a357fe5b906000526020600020906008020160050154603d84815481106109c257fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b60006109ef6114af565b82111580156109fe5750600082115b610a1a5760405162461bcd60e51b815260040161085690612e11565b6000603d8381548110610a2957fe5b906000526020600020906008020190508060020154610a46611c15565b11610a555760009150506109da565b8060030154610a62611c15565b11610a715760019150506109da565b80600501548160040154111580610a9357506035548160050154826004015401105b15610aa25760029150506109da565b600681015460ff1615610ab95760059150506109da565b610ad86034546108c56033548460030154611bf090919063ffffffff16565b610ae0611c15565b10610aef5760069150506109da565b6033546003820154610b0091611bf0565b610b08611c15565b10610b175760049150506109da565b60039150506109da565b60408051808201909152601981527f322e6c6f74746572792d616e642d6761732d7570677261646500000000000000602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610b995760405162461bcd60e51b815260040161085690612ea1565b610ba4848484611c19565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610be257506001600160a01b0382163014155b8015610bf657506001600160a01b03821615155b8015610c145750806001600160a01b0316826001600160a01b031614155b610c305760405162461bcd60e51b815260040161085690612ceb565b6001600160a01b03811615610c76576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d2b9185916004016128c7565b600060405180830381600087803b158015610d4557600080fd5b505af1925050508015610d56575060015b610dd9573d808015610d84576040519150601f19603f3d011682016040523d82523d6000602084013e610d89565b606091505b5080604051610d989190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e0e565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e1782611f67565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e615760405162461bcd60e51b815260040161085690612cb4565b6033548110610e825760405162461bcd60e51b815260040161085690612bd8565b603a55565b333014610ea65760405162461bcd60e51b815260040161085690612cb4565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f055760405162461bcd60e51b815260040161085690612e57565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f5e610979565b6001600160a01b0316336001600160a01b031614610f8e5760405162461bcd60e51b815260040161085690612dea565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610fda908490600401612f6b565b600060405180830381600087803b158015610ff457600080fd5b505af1158015610960573d6000803e3d6000fd5b3330146110275760405162461bcd60e51b815260040161085690612cb4565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916110ec9185916004016128c7565b600060405180830381600087803b15801561110657600080fd5b505af1925050508015611117575060015b61119a573d808015611145576040519150601f19603f3d011682016040523d82523d6000602084013e61114a565b606091505b50806040516111599190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111cf565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e178261204b565b60008351116111f95760405162461bcd60e51b815260040161085690612c8a565b611221838383611209863361154f565b15801561121c575061121a86610991565b155b612055565b505050565b3330146112455760405162461bcd60e51b815260040161085690612cb4565b603955565b600054610100900460ff16806112635750611263612298565b80611271575060005460ff16155b61128d5760405162461bcd60e51b815260040161085690612d9c565b600054610100900460ff161580156112b8576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561147861229e565b8015610e17576000805461ff00191690555050565b60395481565b60375481565b60006114a6338484611c19565b90505b92915050565b603d546000190190565b6114c16124e9565b603d83815481106114ce57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b33301461154a5760405162461bcd60e51b815260040161085690612cb4565b603355565b6000603d838154811061155e57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115b15760405162461bcd60e51b815260040161085690612cb4565b603855565b3330146115d55760405162461bcd60e51b815260040161085690612cb4565b603655565b6115e2610979565b6001600160a01b0316336001600160a01b0316146116125760405162461bcd60e51b815260040161085690612dea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc61164983476122df565b6040518115909202916000818181858888f1935050505061166957600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116cd9185916004016128c7565b600060405180830381600087803b1580156116e757600080fd5b505af19250505080156116f8575060015b61177b573d808015611726576040519150601f19603f3d011682016040523d82523d6000602084013e61172b565b606091505b508060405161173a9190612897565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117b0565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117be8787878787876122f5565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60046117f6826109e5565b600681111561180157fe5b1461181e5760405162461bcd60e51b815260040161085690612a37565b6000603d828154811061182d57fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b031661186881612375565b6118845760405162461bcd60e51b8152600401610856906129f4565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b038516916118c891612897565b600060405180830381855af49150503d8060008114611903576040519150601f19603f3d011682016040523d82523d6000602084013e611908565b606091505b50915091508161194b57805115611933578060405162461bcd60e51b815260040161085691906129e1565b60405162461bcd60e51b815260040161085690612ed8565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001611988836109e5565b600681111561199357fe5b146119b05760405162461bcd60e51b815260040161085690612afd565b6000603d83815481106119bf57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b909452919094205492945010159080611a1e5760405162461bcd60e51b815260040161085690612d22565b825460ff1615611a6d578254610100900460ff1615611a545760018301546004850154611a4a91611bae565b6004850155611a6d565b60018301546005850154611a6791611bae565b60058501555b8415611a8c576004840154611a829082611bf0565b6004850155611aa1565b6005840154611a9b9082611bf0565b60058501555b6006840154610100900460ff16158015611ad15750603954611acf611ac4611c15565b600387015490611bae565b105b15611b15576005840154600485015411158215158114611b135760068501805461ff001916610100179055603a546003860154611b0d91611bf0565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611b60938b93611b5b9391926108c592839190611bf0565b61237b565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611b9d9190612f6b565b60405180910390a450505050505050565b60006114a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123b8565b6000828201838110156114a65760405162461bcd60e51b815260040161085690612ba1565b4290565b6001600160a01b0383166000908152603b6020526040812054603654811015611c545760405162461bcd60e51b815260040161085690612b44565b611c5d84612375565b611c795760405162461bcd60e51b815260040161085690612d59565b6001600160a01b0385166000908152603e60205260409020548015611ceb576000611ca3826109e5565b90506001816006811115611cb357fe5b14158015611ccd57506000816006811115611cca57fe5b14155b611ce95760405162461bcd60e51b815260040161085690612a82565b505b6000611cfb6037546108c5611c15565b90506000611d1460385483611bf090919063ffffffff16565b9050611d1e612509565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff19909316929092179490941617905590611ed06114af565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350611f12928d92611b5b9290916108c5919082908a90611bf0565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d604051611f52949392919061298b565b60405180910390a39998505050505050505050565b336000908152603f6020526040902054611f7f611c15565b11611f9c5760405162461bcd60e51b815260040161085690612c1c565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611fea9183906123b8565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610fda919085906004016128c7565b61166933826123e4565b3381328214612065576000612069565b6152085b61ffff1681156121d45760005a905060005b885181101561213257600089828151811061209257fe5b6020908102919091018101516001600160a01b038082166000908152603c909352604090922054909250163314806120d257506001600160a01b03811633145b6120ee5760405162461bcd60e51b815260040161085690612ea1565b8615806121025750612100898261154f565b155b61211e5760405162461bcd60e51b815260040161085690612f0f565b612129818a8a61197d565b5060010161207b565b50600061214a6127106108c5856108c55a8790611bae565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061219b90889085906004016128c7565b600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b5050505050506117be565b60005b875181101561228e5760008882815181106121ee57fe5b6020908102919091018101516001600160a01b038082166000908152603c9093526040909220549092501633148061222e57506001600160a01b03811633145b61224a5760405162461bcd60e51b815260040161085690612ea1565b85158061225e575061225c888261154f565b155b61227a5760405162461bcd60e51b815260040161085690612f0f565b61228581898961197d565b506001016121d7565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008183106122ee57816114a6565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf9061233190899030908a908a908a908a908a9060040161294a565b600060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b5050505061236d86866123e4565b505050505050565b3b151590565b6001600160a01b0382166000908152603f6020526040902054811115610e17576001600160a01b03919091166000908152603f6020526040902055565b600081848411156123dc5760405162461bcd60e51b815260040161085691906129e1565b505050900390565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906124389085907f00000000000000000000000000000000000000000000000000000000000000009086906004016128e0565b602060405180830381600087803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a91906127dc565b6124a65760405162461bcd60e51b815260040161085690612c53565b6001600160a01b0382166000908152603b60205260409020546124c99082611bf0565b6001600160a01b039092166000908152603b602052604090209190915550565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114a957600080fd5b80356114a981612fe0565b600082601f830112612596578081fd5b813567ffffffffffffffff8111156125ac578182fd5b6125bf601f8201601f1916602001612f74565b91508082528360208285010111156125d657600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612600578081fd5b6114a68383612564565b60008060006060848603121561261e578182fd5b833561262981612fcb565b9250602084013561263981612fcb565b9150604084013567ffffffffffffffff811115612654578182fd5b61266086828701612586565b9150509250925092565b6000806040838503121561267c578182fd5b823561268781612fcb565b9150602083013567ffffffffffffffff8111156126a2578182fd5b6126ae85828601612586565b9150509250929050565b60008060008060008060c087890312156126d0578182fd5b6126da8888612564565b95506020870135945060408701359350606087013560ff811681146126fd578283fd5b9598949750929560808101359460a0909101359350915050565b60008060006060848603121561272b578283fd5b833567ffffffffffffffff80821115612742578485fd5b818601915086601f830112612755578485fd5b813581811115612763578586fd5b60209150818102612775838201612f74565b8281528381019085850183870186018c101561278f57898afd5b8996505b848710156127b9576127a58c82612564565b835260019690960195918501918501612793565b50975050505085013592506127d39050856040860161257b565b90509250925092565b6000602082840312156127ed578081fd5b81516114a681612fe0565b600060208284031215612809578081fd5b5035919050565b60008060408385031215612822578182fd5b823591506128338460208501612564565b90509250929050565b6000806040838503121561284e578182fd5b82359150602083013561286081612fe0565b809150509250929050565b60008151808452612883816020860160208601612f9b565b601f01601f19169290920160200192915050565b600082516128a9818460208701612f9b565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b0386168252846020830152836040830152608060608301526129b8608083018461286b565b9695505050505050565b901515815260200190565b60208101600783106129db57fe5b91905290565b6000602082526114a6602083018461286b565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612f9357600080fd5b604052919050565b60005b83811015612fb6578181015183820152602001612f9e565b83811115612fc5576000848401525b50505050565b6001600160a01b038116811461166957600080fd5b801515811461166957600080fdfea2646970667358221220e1f35bea256ff1c0e43f98312094903f31941303df43a2edbe8b9bd0fa323c8864736f6c634300060c0033";class rs extends Ja{constructor(...e){e.length>1?super(...e):super(ss,cs,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ss)}static connect(e,t){return new za(e,ss,t)}}rs.bytecode=cs,rs.abi=ss;var ps=Object.freeze({__proto__:null,GovernanceStakingUpgrade__factory:rs,interfaces:is});const us=[{inputs:[{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"address",name:"implementationContract",type:"address"},{internalType:"bytes",name:"metamorphicContractInitializationCalldata",type:"bytes"}],name:"deployMetamorphicContractFromExistingImplementation",outputs:[{internalType:"address",name:"metamorphicContractAddress",type:"address"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"findMetamorphicContractAddress",outputs:[{internalType:"address",name:"metamorphicContractAddress",type:"address"}],stateMutability:"view",type:"function"}];class os{static createInterface(){return new na(us)}static connect(e,t){return new za(e,us,t)}}os.abi=us;var ys=Object.freeze({__proto__:null,IMetamorphicContractFactory__factory:os});const ls=[{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"num",type:"uint256"}],name:"MockExecuted",type:"event"},{inputs:[],name:"emergencyStop",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"}],ms="0x608060405234801561001057600080fd5b5060c08061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063373058b814603757806363a599a414603f575b600080fd5b603d6045565b005b603d607d565b7f2ff532ec74fd1130db9b7b6800e0992b2363095b00331a891a27edfab97c45406001604051607391906081565b60405180910390a1565b6000ff5b9081526020019056fea264697066735822122018779fa63005d6573862657b4a5cd55f75b705b28a7ff69222461665b78f408a64736f6c634300060c0033";class Ts extends Ja{constructor(...e){e.length>1?super(...e):super(ls,ms,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ls)}static connect(e,t){return new za(e,ls,t)}}Ts.bytecode=ms,Ts.abi=ls;const hs=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"num",type:"uint256"}],name:"MockExecuted",type:"event"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"emergencyStop",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"}],gs="0x60a060405234801561001057600080fd5b5033606081901b6080526102746100366000398061012952806101b052506102746000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063373058b81461004657806363a599a414610050578063d5f3948814610058575b600080fd5b61004e610076565b005b61004e6101aa565b6100606101ae565b60405161006d9190610211565b60405180910390f35b6040516370a0823160e01b81527377777feddddffc19ff86db637967013e6c6a116c9060009082906370a08231906100b2903090600401610211565b60206040518083038186803b1580156100ca57600080fd5b505afa1580156100de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010291906101f9565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610153907f0000000000000000000000000000000000000000000000000000000000000000908590600401610225565b602060405180830381600087803b15801561016d57600080fd5b505af1158015610181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a591906101d2565b505050565b6000ff5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000602082840312156101e3578081fd5b815180151581146101f2578182fd5b9392505050565b60006020828403121561020a578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220c120adf2a3856eb39e4d2305abf19175fb5f11d87cd96e5c70ce2a9f702ba53664736f6c634300060c0033";class ws extends Ja{constructor(...e){e.length>1?super(...e):super(hs,gs,e[0])}getDeployTransaction(e){return super.getDeployTransaction(e||{})}deploy(e){return super.deploy(e||{})}connect(e){return super.connect(e)}static createInterface(){return new na(hs)}static connect(e,t){return new za(e,hs,t)}}ws.bytecode=gs,ws.abi=hs;var vs=Object.freeze({__proto__:null,InitialProposal__factory:Ts,MaliciousProposal__factory:ws}),Ms=Object.freeze({__proto__:null,mockProposalsSol:vs});const _s=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"address",name:"_admin",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],xs="0x60806040526040516108403803806108408339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508390508282816100f1826101c5565b8051156101a9576000826001600160a01b0316826040518082805190602001908083835b602083106101345780518252601f199092019160209182019101610115565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610194576040519150601f19603f3d011682016040523d82523d6000602084013e610199565b606091505b50509050806101a757600080fd5b505b506101b19050565b6101ba82610237565b505050505050610261565b6101d88161025b60201b6103b41760201c565b6102135760405162461bcd60e51b815260040180806020018281038252603681526020018061080a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a806102706000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212203c0c6456361fbff816ff53c5547d39ad0e807130f877d2661772f7bffc95b82764736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";let Is=class extends Ja{constructor(...e){e.length>1?super(...e):super(_s,xs,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(_s)}static connect(e,t){return new za(e,_s,t)}};Is.bytecode=xs,Is.abi=_s;const Es=[{inputs:[{internalType:"address",name:"stakingRewardsAddress",type:"address"},{internalType:"address",name:"gasCompLogic",type:"address"},{internalType:"address",name:"userVaultAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"bytes",name:"errorData",type:"bytes"}],name:"RewardUpdateFailed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"}],name:"RewardUpdateSuccessful",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"Staking",outputs:[{internalType:"contract ITornadoStakingRewards",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"checkIfQuorumReached",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"gasCompensationVault",outputs:[{internalType:"contract IGasCompensationVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"account",type:"address"}],name:"hasAccountVoted",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposalCodehashes",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"returnMultisigAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"gasCompensationsLimit",type:"uint256"}],name:"setGasCompensations",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawFromHelper",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],Rs="0x60e06040523480156200001157600080fd5b50604051620034343803806200343483398101604081905262000034916200016b565b82828281818181600060019054906101000a900460ff16806200005c57506200005c62000124565b806200006b575060005460ff16155b620000935760405162461bcd60e51b81526004016200008a90620001be565b60405180910390fd5b600054610100900460ff16158015620000bf576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000dd6200012a565b8015620000f0576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022595505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000180578283fd5b83516200018d816200020c565b6020850151909350620001a0816200020c565b6040850151909250620001b3816200020c565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022257600080fd5b50565b60805160601c60a05160601c60c05160601c6131ac6200028860003980610d1352806110d452806116c752806117f85250806109105280610eca5280610fc252806116435280611d6d52508061105d5280611c1652806124f152506131ac6000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e1565b6107fd565b6040516102c19897969594939291906129ed565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e1565b610862565b005b3480156102f857600080fd5b506102ea610307366004612925565b61088f565b34801561031857600080fd5b5061032c6103273660046126d8565b610992565b6040516102c19190612ab6565b34801561034557600080fd5b5061034e6109a4565b6040516102c1919061299c565b34801561036757600080fd5b5061037b6103763660046128e1565b6109bc565b6040516102c19190612aab565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e1565b610a10565b6040516102c19190612abf565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ad3565b3480156103f857600080fd5b5061032c610b75565b34801561040d57600080fd5b5061032c61041c3660046126f3565b610b7b565b34801561042d57600080fd5b506102ea61043c3660046126d8565b610bc9565b34801561044d57600080fd5b506102ea61045c3660046128e1565b610ceb565b34801561046d57600080fd5b5061034e61047c3660046126d8565b610e38565b34801561048d57600080fd5b5061032c610e53565b3480156104a257600080fd5b5061032c610e59565b3480156104b757600080fd5b506102ea6104c63660046128e1565b610e5f565b3480156104d757600080fd5b506102ea6104e63660046128e1565b610ea4565b3480156104f757600080fd5b5061034e610ec8565b34801561050c57600080fd5b506102ea610eec565b34801561052157600080fd5b506102ea6105303660046128e1565b610f73565b34801561054157600080fd5b506102ea6105503660046128e1565b611025565b34801561056157600080fd5b5061032c6105703660046126d8565b611049565b34801561058157600080fd5b5061034e61105b565b34801561059657600080fd5b5061032c61107f565b3480156105ab57600080fd5b5061032c6105ba3660046126d8565b611085565b3480156105cb57600080fd5b5061034e611097565b3480156105e057600080fd5b5061032c6110a6565b3480156105f557600080fd5b506102ea6106043660046128e1565b6110ac565b34801561061557600080fd5b506102ea610624366004612800565b6111f5565b34801561063557600080fd5b506102ea6106443660046128e1565b611243565b34801561065557600080fd5b506102ea6106643660046126d8565b611267565b34801561067557600080fd5b5061032c6114aa565b34801561068a57600080fd5b5061032c6114b0565b34801561069f57600080fd5b5061032c6106ae366004612753565b6114b6565b3480156106bf57600080fd5b5061032c6114cc565b3480156106d457600080fd5b5061032c6106e33660046128e1565b6114d6565b3480156106f457600080fd5b506107086107033660046128f9565b6114e8565b6040516102c191906130db565b34801561072157600080fd5b506102ea6107303660046128e1565b61155a565b34801561074157600080fd5b5061037b6107503660046128f9565b61157e565b34801561076157600080fd5b506102ea6107703660046128e1565b6115c1565b34801561078157600080fd5b506102ea6107903660046128e1565b6115e5565b3480156107a157600080fd5b506102ea6107b03660046128e1565b611609565b3480156107c157600080fd5b506102ea6107d03660046127a1565b61169b565b3480156107e157600080fd5b5061034e6117f6565b6102ea6107f83660046128e1565b61181a565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e49565b60405180910390fd5b603555565b3361089a833361157e565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118ac565b60006108f66127106108f0856108f05a8790611add565b90611b1f565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b0565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118ac565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114cc565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fa6565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b44565b11610a80576000915050610a05565b8060030154610a8d611b44565b11610a9c576001915050610a05565b80600501548160040154111580610abe57506035548160050154826004015401105b15610acd576002915050610a05565b600681015460ff1615610ae4576005915050610a05565b610b036034546108f06033548460030154611b1f90919063ffffffff16565b610b0b611b44565b10610b1a576006915050610a05565b6033546003820154610b2b91611b1f565b610b33611b44565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152600f81526e0d0b9c185d18da0b595e1c1b1bda5d608a1b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bb65760405162461bcd60e51b815260040161088190613036565b610bc1848484611b48565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bff57506001600160a01b0382163014155b8015610c1357506001600160a01b03821615155b8015610c315750806001600160a01b0316826001600160a01b031614155b610c4d5760405162461bcd60e51b815260040161088190612e80565b6001600160a01b03811615610c93576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d489185916004016129b0565b600060405180830381600087803b158015610d6257600080fd5b505af1925050508015610d73575060015b610df6573d808015610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b5080604051610db59190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e2b565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611b70565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e7e5760405162461bcd60e51b815260040161088190612e49565b6033548110610e9f5760405162461bcd60e51b815260040161088190612d6d565b603a55565b333014610ec35760405162461bcd60e51b815260040161088190612e49565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f225760405162461bcd60e51b815260040161088190612fec565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f7b6109a4565b6001600160a01b0316336001600160a01b031614610fab5760405162461bcd60e51b815260040161088190612f7f565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ff7908490600401612ab6565b600060405180830381600087803b15801561101157600080fd5b505af115801561098b573d6000803e3d6000fd5b3330146110445760405162461bcd60e51b815260040161088190612e49565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111099185916004016129b0565b600060405180830381600087803b15801561112357600080fd5b505af1925050508015611134575060015b6111b7573d808015611162576040519150601f19603f3d011682016040523d82523d6000602084013e611167565b606091505b50806040516111769190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111ec565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611c54565b60008351116112165760405162461bcd60e51b815260040161088190612e1f565b61123e838383611226863361157e565b1580156112395750611237866109bc565b155b611c5e565b505050565b3330146112625760405162461bcd60e51b815260040161088190612e49565b603955565b600054610100900460ff16806112805750611280611ea1565b8061128e575060005460ff16155b6112aa5760405162461bcd60e51b815260040161088190612f31565b600054610100900460ff161580156112d5576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611495611ea7565b8015610e34576000805461ff00191690555050565b60395481565b60375481565b60006114c3338484611b48565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f06125d2565b603d83815481106114fd57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115795760405162461bcd60e51b815260040161088190612e49565b603355565b6000603d838154811061158d57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e05760405162461bcd60e51b815260040161088190612e49565b603855565b3330146116045760405162461bcd60e51b815260040161088190612e49565b603655565b6116116109a4565b6001600160a01b0316336001600160a01b0316146116415760405162461bcd60e51b815260040161088190612f7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc6116788347611ee8565b6040518115909202916000818181858888f1935050505061169857600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116fc9185916004016129b0565b600060405180830381600087803b15801561171657600080fd5b505af1925050508015611727575060015b6117aa573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b50806040516117699190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117df565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117ed878787878787611efe565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3330141561183a5760405162461bcd60e51b815260040161088190612c36565b6000603d828154811061184957fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f90811461189d5760405162461bcd60e51b815260040161088190612d17565b6118a684611f7e565b50505050565b60016118b783610a10565b60068111156118c257fe5b146118df5760405162461bcd60e51b815260040161088190612bef565b6000603d83815481106118ee57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061194d5760405162461bcd60e51b815260040161088190612eb7565b825460ff161561199c578254610100900460ff1615611983576001830154600485015461197991611add565b600485015561199c565b6001830154600585015461199691611add565b60058501555b84156119bb5760048401546119b19082611b1f565b60048501556119d0565b60058401546119ca9082611b1f565b60058501555b6006840154610100900460ff16158015611a0057506039546119fe6119f3611b44565b600387015490611add565b105b15611a44576005840154600485015411158215158114611a425760068501805461ff001916610100179055603a546003860154611a3c91611b1f565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a8f938b93611a8a9391926108f092839190611b1f565b612110565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611acc9190612ab6565b60405180910390a450505050505050565b60006114c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214d565b6000828201838110156114c35760405162461bcd60e51b815260040161088190612ce0565b4290565b6000611b55848484612179565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b88611b44565b11611ba55760405162461bcd60e51b815260040161088190612db1565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bf391839061214d565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ff7919085906004016129b0565b61169833826124c7565b3381328214611c6e576000611c72565b6152085b61ffff168115611ddd5760005a905060005b8851811015611d3b576000898281518110611c9b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611cdb57506001600160a01b03811633145b611cf75760405162461bcd60e51b815260040161088190613036565b861580611d0b5750611d09898261157e565b155b611d275760405162461bcd60e51b8152600401610881906130a4565b611d32818a8a6118ac565b50600101611c84565b506000611d536127106108f0856108f05a8790611add565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611da490889085906004016129b0565b600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b5050505050506117ed565b60005b8751811015611e97576000888281518110611df757fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3757506001600160a01b03811633145b611e535760405162461bcd60e51b815260040161088190613036565b851580611e675750611e65888261157e565b155b611e835760405162461bcd60e51b8152600401610881906130a4565b611e8e8189896118ac565b50600101611de0565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611ef757816114c3565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f3a90899030908a908a908a908a908a90600401612a33565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b50505050611f7686866124c7565b505050505050565b6004611f8982610a10565b6006811115611f9457fe5b14611fb15760405162461bcd60e51b815260040161088190612b29565b6000603d8281548110611fc057fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316611ffb816125cc565b6120175760405162461bcd60e51b815260040161088190612ae6565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161205b91612980565b600060405180830381855af49150503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5091509150816120de578051156120c6578060405162461bcd60e51b81526004016108819190612ad3565b60405162461bcd60e51b81526004016108819061306d565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e34576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121715760405162461bcd60e51b81526004016108819190612ad3565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121b45760405162461bcd60e51b815260040161088190612c83565b6121bd846125cc565b6121d95760405162461bcd60e51b815260040161088190612eee565b6001600160a01b0385166000908152603e6020526040902054801561224b57600061220382610a10565b9050600181600681111561221357fe5b1415801561222d5750600081600681111561222a57fe5b14155b6122495760405162461bcd60e51b815260040161088190612b74565b505b600061225b6037546108f0611b44565b9050600061227460385483611b1f90919063ffffffff16565b905061227e6125f2565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124306114cc565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612472928d92611a8a9290916108f0919082908a90611b1f565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b29493929190612a74565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061251b9085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129c9565b602060405180830381600087803b15801561253557600080fd5b505af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d91906128c5565b6125895760405162461bcd60e51b815260040161088190612de8565b6001600160a01b0382166000908152603b60205260409020546125ac9082611b1f565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114c657600080fd5b80356114c681613168565b600082601f83011261267f578081fd5b813567ffffffffffffffff811115612695578182fd5b6126a8601f8201601f1916602001613100565b91508082528360208285010111156126bf57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126e9578081fd5b6114c3838361264d565b600080600060608486031215612707578182fd5b833561271281613153565b9250602084013561272281613153565b9150604084013567ffffffffffffffff81111561273d578182fd5b6127498682870161266f565b9150509250925092565b60008060408385031215612765578182fd5b823561277081613153565b9150602083013567ffffffffffffffff81111561278b578182fd5b6127978582860161266f565b9150509250929050565b60008060008060008060c087890312156127b9578182fd5b6127c3888861264d565b95506020870135945060408701359350606087013560ff811681146127e6578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215612814578283fd5b833567ffffffffffffffff8082111561282b578485fd5b818601915086601f83011261283e578485fd5b81358181111561284c578586fd5b6020915081810261285e838201613100565b8281528381019085850183870186018c101561287857898afd5b8996505b848710156128a25761288e8c8261264d565b83526001969096019591850191850161287c565b50975050505085013592506128bc90508560408601612664565b90509250925092565b6000602082840312156128d6578081fd5b81516114c381613168565b6000602082840312156128f2578081fd5b5035919050565b6000806040838503121561290b578182fd5b8235915061291c846020850161264d565b90509250929050565b60008060408385031215612937578182fd5b82359150602083013561294981613168565b809150509250929050565b6000815180845261296c816020860160208601613127565b601f01601f19169290920160200192915050565b60008251612992818460208701613127565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa16080830184612954565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612acd57fe5b91905290565b6000602082526114c36020830184612954565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561311f57600080fd5b604052919050565b60005b8381101561314257818101518382015260200161312a565b838111156118a65750506000910152565b6001600160a01b038116811461169857600080fd5b801515811461169857600080fdfea2646970667358221220b75004153b6c8b4905c018daca78cb0fa6d3859298be55252bcf6ba75ea68d0e64736f6c634300060c0033";class Os extends Ja{constructor(...e){e.length>1?super(...e):super(Es,Rs,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Es)}static connect(e,t){return new za(e,Es,t)}}Os.bytecode=Rs,Os.abi=Es;const ks=[{inputs:[{internalType:"address",name:"_deployedStakingProxyContractAddress",type:"address"},{internalType:"address",name:"_deployedRelayerRegistryImplementationAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"TORN",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployedRelayerRegistryImplementationAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployedStakingProxyContractAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"executeProposal",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"gasCompensationVaultAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"governanceProxyAddress",outputs:[{internalType:"address payable",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"oldStakingProxyAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"registryProxyAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"userVaultAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],Ps="0x60c060405234801561001057600080fd5b50604051613adb380380613adb83398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c613a056100d66000398061027a52806104985250806102f952806103f452806104bc5250613a056000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063373058b811610066578063373058b8146100ce5780634655478f146100d857806361697d64146100e05780636fc6091d146100e85780639b49989a146100f057610093565b80630cc784761461009857806313f32237146100b657806324044543146100be57806332bf1039146100c6575b600080fd5b6100a06100f8565b6040516100ad9190610542565b60405180910390f35b6100a0610110565b6100a0610128565b6100a0610140565b6100d6610158565b005b6100a061047e565b6100a0610496565b6100a06104ba565b6100a06104de565b7358e8dcc13be9780fc42e8723d8ead4cf46943df281565b732fc93484614a34f26f7970cbb94615ba109bb4bf81565b73fa4c1f3f7d5dd7c12a9adb82cd7dda542e3d59ef81565b7377777feddddffc19ff86db637967013e6c6a116c81565b6040516370a0823160e01b8152732fc93484614a34f26f7970cbb94615ba109bb4bf90819063f58073b1907377777feddddffc19ff86db637967013e6c6a116c906370a08231906101ad908590600401610542565b60206040518083038186803b1580156101c557600080fd5b505afa1580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd919061052a565b6040518263ffffffff1660e01b81526004016102199190610592565b600060405180830381600087803b15801561023357600080fd5b505af1158015610247573d6000803e3d6000fd5b5050604051631b2ce7f360e11b81527358e8dcc13be9780fc42e8723d8ead4cf46943df29250633659cfe691506102a2907f000000000000000000000000000000000000000000000000000000000000000090600401610542565b600060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b50505050735efda50f22d34f262c29268506c5fa42cb56a1ce6001600160a01b0316633659cfe67f000000000000000000000000000000000000000000000000000000000000000073fa4c1f3f7d5dd7c12a9adb82cd7dda542e3d59ef732f50508a8a3d323b91336fa3ea6ae50e55f3218560405161034e906104f6565b61035a93929190610556565b604051809103906000f080158015610376573d6000803e3d6000fd5b506040518263ffffffff1660e01b81526004016103939190610542565b600060405180830381600087803b1580156103ad57600080fd5b505af11580156103c1573d6000803e3d6000fd5b505060405163a9059cbb60e01b81527377777feddddffc19ff86db637967013e6c6a116c925063a9059cbb9150610428907f0000000000000000000000000000000000000000000000000000000000000000906913ecbccf7737e6b0000090600401610579565b602060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610503565b5050565b735efda50f22d34f262c29268506c5fa42cb56a1ce81565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b732f50508a8a3d323b91336fa3ea6ae50e55f3218581565b6134348061059c83390190565b600060208284031215610514578081fd5b81518015158114610523578182fd5b9392505050565b60006020828403121561053b578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b9081526020019056fe60e06040523480156200001157600080fd5b50604051620034343803806200343483398101604081905262000034916200016b565b82828281818181600060019054906101000a900460ff16806200005c57506200005c62000124565b806200006b575060005460ff16155b620000935760405162461bcd60e51b81526004016200008a90620001be565b60405180910390fd5b600054610100900460ff16158015620000bf576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000dd6200012a565b8015620000f0576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022595505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000180578283fd5b83516200018d816200020c565b6020850151909350620001a0816200020c565b6040850151909250620001b3816200020c565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022257600080fd5b50565b60805160601c60a05160601c60c05160601c6131ac6200028860003980610d1352806110d452806116c752806117f85250806109105280610eca5280610fc252806116435280611d6d52508061105d5280611c1652806124f152506131ac6000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e1565b6107fd565b6040516102c19897969594939291906129ed565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e1565b610862565b005b3480156102f857600080fd5b506102ea610307366004612925565b61088f565b34801561031857600080fd5b5061032c6103273660046126d8565b610992565b6040516102c19190612ab6565b34801561034557600080fd5b5061034e6109a4565b6040516102c1919061299c565b34801561036757600080fd5b5061037b6103763660046128e1565b6109bc565b6040516102c19190612aab565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e1565b610a10565b6040516102c19190612abf565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ad3565b3480156103f857600080fd5b5061032c610b75565b34801561040d57600080fd5b5061032c61041c3660046126f3565b610b7b565b34801561042d57600080fd5b506102ea61043c3660046126d8565b610bc9565b34801561044d57600080fd5b506102ea61045c3660046128e1565b610ceb565b34801561046d57600080fd5b5061034e61047c3660046126d8565b610e38565b34801561048d57600080fd5b5061032c610e53565b3480156104a257600080fd5b5061032c610e59565b3480156104b757600080fd5b506102ea6104c63660046128e1565b610e5f565b3480156104d757600080fd5b506102ea6104e63660046128e1565b610ea4565b3480156104f757600080fd5b5061034e610ec8565b34801561050c57600080fd5b506102ea610eec565b34801561052157600080fd5b506102ea6105303660046128e1565b610f73565b34801561054157600080fd5b506102ea6105503660046128e1565b611025565b34801561056157600080fd5b5061032c6105703660046126d8565b611049565b34801561058157600080fd5b5061034e61105b565b34801561059657600080fd5b5061032c61107f565b3480156105ab57600080fd5b5061032c6105ba3660046126d8565b611085565b3480156105cb57600080fd5b5061034e611097565b3480156105e057600080fd5b5061032c6110a6565b3480156105f557600080fd5b506102ea6106043660046128e1565b6110ac565b34801561061557600080fd5b506102ea610624366004612800565b6111f5565b34801561063557600080fd5b506102ea6106443660046128e1565b611243565b34801561065557600080fd5b506102ea6106643660046126d8565b611267565b34801561067557600080fd5b5061032c6114aa565b34801561068a57600080fd5b5061032c6114b0565b34801561069f57600080fd5b5061032c6106ae366004612753565b6114b6565b3480156106bf57600080fd5b5061032c6114cc565b3480156106d457600080fd5b5061032c6106e33660046128e1565b6114d6565b3480156106f457600080fd5b506107086107033660046128f9565b6114e8565b6040516102c191906130db565b34801561072157600080fd5b506102ea6107303660046128e1565b61155a565b34801561074157600080fd5b5061037b6107503660046128f9565b61157e565b34801561076157600080fd5b506102ea6107703660046128e1565b6115c1565b34801561078157600080fd5b506102ea6107903660046128e1565b6115e5565b3480156107a157600080fd5b506102ea6107b03660046128e1565b611609565b3480156107c157600080fd5b506102ea6107d03660046127a1565b61169b565b3480156107e157600080fd5b5061034e6117f6565b6102ea6107f83660046128e1565b61181a565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e49565b60405180910390fd5b603555565b3361089a833361157e565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118ac565b60006108f66127106108f0856108f05a8790611add565b90611b1f565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b0565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118ac565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114cc565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fa6565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b44565b11610a80576000915050610a05565b8060030154610a8d611b44565b11610a9c576001915050610a05565b80600501548160040154111580610abe57506035548160050154826004015401105b15610acd576002915050610a05565b600681015460ff1615610ae4576005915050610a05565b610b036034546108f06033548460030154611b1f90919063ffffffff16565b610b0b611b44565b10610b1a576006915050610a05565b6033546003820154610b2b91611b1f565b610b33611b44565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152600f81526e0d0b9c185d18da0b595e1c1b1bda5d608a1b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bb65760405162461bcd60e51b815260040161088190613036565b610bc1848484611b48565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610bff57506001600160a01b0382163014155b8015610c1357506001600160a01b03821615155b8015610c315750806001600160a01b0316826001600160a01b031614155b610c4d5760405162461bcd60e51b815260040161088190612e80565b6001600160a01b03811615610c93576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d489185916004016129b0565b600060405180830381600087803b158015610d6257600080fd5b505af1925050508015610d73575060015b610df6573d808015610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b5080604051610db59190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e2b565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611b70565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e7e5760405162461bcd60e51b815260040161088190612e49565b6033548110610e9f5760405162461bcd60e51b815260040161088190612d6d565b603a55565b333014610ec35760405162461bcd60e51b815260040161088190612e49565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f225760405162461bcd60e51b815260040161088190612fec565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f7b6109a4565b6001600160a01b0316336001600160a01b031614610fab5760405162461bcd60e51b815260040161088190612f7f565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ff7908490600401612ab6565b600060405180830381600087803b15801561101157600080fd5b505af115801561098b573d6000803e3d6000fd5b3330146110445760405162461bcd60e51b815260040161088190612e49565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111099185916004016129b0565b600060405180830381600087803b15801561112357600080fd5b505af1925050508015611134575060015b6111b7573d808015611162576040519150601f19603f3d011682016040523d82523d6000602084013e611167565b606091505b50806040516111769190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111ec565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3482611c54565b60008351116112165760405162461bcd60e51b815260040161088190612e1f565b61123e838383611226863361157e565b1580156112395750611237866109bc565b155b611c5e565b505050565b3330146112625760405162461bcd60e51b815260040161088190612e49565b603955565b600054610100900460ff16806112805750611280611ea1565b8061128e575060005460ff16155b6112aa5760405162461bcd60e51b815260040161088190612f31565b600054610100900460ff161580156112d5576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff199094169390931716919091179055611495611ea7565b8015610e34576000805461ff00191690555050565b60395481565b60375481565b60006114c3338484611b48565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f06125d2565b603d83815481106114fd57fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115795760405162461bcd60e51b815260040161088190612e49565b603355565b6000603d838154811061158d57fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e05760405162461bcd60e51b815260040161088190612e49565b603855565b3330146116045760405162461bcd60e51b815260040161088190612e49565b603655565b6116116109a4565b6001600160a01b0316336001600160a01b0316146116415760405162461bcd60e51b815260040161088190612f7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc6116788347611ee8565b6040518115909202916000818181858888f1935050505061169857600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916116fc9185916004016129b0565b600060405180830381600087803b15801561171657600080fd5b505af1925050508015611727575060015b6117aa573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b50806040516117699190612980565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117df565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117ed878787878787611efe565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3330141561183a5760405162461bcd60e51b815260040161088190612c36565b6000603d828154811061184957fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f90811461189d5760405162461bcd60e51b815260040161088190612d17565b6118a684611f7e565b50505050565b60016118b783610a10565b60068111156118c257fe5b146118df5760405162461bcd60e51b815260040161088190612bef565b6000603d83815481106118ee57fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b90945291909420549294501015908061194d5760405162461bcd60e51b815260040161088190612eb7565b825460ff161561199c578254610100900460ff1615611983576001830154600485015461197991611add565b600485015561199c565b6001830154600585015461199691611add565b60058501555b84156119bb5760048401546119b19082611b1f565b60048501556119d0565b60058401546119ca9082611b1f565b60058501555b6006840154610100900460ff16158015611a0057506039546119fe6119f3611b44565b600387015490611add565b105b15611a44576005840154600485015411158215158114611a425760068501805461ff001916610100179055603a546003860154611a3c91611b1f565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a8f938b93611a8a9391926108f092839190611b1f565b612110565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611acc9190612ab6565b60405180910390a450505050505050565b60006114c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214d565b6000828201838110156114c35760405162461bcd60e51b815260040161088190612ce0565b4290565b6000611b55848484612179565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b88611b44565b11611ba55760405162461bcd60e51b815260040161088190612db1565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bf391839061214d565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ff7919085906004016129b0565b61169833826124c7565b3381328214611c6e576000611c72565b6152085b61ffff168115611ddd5760005a905060005b8851811015611d3b576000898281518110611c9b57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611cdb57506001600160a01b03811633145b611cf75760405162461bcd60e51b815260040161088190613036565b861580611d0b5750611d09898261157e565b155b611d275760405162461bcd60e51b8152600401610881906130a4565b611d32818a8a6118ac565b50600101611c84565b506000611d536127106108f0856108f05a8790611add565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611da490889085906004016129b0565b600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b5050505050506117ed565b60005b8751811015611e97576000888281518110611df757fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3757506001600160a01b03811633145b611e535760405162461bcd60e51b815260040161088190613036565b851580611e675750611e65888261157e565b155b611e835760405162461bcd60e51b8152600401610881906130a4565b611e8e8189896118ac565b50600101611de0565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611ef757816114c3565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f3a90899030908a908a908a908a908a90600401612a33565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b50505050611f7686866124c7565b505050505050565b6004611f8982610a10565b6006811115611f9457fe5b14611fb15760405162461bcd60e51b815260040161088190612b29565b6000603d8281548110611fc057fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316611ffb816125cc565b6120175760405162461bcd60e51b815260040161088190612ae6565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161205b91612980565b600060405180830381855af49150503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5091509150816120de578051156120c6578060405162461bcd60e51b81526004016108819190612ad3565b60405162461bcd60e51b81526004016108819061306d565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e34576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121715760405162461bcd60e51b81526004016108819190612ad3565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121b45760405162461bcd60e51b815260040161088190612c83565b6121bd846125cc565b6121d95760405162461bcd60e51b815260040161088190612eee565b6001600160a01b0385166000908152603e6020526040902054801561224b57600061220382610a10565b9050600181600681111561221357fe5b1415801561222d5750600081600681111561222a57fe5b14155b6122495760405162461bcd60e51b815260040161088190612b74565b505b600061225b6037546108f0611b44565b9050600061227460385483611b1f90919063ffffffff16565b905061227e6125f2565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124306114cc565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612472928d92611a8a9290916108f0919082908a90611b1f565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b29493929190612a74565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd9061251b9085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129c9565b602060405180830381600087803b15801561253557600080fd5b505af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d91906128c5565b6125895760405162461bcd60e51b815260040161088190612de8565b6001600160a01b0382166000908152603b60205260409020546125ac9082611b1f565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114c657600080fd5b80356114c681613168565b600082601f83011261267f578081fd5b813567ffffffffffffffff811115612695578182fd5b6126a8601f8201601f1916602001613100565b91508082528360208285010111156126bf57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126e9578081fd5b6114c3838361264d565b600080600060608486031215612707578182fd5b833561271281613153565b9250602084013561272281613153565b9150604084013567ffffffffffffffff81111561273d578182fd5b6127498682870161266f565b9150509250925092565b60008060408385031215612765578182fd5b823561277081613153565b9150602083013567ffffffffffffffff81111561278b578182fd5b6127978582860161266f565b9150509250929050565b60008060008060008060c087890312156127b9578182fd5b6127c3888861264d565b95506020870135945060408701359350606087013560ff811681146127e6578283fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215612814578283fd5b833567ffffffffffffffff8082111561282b578485fd5b818601915086601f83011261283e578485fd5b81358181111561284c578586fd5b6020915081810261285e838201613100565b8281528381019085850183870186018c101561287857898afd5b8996505b848710156128a25761288e8c8261264d565b83526001969096019591850191850161287c565b50975050505085013592506128bc90508560408601612664565b90509250925092565b6000602082840312156128d6578081fd5b81516114c381613168565b6000602082840312156128f2578081fd5b5035919050565b6000806040838503121561290b578182fd5b8235915061291c846020850161264d565b90509250929050565b60008060408385031215612937578182fd5b82359150602083013561294981613168565b809150509250929050565b6000815180845261296c816020860160208601613127565b601f01601f19169290920160200192915050565b60008251612992818460208701613127565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa16080830184612954565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612acd57fe5b91905290565b6000602082526114c36020830184612954565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561311f57600080fd5b604052919050565b60005b8381101561314257818101518382015260200161312a565b838111156118a65750506000910152565b6001600160a01b038116811461169857600080fd5b801515811461169857600080fdfea2646970667358221220b75004153b6c8b4905c018daca78cb0fa6d3859298be55252bcf6ba75ea68d0e64736f6c634300060c0033a26469706673582212205ce84e9446fce11b2c9c1572684a150170d4bffa09fb4c56f9926d2efe573f6b64736f6c634300060c0033";class As extends Ja{constructor(...e){e.length>1?super(...e):super(ks,Ps,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(ks)}static connect(e,t){return new za(e,ks,t)}}As.bytecode=Ps,As.abi=ks;var Ns=Object.freeze({__proto__:null,AdminUpgradeableProxy__factory:Is,GovernanceExploitPatchUpgrade__factory:Os,PatchProposal__factory:As,metamorphic:ys,mock:Ms});const Cs=[{inputs:[{internalType:"address",name:"stakingRewardsAddress",type:"address"},{internalType:"address",name:"gasCompLogic",type:"address"},{internalType:"address",name:"userVaultAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Delegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"proposer",type:"address"},{indexed:!1,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"},{indexed:!1,internalType:"string",name:"description",type:"string"}],name:"ProposalCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"}],name:"ProposalExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"bytes",name:"errorData",type:"bytes"}],name:"RewardUpdateFailed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"}],name:"RewardUpdateSuccessful",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"}],name:"Undelegated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"proposalId",type:"uint256"},{indexed:!0,internalType:"address",name:"voter",type:"address"},{indexed:!0,internalType:"bool",name:"support",type:"bool"},{indexed:!1,internalType:"uint256",name:"votes",type:"uint256"}],name:"Voted",type:"event"},{inputs:[],name:"CLOSING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"EXECUTION_EXPIRATION",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"PROPOSAL_THRESHOLD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"QUORUM_VOTES",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"Staking",outputs:[{internalType:"contract ITornadoStakingRewards",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTE_EXTEND_TIME",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_DELAY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"VOTING_PERIOD",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"canWithdrawAfter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"from",type:"address[]"},{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castDelegatedVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"bool",name:"support",type:"bool"}],name:"castVote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"checkIfQuorumReached",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"}],name:"delegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"delegatedTo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"gasCompensationVault",outputs:[{internalType:"contract IGasCompensationVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"voter",type:"address"}],name:"getReceipt",outputs:[{components:[{internalType:"bool",name:"hasVoted",type:"bool"},{internalType:"bool",name:"support",type:"bool"},{internalType:"uint256",name:"votes",type:"uint256"}],internalType:"struct Governance.Receipt",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"},{internalType:"address",name:"account",type:"address"}],name:"hasAccountVoted",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_torn",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"latestProposalIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"lock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"lockWithApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"lockedBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposalCodehashes",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"proposalCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"proposals",outputs:[{internalType:"address",name:"proposer",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"},{internalType:"uint256",name:"forVotes",type:"uint256"},{internalType:"uint256",name:"againstVotes",type:"uint256"},{internalType:"bool",name:"executed",type:"bool"},{internalType:"bool",name:"extended",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"propose",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"target",type:"address"},{internalType:"string",name:"description",type:"string"}],name:"proposeByDelegate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"returnMultisigAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"closingPeriod",type:"uint256"}],name:"setClosingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionDelay",type:"uint256"}],name:"setExecutionDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"executionExpiration",type:"uint256"}],name:"setExecutionExpiration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"gasCompensationsLimit",type:"uint256"}],name:"setGasCompensations",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalThreshold",type:"uint256"}],name:"setProposalThreshold",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"quorumVotes",type:"uint256"}],name:"setQuorumVotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"voteExtendTime",type:"uint256"}],name:"setVoteExtendTime",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingDelay",type:"uint256"}],name:"setVotingDelay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"votingPeriod",type:"uint256"}],name:"setVotingPeriod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"proposalId",type:"uint256"}],name:"state",outputs:[{internalType:"enum Governance.ProposalState",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"contract TORN",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"undelegate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"unlock",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"userVault",outputs:[{internalType:"contract ITornadoVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawFromHelper",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],Ds="0x60e06040523480156200001157600080fd5b506040516200344138038062003441833981016040819052620000349162000171565b82828282828281818181600060019054906101000a900460ff16806200005f57506200005f6200012a565b806200006e575060005460ff16155b620000965760405162461bcd60e51b81526004016200008d90620001c4565b60405180910390fd5b600054610100900460ff16158015620000c2576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b03191661dead179055620000e062000130565b8015620000f3576000805461ff00191690555b506001600160601b0319606091821b811660805291811b821660a0529590951b90941660c052506200022b98505050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b60008060006060848603121562000186578283fd5b8351620001938162000212565b6020850151909350620001a68162000212565b6040850151909250620001b98162000212565b809150509250925092565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03811681146200022857600080fd5b50565b60805160601c60a05160601c60c05160601c6131b36200028e60003980610d1a52806110db52806116ce52806117ff5250806109105280610ed15280610fc9528061164a5280611d745250806110645280611c1d52806124f852506131b36000f3fe6080604052600436106102815760003560e01c80639daafec71161014f578063d6f0948c116100c1578063ea0217cf1161007a578063ea0217cf14610755578063ece40cc114610775578063ef3f8bb114610795578063f0b76892146107b5578063f57df22e146107d5578063fe0d94c1146107ea57610288565b8063d6f0948c14610693578063da35c664146106b3578063e01f5237146106c8578063e23a9a52146106e8578063e4917d9f14610715578063e525aa081461073557610288565b8063b54426c811610113578063b54426c8146105e9578063b859f11b14610609578063c0c0e82014610629578063c4d66de814610649578063ce25d71c14610669578063d6159fe51461067e57610288565b80639daafec714610575578063a6c266031461058a578063a72edda31461059f578063adf898a4146105bf578063b1610d7e146105d457610288565b80635c19a95c116101f357806370b0f660116101ac57806370b0f660146104cb5780638b34a960146104eb57806392ab89bb14610500578063932d5157146105155780639a9e3b6e146105355780639ae697bf1461055557610288565b80635c19a95c146104215780636198e3391461044157806365da126414610461578063671dd275146104815780636a661755146104965780636dc2dc6c146104ab57610288565b806332687ec11161024557806332687ec11461035b57806337f135d7146103885780633e4f49e61461039d57806354fd4d50146103ca578063587a6ecb146103ec57806358e9fff01461040157610288565b8063013cf08b1461028d57806302ec8f9e146102ca57806315373e3d146102ec57806317977c611461030c57806324b0435f1461033957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046128e8565b6107fd565b6040516102c19897969594939291906129f4565b60405180910390f35b3480156102d657600080fd5b506102ea6102e53660046128e8565b610862565b005b3480156102f857600080fd5b506102ea61030736600461292c565b61088f565b34801561031857600080fd5b5061032c6103273660046126df565b610992565b6040516102c19190612abd565b34801561034557600080fd5b5061034e6109a4565b6040516102c191906129a3565b34801561036757600080fd5b5061037b6103763660046128e8565b6109bc565b6040516102c19190612ab2565b34801561039457600080fd5b5061032c610a0a565b3480156103a957600080fd5b506103bd6103b83660046128e8565b610a10565b6040516102c19190612ac6565b3480156103d657600080fd5b506103df610b4c565b6040516102c19190612ada565b3480156103f857600080fd5b5061032c610b7c565b34801561040d57600080fd5b5061032c61041c3660046126fa565b610b82565b34801561042d57600080fd5b506102ea61043c3660046126df565b610bd0565b34801561044d57600080fd5b506102ea61045c3660046128e8565b610cf2565b34801561046d57600080fd5b5061034e61047c3660046126df565b610e3f565b34801561048d57600080fd5b5061032c610e5a565b3480156104a257600080fd5b5061032c610e60565b3480156104b757600080fd5b506102ea6104c63660046128e8565b610e66565b3480156104d757600080fd5b506102ea6104e63660046128e8565b610eab565b3480156104f757600080fd5b5061034e610ecf565b34801561050c57600080fd5b506102ea610ef3565b34801561052157600080fd5b506102ea6105303660046128e8565b610f7a565b34801561054157600080fd5b506102ea6105503660046128e8565b61102c565b34801561056157600080fd5b5061032c6105703660046126df565b611050565b34801561058157600080fd5b5061034e611062565b34801561059657600080fd5b5061032c611086565b3480156105ab57600080fd5b5061032c6105ba3660046126df565b61108c565b3480156105cb57600080fd5b5061034e61109e565b3480156105e057600080fd5b5061032c6110ad565b3480156105f557600080fd5b506102ea6106043660046128e8565b6110b3565b34801561061557600080fd5b506102ea610624366004612807565b6111fc565b34801561063557600080fd5b506102ea6106443660046128e8565b61124a565b34801561065557600080fd5b506102ea6106643660046126df565b61126e565b34801561067557600080fd5b5061032c6114b1565b34801561068a57600080fd5b5061032c6114b7565b34801561069f57600080fd5b5061032c6106ae36600461275a565b6114bd565b3480156106bf57600080fd5b5061032c6114d3565b3480156106d457600080fd5b5061032c6106e33660046128e8565b6114dd565b3480156106f457600080fd5b50610708610703366004612900565b6114ef565b6040516102c191906130e2565b34801561072157600080fd5b506102ea6107303660046128e8565b611561565b34801561074157600080fd5b5061037b610750366004612900565b611585565b34801561076157600080fd5b506102ea6107703660046128e8565b6115c8565b34801561078157600080fd5b506102ea6107903660046128e8565b6115ec565b3480156107a157600080fd5b506102ea6107b03660046128e8565b611610565b3480156107c157600080fd5b506102ea6107d03660046127a8565b6116a2565b3480156107e157600080fd5b5061034e6117fd565b6102ea6107f83660046128e8565b611821565b603d818154811061080a57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750949093169491939092919060ff8082169161010090041688565b33301461088a5760405162461bcd60e51b815260040161088190612e50565b60405180910390fd5b603555565b3361089a8333611585565b1580156108ad57506108ab836109bc565b155b3332146108bb5760006108bf565b6152085b61ffff1681156109805760005a90506108d93387876118b3565b60006108f66127106108f0856108f05a8790611ae4565b90611b26565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce8079061094790889085906004016129b7565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b50505050505061098b565b61098b3386866118b3565b5050505050565b603e6020526000908152604090205481565b73b04e030140b30c27bcdfaafffa98c57d80eda7b490565b6000603554603d83815481106109ce57fe5b906000526020600020906008020160050154603d84815481106109ed57fe5b90600052602060002090600802016004015401101590505b919050565b60335481565b6000610a1a6114d3565b8211158015610a295750600082115b610a455760405162461bcd60e51b815260040161088190612fad565b6000603d8381548110610a5457fe5b906000526020600020906008020190508060020154610a71611b4b565b11610a80576000915050610a05565b8060030154610a8d611b4b565b11610a9c576001915050610a05565b600681015460ff1615610ab3576005915050610a05565b80600501548160040154111580610ad557506035548160050154826004015401105b15610ae4576002915050610a05565b610b036034546108f06033548460030154611b2690919063ffffffff16565b610b0b611b4b565b10610b1a576006915050610a05565b6033546003820154610b2b91611b26565b610b33611b4b565b10610b42576004915050610a05565b6003915050610a05565b60408051808201909152601681527506a5ce0e4dee0dee6c2d85ae6e8c2e8ca5ae0c2e8c6d60531b602082015290565b603a5481565b6001600160a01b038381166000908152603c60205260408120549091163314610bbd5760405162461bcd60e51b81526004016108819061303d565b610bc8848484611b4f565b949350505050565b336000818152603c60205260409020546001600160a01b039081169190831614801590610c0657506001600160a01b0382163014155b8015610c1a57506001600160a01b03821615155b8015610c385750806001600160a01b0316826001600160a01b031614155b610c545760405162461bcd60e51b815260040161088190612e87565b6001600160a01b03811615610c9a576040516001600160a01b0382169033907f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7290600090a35b336000818152603c602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea291a35050565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f91610d4f9185916004016129b7565b600060405180830381600087803b158015610d6957600080fd5b505af1925050508015610d7a575060015b610dfd573d808015610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5080604051610dbc9190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a350610e32565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3b82611b77565b5050565b603c602052600090815260409020546001600160a01b031681565b60355481565b60345481565b333014610e855760405162461bcd60e51b815260040161088190612e50565b6033548110610ea65760405162461bcd60e51b815260040161088190612d74565b603a55565b333014610eca5760405162461bcd60e51b815260040161088190612e50565b603755565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152603c60205260409020546001600160a01b031680610f295760405162461bcd60e51b815260040161088190612ff3565b336000818152603c602052604080822080546001600160a01b0319169055516001600160a01b03841692917f1af5b1c85495b3618ea659a1ba256c8b8974b437297d3b914e321e086a28da7291a350565b610f826109a4565b6001600160a01b0316336001600160a01b031614610fb25760405162461bcd60e51b815260040161088190612f86565b604051633a08bde160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e822f78490610ffe908490600401612abd565b600060405180830381600087803b15801561101857600080fd5b505af115801561098b573d6000803e3d6000fd5b33301461104b5760405162461bcd60e51b815260040161088190612e50565b603455565b603b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60365481565b603f6020526000908152604090205481565b6040546001600160a01b031681565b60385481565b336000818152603b60205260409081902054905163e113335f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916111109185916004016129b7565b600060405180830381600087803b15801561112a57600080fd5b505af192505050801561113b575060015b6111be573d808015611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b508060405161117d9190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506111f3565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b610e3b82611c5b565b600083511161121d5760405162461bcd60e51b815260040161088190612e26565b61124583838361122d8633611585565b158015611240575061123e866109bc565b155b611c65565b505050565b3330146112695760405162461bcd60e51b815260040161088190612e50565b603955565b600054610100900460ff16806112875750611287611ea8565b80611295575060005460ff16155b6112b15760405162461bcd60e51b815260040161088190612f38565b600054610100900460ff161580156112dc576000805460ff1961ff0019909116610100171660011790555b604080546001600160a01b038085166001600160a01b03199283161783558251610100818101855230825261dead602083019081526000958301868152606084018781526080850188815260a08601898152600160c0880181815260e089018c8152603d80549384018155909c52975160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b16928c169290921790915594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4860180549190991699169890981790965590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc5830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc682015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc784015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc8830155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990910180549351151590920261ff001991151560ff19909416939093171691909117905561149c611eae565b8015610e3b576000805461ff00191690555050565b60395481565b60375481565b60006114ca338484611b4f565b90505b92915050565b603d546000190190565b60416020526000908152604090205481565b6114f76125d9565b603d838154811061150457fe5b600091825260208083206001600160a01b0395909516835260089190910290930160070183526040908190208151606081018352815460ff8082161515835261010090910416151594810194909452600101549083015250919050565b3330146115805760405162461bcd60e51b815260040161088190612e50565b603355565b6000603d838154811061159457fe5b600091825260208083206001600160a01b03861684526007600890930201919091019052604090205460ff16905092915050565b3330146115e75760405162461bcd60e51b815260040161088190612e50565b603855565b33301461160b5760405162461bcd60e51b815260040161088190612e50565b603655565b6116186109a4565b6001600160a01b0316336001600160a01b0316146116485760405162461bcd60e51b815260040161088190612f86565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108fc61167f8347611eef565b6040518115909202916000818181858888f1935050505061169f57600080fd5b50565b6001600160a01b038087166000908152603b60205260409081902054905163e113335f60e01b815288927f0000000000000000000000000000000000000000000000000000000000000000169163e113335f916117039185916004016129b7565b600060405180830381600087803b15801561171d57600080fd5b505af192505050801561172e575060015b6117b1573d80801561175c576040519150601f19603f3d011682016040523d82523d6000602084013e611761565b606091505b50806040516117709190612987565b604051908190038120906001600160a01b038416907f5a6216e80d86159dc87dcebfe519205477a94005b7d9d6bd313606450a5344f690600090a3506117e6565b6040516001600160a01b038216907f9b227b0c1ae308b34f72d4fdf9a1943fa769ff4814933595e7bc5230a117698b90600090a25b6117f4878787878787611f05565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b333014156118415760405162461bcd60e51b815260040161088190612c3d565b6000603d828154811061185057fe5b6000918252602080832060016008909302019182015485845260419091526040909220549092506001600160a01b0390911690813f9081146118a45760405162461bcd60e51b815260040161088190612d1e565b6118ad84611f85565b50505050565b60016118be83610a10565b60068111156118c957fe5b146118e65760405162461bcd60e51b815260040161088190612bf6565b6000603d83815481106118f557fe5b600091825260208083206001600160a01b038816845260076008909302019182018152604080842060058401546004850154603b9094529190942054929450101590806119545760405162461bcd60e51b815260040161088190612ebe565b825460ff16156119a3578254610100900460ff161561198a576001830154600485015461198091611ae4565b60048501556119a3565b6001830154600585015461199d91611ae4565b60058501555b84156119c25760048401546119b89082611b26565b60048501556119d7565b60058401546119d19082611b26565b60058501555b6006840154610100900460ff16158015611a075750603954611a056119fa611b4b565b600387015490611ae4565b105b15611a4b576005840154600485015411158215158114611a495760068501805461ff001916610100179055603a546003860154611a4391611b26565b60038601555b505b8254600160ff19909116811761ff001916610100871515021784558301819055603354603454603a546003870154611a96938b93611a919391926108f092839190611b26565b612117565b841515876001600160a01b0316877f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b584604051611ad39190612abd565b60405180910390a450505050505050565b60006114ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612154565b6000828201838110156114ca5760405162461bcd60e51b815260040161088190612ce7565b4290565b6000611b5c848484612180565b6000818152604160205260409020933f909355509092915050565b336000908152603f6020526040902054611b8f611b4b565b11611bac5760405162461bcd60e51b815260040161088190612db8565b60408051808201825260208082527f476f7665726e616e63653a20696e73756666696369656e742062616c616e636581830152336000908152603b9091529190912054611bfa918390612154565b336000818152603b6020526040908190209290925590516391fe357360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916391fe357391610ffe919085906004016129b7565b61169f33826124ce565b3381328214611c75576000611c79565b6152085b61ffff168115611de45760005a905060005b8851811015611d42576000898281518110611ca257fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611ce257506001600160a01b03811633145b611cfe5760405162461bcd60e51b81526004016108819061303d565b861580611d125750611d108982611585565b155b611d2e5760405162461bcd60e51b8152600401610881906130ab565b611d39818a8a6118b3565b50600101611c8b565b506000611d5a6127106108f0856108f05a8790611ae4565b60405163a99ce80760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a99ce80790611dab90889085906004016129b7565b600060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b5050505050506117f4565b60005b8751811015611e9e576000888281518110611dfe57fe5b6020908102919091018101516001600160a01b038082166000908152603c90935260409092205490925016331480611e3e57506001600160a01b03811633145b611e5a5760405162461bcd60e51b81526004016108819061303d565b851580611e6e5750611e6c8882611585565b155b611e8a5760405162461bcd60e51b8152600401610881906130ab565b611e958189896118b3565b50600101611de7565b5050505050505050565b303b1590565b6202a3006033556203f480603481905569054b40b1f852bda00000603555683635c9adc5dea00000603655604b603755603855610e10603955615460603a55565b6000818310611efe57816114ca565b5090919050565b60408054905163d505accf60e01b81526001600160a01b039091169063d505accf90611f4190899030908a908a908a908a908a90600401612a3a565b600060405180830381600087803b158015611f5b57600080fd5b505af1158015611f6f573d6000803e3d6000fd5b50505050611f7d86866124ce565b505050505050565b6004611f9082610a10565b6006811115611f9b57fe5b14611fb85760405162461bcd60e51b815260040161088190612b30565b6000603d8281548110611fc757fe5b600091825260209091206006600890920201908101805460ff191660019081179091558101549091506001600160a01b0316612002816125d3565b61201e5760405162461bcd60e51b815260040161088190612aed565b60408051600481526024810182526020810180516001600160e01b03166306e60b1760e31b17905290516000916060916001600160a01b0385169161206291612987565b600060405180830381855af49150503d806000811461209d576040519150601f19603f3d011682016040523d82523d6000602084013e6120a2565b606091505b5091509150816120e5578051156120cd578060405162461bcd60e51b81526004016108819190612ada565b60405162461bcd60e51b815260040161088190613074565b60405185907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90600090a25050505050565b6001600160a01b0382166000908152603f6020526040902054811115610e3b576001600160a01b03919091166000908152603f6020526040902055565b600081848411156121785760405162461bcd60e51b81526004016108819190612ada565b505050900390565b6001600160a01b0383166000908152603b60205260408120546036548110156121bb5760405162461bcd60e51b815260040161088190612c8a565b6121c4846125d3565b6121e05760405162461bcd60e51b815260040161088190612ef5565b6001600160a01b0385166000908152603e6020526040902054801561225257600061220a82610a10565b9050600181600681111561221a57fe5b141580156122345750600081600681111561223157fe5b14155b6122505760405162461bcd60e51b815260040161088190612b7b565b505b60006122626037546108f0611b4b565b9050600061227b60385483611b2690919063ffffffff16565b90506122856125f9565b506040805161010080820183526001600160a01b03808c1683528a8116602084019081529383018681526060840186815260006080860181815260a0870182815260c0880183815260e08901848152603d80546001810182559086528a5160089091027fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc381018054928b166001600160a01b03199384161790559b517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc48d01805491909a1691161790975594517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc58a015592517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc6890155517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc788015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc887015590517fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc990950180549251151590930261ff001995151560ff199093169290921794909416179055906124376114d3565b82516001600160a01b03166000908152603e60205260409020819055603354603454603a54929350612479928d92611a919290916108f0919082908a90611b26565b896001600160a01b0316817f90ec05050aa23d54ba425e926fe646c318e85825bc400b13a46010abe86eb2f08b87878d6040516124b99493929190612a7b565b60405180910390a39998505050505050505050565b6040805490516323b872dd60e01b81526001600160a01b03909116906323b872dd906125229085907f00000000000000000000000000000000000000000000000000000000000000009086906004016129d0565b602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257491906128cc565b6125905760405162461bcd60e51b815260040161088190612def565b6001600160a01b0382166000908152603b60205260409020546125b39082611b26565b6001600160a01b039092166000908152603b602052604090209190915550565b3b151590565b604080516060810182526000808252602082018190529181019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b80356001600160a01b03811681146114cd57600080fd5b80356114cd8161316f565b600082601f830112612686578081fd5b813567ffffffffffffffff81111561269c578182fd5b6126af601f8201601f1916602001613107565b91508082528360208285010111156126c657600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156126f0578081fd5b6114ca8383612654565b60008060006060848603121561270e578182fd5b83356127198161315a565b925060208401356127298161315a565b9150604084013567ffffffffffffffff811115612744578182fd5b61275086828701612676565b9150509250925092565b6000806040838503121561276c578182fd5b82356127778161315a565b9150602083013567ffffffffffffffff811115612792578182fd5b61279e85828601612676565b9150509250929050565b60008060008060008060c087890312156127c0578182fd5b6127ca8888612654565b95506020870135945060408701359350606087013560ff811681146127ed578283fd5b9598949750929560808101359460a0909101359350915050565b60008060006060848603121561281b578283fd5b833567ffffffffffffffff80821115612832578485fd5b818601915086601f830112612845578485fd5b813581811115612853578586fd5b60209150818102612865838201613107565b8281528381019085850183870186018c101561287f57898afd5b8996505b848710156128a9576128958c82612654565b835260019690960195918501918501612883565b50975050505085013592506128c39050856040860161266b565b90509250925092565b6000602082840312156128dd578081fd5b81516114ca8161316f565b6000602082840312156128f9578081fd5b5035919050565b60008060408385031215612912578182fd5b823591506129238460208501612654565b90509250929050565b6000806040838503121561293e578182fd5b8235915060208301356129508161316f565b809150509250929050565b6000815180845261297381602086016020860161312e565b601f01601f19169290920160200192915050565b6000825161299981846020870161312e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a0830152151560c082015290151560e08201526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b600060018060a01b038616825284602083015283604083015260806060830152612aa8608083018461295b565b9695505050505050565b901515815260200190565b90815260200190565b6020810160078310612ad457fe5b91905290565b6000602082526114ca602083018461295b565b60208082526023908201527f476f7665726e616e63653a3a657865637574653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602b908201527f476f7665726e616e63653a3a657865637574653a20696e76616c69642070726f60408201526a706f73616c20737461746560a81b606082015260800190565b60208082526055908201527f476f7665726e616e63653a3a70726f706f73653a206f6e65206c69766520707260408201527f6f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c6060820152741c9958591e481858dd1a5d99481c1c9bdc1bdcd85b605a1b608082015260a00190565b60208082526027908201527f476f7665726e616e63653a3a5f63617374566f74653a20766f74696e672069736040820152660818db1bdcd95960ca1b606082015260800190565b6020808252602d908201527f476f7665726e616e63653a3a70726f706f73653a2070736575646f2d6578746560408201526c393730b610333ab731ba34b7b760991b606082015260800190565b6020808252603c908201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60408201527f7465732062656c6f772070726f706f73616c207468726573686f6c6400000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526036908201527f476f7665726e616e63653a3a70726f706f73653a206d6574616d6f72706869636040820152750818dbdb9d1c9858dd1cc81b9bdd08185b1b1bddd95960521b606082015260800190565b60208082526024908201527f476f7665726e616e63653a20696e636f727265637420766f7465457874656e6460408201526354696d6560e01b606082015260800190565b6020808252601d908201527f476f7665726e616e63653a20746f6b656e7320617265206c6f636b6564000000604082015260600190565b60208082526019908201527f544f524e3a207472616e7366657246726f6d206661696c656400000000000000604082015260600190565b60208082526010908201526f43616e206e6f7420626520656d70747960801b604082015260600190565b60208082526018908201527f476f7665726e616e63653a20756e617574686f72697a65640000000000000000604082015260600190565b6020808252601d908201527f476f7665726e616e63653a20696e76616c69642064656c656761746565000000604082015260600190565b60208082526018908201527f476f7665726e616e63653a2062616c616e636520697320300000000000000000604082015260600190565b60208082526023908201527f476f7665726e616e63653a3a70726f706f73653a206e6f74206120636f6e74726040820152621858dd60ea1b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c6f6e6c79206d756c746973696760981b604082015260600190565b60208082526026908201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6040820152651cd85b081a5960d21b606082015260800190565b6020808252602a908201527f476f7665726e616e63653a20746f6b656e732061726520616c726561647920756040820152691b99195b1959d85d195960b21b606082015260800190565b6020808252601a908201527f476f7665726e616e63653a206e6f7420617574686f72697a6564000000000000604082015260600190565b60208082526019908201527f50726f706f73616c20657865637574696f6e206661696c656400000000000000604082015260600190565b60208082526019908201527f476f7665726e616e63653a20766f74656420616c726561647900000000000000604082015260600190565b8151151581526020808301511515908201526040918201519181019190915260600190565b60405181810167ffffffffffffffff8111828210171561312657600080fd5b604052919050565b60005b83811015613149578181015183820152602001613131565b838111156118ad5750506000910152565b6001600160a01b038116811461169f57600080fd5b801515811461169f57600080fdfea26469706673582212209ae80078297b488112cf4c0eaef3af85f34156332aa7d60065ce1ebb90ab93c264736f6c634300060c0033";class Ss extends Ja{constructor(...e){e.length>1?super(...e):super(Cs,Ds,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Cs)}static connect(e,t){return new za(e,Cs,t)}}Ss.bytecode=Ds,Ss.abi=Cs;var Us=Object.freeze({__proto__:null,GovernanceProposalStateUpgrade__factory:Ss});const Vs=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"address",name:"_admin",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],Ls="0x60806040526040516108403803806108408339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508390508282816100f1826101c5565b8051156101a9576000826001600160a01b0316826040518082805190602001908083835b602083106101345780518252601f199092019160209182019101610115565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610194576040519150601f19603f3d011682016040523d82523d6000602084013e610199565b606091505b50509050806101a757600080fd5b505b506101b19050565b6101ba82610237565b505050505050610261565b6101d88161025b60201b6103b41760201c565b6102135760405162461bcd60e51b815260040180806020018281038252603681526020018061080a6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a806102706000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220f9da162f8a2d779a4f5f08577ac886bc4694791f749bd6ecc5d270427405583364736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class Fs extends Ja{constructor(...e){e.length>1?super(...e):super(Vs,Ls,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Vs)}static connect(e,t){return new za(e,Vs,t)}}Fs.bytecode=Ls,Fs.abi=Vs;const Gs=[{inputs:[{internalType:"address",name:"_torn",type:"address"},{internalType:"address",name:"_governance",type:"address"},{internalType:"address",name:"_registry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"instance",type:"address"},{indexed:!1,internalType:"uint256",name:"newFee",type:"uint256"}],name:"FeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint24",name:"newFee",type:"uint24"}],name:"UniswapTornPoolSwappingFeeChanged",type:"event"},{inputs:[],name:"PROTOCOL_FEE_DIVIDER",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"calculatePoolFee",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeDeviations",outputs:[{components:[{internalType:"address",name:"instance",type:"address"},{internalType:"int256",name:"deviation",type:"int256"}],internalType:"struct FeeManager.Deviation[]",name:"results",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],name:"instanceFee",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"",type:"address"}],name:"instanceFeeUpdated",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"instanceFeeWithUpdate",outputs:[{internalType:"uint160",name:"",type:"uint160"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"registry",outputs:[{internalType:"contract InstanceRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"newPeriod",type:"uint32"}],name:"setPeriodForTWAPOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"_uniswapTornPoolSwappingFee",type:"uint24"}],name:"setUniswapTornPoolSwappingFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"newLimit",type:"uint24"}],name:"setUpdateFeeTimeLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"torn",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"uniswapTimePeriod",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"uniswapTornPoolSwappingFee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"updateAllFees",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_instance",type:"address"}],name:"updateFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateFeeTimeLimit",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ITornadoInstance[]",name:"_instances",type:"address[]"}],name:"updateFees",outputs:[],stateMutability:"nonpayable",type:"function"}],js="0x60e06040523480156200001157600080fd5b5060405162001a8938038062001a8983398101604081905262000034916200005c565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c61196862000121600039806102ce52806104f6528061077752806109945250806104b7528061052e528061060f528061070852508061068f528061087e52506119686000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a0287520116100a2578063bcc5ee6411610071578063bcc5ee641461020f578063c51c229714610217578063d8718fb11461022a578063e1f121561461023f578063f522d6d61461025257610116565b8063a0287520146101d9578063adf898a4146101ec578063aeb3077a146101f4578063b19a2972146101fc57610116565b8063603a54fe116100e9578063603a54fe146101815780637b103999146101945780637ccd2f481461019c57806380679eb3146101b157806380eb7bf0146101c657610116565b806305e343641461011b5780632efbf384146101445780634bf0a542146101645780635aa6e67514610179575b600080fd5b61012e610129366004611650565b61025a565b60405161013b9190611896565b60405180910390f35b610157610152366004611650565b61026c565b60405161013b91906116dd565b61016c6102c9565b60405161013b9190611719565b6101576104b5565b61015761018f366004611650565b6104d9565b6101576104f4565b6101a4610518565b60405161013b9190611886565b6101c46101bf3660046116a0565b610523565b005b6101c46101d4366004611650565b61057e565b6101c46101e736600461166c565b610604565b61015761068d565b61012e6106b1565b6101c461020a3660046113ef565b6106b7565b6101a46106eb565b6101c461022536600461166c565b6106fd565b61023261075a565b60405161013b919061189f565b61015761024d366004611650565b61076d565b6101c461098f565b60026020526000908152604090205481565b600080546001600160a01b038316825260026020526040822054600160381b90910462ffffff16429190910311156102a7576102a78261057e565b506001600160a01b03808216600090815260016020526040902054165b919050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103619190810190611487565b9050805167ffffffffffffffff8111801561037b57600080fd5b506040519080825280602002602001820160405280156103b557816020015b6103a261131d565b81526020019060019003908161039a5790505b50915060005b81518110156104b05760006103e28383815181106103d557fe5b602002602001015161076d565b6001600160a01b031690506000811561045e576103e8826001600087878151811061040957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166103e8026001600160a01b03168161045957fe5b040390505b604051806040016040528085858151811061047557fe5b60200260200101516001600160a01b031681526020018281525085848151811061049b57fe5b602090810291909101015250506001016103bb565b505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461055857600080fd5b6000805463ffffffff90921663010000000266ffffffff00000019909216919091179055565b60006105898261076d565b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b03191695871695909517909455600290528290204290559051919250907f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a906105f89084906116dd565b60405180910390a25050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063957600080fd5b6000805462ffffff191662ffffff83811691909117918290556040517fbfe65cfc2359076c4468c9b895156c309c78f94fb09f6d2fc0463c4ca9a71ac292610682921690611886565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b61271081565b60005b81518110156106e7576106df8282815181106106d257fe5b602002602001015161057e565b6001016106ba565b5050565b600054600160381b900462ffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073257600080fd5b6000805462ffffff909216600160381b0269ffffff0000000000000019909216919091179055565b6000546301000000900463ffffffff1681565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443876040518263ffffffff1660e01b81526004016107c191906116dd565b60a06040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081191906115d5565b9450945050935093508063ffffffff16600014156108365760009450505050506102c4565b6001600160a01b03831615801561084b575083155b610855578261086b565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b6040805180820182526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081168252831660208083019190915282518084019093526000805462ffffff80821686528816928501929092529396506108e5929063ffffffff630100000090910416610a29565b905061098461271061097e8463ffffffff166109788561097e670de0b6b3a76400008e6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561094057600080fd5b505afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190611688565b90610a75565b90610ac1565b979650505050505050565b610a277f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310c13ac36040518163ffffffff1660e01b815260040160006040518083038186803b1580156109eb57600080fd5b505afa1580156109ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261020a9190810190611487565b565b60208084015190830151600091610a409184610b03565b84518451610a6391670de0b6b3a764000091610a5d919087610b03565b90610b2d565b81610a6a57fe5b0490505b9392505050565b600082610a8457506000610abb565b82820282848281610a9157fe5b0414610ab85760405162461bcd60e51b8152600401610aaf90611845565b60405180910390fd5b90505b92915050565b6000610ab883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b51565b6000610b258473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28585610b88565b949350505050565b6000821580610b4857505081810281838281610b4557fe5b04145b610abb57600080fd5b60008183610b725760405162461bcd60e51b8152600401610aaf91906117bb565b506000838581610b7e57fe5b0495945050505050565b600080846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc91906116bc565b60ff16600a0a90506001600160a01b038681169086161415610c28576001600160801b03169050610b25565b604051630b4c774160e11b8152610cc990610cc190731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610c6b908b908b908b906004016116f1565b60206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906113d3565b85610cda565b828888610e6f565b915050610b25565b50949350505050565b600063ffffffff8216610cff5760405162461bcd60e51b8152600401610aaf9061180e565b60408051600280825260608083018452926020830190803683370190505090508281600081518110610d2d57fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610d5657fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526060906001600160a01b0386169063883bdbfd90610d9a908590600401611771565b60006040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dee9190810190611513565b509050600081600081518110610e0057fe5b602002602001015182600181518110610e1557fe5b60200260200101510390508463ffffffff168160060b81610e3257fe5b05935060008160060b128015610e5957508463ffffffff168160060b81610e5557fe5b0715155b15610e6657600019909301925b50505092915050565b600080610e7b86610f59565b90506001600160801b036001600160a01b03821611610eea576001600160a01b0380821680029084811690861610610eca57610ec5600160c01b876001600160801b031683611272565b610ee2565b610ee281876001600160801b0316600160c01b611272565b925050610cd1565b6000610f096001600160a01b0383168068010000000000000000611272565b9050836001600160a01b0316856001600160a01b031610610f4157610f3c600160801b876001600160801b031683611272565b610984565b61098481876001600160801b0316600160801b611272565b60008060008360020b12610f70578260020b610f78565b8260020b6000035b9050620d89e8811115610f9d5760405162461bcd60e51b8152600401610aaf9061182a565b600060018216610fb157600160801b610fc3565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610ff7576ffff97272373d413259a46990580e213a0260801c5b6004821615611016576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611035576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611054576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611073576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611092576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156110b1576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156110d1576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156110f1576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611111576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611131576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611151576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611171576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611191576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156111b1576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156111d2576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156111f2576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611211576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561122e576b048a170391f7dc42444e8fa20260801c5b60008460020b131561124957806000198161124557fe5b0490505b64010000000081061561125d576001611260565b60005b60ff16602082901c0192505050919050565b60008080600019858709868602925082811090839003039050806112a8576000841161129d57600080fd5b508290049050610a6e565b8084116112b457600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604080518082019091526000808252602082015290565b600082601f830112611344578081fd5b8151611357611352826118d7565b6118b0565b81815291506020808301908481018184028601820187101561137857600080fd5b60005b848110156113a057815161138e816118f7565b8452928201929082019060010161137b565b505050505092915050565b8035610abb816118f7565b8051610abb816118f7565b8051600681900b8114610abb57600080fd5b6000602082840312156113e4578081fd5b8151610ab8816118f7565b60006020808385031215611401578182fd5b823567ffffffffffffffff811115611417578283fd5b8301601f81018513611427578283fd5b8035611435611352826118d7565b8181528381019083850185840285018601891015611451578687fd5b8694505b8385101561147b5761146789826113ab565b835260019490940193918501918501611455565b50979650505050505050565b60006020808385031215611499578182fd5b825167ffffffffffffffff8111156114af578283fd5b8301601f810185136114bf578283fd5b80516114cd611352826118d7565b81815283810190838501858402850186018910156114e9578687fd5b8694505b8385101561147b576114ff89826113b6565b8352600194909401939185019185016114ed565b60008060408385031215611525578081fd5b825167ffffffffffffffff8082111561153c578283fd5b818501915085601f83011261154f578283fd5b815161155d611352826118d7565b80828252602080830192508086018a82838702890101111561157d578788fd5b8796505b848710156115a7576115938b826113c1565b845260019690960195928101928101611581565b5088015190965093505050808211156115be578283fd5b506115cb85828601611334565b9150509250929050565b600080600080600060a086880312156115ec578081fd5b855180151581146115fb578182fd5b602087015190955061160c816118f7565b604087015190945060028110611620578182fd5b60608701519093506116318161190f565b608087015190925061164281611920565b809150509295509295909350565b600060208284031215611661578081fd5b8135610ab8816118f7565b60006020828403121561167d578081fd5b8135610ab88161190f565b600060208284031215611699578081fd5b5051919050565b6000602082840312156116b1578081fd5b8135610ab881611920565b6000602082840312156116cd578081fd5b815160ff81168114610ab8578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b602080825282518282018190526000919060409081850190868401855b8281101561176457815180516001600160a01b03168552860151868501529284019290850190600101611736565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117af57835163ffffffff168352928401929184019160010161178d565b50909695505050505050565b6000602080835283518082850152825b818110156117e7578581018301518582016040015282016117cb565b818111156117f85783604083870101525b50601f01601f1916929092016040019392505050565b602080825260029082015261042560f41b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b62ffffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60405181810167ffffffffffffffff811182821017156118cf57600080fd5b604052919050565b600067ffffffffffffffff8211156118ed578081fd5b5060209081020190565b6001600160a01b038116811461190c57600080fd5b50565b62ffffff8116811461190c57600080fd5b63ffffffff8116811461190c57600080fdfea26469706673582212205690be246e00d9bf30da35441a160026439ececfa962348f01e498d25f89f5d164736f6c634300060c0033";class Bs extends Ja{constructor(...e){e.length>1?super(...e):super(Gs,js,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Gs)}static connect(e,t){return new za(e,Gs,t)}}Bs.bytecode=js,Bs.abi=Gs;const Hs=[{inputs:[{internalType:"address",name:"_governance",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"GovernanceAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"compensateGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawToGovernance",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],zs="0x60a0604052348015600f57600080fd5b50604051610472380380610472833981016040819052602c91603c565b6001600160a01b0316608052606a565b600060208284031215604d57600080fd5b81516001600160a01b0381168114606357600080fd5b9392505050565b6080516103da6100986000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea264697066735822122073841dd5b5d8687d927814633a2fcb7944a306bb89a9b65a0aab4cc361c8312264736f6c63430008190033";class $s extends Ja{constructor(...e){e.length>1?super(...e):super(Hs,zs,e[0])}getDeployTransaction(e,t){return super.getDeployTransaction(e,t||{})}deploy(e,t){return super.deploy(e,t||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Hs)}static connect(e,t){return new za(e,Hs,t)}}$s.bytecode=zs,$s.abi=Hs;const Xs=[{inputs:[{internalType:"address",name:"_logic",type:"address"},{internalType:"bytes",name:"_data",type:"bytes"}],stateMutability:"payable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousAdmin",type:"address"},{indexed:!1,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"upgradeTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],Ws="0x608060405260405161083b38038061083b8339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052508391503090508282816100ed826101c0565b8051156101a5576000826001600160a01b0316826040518082805190602001908083835b602083106101305780518252601f199092019160209182019101610111565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610190576040519150601f19603f3d011682016040523d82523d6000602084013e610195565b606091505b50509050806101a357600080fd5b505b506101ad9050565b6101b682610232565b505050505061025c565b6101d38161025660201b6103b41760201c565b61020e5760405162461bcd60e51b81526004018080602001828103825260368152602001806108056036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b61059a8061026b6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996101a9565b6101a96101a46103ba565b6103df565b565b6101b3610403565b6001600160a01b0316336001600160a01b031614156101da576101d581610428565b6101e2565b6101e2610191565b50565b6101ed610403565b6001600160a01b0316336001600160a01b031614156102855761020f83610428565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd6103ba565b90506102cc565b6102cc610191565b90565b6102d7610403565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b815260040180806020018281038252603a8152602001806104f5603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610403565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d581610468565b6000610393610403565b6001600160a01b0316336001600160a01b031614156102c4576102bd610403565b3b151590565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156103fe573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6104318161048c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610495816103b4565b6104d05760405162461bcd60e51b815260040180806020018281038252603681526020018061052f6036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122014d721b179bdff3154685a6f1f0fecdd0d99b7cfc61b3f1a2f7a95c6f6d2c2ae64736f6c634300060c00335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374";class qs extends Ja{constructor(...e){e.length>1?super(...e):super(Xs,Ws,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Xs)}static connect(e,t){return new za(e,Xs,t)}}qs.bytecode=Ws,qs.abi=Xs;const Js=[{inputs:[{internalType:"address",name:"_governance",type:"address"},{internalType:"address",name:"_instanceRegistry",type:"address"},{internalType:"address",name:"_relayerRegistry",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes",name:"encryptedNote",type:"bytes"}],name:"EncryptedNote",type:"event"},{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address",name:"_spender",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"}],name:"approveExactToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes[]",name:"_encryptedNotes",type:"bytes[]"}],name:"backupNotes",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_tornado",type:"address"},{internalType:"bytes32",name:"_commitment",type:"bytes32"},{internalType:"bytes",name:"_encryptedNote",type:"bytes"}],name:"deposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"instanceRegistry",outputs:[{internalType:"contract InstanceRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"relayerRegistry",outputs:[{internalType:"contract RelayerRegistry",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address payable",name:"_to",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"}],name:"rescueTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ITornadoInstance",name:"_tornado",type:"address"},{internalType:"bytes",name:"_proof",type:"bytes"},{internalType:"bytes32",name:"_root",type:"bytes32"},{internalType:"bytes32",name:"_nullifierHash",type:"bytes32"},{internalType:"address payable",name:"_recipient",type:"address"},{internalType:"address payable",name:"_relayer",type:"address"},{internalType:"uint256",name:"_fee",type:"uint256"},{internalType:"uint256",name:"_refund",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"payable",type:"function"}],Ks="0x60e060405234801561001057600080fd5b5060405161128438038061128483398101604081905261002f91610056565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c0526100ba565b60008060006060848603121561006a578283fd5b8351610075816100a2565b6020850151909350610086816100a2565b6040850151909250610097816100a2565b809150509250925092565b6001600160a01b03811681146100b757600080fd5b50565b60805160601c60a05160601c60c05160601c61117c610108600039806103ff528061059e525080610164528061037a52806103a752806104c8525080610423528061068e525061117c6000f3fe60806040526004361061007b5760003560e01c80635aa6e6751161004e5780635aa6e675146100f55780636485ba2a1461010a578063b438689f1461012a578063cea9d26f1461013d5761007b565b806313d98d131461008057806336a3874b146100955780633ef10783146100c057806347ff589d146100e0575b600080fd5b61009361008e366004610c77565b61015d565b005b3480156100a157600080fd5b506100aa610378565b6040516100b79190610dd0565b60405180910390f35b3480156100cc57600080fd5b506100936100db366004610c37565b61039c565b3480156100ec57600080fd5b506100aa6103fd565b34801561010157600080fd5b506100aa610421565b34801561011657600080fd5b50610093610125366004610b26565b610445565b610093610138366004610cd1565b6104ae565b34801561014957600080fd5b50610093610158366004610c37565b610683565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663032bb443886040518263ffffffff1660e01b81526004016101ae9190610dd0565b60a06040518083038186803b1580156101c657600080fd5b505afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe9190610bb1565b5092955090935091506000905081600181111561021757fe5b141561023e5760405162461bcd60e51b815260040161023590610f00565b60405180910390fd5b82156102cc576102cc3330896001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561028257600080fd5b505afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610d72565b6001600160a01b038616929190610817565b60405163b214faa560e01b81526001600160a01b0388169063b214faa59034906102fa908a90600401610e5e565b6000604051808303818588803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b40088686604051610367929190610e67565b60405180910390a250505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103e45760405162461bcd60e51b815260040161023590611087565b6103f86001600160a01b0384168383610875565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b818110156103f857337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061047e57fe5b905060200281019061049091906110af565b60405161049e929190610e67565b60405180910390a2600101610448565b60405163032bb44360e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063032bb443906104fd908d90600401610dd0565b60a06040518083038186803b15801561051557600080fd5b505afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d9190610bb1565b509093506000925061055d915050565b81600181111561056957fe5b14156105875760405162461bcd60e51b815260040161023590610f00565b604051631168473b60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906345a11cec906105d790339088908f90600401610de4565b600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b50506040516310d056db60e11b81526001600160a01b038d1692506321a0adb691503490610645908d908d908d908d908d908d908d908d90600401610e7b565b6000604051808303818588803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106cb5760405162461bcd60e51b815260040161023590611087565b6001600160a01b0382166106f15760405162461bcd60e51b815260040161023590610f6e565b6001600160a01b03831661074d5747600061070c8284610938565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610745573d6000803e3d6000fd5b5050506103f8565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061077c903090600401610dd0565b60206040518083038186803b15801561079457600080fd5b505afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190610d72565b905060006107da8284610938565b9050600081116107fc5760405162461bcd60e51b815260040161023590610ffa565b6108106001600160a01b0386168583610950565b5050505050565b61086f846323b872dd60e01b85858560405160240161083893929190610e21565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261096f565b50505050565b8015806108fd5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906108ab9030908690600401610e07565b60206040518083038186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190610d72565b155b6109195760405162461bcd60e51b815260040161023590611031565b6103f88363095ea7b360e01b8484604051602401610838929190610e45565b60008183106109475781610949565b825b9392505050565b6103f88363a9059cbb60e01b8484604051602401610838929190610e45565b60606109c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109fe9092919063ffffffff16565b8051909150156103f857808060200190518101906109e29190610b95565b6103f85760405162461bcd60e51b815260040161023590610fb0565b6060610a0d8484600085610a15565b949350505050565b6060610a2085610ad9565b610a3c5760405162461bcd60e51b815260040161023590610f37565b60006060866001600160a01b03168587604051610a599190610db4565b60006040518083038185875af1925050503d8060008114610a96576040519150601f19603f3d011682016040523d82523d6000602084013e610a9b565b606091505b50915091508115610aaf579150610a0d9050565b805115610abf5780518082602001fd5b8360405162461bcd60e51b81526004016102359190610ecd565b3b151590565b60008083601f840112610af0578182fd5b50813567ffffffffffffffff811115610b07578182fd5b602083019150836020828501011115610b1f57600080fd5b9250929050565b60008060208385031215610b38578182fd5b823567ffffffffffffffff80821115610b4f578384fd5b818501915085601f830112610b62578384fd5b813581811115610b70578485fd5b8660208083028501011115610b83578485fd5b60209290920196919550909350505050565b600060208284031215610ba6578081fd5b815161094981611138565b600080600080600060a08688031215610bc8578081fd5b8551610bd381611138565b6020870151909550610be481611120565b604087015190945060028110610bf8578182fd5b606087015190935062ffffff81168114610c10578182fd5b608087015190925063ffffffff81168114610c29578182fd5b809150509295509295909350565b600080600060608486031215610c4b578283fd5b8335610c5681611120565b92506020840135610c6681611120565b929592945050506040919091013590565b60008060008060608587031215610c8c578384fd5b8435610c9781611120565b935060208501359250604085013567ffffffffffffffff811115610cb9578283fd5b610cc587828801610adf565b95989497509550505050565b60008060008060008060008060006101008a8c031215610cef578384fd5b8935610cfa81611120565b985060208a013567ffffffffffffffff811115610d15578485fd5b610d218c828d01610adf565b90995097505060408a0135955060608a0135945060808a0135610d4381611120565b935060a08a0135610d5381611120565b8093505060c08a0135915060e08a013590509295985092959850929598565b600060208284031215610d83578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251610dc68184602087016110f4565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b600060208252610a0d602083018486610d8a565b600060e08252610e8f60e083018a8c610d8a565b60208301989098525060408101959095526001600160a01b03938416606086015291909216608084015260a083019190915260c09091015292915050565b6000602082528251806020840152610eec8160408501602087016110f4565b601f01601f19169190910160400192915050565b6020808252601d908201527f54686520696e7374616e6365206973206e6f7420737570706f72746564000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526022908201527f544f524e3a2063616e206e6f742073656e6420746f207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601e908201527f544f524e3a20747279696e6720746f2073656e6420302062616c616e63650000604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000808335601e198436030181126110c5578283fd5b83018035915067ffffffffffffffff8211156110df578283fd5b602001915036819003821315610b1f57600080fd5b60005b8381101561110f5781810151838201526020016110f7565b8381111561086f5750506000910152565b6001600160a01b038116811461113557600080fd5b50565b801515811461113557600080fdfea264697066735822122004c0e245ab0b87d2916977a9650f299de2e526143487c917a63e4b88e54387e364736f6c634300060c0033";class Ys extends Ja{constructor(...e){e.length>1?super(...e):super(Js,Ks,e[0])}getDeployTransaction(e,t,a,n){return super.getDeployTransaction(e,t,a,n||{})}deploy(e,t,a,n){return super.deploy(e,t,a,n||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Js)}static connect(e,t){return new za(e,Js,t)}}Ys.bytecode=Ks,Ys.abi=Js;const Zs=[{inputs:[{internalType:"address",name:"_torn",type:"address"},{internalType:"address",name:"_governance",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawTorn",outputs:[],stateMutability:"nonpayable",type:"function"}],Qs="0x60c060405234801561001057600080fd5b506040516104aa3803806104aa8339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61042e61007c60003980606952508060d3525061042e6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806391fe357314610030575b600080fd5b61005c6004803603604081101561004657600080fd5b506001600160a01b03813516906020013561005e565b005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100c6576040805162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b604482015290519081900360640190fd5b6100fa6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836100fe565b5050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610150908490610155565b505050565b60606101aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166102069092919063ffffffff16565b805190915015610150578080602001905160208110156101c957600080fd5b50516101505760405162461bcd60e51b815260040180806020018281038252602a8152602001806103cf602a913960400191505060405180910390fd5b6060610215848460008561021d565b949350505050565b6060610228856103c8565b610279576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106102b85780518252601f199092019160209182019101610299565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461031a576040519150601f19603f3d011682016040523d82523d6000602084013e61031f565b606091505b509150915081156103335791506102159050565b8051156103435780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561038d578181015183820152602001610375565b50505050905090810190601f1680156103ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208fc65ae8299d617f6cff836a2822363849c7fb35b0b27a6f0aebfa62084005c764736f6c634300060c0033";class ec extends Ja{constructor(...e){e.length>1?super(...e):super(Zs,Qs,e[0])}getDeployTransaction(e,t,a){return super.getDeployTransaction(e,t,a||{})}deploy(e,t,a){return super.deploy(e,t,a||{})}connect(e){return super.connect(e)}static createInterface(){return new na(Zs)}static connect(e,t){return new za(e,Zs,t)}}ec.bytecode=Qs,ec.abi=Zs;var tc=Object.freeze({__proto__:null,AdminUpgradeableProxy__factory:Fs,FeeManager__factory:Bs,GasCompensationVault__factory:$s,LoopbackProxy__factory:qs,TornadoRouter__factory:Ys,TornadoVault__factory:ec,aggregator:af,deployerSol:cf,instanceRegistrySol:lf,interfaces:Qd,libraries:ni,relayerRegistrySol:_f,testnet:vd,torn:pd,tornadoStakingRewardsSol:kd,uniswap:Kd,v1:Hi,v2VaultAndGas:bs,v3RelayerRegistry:ps,v4ExploitPatch:Ns,v5ProposalStatePatch:Us}),ac=Object.freeze({__proto__:null,classic:Fb,governance:tc}),nc=Object.freeze({__proto__:null,contracts:ac,openzeppelin:Gn});return t})())); \ No newline at end of file diff --git a/src/contracts.ts b/src/contracts.ts new file mode 100644 index 0000000..d8b7ad2 --- /dev/null +++ b/src/contracts.ts @@ -0,0 +1 @@ +export * from '@tornado/contracts'; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 775c2ba..c4d5dec 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -122,5 +122,52 @@ module.exports = [ ...commonAlias, } }, - } + }, + { + mode: 'production', + module: { + rules: [esbuildLoader] + }, + entry: './src/contracts.ts', + output: { + filename: 'tornadoContracts.umd.js', + path: path.resolve(__dirname, './dist'), + library: 'TornadoContracts', + libraryTarget: 'umd' + }, + plugins: [ + new NodePolyfillPlugin(), + ], + resolve: { + extensions: ['.tsx', '.ts', '.js'], + alias: { + ...commonAlias, + } + }, + optimization: { + minimize: false, + } + }, + { + mode: 'production', + module: { + rules: [esbuildLoader] + }, + entry: './src/contracts.ts', + output: { + filename: 'tornadoContracts.umd.min.js', + path: path.resolve(__dirname, './dist'), + library: 'TornadoContracts', + libraryTarget: 'umd' + }, + plugins: [ + new NodePolyfillPlugin(), + ], + resolve: { + extensions: ['.tsx', '.ts', '.js'], + alias: { + ...commonAlias, + } + }, + }, ];