0 txs
110 calls
constructor
constructor(address globalRegistry_, address vault_, address farmToken_, string description_, address delayedWithdrawalAdapter_)
functions
allTokens
viewfunction allTokens() view returns (address[])
asset
viewfunction asset() view returns (address)
assetYieldCoefficient
viewfunction assetYieldCoefficient() view returns (uint256, uint256)
collectedFees
viewfunction collectedFees() view returns (address[] tokens, uint256[] collected)
delayedWithdrawalAdapter
viewfunction delayedWithdrawalAdapter(address token) view returns (address)
description
viewfunction description() view returns (string)
ERC4626Vault
viewfunction ERC4626Vault() view returns (address)
FEE_MANAGER
viewfunction FEE_MANAGER() view returns (bytes32)
fees
viewfunction fees() view returns (uint8[] types, uint16[] bps)
globalRegistry
viewfunction globalRegistry() view returns (address)
isDepositTokenSupported
viewfunction isDepositTokenSupported(address depositToken) view returns (bool)
isSpecialWithdrawalSupported
viewfunction isSpecialWithdrawalSupported(uint256 withdrawalCode) view returns (bool)
LIQUIDITY_MINING_MANAGER
viewfunction LIQUIDITY_MINING_MANAGER() view returns (bytes32)
maxDeposit
viewfunction maxDeposit(address depositToken) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw() view returns (address[], uint256[])
registry
viewfunction registry() view returns (address)
rewardEmissionsPerSecondPerAsset
viewfunction rewardEmissionsPerSecondPerAsset() view returns (uint256[], uint256[])
strategyId
viewfunction strategyId() view returns (uint96)
supportedDepositTokens
viewfunction supportedDepositTokens() view returns (address[])
supportedSpecialWithdrawals
viewfunction supportedSpecialWithdrawals() view returns (uint256[])
supportedWithdrawals
viewfunction supportedWithdrawals() view returns (uint8[])
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
TOS_MANAGER
viewfunction TOS_MANAGER() view returns (bytes32)
totalBalances
viewfunction totalBalances() view returns (address[] tokens, uint256[] balances)
validatePositionCreation
viewfunction validatePositionCreation(address sender, bytes creationData) view
vault
viewfunction vault() view returns (address)
deposited
payablefunction deposited(address depositToken, uint256 depositAmount) payable returns (uint256 assetsDeposited)
maxApproveVault
nonpayablefunction maxApproveVault()
migrateToNewStrategy
nonpayablefunction migrateToNewStrategy(address newStrategy, bytes migrationData) returns (bytes)
specialWithdraw
nonpayablefunction specialWithdraw(uint256 positionId, uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawalData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
specialWithdrawFees
nonpayablefunction specialWithdrawFees(uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
strategyRegistered
nonpayablefunction strategyRegistered(uint96 strategyId_, address oldStrategy, bytes migrationResultData)
withdraw
nonpayablefunction withdraw(uint256 positionId, address[] tokens, uint256[] toWithdraw, address recipient) returns (uint8[])
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, uint256[] toWithdraw, address recipient)
events
Initialized
event Initialized(uint64 version)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
CantWithdrawFees
error CantWithdrawFees()
FailedInnerCall
error FailedInnerCall()
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotEnoughFees
error NotEnoughFees()
NotInitializing
error NotInitializing()
OnlyStrategyRegistry
error OnlyStrategyRegistry()
OnlyVault
error OnlyVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WithdrawMustBeImmediate
error WithdrawMustBeImmediate()
creation bytecode
0x61010060409080825234620003655762004bc280380380916200002382856200049d565b833981019060a081830312620003655780516001600160a01b039283821682036200036557602092838101518581168103620003655762000066878301620004c1565b60608301516001600160401b0393919291908481116200036557810185601f8201121562000365578051906200009c82620004d6565b96620000ab8c5198896200049d565b82885289838301011162000365579088915f5b8281106200046c575050608092915f91880101520151948786168603620003655760a05260c05260e05281519081116200045857600254916001928381811c911680156200044d575b868210146200043957601f8111620003ed575b508490601f831160011462000387579282939183925f946200037b575b50501b915f199060031b1c1916176002555b6080526004818360e051168551928380926338d52e0f60e01b82525afa8015620003715783915f916200032d575b50169160e0511691835191808301905f8063095ea7b360e01b938481528760248801528119604488015260448752620001b08762000481565b86519082875af1620001c1620004f2565b81620002f8575b5080620002ed575b15620002ab575b855161459f9081620006238239608051816124df015260a051818181611d8b01528181611eff015281816130c501526131af015260c051818181610e8a015281816111950152818161223601526123e6015260e05181818161069b01528181610bff015281816113290152818161166e015281816116e501528181611a9e01528181611c8501528181611fb1015281816121de01528181612a2c01528181612ef301528181613017015281816131ed015281816133ab015281816135170152818161362701528181613e0301526143d40152f35b620002e294620002dc9287519283015260248201525f604482015260448152620002d58162000481565b8262000540565b62000540565b5f80808080620001d7565b50823b1515620001d0565b8051801592508390831562000312575b5050505f620001c8565b62000324935082018101910162000526565b5f828162000308565b809250838092503d831162000369575b6200034981836200049d565b8101031262000365576200035e8391620004c1565b5f62000177565b5f80fd5b503d6200033d565b84513d5f823e3d90fd5b015192505f8062000137565b90601f1983169160025f5283875f20935f5b8988838310620003d55750505010620003bc575b505050811b0160025562000149565b01515f1960f88460031b161c191690555f8080620003ad565b86860151885590960195948501948793500162000399565b60025f52855f20601f840160051c8101918785106200042e575b601f0160051c019084905b828110620004225750506200011a565b5f815501849062000412565b909150819062000407565b634e487b7160e01b5f52602260045260245ffd5b90607f169062000107565b634e487b7160e01b5f52604160045260245ffd5b8181018401518982018501528a9301620000be565b608081019081106001600160401b038211176200045857604052565b601f909101601f19168101906001600160401b038211908210176200045857604052565b51906001600160a01b03821682036200036557565b6001600160401b0381116200045857601f01601f191660200190565b3d1562000521573d906200050682620004d6565b916200051660405193846200049d565b82523d5f602084013e565b606090565b908160209103126200036557518015158103620003655790565b5f806200056c9260018060a01b03169360208151910182865af162000564620004f2565b9083620005ba565b80519081151591826200059c575b5050620005845750565b60249060405190635274afe760e01b82526004820152fd5b620005b1925060208091830101910162000526565b155f806200057a565b90620005e35750805115620005d157805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158062000618575b620005f6575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15620005ed56fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a714610239578063034db2351461023457806316f3542a1461022f57806317417e0e1461022a578063222142d0146102255780632968766e146102205780632a7c08471461021b57806331f91a8414610216578063326c36811461021157806338d52e0f1461020c5780633c5343b714610207578063402d267d14610202578063492f4e18146101fd578063688e89c1146101f85780636b6b97cd146101f35780636d13e02c146101ee5780636ff97f1d146101e95780637284e416146101e4578063789759be146101df5780637b103999146101da5780639003adfe146101d55780639af1d35a146101d0578063a69a2ad1146101cb578063ac7a1b5b146101c6578063bf9766fe146101c1578063d52bacf3146101bc578063daa8bfdd146101b7578063dae864cf146101b2578063db56b101146101ad578063e8e5ccf3146101a8578063ea26266c146101a3578063f50cd5f81461019e578063fa4c5453146101995763fbfa77cf0361000e57612217565b612188565b6120e0565b6120a6565b611f64565b611f3e565b611f23565b611ee0565b611e5c565b611cef565b611c19565b611a7c565b61190c565b6116c3565b611692565b61164f565b611523565b611437565b6113fd565b61127c565b611171565b611147565b611118565b610e26565b610d75565b610b91565b6109da565b6106ea565b61064d565b610528565b610397565b610358565b610320565b3461030b57602060031936011261030b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361030b57807ff2670b7300000000000000000000000000000000000000000000000000000000602092149081156102e1575b81156102b7575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6102ac565b7fe8662db900000000000000000000000000000000000000000000000000000000811491506102a5565b5f80fd5b6001600160a01b0381160361030b57565b3461030b57602060031936011261030b5760206103476004356103428161030f565b6124c0565b6001600160a01b0360405191168152f35b3461030b57602060031936011261030b576020600435801590811561038257506040519015158152f35b60019150145f6102ac565b5f91031261030b57565b3461030b575f60031936011261030b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020808501948460051b01011161030b57565b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020838186019501011161030b57565b9081518082526020808093019301915f5b82811061044f575050505090565b835185529381019392810192600101610441565b9081518082526020808093019301915f5b828110610482575050505090565b83516001600160a01b031685529381019392810192600101610474565b91908251928382525f5b8481106104c9575050601f19601f845f6020809697860101520116010190565b6020818301810151848301820152016104a9565b9261050961052595936104fb61051794608088526080880190610430565b908682036020880152610463565b908482036040860152610430565b91606081840391015261049f565b90565b3461030b5760a060031936011261030b5767ffffffffffffffff60443581811161030b5761055a9036906004016103d1565b60643592831161030b5761057561058c933690600401610402565b5050608435916105848361030f565b602435613bf7565b6001600160a01b0361059f949394613068565b16916bffffffffffffffffffffffff5f5416845115610648576020850151843b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152925f908490604490829084905af19283156106435761063093610634575b50604051948594856104dd565b0390f35b61063d90611493565b5f610623565b6123a5565b612327565b3461030b57602060031936011261030b57602060043561066c8161030f565b6001600160a01b0390818061067f612fe0565b169116908114918215610699575b50506040519015158152f35b7f0000000000000000000000000000000000000000000000000000000000000000161490505f8061068d565b90916106dc61052593604084526040840190610430565b916020818403910152610430565b3461030b575f60031936011261030b576bffffffffffffffffffffffff5f5416610712613068565b9061071b613de0565b6001600160a01b0361072e949294613df1565b604080517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff881660048083019190915293969294909216905f83602481855afa928315610643575f936109b6575b506107a161079c8a518551906125b2565b61248f565b946107b261079c8b518651906125b2565b975f5b8b518110156107f357806107cb6001928e612361565b516107d6828b612361565b526107e1818b612361565b516107ec828d612361565b52016107b5565b50908894969597918a61081061080a8e5194612354565b516130f9565b955f5b8a5181101561099057808c8861083b61082e8f958896612361565b516001600160a01b031690565b81517f74168e070000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9095169285019283526001600160a01b038116602084015291849081906040010381875afa8015610643578a8d928a92898d6001985f915f9461095c575b5050914211610954575b6108bf919261310b565b939015610914576108f86108f26109059486946108eb6108ff956108e561090c9a6125e8565b90612361565b5190614022565b926125e8565b8095612361565b516125b2565b918d612361565b525b01610813565b509091506109229250613f6b565b61092c878d612361565b526c0c9f2c9cd04674edea4000000061094e610947886125da565b978c612361565b5261090e565b5f91506108b5565b61098093945080919250903d10610989575b6109788183611500565b8101906125c4565b91905f8f6108ab565b503d61096e565b888a6106308988835181106109ab575b5051928392836106c5565b8084528452846109a0565b6109d39193503d805f833e6109cb8183611500565b810190612501565b915f61078b565b3461030b57606060031936011261030b57600467ffffffffffffffff813581811161030b57610a0c90369084016103d1565b9160243590811161030b57610a2490369085016103d1565b610a2f60443561030f565b610a376126a6565b92610a62610a436131e3565b610a51969196368986612281565b610a5c3687896122d9565b90612802565b610a81610a70368784612281565b610a7b3685876122d9565b90613397565b9380518603610b68575f5b868110610a9557005b610aa261082e8284612361565b6001600160a01b03610acc610ac0610abb858c8961237e565b61238e565b6001600160a01b031690565b911603610b3f57610ade81858761237e565b35151580610b1c575b610af357600101610a8c565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610b2f610b2a8288612361565b612398565b610b3881610dcd565b1515610ae7565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610bc39036906004016103d1565b909160443590811161030b57610bdd903690600401610402565b505060643591610bec8361030f565b610bf46126a6565b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610c2861244e565b90610c4e610c37610ac0612fe0565b610c4084612354565b906001600160a01b03169052565b610c5661244e565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152909660209290918381602481895afa801561064357610cde9685925f92610d56575b5060405180809981947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9586156106435761063096610d1d96610d10955f92610d29575b5050610d078a612354565b52600435613619565b9492809792989194612802565b604051948594856104dd565b610d489250803d10610d4f575b610d408183611500565b810190612a12565b5f80610cfc565b503d610d36565b610d6e919250833d8511610d4f57610d408183611500565b905f610ca4565b3461030b575f60031936011261030b5760206001600160a01b03610d97612fe0565b16604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610dd757565b610da0565b60209060206040818301928281528551809452019301915f5b828110610e03575050505090565b909192938451906002821015610dd7579081528201938201929190600101610df5565b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610e589036906004016103d1565b9160443590811161030b57610e719036906004016103d1565b929091610e7f60643561030f565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001633036110ee57926bffffffffffffffffffffffff5f541694610eca613068565b91610ed36140ae565b93610ede855161248f565b96610ee98484612375565b3596871515946001928716925b828110610f3557505050505050610f1f575b610630610f13612e69565b60405191829182610ddc565b610f2b94600435613800565b5f80808080610f08565b610f4081838861237e565b35610f4f610abb83868961237e565b908d6040928351917f8e6e20a90000000000000000000000000000000000000000000000000000000083528280610fb16020948594600484019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03818b5afa801561064357610fd09284925f926110d1575b50506137ee565b9182611020575b508a518310610feb575b5050600101610ef6565b90610ff5916125f6565b610fff828d612361565b5261100a818c612361565b51611017575b5f80610fe1565b60019650611010565b61102e610abb85888b61237e565b873b1561030b578f915f916110a786925194859384937f5612785a000000000000000000000000000000000000000000000000000000008552606435926004860192936060929195946bffffffffffffffffffffffff60808601971685526001600160a01b038093166020860152604085015216910152565b0381838b5af180156106435715610fd757806110c56110cb92611493565b8061038d565b5f610fd7565b6110e79250803d10610d4f57610d408183611500565b5f80610fc9565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461030b57602060031936011261030b57602061113f60043561113a8161030f565b612a21565b604051908152f35b3461030b575f60031936011261030b5760206bffffffffffffffffffffffff5f5416604051908152f35b604060031936011261030b576004356111898161030f565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001633036110ee576111c890602435906140d6565b906111d1613068565b16906bffffffffffffffffffffffff5f541691803b1561030b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af1918215610643576106309261125c575b506040519081529081906020820190565b61126590611493565b5f61124b565b90602061052592818152019061049f565b3461030b57604060031936011261030b576004356112998161030f565b60243567ffffffffffffffff811161030b576112b9903690600401610402565b50506001600160a01b0390816112cd6123b0565b1633036113d3575f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000008316602082602481845afa90811561064357610630946113909461139e945f946113aa575b5091839161137c9316906138a4565b604051928391602083019190602083019252565b03601f198101835282611500565b6040519182918261126b565b61137c93919294506113ca9060203d602011610d4f57610d408183611500565b9391909261136d565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461030b575f60031936011261030b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b3461030b575f60031936011261030b57610630611452612b15565b604051918291602083526020830190610463565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116114a757604052565b611466565b6080810190811067ffffffffffffffff8211176114a757604052565b6060810190811067ffffffffffffffff8211176114a757604052565b6020810190811067ffffffffffffffff8211176114a757604052565b90601f601f19910116810190811067ffffffffffffffff8211176114a757604052565b3461030b575f60031936011261030b576040515f60025460018160011c9160018116918215611645575b6020916020851084146116185784875260208701939081156115db5750600114611582575b6106308661139e81880382611500565b60025f90815294509192917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8386106115ca575050509101905061139e826106305f611572565b8054858701529482019481016115af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016845250505090151560051b01905061139e826106305f611572565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f169261154d565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b5760206103476123b0565b90916106dc61052593604084526040840190610463565b3461030b575f60031936011261030b576116db612c4e565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061170e61244e565b9161172661171d610ac0612fe0565b610c4085612354565b61172e61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa8015610643576117b49284925f92611868575b5060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f9261184b575b50506117d482949394612354565b526117df825161248f565b926040015f5b8351811015611839578061182861180161082e60019488612361565b61180b8387612361565b5161182261181b875161ffff1690565b61ffff1690565b91612d08565b6118328288612361565b52016117e5565b505050610630604051928392836116ac565b6118619250803d10610d4f57610d408183611500565b5f806117c6565b611880919250833d8511610d4f57610d408183611500565b905f61177a565b604081019060408152825180925260608101916020809401905f5b8181106118e757505050828183039101528180845192838152019301915f5b8281106118cf575050505090565b835161ffff16855293810193928101926001016118c1565b909194938551906005821015610dd757908152939493850193850191906001016118a2565b3461030b575f60031936011261030b57611924612c4e565b61192c612df3565b611934612df3565b915f9061ffff611946825161ffff1690565b16611a43575b8060206060920161196261181b825161ffff1690565b611a23575b506040810161197b61181b825161ffff1690565b6119ef575b500161199161181b825161ffff1690565b6119ab575b50808252825261063060405192839283611887565b6119cd6119e9916119c56119bf8587612361565b60039052565b5161ffff1690565b6119e06119d9846125da565b9386612361565b9061ffff169052565b5f611996565b611a0a611a1d915f611a018789612361565b525161ffff1690565b6119e0611a16866125da565b9588612361565b5f611980565b611a0a611a3d916119c5611a378789612361565b60029052565b5f611967565b9050611a57611a5183612354565b60019052565b6060611a65825161ffff1690565b91611a756001936119e087612354565b905061194c565b3461030b575f60031936011261030b57611a94612c4e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611ac761244e565b91611ad661171d610ac0612fe0565b611ade61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa801561064357611b639284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f92611bfc575b5050611b8082612354565b5260405f9201915b8351811015611be25780611bd1611bc1611ba761082e60019589612361565b611bb18487612361565b5161182261181b895161ffff1690565b611bcb8386612361565b516125f6565b611bdb8285612361565b5201611b88565b611bec82856138f2565b90610630604051928392836116ac565b611c129250803d10610d4f57610d408183611500565b5f80611b75565b3461030b575f60031936011261030b57611c3161244e565b611c48611c3f610ac0612fe0565b610c4083612354565b611c5061244e565b6040517fce96cb77000000000000000000000000000000000000000000000000000000008152306004820152916020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561064357611bec935f91611cd0575b50611cca83612354565b526138f2565b611ce9915060203d602011610d4f57610d408183611500565b5f611cc0565b3461030b57604060031936011261030b57600435611d0c8161030f565b60243567ffffffffffffffff811161030b57611d2c903690600401610402565b91906001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f91611e2d575b50166bffffffffffffffffffffffff5f541692813b1561030b575f93611e10604051968795869485947f134ab19500000000000000000000000000000000000000000000000000000000865260048601612e1f565b03915afa801561064357611e2057005b806110c561001892611493565b611e4f915060203d602011611e55575b611e478183611500565b810190612fcb565b5f611dbb565b503d611e3d565b3461030b575f60031936011261030b57604051611e78816114c8565b6002815260208082016040368237825115610648575f8152825192600193600110156106485783836001604084015260405192602084019060208552518091526040840194915f5b828110611ecd5785870386f35b8351875295810195928101928401611ec0565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b57610630610f13612e69565b3461030b575f60031936011261030b576040611f58612ebf565b82519182526020820152f35b3461030b575f60031936011261030b57611f7c612fe0565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602485018190525f196044808701919091528552929492601f199290915f908190611ffe606489611500565b86169287519082855af190612011613b2d565b82612074575b5081612069575b501561202657005b60405160208101959095526001600160a01b031660248501525f604485015260649081018452610018936120649161205e9082611500565b82613b6c565b613b6c565b90503b15155f61201e565b8051919250811591821561208c575b5050905f612017565b61209f9250602080918301019101612627565b5f80612083565b3461030b575f60031936011261030b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461030b57606060031936011261030b576004356bffffffffffffffffffffffff8116810361030b5761211460243561030f565b60443567ffffffffffffffff811161030b57612134903690600401610402565b50506001600160a01b036121466123b0565b1633036113d357610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461030b575f60031936011261030b576040516121a4816114c8565b60028152602081019060403683376001600160a01b0391826121c4612fe0565b1690825115610648575280516001101561064857610630917f0000000000000000000000000000000000000000000000000000000000000000166040820152604051918291602083526020830190610463565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60405190612267826114c8565b565b67ffffffffffffffff81116114a75760051b60200190565b929161228c82612269565b9161229a6040519384611500565b829481845260208094019160051b810192831161030b57905b8282106122c05750505050565b83809183356122ce8161030f565b8152019101906122b3565b92916122e482612269565b916122f26040519384611500565b829481845260208094019160051b810192831161030b57905b8282106123185750505050565b8135815290830190830161230b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156106485760200190565b80518210156106485760209160051b010190565b90156106485790565b91908110156106485760051b0190565b356105258161030f565b516002811015610dd75790565b6040513d5f823e3d90fd5b6040517f8f75315b0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f91612419575090565b90506020813d602011612446575b8161243460209383611500565b8101031261030b57516105258161030f565b3d9150612427565b604051906040820182811067ffffffffffffffff8211176114a7576040526001825260203681840137565b604051612485816114e4565b5f8152905f368137565b9061249982612269565b6124a66040519182611500565b828152601f196124b68294612269565b0190602036910137565b6001600160a01b03806124d1612fe0565b169116146124dd575f90565b7f000000000000000000000000000000000000000000000000000000000000000090565b602090818184031261030b5780519067ffffffffffffffff821161030b57019180601f8401121561030b57825161253781612269565b936125456040519586611500565b818552838086019260051b82010192831161030b578301905b82821061256c575050505090565b838091835161257a8161030f565b81520191019061255e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919082018092116125bf57565b612585565b919082604091031261030b576020825192015190565b5f1981146125bf5760010190565b905f1982019182116125bf57565b919082039182116125bf57565b60405190612610826114ac565b5f6060838281528260208201528260408201520152565b9081602091031261030b5751801515810361030b5790565b519061ffff8216820361030b57565b9081608091031261030b5761269e60606040519261266b846114ac565b6126748161263f565b84526126826020820161263f565b60208501526126936040820161263f565b60408501520161263f565b606082015290565b6126ae612603565b506bffffffffffffffffffffffff5f54166126ca610ac0613152565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa908115610643575f916127d3575b50156127a9576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa908115610643575f91612780575090565b610525915060803d6080116127a2575b61279a8183611500565b81019061264e565b503d612790565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b6127f5915060203d6020116127fb575b6127ed8183611500565b810190612627565b5f612721565b503d6127e3565b91909392935f5b8351811015612a0a5761281c8183612361565b518061282c575b50600101612809565b61283961082e8387612361565b6128438386612361565b519161285e604092838b019461182261181b875161ffff1690565b928382116129e157918493916001958861ffff612880612999975161ffff1690565b161561299f576128b0836128aa6128a56128f89796611bcb6128f0976128b597612361565b613342565b966125f6565b6132ee565b6128d86128c061225a565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b61291f61290861082e858a612361565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b90612823565b50506128b06129b0915f93946125f6565b916129d96129bc61225a565b8381526effffffffffffffffffffffffffffff9094166020850152565b8201526128f8565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261030b575190565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690612a5b610ac0610ac0612fe0565b908316908103612ace57506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152915060209082908180602481015b03915afa908115610643575f91612ab5575090565b610525915060203d602011610d4f57610d408183611500565b03612ad957505f1990565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b612b78612b206140ae565b5f612b2c610ac0613068565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa918215610643575f92612c32575b50612b9b61079c82518451906125b2565b925f5b8251811015612bca5780612bc4612bba61082e60019487612361565b610c408389612361565b01612b9e565b5091908051915f5b8151811015612c205780612beb61082e60019385612361565b612bf5858261310b565b5015612c03575b5001612bd2565b612c1a90610c40612c13886125da565b978a612361565b5f612bfc565b50505082518110612c2e5750565b8252565b612c479192503d805f833e6109cb8183611500565b905f612b8a565b612c56612603565b506001600160a01b03612c67613152565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa908115610643575f91612780575090565b818102929181159184041417156125bf57565b8115612cdb570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191612d2e836114c8565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280612dea575b612da75750505161052591506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b83039283116125bf57612d93612dce612dc6612de49361052596612cbe565b612710900490565b92516effffffffffffffffffffffffffffff1690565b906125b2565b50808411612d75565b6040519060a0820182811067ffffffffffffffff8211176114a757604052600482526080366020840137565b9293806080956001600160a01b03601f19956bffffffffffffffffffffffff601f9616885216602087015260606040870152816060870152868601375f8582860101520116010190565b612e71614095565b90612e83612e7d612b15565b5161248f565b915f5b8151811015612ebb57612e9c610b2a8284612361565b90612ea78186612361565b916002811015610dd7576001925201612e86565b5050565b6040517f18160ddd000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009060207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168183600481845afa928315610643575f93612fac575b508215612fa457908060049392604051948580927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa801561064357612f849385925f92612f87575b5050614022565b91565b612f9d9250803d10610d4f57610d408183611500565b5f80612f7d565b505050908190565b612fc4919350823d8411610d4f57610d408183611500565b915f612f31565b9081602091031261030b57516105258161030f565b6001600160a01b036040517f38d52e0f000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161304b57501690565b613064915060203d602011611e5557611e478183611500565b1690565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150806004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161304b57501690565b60018111156131055790565b50600190565b91909160015b8351811015613148576001600160a01b038061312d8387612361565b51169083161461313f57600101613111565b92505060019190565b505090505f905f90565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161304b57501690565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661321561244e565b9161322461171d610ac0612fe0565b61322c61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa8015610643576132b19284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f926132d1575b50506132ce83612354565b52565b6132e79250803d10610d4f57610d408183611500565b5f806132c3565b6effffffffffffffffffffffffffffff9081811161330a571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff9081811161335f571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b9061340a9060206133d16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692612354565b51604051809481927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa918215610643575f926134dd575b508161343b91613435610ac061034261082e88612354565b906138a4565b61345961082e613453610ac061034261082e87612354565b93612354565b90823b1561030b576040517f272017e00000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481015b03925af18015610643576134ca575b50610525614095565b806110c56134d792611493565b5f6134c1565b61343b9192506134fb9060203d602011610d4f57610d408183611500565b919061341d565b909161353d9060206133d16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692612354565b0381845afa918215610643575f926135e2575b508161356891613435610ac061034261082e89612354565b61358661082e613580610ac061034261082e88612354565b94612354565b92803b1561030b576040517f272017e000000000000000000000000000000000000000000000000000000000815260048101939093526001600160a01b0390931660248301526044820152905f908290818381606481016134b2565b6135689192506136009060203d602011610d4f57610d408183611500565b9190613550565b60405190613614826114e4565b5f8252565b909192936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661364f61244e565b9561365861244e565b9561366161244e565b9561366a613607565b958061371c57509061367b91612375565b3591604051917f4cdad506000000000000000000000000000000000000000000000000000000008352602083806136ba87600483019190602083019252565b0381855afa801561064357846136f0945f926136f9575b506136dd9192846138a4565b6136e689612354565b52610c4087612354565b6132ce84612354565b6136dd92506137169060203d602011610d4f57610d408183611500565b916136d1565b929392600181036137bb57509061373291612375565b3590604051917f0a28a4770000000000000000000000000000000000000000000000000000000083526020838061377184600483019190602083019252565b0381855afa928315610643575f93613794575b506136dd836136f09495846138a4565b6136f093506137b46136dd9160203d602011610d4f57610d408183611500565b9350613784565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b90808210156137fb575090565b905090565b9194939485613824575b50508251156106485761382193602084015261426f565b50565b6001600160a01b0316803b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af1801561064357613895575b8061380a565b61389e90611493565b5f61388f565b612267926001600160a01b03604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252612064826114ac565b91906bffffffffffffffffffffffff5f541690613910610ac0613068565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f848061396386600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa938415610643575f94613b11575b5061398761079c89518651906125b2565b9361399861079c8a518351906125b2565b965f5b8a518110156139dd57806139c16139b761082e6001948f612361565b610c40838b612361565b6139cb818a612361565b516139d6828c612361565b520161399b565b509297909398919695508151935f5b8151811015613af457613a0261082e8284612361565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180613a626020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa908115610643576001945f92613ad7575b50508a613a84888461310b565b939015613aac5750613aa4916108ff84613a9d93612361565b918b612361565b525b016139ec565b9050613abe919250610c408a8c612361565b613ad1613aca896125da565b988b612361565b52613aa6565b613aed9250803d10610d4f57610d408183611500565b5f80613a77565b505050505091939250935083518110613b0a5750565b8084528252565b613b269194503d805f833e6109cb8183611500565b925f613976565b3d15613b67573d9067ffffffffffffffff82116114a75760405191613b5c6020601f19601f8401160184611500565b82523d5f602084013e565b606090565b5f806001600160a01b03613b9593169360208151910182865af1613b8e613b2d565b908361450c565b8051908115159182613bdc575b5050613bab5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b613bef9250602080918301019101612627565b155f80613ba2565b919290926040916040613c08612c4e565b019161ffff613c19845161ffff1690565b1615613d8f5790613c3491613c2c6131e3565b979096613619565b919083925f5b8851811015613d8257613c4d818b612361565b51613c588288612361565b51613c62916125f6565b613c6b90613342565b613c75828b612361565b516001600160a01b0316613c89838d612361565b51895161ffff1661ffff1690613c9e92612d08565b613ca7906132ee565b613caf61225a565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a0152613ceb828b612361565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101613c3a565b5095509550955095915050565b91509150613d9f949293946140ae565b945f5b8651811015613dc95780613dc3613dbe61082e6001948b612361565b6141ce565b01613da2565b509091929450613dd893613619565b929391929091565b613de8612479565b90610525612479565b613df9612c4e565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613e2b61244e565b613e39611c3f610ac0612fe0565b613e4161244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa801561064357613ec69284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f92613f4e575b5050613ee683959495612354565b5281819060405f9601955b8351811015613f455780613f34613f2a613f1061082e60019589612361565b613f1a848a612361565b5161182261181b8d5161ffff1690565b611bcb8389612361565b613f3e8288612361565b5201613ef1565b50939250935050565b613f649250803d10610d4f57610d408183611500565b5f80613ed8565b6c0c9f2c9cd04674edea4000000091828202915f19848209938380861095039480860395146140155784831115613feb57829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b60046040517f227bc153000000000000000000000000000000000000000000000000000000008152fd5b5050906105259250612cd1565b9091828202915f19848209938380861095039480860395146140155784831115613feb57829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b61409d61244e565b908151156106485760016020830152565b6140b661244e565b906001600160a01b036140c7612fe0565b16825115610648576020830152565b91909160406140e3612c4e565b019061ffff9384835116156141a8576135806141349161412e6141046131e3565b9890966001600160a01b0361411889612354565b5116916141248b612354565b5191511691612d08565b936143c8565b518481018091116125bf5761290861082e6122679461419c61416161415b61291f96613342565b966132ee565b61418461416c61225a565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b60016040860152612354565b91506105259293506141c96001600160a01b036141c3612fe0565b166141ce565b6143c8565b6001600160a01b0381165f52600160205260405f2060408051916141f1836114c8565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c15159182910152614236575050565b61291f612267926040519261424a846114c8565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b9192604090604061427e612c4e565b0161ffff61428e825161ffff1690565b16156143915761429c6131e3565b9290505f5b8551811015614381578083858a896001956142bb83612354565b5115614377576128a561435b936143138361430c816143068a6143719c61182261181b6142fc866142f66143209f61431a9f61082e91612361565b95612361565b51925161ffff1690565b99612361565b5192612361565b51906125f6565b926132ee565b61434361432b61225a565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b60018189015261291f61290861082e858c612361565b016142a1565b5050505050614371565b5095939250505061052592613502565b5091929390505f5b83518110156143bb57806143b5613dbe61082e60019488612361565b01614399565b5090929161052592613502565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691614403610ac0610ac0612fe0565b9082169081036144c75750506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481019290925230602483015260209182816044815f865af180156106435761449b9284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f926144b157505090565b6105259250803d10610d4f57610d408183611500565b8203612ad957506040517f4cdad50600000000000000000000000000000000000000000000000000000000815260048101929092526020908290818060248101612aa0565b9061454b575080511561452157805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580614596575b61455c575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b15614554560000000000000000000000007da14784e8f1fb71c23ad6c6ac7f063fdf098f3800000000000000000000000063a8ae714568ec8f8ec14472674c68582b0b0458000000000000000000000000bb287e6017d3deb0e2e65061e8684eab2106012300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e060cb6b337fa546c9c4b6e0f8a5448ac9661788000000000000000000000000000000000000000000000000000000000000001744656c6179656420596561726e20763320555344542d41000000000000000000