92 txs
955 calls
constructor
constructor(address arcadiaFactory, address positionManager, address uniswapV3Factory)
functions
accountInfo
viewfunction accountInfo(address account) view returns (uint64 maxClaimFee, uint64 maxSwapFee, uint64 upperSqrtPriceDeviation, uint64 lowerSqrtPriceDeviation, uint64 minLiquidityRatio, address strategyHook)
accountToInitiator
viewfunction accountToInitiator(address owner, address account) view returns (address initiator)
ARCADIA_FACTORY
viewfunction ARCADIA_FACTORY() view returns (address)
isPoolBalanced
purefunction isPoolBalanced(uint256 sqrtPrice, tuple cache) pure returns (bool isBalanced)
isPositionManager
viewfunction isPositionManager(address positionManager) view returns (bool)
metaData
viewfunction metaData(address account) view returns (bytes data)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
executeAction
nonpayablefunction executeAction(bytes actionTargetData) returns (tuple depositData)
rebalance
nonpayablefunction rebalance(address account_, tuple initiatorParams)
setAccountInfo
nonpayablefunction setAccountInfo(address account_, address initiator, uint256 maxClaimFee, uint256 maxSwapFee, uint256 maxTolerance, uint256 minLiquidityRatio, address strategyHook, bytes strategyData, bytes metaData_)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
events
AccountInfoSet
event AccountInfoSet(address indexed account, address indexed initiator, address indexed strategyHook)
FeePaid
event FeePaid(address indexed account, address indexed receiver, address indexed asset, uint256 amount)
Rebalance
event Rebalance(address indexed account, address indexed positionManager, uint256 oldId, uint256 newId)
YieldClaimed
event YieldClaimed(address indexed account, address indexed asset, uint256 amount)
errors
InsufficientLiquidity
error InsufficientLiquidity()
InvalidInitiator
error InvalidInitiator()
InvalidPositionManager
error InvalidPositionManager()
InvalidRouter
error InvalidRouter()
InvalidValue
error InvalidValue()
NotAnAccount
error NotAnAccount()
OnlyAccount
error OnlyAccount()
OnlyAccountOwner
error OnlyAccountOwner()
OnlyPool
error OnlyPool()
Reentered
error Reentered()
UnbalancedPool
error UnbalancedPool()
creation bytecode
0x60e060405234801561000f575f5ffd5b5060405161543438038061543483398101604081905261002e91610066565b6001600160a01b0392831660805290821660a0521660c0526100a6565b80516001600160a01b0381168114610061575f5ffd5b919050565b5f5f5f60608486031215610078575f5ffd5b6100818461004b565b925061008f6020850161004b565b915061009d6040850161004b565b90509250925092565b60805160a05160c05161531861011c5f395f81816111e501526118db01525f818160e30152818161129b015281816117ca01528181611b4101528181611dde01528181611e9501528181611f8001528181612275015281816122d1015261230d01525f81816101c7015261066101526153185ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80632e7df0391161006e5780632e7df039146101af5780638cffa277146101c2578063a129568d146101e9578063a7310b5814610209578063a89d6dd4146102b4578063fa461e33146102c7575f5ffd5b80630686ddd9146100aa5780630a73e391146100d35780631204f52514610123578063150b7a021461016e5780632cacb5fa1461019a575b5f5ffd5b6100bd6100b836600461400b565b6102da565b6040516100ca9190614054565b60405180910390f35b6101136100e136600461400b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b60405190151581526020016100ca565b610156610131366004614066565b600360209081525f92835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100ca565b61018161017c3660046140e1565b610371565b6040516001600160e01b031990911681526020016100ca565b6101ad6101a836600461414e565b610383565b005b6101ad6101bd366004614196565b610619565b6101567f000000000000000000000000000000000000000000000000000000000000000081565b6101fc6101f736600461425f565b610af4565b6040516100ca9190614371565b61026961021736600461400b565b600160208190525f918252604090912080549101546001600160401b0380831692600160401b808204831693600160801b8304841693600160c01b9093048316928116916001600160a01b0391041686565b604080516001600160401b039788168152958716602087015293861693850193909352908416606084015290921660808201526001600160a01b0390911660a082015260c0016100ca565b6101136102c23660046143f0565b6111ad565b6101ad6102d5366004614480565b6111c9565b60026020525f9081526040902080546102f2906144ce565b80601f016020809104026020016040519081016040528092919081815260200182805461031e906144ce565b80156103695780601f1061034057610100808354040283529160200191610369565b820191905f5260205f20905b81548152906001019060200180831161034c57829003601f168201915b505050505081565b630a85bd0160e11b5b95945050505050565b5f546001600160a01b0316156103ac5760405163b5dfd9e560e01b815260040160405180910390fd5b336001600160a01b031660035f846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b81526004016020604051808303815f875af11580156103f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041a9190614506565b6001600160a01b03908116825260208083019390935260409182015f90812087831682529093529120541614610463576040516317fb43e560e31b815260040160405180910390fd5b6104736100e1602083018361400b565b6104905760405163ed5f09f160e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03841617815580806104bc6060850160408601614540565b6001600160801b031611806104e857505f6104dd6080850160608601614540565b6001600160801b0316115b156105215761051b6104fd602085018561400b565b61050d604086016020870161457a565b6001600160601b0316611279565b90925090505b5f6105a6610532602086018661400b565b610542604087016020880161457a565b6001600160601b0316858561055d60608a0160408b01614540565b6001600160801b031661057660808b0160608c01614540565b6001600160801b0316338b604051602001610592929190614614565b60405160208183030381529060405261131b565b60405162b9252f60e41b81529091506001600160a01b03861690630b9252f0906105d69030908590600401614721565b5f604051808303815f87803b1580156105ed575f5ffd5b505af11580156105ff573d5f5f3e3d5ffd5b50505f80546001600160a01b031916905550505050505050565b5f546001600160a01b0316156106425760405163b5dfd9e560e01b815260040160405180910390fd5b604051630972932760e21b81526001600160a01b038c811660048301527f000000000000000000000000000000000000000000000000000000000000000016906325ca4c9c90602401602060405180830381865afa1580156106a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca9190614753565b6106e757604051630ea8370b60e41b815260040160405180910390fd5b5f8b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610725573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190614506565b9050336001600160a01b03821614610774576040516312272fd360e11b815260040160405180910390fd5b670de0b6b3a76400008a11806107915750670de0b6b3a764000089115b806107a35750670de0b6b3a764000088115b806107b55750670de0b6b3a764000087115b156107d357604051632a9ffab760e21b815260040160405180910390fd5b8a60035f836001600160a01b03166001600160a01b031681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040518060c001604052808b6001600160401b031681526020018a6001600160401b031681526020016108928a670de0b6b3a764000061087b9190614780565b61088d90670de0b6b3a7640000614793565b611697565b6001600160401b031681526020016108b561087b8b670de0b6b3a76400006147aa565b6001600160401b03168152602001886001600160401b03168152602001876001600160a01b031681525060015f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a8154816001600160401b0302191690836001600160401b031602179055506020820151815f0160086101000a8154816001600160401b0302191690836001600160401b031602179055506040820151815f0160106101000a8154816001600160401b0302191690836001600160401b031602179055506060820151815f0160186101000a8154816001600160401b0302191690836001600160401b031602179055506080820151816001015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160010160086101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050828260025f8f6001600160a01b03166001600160a01b031681526020019081526020015f209182610a3e929190614808565b50604051632f9c799b60e21b81526001600160a01b0387169063be71e66c90610a6f908f90899089906004016148c1565b5f604051808303815f87803b158015610a86575f5ffd5b505af1158015610a98573d5f5f3e3d5ffd5b50505050856001600160a01b03168b6001600160a01b03168d6001600160a01b03167f343ef5cc595144359c9db657cd7fcef6ecc88d06d17651a8292e553ab73b1c7060405160405180910390a4505050505050505050505050565b610b1f6040518060800160405280606081526020016060815260200160608152602001606081525090565b5f546001600160a01b03163314610b495760405163f3f6425d60e01b815260040160405180910390fd5b335f908152600160208181526040808420815160c08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b8204811694830194909452600160c01b9004831660608201529301549081166080840152046001600160a01b031660a08201529080610bc88587018761495d565b8051855160a0830151939550919350916001600160401b0391821691161180610c0a575083602001516001600160401b03168260c001516001600160401b0316115b15610c2857604051632a9ffab760e21b815260040160405180910390fd5b5f610c408284602001516001600160601b031661173b565b90505f816101200151516001600160401b03811115610c6157610c61614383565b604051908082528060200260200182016040528015610c8a578160200160208202803683370190505b50905083604001516001600160801b0316815f81518110610cad57610cad614a79565b60200260200101818152505083606001516001600160801b031681600181518110610cda57610cda614a79565b6020026020010181815250505f81516001600160401b03811115610d0057610d00614383565b604051908082528060200260200182016040528015610d29578160200160208202803683370190505b5090508660a001516001600160a01b031663c92d78a33386868961010001516040518563ffffffff1660e01b8152600401610d679493929190614b54565b6040805180830381865afa158015610d81573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da59190614ba2565b600290810b60a08601520b60c084015260808501515f90610dc99089908690611a36565b9050610dda846101000151826111ad565b610df757604051633a8bf65960e01b815260040160405180910390fd5b610e11838387878a60a001516001600160401b0316611afd565b610e1c838686611d6d565b5f610eeb89608001516001600160401b0316866040015162ffffff168960c001516001600160401b031688610100015186604001516001600160a01b031687606001516001600160a01b0316895f81518110610e7a57610e7a614a79565b60200260200101518b5f81518110610e9457610e94614a79565b6020026020010151610ea691906147aa565b8a600181518110610eb957610eb9614a79565b60200260200101518c600181518110610ed457610ed4614a79565b6020026020010151610ee691906147aa565b611fe6565b805190915015610f28578060200151835f81518110610f0c57610f0c614a79565b60200260200101818151610f209190614780565b905250610f58565b806020015183600181518110610f4057610f40614a79565b60200260200101818151610f549190614780565b9052505b610f668484898885876120f2565b610f6f856121ff565b6001600160a01b03166101008601819052610f8a90836111ad565b610fa757604051633a8bf65960e01b815260040160405180910390fd5b5f5f825f015161100f57845f81518110610fc357610fc3614a79565b6020026020010151865f81518110610fdd57610fdd614a79565b6020026020010151610fef91906147aa565b8660018151811061100257611002614a79565b6020026020010151611069565b855f8151811061102157611021614a79565b60200260200101518560018151811061103c5761103c614a79565b60200260200101518760018151811061105757611057614a79565b602002602001015161106991906147aa565b9150915061107a8689898585612270565b82604001518760e001516001600160801b031610156110ac5760405163bb55fd2760e01b815260040160405180910390fd5b60a08b015160208a01516101008b015160405163bd6884a360e01b81526001600160a01b039093169263bd6884a3926110ee9233928e92918e91600401614bd3565b5f604051808303815f87803b158015611105575f5ffd5b505af1158015611117573d5f5f3e3d5ffd5b505050505f6111298b88888c8c6124d0565b90506111418989602001518a61012001518a85612776565b6020808c01518a820151604080516001600160601b03909316835292820152919e506001600160a01b038b169133917ffea7a9a6e25cd0bbbfa80ce0c7646e61ee5e0551b3fdaaff0642e6f6adcc72e2910160405180910390a350505050505050505050505092915050565b80515f90831180156111c25750816020015183105b9392505050565b5f80806111d884860186614c3b565b919450925090503361120c7f0000000000000000000000000000000000000000000000000000000000000000858585612a62565b6001600160a01b03161461123357604051634b60273560e01b815260040160405180910390fd5b5f8713156112545761124f6001600160a01b0384163389612b49565b611270565b5f861315611270576112706001600160a01b0383163388612b49565b50505050505050565b60405163133f757160e31b8152600481018290525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906399fbab889060240161018060405180830381865afa1580156112e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113059190614c8e565b50979e969d50959b505050505050505050505050565b606060018415611333578061132f81614d64565b9150505b8315611347578061134381614d64565b9150505b5f816001600160401b0381111561136057611360614383565b604051908082528060200260200182016040528015611389578160200160208202803683370190505b5090505f826001600160401b038111156113a5576113a5614383565b6040519080825280602002602001820160405280156113ce578160200160208202803683370190505b5090505f836001600160401b038111156113ea576113ea614383565b604051908082528060200260200182016040528015611413578160200160208202803683370190505b5090505f846001600160401b0381111561142f5761142f614383565b604051908082528060200260200182016040528015611458578160200160208202803683370190505b5090508c845f8151811061146e5761146e614a79565b60200260200101906001600160a01b031690816001600160a01b0316815250508b835f815181106114a1576114a1614a79565b6020026020010181815250506001825f815181106114c1576114c1614a79565b6020026020010181815250506002815f815181106114e1576114e1614a79565b60209081029190910101526001891561156c578b8560018151811061150857611508614a79565b60200260200101906001600160a01b031690816001600160a01b031681525050898360018151811061153c5761153c614a79565b60200260200101818152505060018260018151811061155d5761155d614a79565b60209081029190910101525060025b88156115e5578a85828151811061158557611585614a79565b60200260200101906001600160a01b031690816001600160a01b031681525050888382815181106115b8576115b8614a79565b60200260200101818152505060018282815181106115d8576115d8614a79565b6020026020010181815250505b5f604051806080016040528087815260200186815260200185815260200184815250905060606116366040518060800160405280606081526020016060815260200160608152602001606081525090565b6116586040518060600160405280606081526020015f81526020015f81525090565b838282858f604051602001611671959493929190614d7c565b6040516020818303038152906040529a5050505050505050505050979650505050505050565b60b581600160881b81106116b05760409190911b9060801c5b690100000000000000000081106116cc5760209190911b9060401c5b6501000000000081106116e45760109190911b9060201c5b630100000081106116fa5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b60408051610140810182525f808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052610100840192909252610120830182905283516002808252928101855292939083019080368337019050506101208201526020810182905260405163133f757160e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611818573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183c9190614c8e565b5050506101208a0151805197995095975093959294919350915f9061186357611863614a79565b6020026020010187610120015160018151811061188257611882614a79565b6001600160801b0390931660e08a0152600293840b60a08a01529390920b60c088015262ffffff90931660408701526001600160a01b039384166020938402929092019092015291169052610120810151805161193b917f0000000000000000000000000000000000000000000000000000000000000000915f9061190957611909614a79565b602002602001015183610120015160018151811061192957611929614a79565b60200260200101518460400151612a62565b6001600160a01b031680825260408051633850c7bd60e01b81529051633850c7bd9160048082019260e0929091908290030181865afa158015611980573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a49190614e4c565b5050505060029190910b6080840152506001600160a01b039081166101008301528151604080516334324e9f60e21b81529051919092169163d0c93a7c9160048083019260209291908290030181865afa158015611a04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a289190614ed6565b60020b606082015292915050565b604080516080810182525f8082526020820181905291810182905260608101919091526040518060800160405280611a8e86606001516001600160401b0316670de0b6b3a764000086612bd19092919063ffffffff16565b8152602001611abd86604001516001600160401b0316670de0b6b3a764000086612bd19092919063ffffffff16565b8152602001611acf8560c00151612bec565b6001600160a01b03168152602001611aea8560a00151612bec565b6001600160a01b03169052949350505050565b60408051608081018252602080850151825230908201526001600160801b038183018190526060820152905163fc6f786560e01b81525f9182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611b759190600401614eef565b60408051808303815f875af1158015611b90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb49190614f32565b9150915081875f81518110611bcb57611bcb614a79565b60200260200101818151611bdf9190614780565b9052508651819088906001908110611bf957611bf9614a79565b60200260200101818151611c0d9190614780565b905250611c238284670de0b6b3a7640000612bd1565b865f81518110611c3557611c35614a79565b60200260200101818151611c499190614780565b905250611c5f8184670de0b6b3a7640000612bd1565b86600181518110611c7257611c72614a79565b60200260200101818151611c869190614780565b90525061012084015180515f90611c9f57611c9f614a79565b60200260200101516001600160a01b0316336001600160a01b03167ff3055bc8d92d9c8d2f12b45d112dd345cd2cfd17292b8d65c5642ac6f912dfd784604051611ceb91815260200190565b60405180910390a3836101200151600181518110611d0b57611d0b614a79565b60200260200101516001600160a01b0316336001600160a01b03167ff3055bc8d92d9c8d2f12b45d112dd345cd2cfd17292b8d65c5642ac6f912dfd783604051611d5791815260200190565b60405180910390a350505050505050565b505050565b6040805160a081018252602083810151825260e08401516001600160801b039081169183019182525f8385018181526060850191825242608086019081529551630624e65f60e11b8152945160048601529251909116602484015290516044830152516064820152905160848201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c49ccbe9060a40160408051808303815f875af1158015611e2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4f9190614f32565b505060408051608081018252602080840151825230908201526001600160801b038183018190526060820152905163fc6f786560e01b81525f9182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611ec99190600401614eef565b60408051808303815f875af1158015611ee4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f089190614f32565b9150915081855f81518110611f1f57611f1f614a79565b60200260200101818151611f339190614780565b9052508451819086906001908110611f4d57611f4d614a79565b60200260200101818151611f619190614780565b9052506020830151604051630852cd8d60e31b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b158015611fc9575f5ffd5b505af1158015611fdb573d5f5f3e3d5ffd5b505050505050505050565b6120156040518060a001604052805f151581526020015f81526020015f81526020015f81526020015f81525090565b64e8d4a51000880287015f80806120308a8a8a8a8a89612ea4565b9250925092505f5f61207a8c8c8c886120525761204d878e614780565b61205c565b61205c888e6147aa565b896120705761206b898e6147aa565b612fc5565b61206b888e614780565b6001600160801b031690506120a28f670de0b6b3a764000083612bd19092919063ffffffff16565b91505f90506120ba848e670de0b6b3a7640000612bd1565b6040805160a08101825296151587526020870182905286019290925250909103606083015260808201529a9950505050505050505050565b6060820151156121f7578360e00151515f036121e4575f6121c0835f0151856040015162ffffff1661212387613084565b876101000151866040015187606001518c5f8151811061214557612145614a79565b60200260200101518e5f8151811061215f5761215f614a79565b602002602001015161217191906147aa565b8d60018151811061218457612184614a79565b60200260200101518f60018151811061219f5761219f614a79565b60200260200101516121b191906147aa565b8b606001518c608001516130ee565b9050805f036121cf57506121f7565b6121de8785855f0151846131b7565b506121f7565b6121f78684845f01518760e001516133fa565b505050505050565b5f815f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561223f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122639190614e4c565b5094979650505050505050565b6122cc7f0000000000000000000000000000000000000000000000000000000000000000838561012001515f815181106122ac576122ac614a79565b60200260200101516001600160a01b031661368e9092919063ffffffff16565b6123097f0000000000000000000000000000000000000000000000000000000000000000828561012001516001815181106122ac576122ac614a79565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663883164566040518061016001604052808861012001515f8151811061235d5761235d614a79565b60200260200101516001600160a01b0316815260200188610120015160018151811061238b5761238b614a79565b60200260200101516001600160a01b03168152602001886040015162ffffff1681526020018860c0015160020b81526020018860a0015160020b81526020018781526020018681526020015f81526020015f8152602001306001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016124119190614f54565b6080604051808303815f875af115801561242d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124519190615018565b6001600160801b0390921660e0890152602088019290925288519193509150829088905f9061248257612482614a79565b6020026020010181815161249691906147aa565b90525086518190889060019081106124b0576124b0614a79565b602002602001018181516124c491906147aa565b90525050505050505050565b602081015160405163095ea7b360e01b815233600482015260248101919091525f906001600160a01b0384169063095ea7b3906044015f604051808303815f87803b15801561251d575f5ffd5b505af115801561252f573d5f5f3e3d5ffd5b505050505f600191505f5b865181101561276b57836101200151818151811061255a5761255a614a79565b6020026020010151915085818151811061257657612576614a79565b602002602001015187828151811061259057612590614a79565b60200260200101511115612643578581815181106125b0576125b0614a79565b60200260200101518782815181106125ca576125ca614a79565b60200260200101516125dc91906147aa565b8782815181106125ee576125ee614a79565b6020026020010181815250506126313388838151811061261057612610614a79565b6020026020010151846001600160a01b031661368e9092919063ffffffff16565b8261263b81614d64565b93505061269b565b86818151811061265557612655614a79565b602002602001015186828151811061266f5761266f614a79565b6020026020010181815250505f87828151811061268e5761268e614a79565b6020026020010181815250505b5f8682815181106126ae576126ae614a79565b602002602001015111156126f3576126f3888783815181106126d2576126d2614a79565b6020026020010151846001600160a01b0316612b499092919063ffffffff16565b816001600160a01b0316886001600160a01b0316336001600160a01b03167f1b37fcc57f4b6029ca7b3a70af0104811f67c72fe73e8043575f03a01e05663189858151811061274457612744614a79565b602002602001015160405161275b91815260200190565b60405180910390a460010161253a565b505095945050505050565b6127a16040518060800160405280606081526020016060815260200160608152602001606081525090565b5f826001600160401b038111156127ba576127ba614383565b6040519080825280602002602001820160405280156127e3578160200160208202803683370190505b5090505f836001600160401b038111156127ff576127ff614383565b604051908082528060200260200182016040528015612828578160200160208202803683370190505b5090505f846001600160401b0381111561284457612844614383565b60405190808252806020026020018201604052801561286d578160200160208202803683370190505b5090505f856001600160401b0381111561288957612889614383565b6040519080825280602002602001820160405280156128b2578160200160208202803683370190505b50905089845f815181106128c8576128c8614a79565b60200260200101906001600160a01b031690816001600160a01b03168152505088835f815181106128fb576128fb614a79565b6020026020010181815250506001825f8151811061291b5761291b614a79565b6020026020010181815250506002815f8151811061293b5761293b614a79565b6020026020010181815250506001861115612a3a5760015f5b8851811015612a37575f89828151811061297057612970614a79565b60200260200101511115612a2f5789818151811061299057612990614a79565b60200260200101518683815181106129aa576129aa614a79565b60200260200101906001600160a01b031690816001600160a01b0316815250508881815181106129dc576129dc614a79565b60200260200101518483815181106129f6576129f6614a79565b6020026020010181815250506001838381518110612a1657612a16614a79565b602090810291909101015281612a2b81614d64565b9250505b600101612954565b50505b6040805160808101825294855260208501939093529183015260608201529695505050505050565b5f826001600160a01b0316846001600160a01b031610612a80575f5ffd5b604080516001600160a01b03808716602083015285169181019190915262ffffff83166060820152859060800160408051601f19818403018152908290528051602091820120612b28939290917fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5491016001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080612bcb5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b5f825f190484118302158202612be5575f5ffd5b5091020490565b60020b5f60ff82901d80830118620d89e8811115612c1557612c156345c3193d60e11b84613703565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612c51576ffff97272373d413259a46990580e213a0260801c5b6004821615612c70576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612c8f576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612cae576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ccd576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612cec576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612d0b576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612d2b576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612d4b576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612d6b576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612d8b576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612dab576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612dcb576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612deb576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612e0b576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612e2c576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612e4c576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612e6b576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612e88576b048a170391f7dc42444e8fa20260801c5b5f841315612e94575f19045b63ffffffff0160201c9392505050565b5f5f5f868910612ec95760019250859150612ec28960018887613712565b9050612fb9565b878911612edf57849150612ec2895f8787613712565b5f612eeb8a8a8a61376e565b90505f612efa8b60018a6137b6565b90505f612f078289614780565b90505f612f1d89670de0b6b3a764000084612bd1565b905083811015612f7257600196505f612f42858a670de0b6b3a7640000819003612bd1565b670de0b6b3a7640000019050612f5b8286038483612bd1565b955050612f6b8d6001878b61380a565b9550612fb4565b5f965086612f89858a670de0b6b3a7640000612bd1565b670de0b6b3a7640000039050612fa28583038483612bd1565b965050612fb18d5f888b613712565b94505b505050505b96509650969350505050565b5f836001600160a01b0316856001600160a01b03161115612fe4579293925b846001600160a01b0316866001600160a01b0316116130175761301061300b868686613864565b6138bd565b905061037a565b836001600160a01b0316866001600160a01b0316101561306c575f61303d878686613864565b90505f61304b8789866138d7565b905061306381831061305d57816138bd565b826138bd565b9250505061037a565b61307a61300b8686856138d7565b9695505050505050565b5f815f01516001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e89190615054565b92915050565b5f8080805b60648110156131a25761310a8e8e8e8e8a8a613910565b9250886001600160a01b0316836001600160a01b03161061313b576131318d8d8d8b6139b9565b93505050506131a9565b896001600160a01b0316836001600160a01b031611613160576131318d8d8d8a6139f5565b61316d8e8e8e8e87613a26565b90965094506131828e8b8b8b8b8b8b8a613aa0565b90975095509150811561319a578493505050506131a9565b6001016130f3565b5083925050505b9a9950505050505050505050565b82515f9081906001600160a01b031663128acb0830866131d68761506f565b886131ff576131fa600173fffd8963efd1fc6a506488495d951d5263988d26615089565b61320f565b61320f6401000276a360016150a8565b8a61012001515f8151811061322657613226614a79565b60200260200101518b610120015160018151811061324657613246614a79565b60200260200101518c60400151604051602001613289939291906001600160a01b03938416815291909216602082015262ffffff91909116604082015260600190565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016132b89594939291906150c7565b60408051808303815f875af11580156132d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f79190614f32565b9150915083613332576133098261506f565b865f8151811061331b5761331b614a79565b602002602001015161332d9190614780565b613357565b81865f8151811061334557613345614a79565b602002602001015161335791906147aa565b865f8151811061336957613369614a79565b602002602001018181525050836133a557808660018151811061338e5761338e614a79565b60200260200101516133a091906147aa565b6133d3565b6133ae8161506f565b866001815181106133c1576133c1614a79565b60200260200101516133d39190614780565b866001815181106133e6576133e6614a79565b602002602001018181525050505050505050565b5f5f5f838060200190518101906134119190615101565b335f90815260016020819052604090912001549295509093509150600160401b90046001600160a01b039081169084160361345f5760405163466d7fef60e01b815260040160405180910390fd5b6134b583838761348e5788610120015160018151811061348157613481614a79565b60200260200101516134a5565b8861012001515f815181106122ac576122ac614a79565b6001600160a01b0316919061368e565b5f5f846001600160a01b0316836040516134cf9190615191565b5f604051808303815f865af19150503d805f8114613508576040519150601f19603f3d011682016040523d82523d5f602084013e61350d565b606091505b50915091508181906135325760405162461bcd60e51b8152600401612bc29190614054565b508761012001515f8151811061354a5761354a614a79565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613598573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bc91906151a7565b895f815181106135ce576135ce614a79565b6020026020010181815250508761012001516001815181106135f2576135f2614a79565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613640573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366491906151a7565b8960018151811061367757613677614a79565b602002602001018181525050505050505050505050565b816014528060345263095ea7b360601b5f5260205f604460105f875af13d1560015f511417166136fa575f60345263095ea7b360601b5f525f38604460105f875af1508060345260205f604460105f875af13d1560015f511417166136fa57633e3f8f735f526004601cfd5b5f603452505050565b815f528060020b60045260245ffd5b5f6001600160801b03851115613726575f5ffd5b5f61373e670de0b6b3a7640000848103908690612bd1565b90508461375c5761375781600160c01b6002890a613c05565b61307a565b61307a816002880a600160c01b613c05565b5f6001600160801b03841115613782575f5ffd5b8284035f836002870a81613798576137986151be565b046002870286900303905061307a82670de0b6b3a764000083612bd1565b5f826137e4576137df826137cf6002600160601b6152b5565b6137da6002886152b5565b613c05565b613802565b613802826137f36002876152b5565b6137da6002600160601b6152b5565b949350505050565b5f6001600160801b0385111561381e575f5ffd5b5f8461383b57613836846002880a600160c01b613c05565b61384d565b61384d84600160c01b6002890a613c05565b905061307a81670de0b6b3a7640000858103612bd1565b5f826001600160a01b0316846001600160a01b03161115613883579192915b5f6138a5856001600160a01b0316856001600160a01b0316600160601b613c05565b905061037a83828787036001600160a01b0316613c05565b806001600160801b03811681146138d2575f5ffd5b919050565b5f826001600160a01b0316846001600160a01b031611156138f6579192915b61380282600160601b8686036001600160a01b0316613c05565b5f8061392384620f424089810390612bd1565b90505f5f89156139615761393a8789856001613ca1565b6001600160a01b031691506139518789875f613d90565b6001600160a01b03169050613991565b61396d8789875f613ca1565b6001600160a01b031691506139858789856001613d90565b6001600160a01b031690505b896139ae576139a98183016002808206151591040190565b6131a9565b6002828201046131a9565b5f806139cc83620f424088810390613e6e565b90505f6139dc8587846001613ca1565b90506139ea8186885f613e91565b979650505050505050565b5f80613a0883620f424088810390613e6e565b90505f613a188587846001613d90565b90506139ea8582885f613edd565b5f5f8615613a64575f613a3c8486886001613edd565b9050613a4e81620f4240898103613e6e565b9250613a5c8486885f613e91565b915050613a96565b5f613a728585886001613e91565b9050613a8481620f4240898103613e6e565b9250613a928585885f613edd565b9150505b9550959350505050565b5f5f5f5f5f8c15613adb57613ac5868c8a8d11613abd575f613864565b8a8d03613864565b9150613ad48c87898c016138d7565b9050613b07565b613ae8868c898d01613864565b9150613b048c878a8c11613afc575f6138d7565b8a8c036138d7565b90505b5f818310613b2757613b2282670de0b6b3a764000085612bd1565b613b3a565b613b3a83670de0b6b3a764000084612bd1565b670de0b6b3a7640000039050620f4240811082841015613ba4575f613b6a8f8a613b63886138bd565b6001613e91565b90508f613b7c57808c039a508a613b9d565b8b8111613b9557613b908a6009600a612bd1565b613b99565b8b81035b9950895b5050613bf0565b5f613bba898f613bb3876138bd565b6001613edd565b90508f613be6578c8111613bda57613bd58a6009600a612bd1565b613bde565b8c81035b995089613bed565b808d039a508a5b50505b9e989d50969b50969950505050505050505050565b5f838302815f1985870982811083820303915050808411613c24575f5ffd5b805f03613c36575082900490506111c2565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f825f03613cb0575083613802565b600160601b600160e01b03606085901b168215613d4a576001600160a01b03861684810290858281613ce457613ce46151be565b0403613d1457818101828110613d1257613d0883896001600160a01b031683613f95565b9350505050613802565b505b50613d428185613d2d6001600160a01b038a16836152c3565b613d379190614780565b808204910615150190565b915050613802565b6001600160a01b038616848102908582041481831116613d715763f5c787f15f526004601cfd5b808203613d08613d8b846001600160a01b038b1684613f95565b613fc5565b5f8115613df3575f6001600160a01b03841115613dc457613dbf84600160601b876001600160801b0316613c05565b613ddb565b613ddb6001600160801b038616606086901b6152c3565b9050613d42613d8b826001600160a01b038916614780565b5f6001600160a01b03841115613e2057613e1b84600160601b876001600160801b0316613f95565b613e3d565b613e3d606085901b6001600160801b038716808204910615150190565b9050806001600160a01b03871611613e5c57634323a5555f526004601cfd5b6001600160a01b038616039050613802565b5f825f190484118302158202613e82575f5ffd5b50910281810615159190040190565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ec4818484613c05565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b03161115613efc579293925b6001600160a01b038516613f165762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613f6957866001600160a01b0316613f568383896001600160a01b0316613c05565b81613f6357613f636151be565b046139ea565b6139ea613f808383896001600160a01b0316613f95565b886001600160a01b0316808204910615150190565b5f613fa1848484613c05565b90508180613fb157613fb16151be565b838509156111c257600101806111c2575f5ffd5b806001600160a01b03811681146138d2576138d26393dafdf160e01b805f5260045ffd5b6001600160a01b0381168114613ffd575f5ffd5b50565b80356138d281613fe9565b5f6020828403121561401b575f5ffd5b81356111c281613fe9565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c26020830184614026565b5f5f60408385031215614077575f5ffd5b823561408281613fe9565b9150602083013561409281613fe9565b809150509250929050565b5f5f83601f8401126140ad575f5ffd5b5081356001600160401b038111156140c3575f5ffd5b6020830191508360208285010111156140da575f5ffd5b9250929050565b5f5f5f5f5f608086880312156140f5575f5ffd5b853561410081613fe9565b9450602086013561411081613fe9565b93506040860135925060608601356001600160401b03811115614131575f5ffd5b61413d8882890161409d565b969995985093965092949392505050565b5f5f6040838503121561415f575f5ffd5b823561416a81613fe9565b915060208301356001600160401b03811115614184575f5ffd5b83016101208186031215614092575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f6101208c8e0312156141b1575f5ffd5b8b356141bc81613fe9565b9a506141ca60208d01614000565b995060408c0135985060608c0135975060808c0135965060a08c013595506141f460c08d01614000565b945060e08c01356001600160401b0381111561420e575f5ffd5b61421a8e828f0161409d565b9095509350506101008c01356001600160401b03811115614239575f5ffd5b6142458e828f0161409d565b915080935050809150509295989b509295989b9093969950565b5f5f60208385031215614270575f5ffd5b82356001600160401b03811115614285575f5ffd5b6142918582860161409d565b90969095509350505050565b5f8151808452602084019350602083015f5b828110156142d65781516001600160a01b03168652602095860195909101906001016142af565b5093949350505050565b5f8151808452602084019350602083015f5b828110156142d65781518652602095860195909101906001016142f2565b5f815160808452614324608085018261429d565b90506020830151848203602086015261433d82826142e0565b9150506040830151848203604086015261435782826142e0565b9150506060830151848203606086015261037a82826142e0565b602081525f6111c26020830184614310565b634e487b7160e01b5f52604160045260245ffd5b60405161012081016001600160401b03811182821017156143ba576143ba614383565b60405290565b604051601f8201601f191681016001600160401b03811182821017156143e8576143e8614383565b604052919050565b5f5f82840360a0811215614402575f5ffd5b833592506080601f1982011215614417575f5ffd5b50604051608081016001600160401b038111828210171561443a5761443a614383565b604090815260208581013583529085013590820152606084013561445d81613fe9565b6040820152608084013561447081613fe9565b6060820152919491935090915050565b5f5f5f5f60608587031215614493575f5ffd5b843593506020850135925060408501356001600160401b038111156144b6575f5ffd5b6144c28782880161409d565b95989497509550505050565b600181811c908216806144e257607f821691505b60208210810361450057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215614516575f5ffd5b81516111c281613fe9565b6001600160801b0381168114613ffd575f5ffd5b80356138d281614521565b5f60208284031215614550575f5ffd5b81356111c281614521565b6001600160601b0381168114613ffd575f5ffd5b80356138d28161455b565b5f6020828403121561458a575f5ffd5b81356111c28161455b565b80356001600160401b03811681146138d2575f5ffd5b5f5f8335601e198436030181126145c0575f5ffd5b83016020810192503590506001600160401b038111156145de575f5ffd5b8036038213156140da575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038316815260406020820181905261464590820161463884614000565b6001600160a01b03169052565b5f6146526020840161456f565b6001600160601b0316606083015261466c60408401614535565b6001600160801b0316608083015261468660608401614535565b6001600160801b03811660a084015250608083013560c08301526146ac60a08401614595565b6001600160401b031660e08301526146c660c08401614595565b6001600160401b03166101008301526146e260e08401846145ab565b610120808501526146f8610160850182846145ec565b9150506147096101008501856145ab565b848303603f19016101408601526139ea8382846145ec565b6001600160a01b03831681526040602082018190525f9061380290830184614026565b805180151581146138d2575f5ffd5b5f60208284031215614763575f5ffd5b6111c282614744565b634e487b7160e01b5f52601160045260245ffd5b808201808211156130e8576130e861476c565b80820281158282048414176130e8576130e861476c565b818103818111156130e8576130e861476c565b601f821115611d6857805f5260205f20601f840160051c810160208510156147e25750805b601f840160051c820191505b81811015614801575f81556001016147ee565b5050505050565b6001600160401b0383111561481f5761481f614383565b6148338361482d83546144ce565b836147bd565b5f601f841160018114614864575f851561484d5750838201355b5f19600387901b1c1916600186901b178355614801565b5f83815260208120601f198716915b828110156148935786850135825560209485019460019092019101614873565b50868210156148af575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190525f9061037a90830184866145ec565b5f6001600160401b038211156148fd576148fd614383565b50601f01601f191660200190565b5f82601f83011261491a575f5ffd5b813561492d614928826148e5565b6143c0565b818152846020838601011115614941575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561496e575f5ffd5b823561497981613fe9565b915060208301356001600160401b03811115614993575f5ffd5b830161012081860312156149a5575f5ffd5b6149ad614397565b6149b682614000565b81526149c46020830161456f565b60208201526149d560408301614535565b60408201526149e660608301614535565b606082015260808281013590820152614a0160a08301614595565b60a0820152614a1260c08301614595565b60c082015260e08201356001600160401b03811115614a2f575f5ffd5b614a3b8782850161490b565b60e0830152506101008201356001600160401b03811115614a5a575f5ffd5b614a668782850161490b565b6101008301525080925050509250929050565b634e487b7160e01b5f52603260045260245ffd5b80516001600160a01b03168252602081015160208301525f6040820151614abb604085018262ffffff169052565b506060820151614ad0606085018260020b9052565b506080820151614ae5608085018260020b9052565b5060a0820151614afa60a085018260020b9052565b5060c0820151614b0f60c085018260020b9052565b5060e0820151614b2a60e08501826001600160801b03169052565b5061010082015161010084015261012082015161014061012085015261380261014085018261429d565b6001600160a01b038581168252841660208201526080604082018190525f90614b7f90830185614a8d565b82810360608401526139ea8185614026565b8051600281900b81146138d2575f5ffd5b5f5f60408385031215614bb3575f5ffd5b614bbc83614b91565b9150614bca60208401614b91565b90509250929050565b6001600160a01b038681168252851660208201526001600160601b038416604082015260a0606082018190525f90614c0d90830185614a8d565b8281036080840152614c1f8185614026565b98975050505050505050565b62ffffff81168114613ffd575f5ffd5b5f5f5f60608486031215614c4d575f5ffd5b8335614c5881613fe9565b92506020840135614c6881613fe9565b91506040840135614c7881614c2b565b809150509250925092565b80516138d281614521565b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f031215614caa575f5ffd5b8c51614cb58161455b565b60208e0151909c50614cc681613fe9565b60408e0151909b50614cd781613fe9565b60608e0151909a50614ce881613fe9565b60808e0151909950614cf981614c2b565b9750614d0760a08e01614b91565b9650614d1560c08e01614b91565b9550614d2360e08e01614c83565b6101008e01516101208f015191965094509250614d436101408e01614c83565b9150614d526101608e01614c83565b90509295989b509295989b509295989b565b5f60018201614d7557614d7561476c565b5060010190565b60a081525f614d8e60a0830188614310565b8281036020840152614da08188614310565b8381036040850152865160608083528151908301819052919250602001905f9060808401905b80831015614dfd57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190614dc6565b5060208901516020850152604089015160408501528581036060870152614e248189614026565b93505050508281036080840152614c1f8185614026565b805161ffff811681146138d2575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614e62575f5ffd5b8751614e6d81613fe9565b9650614e7b60208901614b91565b9550614e8960408901614e3b565b9450614e9760608901614e3b565b9350614ea560808901614e3b565b925060a088015160ff81168114614eba575f5ffd5b9150614ec860c08901614744565b905092959891949750929550565b5f60208284031215614ee6575f5ffd5b6111c282614b91565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f5f60408385031215614f43575f5ffd5b505080516020909101519092909150565b81516001600160a01b0316815261016081016020830151614f8060208401826001600160a01b03169052565b506040830151614f97604084018262ffffff169052565b506060830151614fac606084018260020b9052565b506080830151614fc1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516150086101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f6080858703121561502b575f5ffd5b8451602086015190945061503e81614521565b6040860151606090960151949790965092505050565b5f60208284031215615064575f5ffd5b81516111c281614521565b5f600160ff1b82016150835761508361476c565b505f0390565b6001600160a01b0382811682821603908111156130e8576130e861476c565b6001600160a01b0381811683821601908111156130e8576130e861476c565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f906139ea90830184614026565b5f5f5f60608486031215615113575f5ffd5b835161511e81613fe9565b6020850151604086015191945092506001600160401b03811115615140575f5ffd5b8401601f81018613615150575f5ffd5b805161515e614928826148e5565b818152876020838501011115615172575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b5f602082840312156151b7575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b6001815b600184111561520d578085048111156151f1576151f161476c565b60018416156151ff57908102905b60019390931c9280026151d6565b935093915050565b5f82615223575060016130e8565b8161522f57505f6130e8565b8160018114615245576002811461524f5761526b565b60019150506130e8565b60ff8411156152605761526061476c565b50506001821b6130e8565b5060208310610133831016604e8410600b841016171561528e575081810a6130e8565b61529a5f1984846151d2565b805f19048211156152ad576152ad61476c565b029392505050565b5f6111c260ff841683615215565b5f826152dd57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212208fbcd83417db61a0195d3fc2768310f55644d304112d5b170e6d6248f34661c264736f6c634300081b0033000000000000000000000000da14fdd72345c4d2511357214c5b89a919768e5900000000000000000000000003a520b32c04bf3beef7beb72e919cf822ed34f100000000000000000000000033128a8fc17869897dce68ed026d694621f6fdfd