0 txs
0 calls
constructor
constructor(address _poolManager, address _addressToEtch)
functions
addressToEtch
viewfunction addressToEtch() view returns (address)
config
viewfunction config() view returns (address assetFactory, address ussi, address positionManager, address quoteToken, string chain, address swapRouter)
getBoundsForLiquidity
purefunction getBoundsForLiquidity(uint160 targetSqrtPriceX96, uint128 liquidity, uint256 amount0, uint256 amount1) pure returns (uint160 sqrtPriceAX96, uint160 sqrtPriceBX96)
getHookPermissions
purefunction getHookPermissions() pure returns (tuple)
poolInfo
viewfunction poolInfo(bytes32) view returns (bool hasAccruedFees, bool arbitrageEnabled, uint160 targetPriceMultiplier)
poolManager
viewfunction poolManager() view returns (address)
addLiquidity
nonpayablefunction addLiquidity(tuple params) returns (uint128 liquidity)
afterAddLiquidity
nonpayablefunction afterAddLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterDonate
nonpayablefunction afterDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
afterInitialize
nonpayablefunction afterInitialize(address sender, tuple key, uint160 sqrtPriceX96, int24 tick) returns (bytes4)
afterRemoveLiquidity
nonpayablefunction afterRemoveLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterSwap
nonpayablefunction afterSwap(address sender, tuple key, tuple params, int256 delta, bytes hookData) returns (bytes4, int128)
beforeAddLiquidity
nonpayablefunction beforeAddLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeDonate
nonpayablefunction beforeDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
beforeInitialize
nonpayablefunction beforeInitialize(address sender, tuple key, uint160 sqrtPriceX96) returns (bytes4)
beforeRemoveLiquidity
nonpayablefunction beforeRemoveLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeSwap
nonpayablefunction beforeSwap(address sender, tuple key, tuple params, bytes hookData) returns (bytes4, int256, uint24)
removeLiquidity
nonpayablefunction removeLiquidity(tuple key, address recipient)
setTargetPriceMultiplier
nonpayablefunction setTargetPriceMultiplier(tuple key, uint160 multiplier)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
updateConfig
nonpayablefunction updateConfig(tuple config_)
withdraw
nonpayablefunction withdraw(tuple key, uint256 usdcAmount, uint256 tokenAmount)
events
No events.
errors
HookNotImplemented
error HookNotImplemented()
NotPoolManager
error NotPoolManager()
creation bytecode
0x60a0604052346102e957604051601f61495d38819003918201601f19168301916001600160401b038311848410176102ed5780849260409485528339810103126102e9578051906001600160a01b03821682036102e957602001516001600160a01b038116918282036102e957608052600780546001600160a01b031916831790555f6101a061008d610301565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100eb610301565b600181528260208201528260408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152015261200081161515600114908115916102db575b81156102cd575b81156102bf575b81156102b1575b81156102a3575b8115610292575b8115610285575b8115610278575b811561026b575b811561025e575b8115610251575b8115610244575b8115610237575b506102255760405161463b9081610322823960805181818161012c015281816103110152818161043901528181610660015281816106d901528181610c9d01528181610d1f01528181611247015281816119d601528181611a9701528181611d5701528181611eb60152818161368e015281816138b6015261426d0152f35b630732d7b560e51b5f5260045260245ffd5b600191501615155f6101a6565b600281161515915061019f565b6004811615159150610198565b6008811615159150610191565b601081161515915061018a565b6020811615159150610183565b604081161515915061017c565b600160808216151514159150610175565b61010081161515915061016e565b610200811615159150610167565b610400811615159150610160565b610800811615159150610159565b611000811615159150610152565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102ed5760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081631379c5d114611f2a575080631cf7e4c914611f0457806321d0ee7014611e99578063259982e514611e995780633b63294614611d2d5780634de0d32b14611a43578063575e24b41461193a5780635a530641146112955780636c2bbe7e14610c7e5780636fe7e6eb146111e657806379502c551461114c5780638cebd942146110fd57806391dd734614610ceb5780639f063efc14610c7e578063ac3267ff146106ae578063b47b2fb1146105c4578063b6a8b0fa1461010e578063c4e833ce1461045d578063dc4c90d31461041a578063dc98354e146102ba578063e1182209146101a65763e1b4af691461010e575f80fd5b346101a25761011c3661288f565b5050505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a257600319360160c081126101a25760a0136101a2576101c76123ab565b6001600160a01b038116156102365760a06101e1366125a0565b205f52600660205260405f20907fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff000083549260101b1691161790555f80f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d756c7469706c696572206d7573742062652067726561746572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101a25760e06003193601126101a2576102d361237f565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101a257610306612395565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a5760405161034381612525565b6024356001600160a01b03811681036101a25781526044356001600160a01b03811681036101a257602082015260643562ffffff811681036101a25760408201526084358060020b81036101a257606082015260a435906001600160a01b03821682036101a257608081019190915260a090205f9081526006602090815260409182902080547fffffffffffffffffffff000000000000000000000000000000000000000000ff1663044c010017905590517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b346101a2575f6003193601126101a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101a2575f6003193601126101a2575f6101a060405161047d81612508565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516104e081612508565b60018152818101905f8252604081015f8152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b346101a2576101606003193601126101a2576105de61237f565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101a25760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c3601126101a2576101443567ffffffffffffffff81116101a2576106549036906004016123d5565b50506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101a25760e06003193601126101a2576106c8366125a0565b60a43560c4359160a08120926107507f0000000000000000000000000000000000000000000000000000000000000000946fffffffffffffffffffffffffffffffff610714828861378b565b1692610721841515612912565b6001600160a01b038551166001600160a01b03600354161495865f14610c775780965b15610c6f575095612c80565b5050506fffffffffffffffffffffffffffffffff6107868686610771612d32565b94620d89b495610780876130ce565b9161343f565b16918211610beb5761079d6107e692600f0b61299d565b604051916107aa836124a3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83526020830152600f0b60408201525f6060820152826134f3565b8060801d5f81600f0b135f14610be3576fffffffffffffffffffffffffffffffff16905b5f81600f0b135f14610bdb576fffffffffffffffffffffffffffffffff16935b60409361086c83865161083d8882612541565b600981527f72656365697665643000000000000000000000000000000000000000000000006020820152614035565b6108ab81865161087c8882612541565b600781527f616d6f756e7430000000000000000000000000000000000000000000000000006020820152614035565b6108ea8686516108bb8882612541565b600981527f72656365697665643100000000000000000000000000000000000000000000006020820152614035565b6109298286516108fa8882612541565b600781527f616d6f756e7431000000000000000000000000000000000000000000000000006020820152614035565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b2b578210610b58577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b2b578410610aa8576001600160a01b03602081845116930151169181610a2d575b5050826109ab57005b81517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810193909352602090839060449082905f905af1908115610a2457506109fa57005b610a1b9060203d602011610a1d575b610a138183612541565b8101906129cc565b005b503d610a09565b513d5f823e3d90fd5b83517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810192909252602090829060449082905f905af18015610a9e57610a7f575b806109a2565b610a979060203d602011610a1d57610a138183612541565b5083610a79565b83513d5f823e3d90fd5b608483517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f496e73756666696369656e7420746f6b656e31207769746864726177616c206160448201527f6d6f756e740000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b608484517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f496e73756666696369656e7420746f6b656e30207769746864726177616c206160448201527f6d6f756e740000000000000000000000000000000000000000000000000000006064820152fd5b505f9361082a565b505f9061080a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5769746864726177616c20616d6f756e74206578636565647320617661696c6160448201527f626c65206c6971756964697479000000000000000000000000000000000000006064820152fd5b905095612c80565b8196610744565b346101a257610c8c36612698565b505050505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101a25760206003193601126101a25760043567ffffffffffffffff81116101a257610d1c9036906004016123d5565b907f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0383169081330361109f5782019282840361014081126101a25760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40610da760405197610d93896124ec565b610d9c886123c1565b895260208801612627565b926020880193845201126101a25761012060405194610dc5866124a3565b610dd160c08201612592565b8652610ddf60e08201612592565b60208701526101008101356040870152013560608501528360408601528051946040602095815197610e11888a612541565b5f8952610e4a8351998a9384937f5a6bcfda00000000000000000000000000000000000000000000000000000000855260048501612a0e565b03815f885af1958615610fe9575f96611064575b506001600160a01b039051169051918560801d600f0b9286600f0b946001600160a01b0382511690878301926001600160a01b0384511696895f82125f1461103c5750610eaa90614009565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052938a90859060449082905f905af1918215610fe957866001600160a01b0389928d97610f1996611026575b505116614335565b5f871215610ff457610f2d610f7c97614009565b9586915f604051809a819582947f095ea7b300000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115610fe957610fa0956001600160a01b0392610fce57505116614335565b6040519181830152808252610fb6604083612541565b610fca60405192828493845283019061284c565b0390f35b610fe490883d8a11610a1d57610a138183612541565b610f11565b6040513d5f823e3d90fd5b50509392505f831361100a575b50505050610fa0565b6001600160a01b0361101d9451166142bd565b82808080611001565b610fe490893d8b11610a1d57610a138183612541565b93915086865f8313611052575b50505050610f19565b61105b936142bd565b89808686611049565b6001600160a01b039196506110909060403d604011611098575b6110888183612541565b8101906129f8565b509590610e5e565b503d61107e565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f6e6c79206d616e616765722063616e2063616c6c00000000000000000000006044820152fd5b346101a25760206003193601126101a2576004355f526006602052606060405f20546001600160a01b036040519160ff81161515835260ff8160081c161515602084015260101c166040820152f35b346101a2575f6003193601126101a2576001600160a01b035f54166001600160a01b0360015416906001600160a01b03600254166111dc6001600160a01b0360035416604051906111a7826111a08161278f565b0383612541565b6001600160a01b036005541693604051968796875260208701526040860152606085015260c0608085015260c084019061284c565b9060a08301520390f35b346101a2576101006003193601126101a25761120061237f565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101a257611233612395565b5061123c612582565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101a25760206003193601126101a25760043567ffffffffffffffff81116101a25780600401908036039060c06003198301126101a2576001600160a01b036112de846129e4565b1615158061191d575b80611900575b806118e3575b15611885576040519260208401602081526001600160a01b03611315836123c1565b16604086015260248301906001600160a01b03611331836123c1565b16606087015260448401926001600160a01b0361134d856123c1565b16608088015260648501916001600160a01b03611369846123c1565b1660a08901527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd608487013597018712156101a25785870197602460048a0135990167ffffffffffffffff8a116101a25789360381136101a257899060c0830160c0905281610100840152610120830137888101610120015f90528060a48801996113f38b6123c1565b6001600160a01b031660e0830152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810103610120017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101825261145c9082612541565b519020926040519360208501602081525f54956001600160a01b03871660408201526001546001600160a01b031660608201526002546001600160a01b031660808201526003546001600160a01b031660a082015260c0810160c090528061010081016114c89061278f565b6005546001600160a01b031660e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526115099082612541565b51902014611827576001600160a01b03948561155d61158c936115bb977fffffffffffffffffffffffff00000000000000000000000000000000000000008461155281996129e4565b169116175f556129e4565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556129e4565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002556129e4565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060035416176003550160048101359067ffffffffffffffff82116101a25781360360248201136101a25761161260045461273e565b601f8111611786575b505f90601f83116001146116b35791806001600160a01b039492611677945f926116a5575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176004556129e4565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060055416176005555f80f35b016024013590508580611640565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083169160045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f5b81811061176b5750926001928592611677966001600160a01b0398961061172f575b505050811b016004556129e4565b6024910101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055858080611721565b602484840101358555600190940193602092830192016116ff565b60045f52601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190602084106117ff575b601f0160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905b8181106117f4575061161b565b5f81556001016117e7565b7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91506117bd565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f636f6e666967206e6f74206368616e67650000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f636f6e66696720686173207a65726f20616464726573730000000000000000006044820152fd5b506001600160a01b036118f8606483016129e4565b1615156112f3565b506001600160a01b03611915604483016129e4565b1615156112ed565b506001600160a01b03611932602483016129e4565b1615156112e7565b346101a2576101406003193601126101a25761195461237f565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101a25760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c3601126101a2576101243567ffffffffffffffff81116101a2576119ca9036906004016123d5565b50506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a57606062ffffff611a0a61388e565b907fffffffff00000000000000000000000000000000000000000000000000000000604094939451941684526020840152166040820152f35b346101a25760c06003193601126101a257611a5d366125a0565b611a656123ab565b906001600160a01b03600754163303611ccf5760a0812091611b526fffffffffffffffffffffffffffffffff611abb857f000000000000000000000000000000000000000000000000000000000000000061378b565b16611ac7811515612912565b845f52600660205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8154169055611b09620d89b491600f0b61299d565b60405191611b16836124a3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83526020830152600f0b60408201525f6060820152836134f3565b916001600160a01b0360208183511692015116928060801d5f81600f0b135f14611cc7576fffffffffffffffffffffffffffffffff16905b5f81600f0b135f14611cbf576fffffffffffffffffffffffffffffffff16915b81611c44575b505080611bc8575b5f84815260066020526040812055005b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af18015610fe957611c25575b8080611bb8565b611c3d9060203d602011610a1d57610a138183612541565b5081611c1e565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810192909252602090829060449082905f905af18015610fe957611ca0575b80611bb0565b611cb89060203d602011610a1d57610a138183612541565b5084611c9a565b505f91611baa565b505f90611b8a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a65642063616c6c6572000000000000000000000000006044820152fd5b346101a2576101406003193601126101a2576020611d4a366125a0565b611e1f60a08220611d7b817f0000000000000000000000000000000000000000000000000000000000000000612c80565b50505090805f52600685526001600160a01b0360405f205460101c1615611e28575b506fffffffffffffffffffffffffffffffff611dd5611dba612d32565b620d89b493611dc8856130ce565b60c4359260a4359261343f565b169260405191611de4836124a3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83528583015283600f0b60408301525f60608301526134f3565b50604051908152f35b805f526006855260405f206303e800007fffffffffffffffffffff0000000000000000000000000000000000000000ffff8254161790555f526006845260405f206101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff82541617905584611d9d565b346101a257611ea736612403565b50505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361017a577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101a2575f6003193601126101a25760206001600160a01b0360075416604051908152f35b346101a25760806003193601126101a257611f4361237f565b602435916fffffffffffffffffffffffffffffffff83168093036101a257821561232357506001600160a01b031690811561229f57611f8481606435612a9f565b8083111561224157611f9e6001600160a01b039184612905565b1690611fc0611fad8483612b58565b91611fba85604435612b58565b90612905565b9081156121e3576001600160a01b0391611fd991612a9f565b169180821015612160578211156120dc576401000276a3811061207e5773fffd8963efd1fc6a506488495d951d5263988d2682116120205760409182519182526020820152f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f557070657220626f756e642061626f7665206d6178696d756d000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c6f77657220626f756e642062656c6f77206d696e696d756d000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f557070657220626f756e64206d7573742062652067726561746572207468616e60448201527f20746172676574000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c6f77657220626f756e64206d757374206265206c657373207468616e20746160448201527f72676574000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420757070657220626f756e642064656e6f6d696e61746f72006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206c6f77657220626f756e64000000000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f546172676574207072696365206d75737420626520677265617465722074686160448201527f6e203000000000000000000000000000000000000000000000000000000000006064820152fd5b807f08c379a0000000000000000000000000000000000000000000000000000000006064925260206004820152602060248201527f4c6971756964697479206d7573742062652067726561746572207468616e20306044820152fd5b600435906001600160a01b03821682036101a257565b60c435906001600160a01b03821682036101a257565b60a435906001600160a01b03821682036101a257565b35906001600160a01b03821682036101a257565b9181601f840112156101a25782359167ffffffffffffffff83116101a257602083818601950101116101a257565b906101606003198301126101a2576004356001600160a01b03811681036101a2579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126101a25760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126101a25760c491610144359067ffffffffffffffff82116101a25761249f916004016123d5565b9091565b6080810190811067ffffffffffffffff8211176124bf57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176124bf57604052565b6101c0810190811067ffffffffffffffff8211176124bf57604052565b60a0810190811067ffffffffffffffff8211176124bf57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176124bf57604052565b60e435908160020b82036101a257565b35908160020b82036101a257565b60031960a09101126101a257604051906125b982612525565b816004356001600160a01b03811681036101a25781526024356001600160a01b03811681036101a257602082015260443562ffffff811681036101a25760408201526064358060020b81036101a2576060820152608435906001600160a01b03821682036101a25760800152565b91908260a09103126101a25760405161263f81612525565b809261264a816123c1565b8252612658602082016123c1565b602083015260408101359062ffffff821682036101a2576080612693918193604086015261268860608201612592565b6060860152016123c1565b910152565b906101a06003198301126101a2576004356001600160a01b03811681036101a2579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126101a25760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126101a25760c49161014435916101643591610184359067ffffffffffffffff82116101a25761249f916004016123d5565b90600182811c92168015612785575b602083101461275857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161274d565b6004545f929161279e8261273e565b808252916001811690811561281257506001146127b9575050565b60045f9081529293509091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8383106127f8575060209250010190565b6001816020929493945483858701015201910191906127e7565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6101206003198201126101a2576004356001600160a01b03811681036101a2579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301126101a25760249160c4359160e43591610104359067ffffffffffffffff82116101a25761249f916004016123d5565b91908203918211610b2b57565b1561291957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e6f206c697175696469747920617661696c61626c6520666f7220776974686460448201527f726177616c0000000000000000000000000000000000000000000000000000006064820152fd5b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610b2b575f0390565b908160209103126101a2575180151581036101a25790565b356001600160a01b03811681036101a25790565b91908260409103126101a2576020825192015190565b612a8e612a9c9493612a6083610140956001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60a08501526020820151900b60c0840152604081015160e084015260600151610100830152565b81610120820152019061284c565b90565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000008409928280851094039380850394858411156101a25714612b51576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156101a25714612bc9576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818509938380861095039480860395868511156101a25714612c69579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b908160209103126101a2575190565b6020906024612c976001600160a01b0395946140c6565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa918215610fe9575f92612cfe575b506001600160a01b038216918060a01c60020b9162ffffff808360b81c169260d01c1690565b9091506020813d602011612d2a575b81612d1a60209383612541565b810103126101a25751905f612cd8565b3d9150612d0d565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c60ff1d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c810118620d89e881116130825763ffffffff90600181167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189060028116613066575b6004811661304a575b6008811661302e575b60108116613012575b60208116612ff6575b60408116612fda575b60808116612fbe575b6101008116612fa2575b6102008116612f86575b6104008116612f6a575b6108008116612f4e575b6110008116612f32575b6120008116612f16575b6140008116612efa575b6180008116612ede575b620100008116612ec2575b620200008116612ea7575b620400008116612e8c575b6208000016612e76575b0160201c90565b6b048a170391f7dc42444e8fa20260801c612e6f565b6d2216e584f5fa1ea926041bedfe9890910260801c90612e65565b906e5d6af8dedb81196699c329225ee6040260801c90612e5a565b906f09aa508b5b7a84e1c677de54f3e99bc90260801c90612e4f565b906f31be135f97d08fd981231505542fcfa60260801c90612e44565b906f70d869a156d2a1b890bb3df62baf32f70260801c90612e3a565b906fa9f746462d870fdf8a65dc1f90e061e50260801c90612e30565b906fd097f3bdfd2022b8845ad8f792aa58250260801c90612e26565b906fe7159475a2c29b7443b29c7fa6e889d90260801c90612e1c565b906ff3392b0822b70005940c7a398e4b70f30260801c90612e12565b906ff987a7253ac413176f2b074cf7815e540260801c90612e08565b906ffcbe86c7900a88aedcffc83b479aa3a40260801c90612dfe565b906ffe5dee046a99a2a811c461f1969c30530260801c90612df4565b906fff2ea16466c96a3843ec78b326b528610260801c90612deb565b906fff973b41fa98c081472e6896dfb254c00260801c90612de2565b906fffcb9843d60f6159c9db58835c9266440260801c90612dd9565b906fffe5caca7e10e4e61c3624eaa0941cd00260801c90612dd0565b906ffff2e50f5f656932ef12357cf3c7fdcc0260801c90612dc7565b906ffff97272373d413259a46990580e213a0260801c90612dbe565b7f8b86327a000000000000000000000000000000000000000000000000000000005f527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c60045260245ffd5b60020b908160ff1d82810118620d89e881116134135763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166133f7575b600481166133db575b600881166133bf575b601081166133a3575b60208116613387575b6040811661336b575b6080811661334f575b6101008116613333575b6102008116613317575b61040081166132fb575b61080081166132df575b61100081166132c3575b61200081166132a7575b614000811661328b575b618000811661326f575b620100008116613253575b620200008116613238575b62040000811661321d575b6208000016613204575b5f126131dd570160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04612e6f565b6b048a170391f7dc42444e8fa290910260801c906131d0565b6d2216e584f5fa1ea926041bedfe9890920260801c916131c6565b916e5d6af8dedb81196699c329225ee6040260801c916131bb565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916131b0565b916f31be135f97d08fd981231505542fcfa60260801c916131a5565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161319b565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91613191565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91613187565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161317d565b916ff3392b0822b70005940c7a398e4b70f30260801c91613173565b916ff987a7253ac413176f2b074cf7815e540260801c91613169565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161315f565b916ffe5dee046a99a2a811c461f1969c30530260801c91613155565b916fff2ea16466c96a3843ec78b326b528610260801c9161314c565b916fff973b41fa98c081472e6896dfb254c00260801c91613143565b916fffcb9843d60f6159c9db58835c9266440260801c9161313a565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91613131565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91613128565b916ffff97272373d413259a46990580e213a0260801c9161311f565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b936001600160a01b0383166001600160a01b038316116134eb575b6001600160a01b0385811695908316861161347d575050612a9c9350614142565b565b92909391946001600160a01b038216115f146134df5782916134a3916134a99594614142565b9361410c565b6fffffffffffffffffffffffffffffffff81166fffffffffffffffffffffffffffffffff8316105f146134da575090565b905090565b915050612a9c9261410c565b90919061345a565b5f6136819261363660405191613508836124ec565b338352602083019485526040830190815261360560409561355f875161352e8982612541565b600681527f73656e646572000000000000000000000000000000000000000000000000000060208201523390614192565b6135ac6001600160a01b0360808351015116885161357d8a82612541565b600d81527f61646472657373546f45746368000000000000000000000000000000000000006020820152614192565b6001600160a01b038751955116602086015251868501906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b518051600290810b60e08501526020820151900b610100840152604081015161012084015260600151610140830152565b610140815261364761016082612541565b8251809481927f48c8949100000000000000000000000000000000000000000000000000000000835260206004840152602483019061284c565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215613781575f926136d8575b5050602081519181808201938492010103126101a2575190565b9091503d805f833e6136ea8183612541565b8101906020818303126101a25780519067ffffffffffffffff82116101a2570181601f820112156101a25780519167ffffffffffffffff83116124bf5761375c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160194519485612541565b828452602083830101116101a257815f9260208093018386015e830101525f806136be565b50513d5f823e3d90fd5b90613795906140c6565b60038101809111610b2b576001600160a01b0391602460209260405194859384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa8015610fe9575f90613805575b6fffffffffffffffffffffffffffffffff91501690565b506020813d60201161383f575b8161381f60209383612541565b810103126101a2576fffffffffffffffffffffffffffffffff90516137ee565b3d9150613812565b90600f0b90600f0b01907fffffffffffffffffffffffffffffffff8000000000000000000000000000000082126f7fffffffffffffffffffffffffffffff831317610b2b57565b60a061389b366024612627565b20805f52600660205260ff60405f205460081c1615613fe0577f00000000000000000000000000000000000000000000000000000000000000006fffffffffffffffffffffffffffffffff6138f0838361378b565b16918215613fb5576139028183612c80565b505091805f5260066020526001600160a01b0360405f205460101c16155f14613f9557506001600160a01b038061044c925b16911692838202938285041482151715610b2b576001600160a01b036103e881950416926139bf61396b620d89b497600f0b61299d565b60405190613978826124a3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c8252886020830152600f0b60408201525f60608201526139ba366024612627565b614215565b90856139cc366024612627565b931692604051946139dc866124ec565b86108552613a9e60208601917f80000000000000000000000000000000000000000000000000000000000000008352613ac7604088019389855260209a8b9560405192613a298885612541565b5f84526040519b8c9788977ff3cd914c00000000000000000000000000000000000000000000000000000000895260048901906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b51151560a48701525160c4860152511660e484015261012061010484015261012483019061284c565b03815f875af1938415610fe9575f94613f65575b50603c9060401b600a0b057fffffffffffffffffffffffffffffffff8000000000000000000000000000000081121580613f4b575b156101a257600f0b678000000000000000680100000000000000008260401d600f0b9207600f0b1215613edf575b603c9060020b028060020b908103610b2b57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618811215613e71575060020b603c01627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610b2b57935b608435968760020b958689036101a25760020b9286840393627fffff85137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000861217610b2b5787017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008112627fffff821317610b2b57613d0f613d048a6fffffffffffffffffffffffffffffffff613d2696613d1995613d309a7f12519fb38f6e5af830d800923f1b4e756174c53a1a5fbd5384706bef6bc3ded75d7f334352b7316c99b5eb1590419dc5053fce159a8f4a83ecf755d907286540c5445d613cb6613c99612d32565b613ca2836130ce565b9a8960801d9b8c9286808d1694169261343f565b9060405193613cc4856124a3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c855284015216600f0b60408201525f60608201526139ba366024612627565b948860801d90613847565b8460801d90613847565b95600f0b90600f0b613847565b90600f0b90613847565b9260405190613d3f8683612541565b5f8252604051967f234266d70000000000000000000000000000000000000000000000000000000088526024356001600160a01b0381168091036101a25760048901526044356001600160a01b0381168091036101a257602489015260643562ffffff81168091036101a257604489015250606487015260a435926001600160a01b0384168094036101a25786613e0e8195936fffffffffffffffffffffffffffffffff8998815f96869860848801521660a48601521660c484015261010060e484015261010483019061284c565b03925af18015610fe957613e47575b50507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b81813d8311613e6a575b613e5b8183612541565b810103126101a257515f613e1d565b503d613e51565b620d89e88196929613613e85575b50613bb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc491955001627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610b2b57935f613e7f565b6001017fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff82131715613b3e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b506f7fffffffffffffffffffffffffffffff811315613b10565b9093508581813d8311613f8e575b613f7d8183612541565b810103126101a2575192603c613adb565b503d613f73565b5f5260066020526001600160a01b03808060405f205460101c1692613934565b5050507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b7f80000000000000000000000000000000000000000000000000000000000000008114610b2b575f0390565b61407d6140af5f939284936040519384927fb60e72cc00000000000000000000000000000000000000000000000000000000602085015260406024850152606484019061284c565b906044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612541565b6020815191016a636f6e736f6c652e6c6f675afa50565b6040516020810191825260066040820152604081526140e6606082612541565b51902090565b906001600160a01b03809116911603906001600160a01b038211610b2b57565b916001600160a01b03614130612a9c94614137948381168483161161413c576140ec565b1690612a9f565b61458a565b906140ec565b9161413791612a9c936001600160a01b0382166001600160a01b0382161161418c575b6141856001600160a01b039161417f838516848316612b58565b936140ec565b1691612bd2565b90614165565b6141e26140af5f939284936001600160a01b036040519485937f319af33300000000000000000000000000000000000000000000000000000000602086015260406024860152606485019061284c565b91166044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612541565b90604090815192614227602085612541565b5f8452614260835194859384937f5a6bcfda00000000000000000000000000000000000000000000000000000000855260048501612a0e565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610fe9575f916142a0575090565b6142b9915060403d604011611098576110888183612541565b5090565b9192906001600160a01b0316803b156101a2575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610fe95761432b5750565b5f61347b91612541565b9091906001600160a01b0316806143bb5750506001600160a01b03600460209260405194859384927f11da60b4000000000000000000000000000000000000000000000000000000008452165af18015610fe9576143905750565b6143b19060203d6020116143b4575b6143a98183612541565b810190612c71565b50565b503d61439f565b9092916001600160a01b031691823b156101a257604051937fa58411940000000000000000000000000000000000000000000000000000000085528260048601525a945f816024818389819bf18015610fe95761456e575b506001600160a01b0316843082146144ed576020929160649160405195869485937f23b872dd000000000000000000000000000000000000000000000000000000008552600485015288602485015260448401525af180156144e2579160209184936144c5575b505b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156144b957506143905750565b604051903d90823e3d90fd5b6144db90833d8511610a1d57610a138183612541565b505f61447a565b6040513d85823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481019390935291926020928492506044918391905af180156144e257916020918493614551575b5061447c565b61456790833d8511610a1d57610a138183612541565b505f61454b565b61457b9195505f90612541565b5f936001600160a01b03614413565b906fffffffffffffffffffffffffffffffff82169182036145a757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6c6971756964697479206f766572666c6f7700000000000000000000000000006044820152fdfea26469706673582212209ad7bb51de344a024d3d39d08867fb9ce935249c6ee500278ce76793d59da33e64736f6c634300081a0033000000000000000000000000c505a4758f390fe786b59629be97e1a8bdad98480000000000000000000000000000000000000000000000000000000000002080