0 txs
210 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
CantWithdrawFees
error CantWithdrawFees()
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidInitialization
error InvalidInitialization()
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
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
0x61010060409080825234610313576149c0803803809161001f8285610431565b833981019060a0818303126103135780516001600160a01b0390818116810361031357602093848401519083821682036103135761005e878601610454565b60608601516001600160401b0393919084811161031357870191601f9284848201121561031357805198868a11610402578b51601f199b9a90966100a88783018e168d0189610431565b8188528b8285010111610313578a815f928260809601838b015e8801015201519587871687036103135760a05260c05260e052815192831161040257600254916001978884811c941680156103f8575b888510146103e4578383869511610391575b508792841160011461033357505f92610328575b50505f19600383901b1c191690851b176002555b6080526004828260e051168651928380926338d52e0f60e01b82525afa801561031e5782915f916102e2575b50169060e051169284519280840191815f63095ea7b360e01b94858152886024890152811960448901526044885261019588610416565b87519082885af1903d5f5190836102c5575b5050501561028a575b85516144f290816104ce823960805181612553015260a051818181611e2301528181611f9c015281816131390152613211015260c05181818161057401528181610f4c0152818161122d015281816122aa015261245a015260e05181818161074001528181610ccd015281816113c1015281816117060152818161177d01528181611b3601528181611d1d0152818161204f0152818161225201528181612aa001528181612f670152818161308b0152818161324f0152818161340d015281816135790152818161368901528181613dfb01526143ba0152f35b6102bb946102b69287519283015260248201525f6044820152604481526102b081610416565b82610468565b610468565b5f808080806101b0565b919250906102dc575050823b15155b5f80806101a7565b146102d4565b809250848092503d8311610317575b6102fb8183610431565b810103126103135761030d8291610454565b5f61015e565b5f80fd5b503d6102f1565b85513d5f823e3d90fd5b015190505f8061011e565b8894929192169160025f52875f20925f5b8982821061037b5750508411610363575b505050811b01600255610132565b01515f1960f88460031b161c191690555f8080610355565b8385015186558b97909501949384019301610344565b909192935060025f52875f208480870160051c8201928a88106103db575b9187968c92969594930160051c01915b8281106103cd57505061010a565b5f81558796508b91016103bf565b925081926103af565b634e487b7160e01b5f52602260045260245ffd5b93607f16936100f8565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761040257604052565b601f909101601f19168101906001600160401b0382119082101761040257604052565b51906001600160a01b038216820361031357565b905f602091828151910182855af1156104c2575f513d6104b957506001600160a01b0381163b155b6104975750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b60011415610490565b6040513d5f823e3d90fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a714610239578063034db2351461023457806316f3542a1461022f57806317417e0e1461022a578063222142d0146102255780632968766e146102205780632a7c08471461021b57806331f91a8414610216578063326c36811461021157806338d52e0f1461020c5780633c5343b714610207578063402d267d14610202578063492f4e18146101fd578063688e89c1146101f85780636b6b97cd146101f35780636d13e02c146101ee5780636ff97f1d146101e95780637284e416146101e4578063789759be146101df5780637b103999146101da5780639003adfe146101d55780639af1d35a146101d0578063a69a2ad1146101cb578063ac7a1b5b146101c6578063bf9766fe146101c1578063d52bacf3146101bc578063daa8bfdd146101b7578063dae864cf146101b2578063db56b101146101ad578063e8e5ccf3146101a8578063ea26266c146101a3578063f50cd5f81461019e578063fa4c5453146101995763fbfa77cf0361000e5761228b565b6121fc565b612154565b61211a565b612001565b611fdb565b611fc0565b611f7d565b611ef4565b611d87565b611cb1565b611b14565b6119a4565b61175b565b61172a565b6116e7565b6115bb565b6114cf565b611495565b611314565b611209565b6111df565b6111b0565b610ee8565b610e37565b610c5f565b610ab4565b61078f565b6106f2565b61050f565b610397565b610358565b610320565b3461030b57602060031936011261030b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361030b57807ff2670b7300000000000000000000000000000000000000000000000000000000602092149081156102e1575b81156102b7575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6102ac565b7fe8662db900000000000000000000000000000000000000000000000000000000811491506102a5565b5f80fd5b6001600160a01b0381160361030b57565b3461030b57602060031936011261030b5760206103476004356103428161030f565b612534565b6001600160a01b0360405191168152f35b3461030b57602060031936011261030b576020600435801590811561038257506040519015158152f35b60019150145f6102ac565b5f91031261030b57565b3461030b575f60031936011261030b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020808501948460051b01011161030b57565b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020838186019501011161030b57565b9081518082526020808093019301915f5b82811061044f575050505090565b835185529381019392810192600101610441565b9081518082526020808093019301915f5b828110610482575050505090565b83516001600160a01b031685529381019392810192600101610474565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b926104f061050c95936104e26104fe94608088526080880190610430565b908682036020880152610463565b908482036040860152610430565b91606081840391015261049f565b90565b3461030b5760a060031936011261030b5767ffffffffffffffff60443581811161030b576105419036906004016103d1565b909160643590811161030b5761055b903690600401610402565b50506084359061056a8261030f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036106c8576105a692602435613bef565b9091926105c06105b46130dc565b6001600160a01b031690565b6bffffffffffffffffffffffff5f54166105d9836123c8565b51823b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152905f908290604490829084905af180156106c3576106aa575b50610644612b89565b518151810361066557509061066191925b604051948594856104c4565b0390f35b61067190949194612503565b915f5b855181101561069c578061068a600192886123d5565b5161069582876123d5565b5201610674565b509093506106619192610655565b806106b76106bd9261152b565b8061038d565b5f61063b565b612419565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461030b57602060031936011261030b5760206004356107118161030f565b6001600160a01b03908180610724613054565b16911690811491821561073e575b50506040519015158152f35b7f0000000000000000000000000000000000000000000000000000000000000000161490505f80610732565b909161078161050c93604084526040840190610430565b916020818403910152610430565b3461030b575f60031936011261030b576001600160a01b036bffffffffffffffffffffffff5f54166107bf6130dc565b6107c7613dd8565b93906107d1613de9565b9290931660408051937f26a5bea800000000000000000000000000000000000000000000000000000000855260045f86806108248b600483019190916bffffffffffffffffffffffff6020820193169052565b0381875afa9586156106c3575f96610a90575b5061084d6108488651885190612626565b612503565b9561085e6108488751835190612626565b975f5b87518110156108a1578061088f818e8c610889836108828f986001996123d5565b51926123d5565b526123d5565b5161089a828d6123d5565b5201610861565b508a91929395996108b76108ca969851976123c8565b5160019687969187811890881002871890565b945f975b610901575b505050505050505082610661939495505181106108f6575b50519283928361076a565b8084528452846108eb565b8098979851891015610a885761092761091a8a836123d5565b516001600160a01b031690565b8d8b805180927f74168e070000000000000000000000000000000000000000000000000000000082528180610983878b8b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9182156106c3578d928f928e89915f915f94610a54575b5050914211610a4c575b6109b2919261316d565b929015610a0f575091610a0682610a006109ef8d9e9f958d8f986109e28f6109dc6109e99561265c565b906123d5565b5190613fff565b9261265c565b916109fa83866123d5565b51612626565b926123d5565b525b01976108ce565b9b9150610a468b8b9c94610a368d96610a008e6c0c9f2c9cd04674edea4000000097613f63565b52610a408161264e565b9d6123d5565b52610a08565b5f91506109a8565b610a7893945080919250903d10610a81575b610a708183611598565b810190612638565b91908f8061099e565b503d610a66565b8798506108d3565b610aad9196503d805f833e610aa58183611598565b810190612575565b945f610837565b3461030b57606060031936011261030b57600467ffffffffffffffff813581811161030b57610ae690369084016103d1565b9160243590811161030b57610afe90369085016103d1565b610b0960443561030f565b610b1161271a565b92610b3c610b1d613245565b610b2b9691963689866122f5565b610b3636878961234d565b90612876565b610b5b610b4a3687846122f5565b610b5536858761234d565b906133f9565b9380518603610c36575f5b868110610b6f57005b610b7c61091a82846123d5565b6001600160a01b03610b9a6105b4610b95858c896123f2565b612402565b911603610c0d57610bac8185876123f2565b35151580610bea575b610bc157600101610b66565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610bfd610bf882886123d5565b61240c565b610c0681610e8f565b1515610bb5565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610c919036906004016103d1565b909160443590811161030b57610cab903690600401610402565b505060643591610cba8361030f565b610cc261271a565b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610cf66124c2565b90610d1c610d056105b4613054565b610d0e846123c8565b906001600160a01b03169052565b610d246124c2565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152909660209290918381602481895afa80156106c357610dac9685925f92610e18575b5060405180809981947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9586156106c3576106619661065596610dde955f92610deb575b5050610dd58a6123c8565b5260043561367b565b9492809792989194612876565b610e0a9250803d10610e11575b610e028183611598565b810190612a86565b5f80610dca565b503d610df8565b610e30919250833d8511610e1157610e028183611598565b905f610d72565b3461030b575f60031936011261030b5760206001600160a01b03610e59613054565b16604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610e9957565b610e62565b60209060206040818301928281528551809452019301915f5b828110610ec5575050505090565b909192938451906002821015610e99579081528201938201929190600101610eb7565b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610f1a9036906004016103d1565b9160443590811161030b57610f339036906004016103d1565b929091610f4160643561030f565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001633036106c857926bffffffffffffffffffffffff5f541694610f8c6130dc565b91610f9561408b565b93610fa08551612503565b96610fab84846123e9565b3596871515946001928716925b828110610ff757505050505050610fe1575b610661610fd5612edd565b60405191829182610e9e565b610fed94600435613850565b5f80808080610fca565b6110028183886123f2565b35611011610b958386896123f2565b908d6040928351917f8e6e20a900000000000000000000000000000000000000000000000000000000835282806110736020948594600484019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03818b5afa80156106c3576110989284925f92611193575b5050808218908211021890565b91826110e8575b508a5183106110b3575b5050600101610fb8565b906110bd9161266a565b6110c7828d6123d5565b526110d2818c6123d5565b516110df575b5f806110a9565b600196506110d8565b6110f6610b9585888b6123f2565b873b1561030b578f915f9161116f86925194859384937f5612785a000000000000000000000000000000000000000000000000000000008552606435926004860192936060929195946bffffffffffffffffffffffff60808601971685526001600160a01b038093166020860152604085015216910152565b0381838b5af180156106c3571561109f57806106b761118d9261152b565b5f61109f565b6111a99250803d10610e1157610e028183611598565b5f8061108b565b3461030b57602060031936011261030b5760206111d76004356111d28161030f565b612a95565b604051908152f35b3461030b575f60031936011261030b5760206bffffffffffffffffffffffff5f5416604051908152f35b604060031936011261030b576004356112218161030f565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001633036106c85761126090602435906140b3565b906112696130dc565b16906bffffffffffffffffffffffff5f541691803b1561030b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af19182156106c357610661926112f4575b506040519081529081906020820190565b6112fd9061152b565b5f6112e3565b90602061050c92818152019061049f565b3461030b57604060031936011261030b576004356113318161030f565b60243567ffffffffffffffff811161030b57611351903690600401610402565b50506001600160a01b039081611365612424565b16330361146b575f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000008316602082602481845afa9081156106c3576106619461142894611436945f94611442575b509183916114149316906138f4565b604051928391602083019190602083019252565b03601f198101835282611598565b60405191829182611303565b61141493919294506114629060203d602011610e1157610e028183611598565b93919092611405565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461030b575f60031936011261030b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b3461030b575f60031936011261030b576106616114ea612b89565b604051918291602083526020830190610463565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161153f57604052565b6114fe565b6080810190811067ffffffffffffffff82111761153f57604052565b6060810190811067ffffffffffffffff82111761153f57604052565b6020810190811067ffffffffffffffff82111761153f57604052565b90601f601f19910116810190811067ffffffffffffffff82111761153f57604052565b3461030b575f60031936011261030b576040515f60025460018160011c91600181169182156116dd575b6020916020851084146116b0578487526020870193908115611673575060011461161a575b6106618661143681880382611598565b60025f90815294509192917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8386106116625750505091019050611436826106615f61160a565b805485870152948201948101611647565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016845250505090151560051b019050611436826106615f61160a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926115e5565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b576020610347612424565b909161078161050c93604084526040840190610463565b3461030b575f60031936011261030b57611773612cc2565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906117a66124c2565b916117be6117b56105b4613054565b610d0e856123c8565b6117c66124c2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa80156106c35761184c9284925f92611900575b5060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106c3575f926118e3575b505061186c829493946123c8565b526118778251612503565b926040015f5b83518110156118d157806118c061189961091a600194886123d5565b6118a383876123d5565b516118ba6118b3875161ffff1690565b61ffff1690565b91612d7c565b6118ca82886123d5565b520161187d565b50505061066160405192839283611744565b6118f99250803d10610e1157610e028183611598565b5f8061185e565b611918919250833d8511610e1157610e028183611598565b905f611812565b604081019060408152825180925260608101916020809401905f5b81811061197f57505050828183039101528180845192838152019301915f5b828110611967575050505090565b835161ffff1685529381019392810192600101611959565b909194938551906005821015610e99579081529394938501938501919060010161193a565b3461030b575f60031936011261030b576119bc612cc2565b6119c4612e67565b6119cc612e67565b915f9061ffff6119de825161ffff1690565b16611adb575b806020606092016119fa6118b3825161ffff1690565b611abb575b5060408101611a136118b3825161ffff1690565b611a87575b5001611a296118b3825161ffff1690565b611a43575b5080825282526106616040519283928361191f565b611a65611a8191611a5d611a5785876123d5565b60039052565b5161ffff1690565b611a78611a718461264e565b93866123d5565b9061ffff169052565b5f611a2e565b611aa2611ab5915f611a9987896123d5565b525161ffff1690565b611a78611aae8661264e565b95886123d5565b5f611a18565b611aa2611ad591611a5d611acf87896123d5565b60029052565b5f6119ff565b9050611aef611ae9836123c8565b60019052565b6060611afd825161ffff1690565b91611b0d600193611a78876123c8565b90506119e4565b3461030b575f60031936011261030b57611b2c612cc2565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611b5f6124c2565b91611b6e6117b56105b4613054565b611b766124c2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa80156106c357611bfb9284925f92611900575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106c3575f92611c94575b5050611c18826123c8565b5260405f9201915b8351811015611c7a5780611c69611c59611c3f61091a600195896123d5565b611c4984876123d5565b516118ba6118b3895161ffff1690565b611c6383866123d5565b5161266a565b611c7382856123d5565b5201611c20565b611c848285613942565b9061066160405192839283611744565b611caa9250803d10610e1157610e028183611598565b5f80611c0d565b3461030b575f60031936011261030b57611cc96124c2565b611ce0611cd76105b4613054565b610d0e836123c8565b611ce86124c2565b6040517fce96cb77000000000000000000000000000000000000000000000000000000008152306004820152916020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106c357611c84935f91611d68575b50611d62836123c8565b52613942565b611d81915060203d602011610e1157610e028183611598565b5f611d58565b3461030b57604060031936011261030b57600435611da48161030f565b60243567ffffffffffffffff811161030b57611dc4903690600401610402565b91906001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156106c3575f91611ec5575b50166bffffffffffffffffffffffff5f541692813b1561030b575f93611ea8604051968795869485947f134ab19500000000000000000000000000000000000000000000000000000000865260048601612e93565b03915afa80156106c357611eb857005b806106b76100189261152b565b611ee7915060203d602011611eed575b611edf8183611598565b81019061303f565b5f611e53565b503d611ed5565b3461030b575f60031936011261030b57604051611f1081611560565b6002815260208082016040368237825115611f78575f815282519260019360011015611f785783836001604084015260405192602084019060208552518091526040840194915f5b828110611f655785870386f35b8351875295810195928101928401611f58565b61239b565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b57610661610fd5612edd565b3461030b575f60031936011261030b576040611ff5612f33565b82519182526020820152f35b3461030b575f60031936011261030b57612019613054565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083018281526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602486018190525f196044808801919091528652939593601f199390925f9061209a606489611598565b87519082885af1903d5f5190836120f9575b505050156120b657005b60405160208101959095526001600160a01b031660248501525f604485015260649081018452610018936120f4916120ee9082611598565b82613b7d565b613b7d565b91925090612110575083163b15155b5f80806120ac565b6001915014612108565b3461030b575f60031936011261030b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461030b57606060031936011261030b576004356bffffffffffffffffffffffff8116810361030b5761218860243561030f565b60443567ffffffffffffffff811161030b576121a8903690600401610402565b50506001600160a01b036121ba612424565b16330361146b57610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461030b575f60031936011261030b5760405161221881611560565b60028152602081019060403683376001600160a01b039182612238613054565b1690825115611f785752805160011015611f7857610661917f0000000000000000000000000000000000000000000000000000000000000000166040820152604051918291602083526020830190610463565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b604051906122db82611560565b565b67ffffffffffffffff811161153f5760051b60200190565b9291612300826122dd565b9161230e6040519384611598565b829481845260208094019160051b810192831161030b57905b8282106123345750505050565b83809183356123428161030f565b815201910190612327565b9291612358826122dd565b916123666040519384611598565b829481845260208094019160051b810192831161030b57905b82821061238c5750505050565b8135815290830190830161237f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805115611f785760200190565b8051821015611f785760209160051b010190565b9015611f785790565b9190811015611f785760051b0190565b3561050c8161030f565b516002811015610e995790565b6040513d5f823e3d90fd5b6040517f8f75315b0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156106c3575f9161248d575090565b90506020813d6020116124ba575b816124a860209383611598565b8101031261030b575161050c8161030f565b3d915061249b565b604051906040820182811067ffffffffffffffff82111761153f576040526001825260203681840137565b6040516124f98161157c565b5f8152905f368137565b9061250d826122dd565b61251a6040519182611598565b828152601f1961252a82946122dd565b0190602036910137565b6001600160a01b0380612545613054565b16911614612551575f90565b7f000000000000000000000000000000000000000000000000000000000000000090565b602090818184031261030b5780519067ffffffffffffffff821161030b57019180601f8401121561030b5782516125ab816122dd565b936125b96040519586611598565b818552838086019260051b82010192831161030b578301905b8282106125e0575050505090565b83809183516125ee8161030f565b8152019101906125d2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161263357565b6125f9565b919082604091031261030b576020825192015190565b5f1981146126335760010190565b905f19820191821161263357565b9190820391821161263357565b6040519061268482611544565b5f6060838281528260208201528260408201520152565b9081602091031261030b5751801515810361030b5790565b519061ffff8216820361030b57565b9081608091031261030b576127126060604051926126df84611544565b6126e8816126b3565b84526126f6602082016126b3565b6020850152612707604082016126b3565b6040850152016126b3565b606082015290565b612722612677565b506bffffffffffffffffffffffff5f541661273e6105b46131b4565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106c3575f91612847575b501561281d576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa9081156106c3575f916127f4575090565b61050c915060803d608011612816575b61280e8183611598565b8101906126c2565b503d612804565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b612869915060203d60201161286f575b6128618183611598565b81019061269b565b5f612795565b503d612857565b91909392935f5b8351811015612a7e5761289081836123d5565b51806128a0575b5060010161287d565b6128ad61091a83876123d5565b6128b783866123d5565b51916128d2604092838b01946118ba6118b3875161ffff1690565b92838211612a5557918493916001958861ffff6128f4612a0d975161ffff1690565b1615612a13576129248361291e61291961296c9796611c6361296497612929976123d5565b6133a4565b9661266a565b613350565b61294c6129346122ce565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b61299361297c61091a858a6123d5565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b90612897565b5050612924612a24915f939461266a565b91612a4d612a306122ce565b8381526effffffffffffffffffffffffffffff9094166020850152565b82015261296c565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261030b575190565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690612acf6105b46105b4613054565b908316908103612b4257506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152915060209082908180602481015b03915afa9081156106c3575f91612b29575090565b61050c915060203d602011610e1157610e028183611598565b03612b4d57505f1990565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b612bec612b9461408b565b5f612ba06105b46130dc565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa9182156106c3575f92612ca6575b50612c0f6108488251845190612626565b925f5b8251811015612c3e5780612c38612c2e61091a600194876123d5565b610d0e83896123d5565b01612c12565b5091908051915f5b8151811015612c945780612c5f61091a600193856123d5565b612c69858261316d565b5015612c77575b5001612c46565b612c8e90610d0e612c878861264e565b978a6123d5565b5f612c70565b50505082518110612ca25750565b8252565b612cbb9192503d805f833e610aa58183611598565b905f612bfe565b612cca612677565b506001600160a01b03612cdb6131b4565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa9081156106c3575f916127f4575090565b8181029291811591840414171561263357565b8115612d4f570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191612da283611560565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280612e5e575b612e1b5750505161050c91506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b830392831161263357612e07612e42612e3a612e589361050c96612d32565b612710900490565b92516effffffffffffffffffffffffffffff1690565b90612626565b50808411612de9565b6040519060a0820182811067ffffffffffffffff82111761153f57604052600482526080366020840137565b9293806080956001600160a01b03601f19956bffffffffffffffffffffffff601f9616885216602087015260606040870152816060870152868601375f8582860101520116010190565b612ee5614072565b90612ef7612ef1612b89565b51612503565b915f5b8151811015612f2f57612f10610bf882846123d5565b90612f1b81866123d5565b916002811015610e99576001925201612efa565b5050565b6040517f18160ddd000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009060207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168183600481845afa9283156106c3575f93613020575b50821561301857908060049392604051948580927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa80156106c357612ff89385925f92612ffb575b5050613fff565b91565b6130119250803d10610e1157610e028183611598565b5f80612ff1565b505050908190565b613038919350823d8411610e1157610e028183611598565b915f612fa5565b9081602091031261030b575161050c8161030f565b6001600160a01b036040517f38d52e0f000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156106c3575f916130bf57501690565b6130d8915060203d602011611eed57611edf8183611598565b1690565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150806004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156106c3575f916130bf57501690565b91909160015b83518110156131aa576001600160a01b038061318f83876123d5565b5116908316146131a157600101613173565b92505060019190565b505090505f905f90565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156106c3575f916130bf57501690565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166132776124c2565b916132866117b56105b4613054565b61328e6124c2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa80156106c3576133139284925f92611900575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106c3575f92613333575b5050613330836123c8565b52565b6133499250803d10610e1157610e028183611598565b5f80613325565b6effffffffffffffffffffffffffffff9081811161336c571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff908181116133c1571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b9061346c9060206134336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926123c8565b51604051809481927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa9182156106c3575f9261353f575b508161349d916134976105b461034261091a886123c8565b906138f4565b6134bb61091a6134b56105b461034261091a876123c8565b936123c8565b90823b1561030b576040517f272017e00000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481015b03925af180156106c35761352c575b5061050c614072565b806106b76135399261152b565b5f613523565b61349d91925061355d9060203d602011610e1157610e028183611598565b919061347f565b909161359f9060206134336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926123c8565b0381845afa9182156106c3575f92613644575b50816135ca916134976105b461034261091a896123c8565b6135e861091a6135e26105b461034261091a886123c8565b946123c8565b92803b1561030b576040517f272017e000000000000000000000000000000000000000000000000000000000815260048101939093526001600160a01b0390931660248301526044820152905f90829081838160648101613514565b6135ca9192506136629060203d602011610e1157610e028183611598565b91906135b2565b604051906136768261157c565b5f8252565b909192936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166136b16124c2565b956136ba6124c2565b956136c36124c2565b956136cc613669565b958061377e5750906136dd916123e9565b3591604051917f4cdad5060000000000000000000000000000000000000000000000000000000083526020838061371c87600483019190602083019252565b0381855afa80156106c35784613752945f9261375b575b5061373f9192846138f4565b613748896123c8565b52610d0e876123c8565b613330846123c8565b61373f92506137789060203d602011610e1157610e028183611598565b91613733565b9293926001810361381d575090613794916123e9565b3590604051917f0a28a477000000000000000000000000000000000000000000000000000000008352602083806137d384600483019190602083019252565b0381855afa9283156106c3575f936137f6575b5061373f836137529495846138f4565b613752935061381661373f9160203d602011610e1157610e028183611598565b93506137e6565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b9194939485613874575b5050825115611f785761387193602084015261425c565b50565b6001600160a01b0316803b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af180156106c3576138e5575b8061385a565b6138ee9061152b565b5f6138df565b6122db926001600160a01b03604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526120f482611544565b91906bffffffffffffffffffffffff5f5416906139606105b46130dc565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f84806139b386600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa9384156106c3575f94613b61575b506139d76108488951865190612626565b936139e86108488a51835190612626565b965f5b8a51811015613a2d5780613a11613a0761091a6001948f6123d5565b610d0e838b6123d5565b613a1b818a6123d5565b51613a26828c6123d5565b52016139eb565b509297909398919695508151935f5b8151811015613b4457613a5261091a82846123d5565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180613ab26020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9081156106c3576001945f92613b27575b50508a613ad4888461316d565b939015613afc5750613af4916109fa84613aed936123d5565b918b6123d5565b525b01613a3c565b9050613b0e919250610d0e8a8c6123d5565b613b21613b1a8961264e565b988b6123d5565b52613af6565b613b3d9250803d10610e1157610e028183611598565b5f80613ac7565b505050505091939250935083518110613b5a5750565b8084528252565b613b769194503d805f833e610aa58183611598565b925f6139c6565b905f602091828151910182855af115612419575f513d613be657506001600160a01b0381163b155b613bac5750565b6024906001600160a01b03604051917f5274afe7000000000000000000000000000000000000000000000000000000008352166004820152fd5b60011415613ba5565b919290926040916040613c00612cc2565b019161ffff613c11845161ffff1690565b1615613d875790613c2c91613c24613245565b97909661367b565b919083925f5b8851811015613d7a57613c45818b6123d5565b51613c5082886123d5565b51613c5a9161266a565b613c63906133a4565b613c6d828b6123d5565b516001600160a01b0316613c81838d6123d5565b51895161ffff1661ffff1690613c9692612d7c565b613c9f90613350565b613ca76122ce565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a0152613ce3828b6123d5565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101613c32565b5095509550955095915050565b91509150613d979492939461408b565b945f5b8651811015613dc15780613dbb613db661091a6001948b6123d5565b6141ab565b01613d9a565b509091929450613dd09361367b565b929391929091565b613de06124ed565b9061050c6124ed565b613df1612cc2565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613e236124c2565b613e31611cd76105b4613054565b613e396124c2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa80156106c357613ebe9284925f92611900575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106c3575f92613f46575b5050613ede839594956123c8565b5281819060405f9601955b8351811015613f3d5780613f2c613f22613f0861091a600195896123d5565b613f12848a6123d5565b516118ba6118b38d5161ffff1690565b611c6383896123d5565b613f3682886123d5565b5201613ee9565b50939250935050565b613f5c9250803d10610e1157610e028183611598565b5f80613ed0565b906c0c9f2c9cd04674edea4000000090818302915f1981850993838086109503948086039514613ff25784831115613fe55790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b821560030260111861424c565b50509061050c9250612d45565b91818302915f1981850993838086109503948086039514613ff25784831115613fe55790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b61407a6124c2565b90815115611f785760016020830152565b6140936124c2565b906001600160a01b036140a4613054565b16825115611f78576020830152565b91909160406140c0612cc2565b019061ffff938483511615614185576135e26141119161410b6140e1613245565b9890966001600160a01b036140f5896123c8565b5116916141018b6123c8565b5191511691612d7c565b936143ae565b518481018091116126335761297c61091a6122db9461417961413e614138612993966133a4565b96613350565b6141616141496122ce565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b600160408601526123c8565b915061050c9293506141a66001600160a01b036141a0613054565b166141ab565b6143ae565b6001600160a01b0381165f52600160205260405f2060408051916141ce83611560565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c15159182910152614213575050565b6129936122db926040519261422784611560565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b634e487b715f526020526024601cfd5b9192604090604061426b612cc2565b0161ffff61427b825161ffff1690565b161561437757614289613245565b9290505f5b8551811015614367578083858a896001956142a8836123c8565b511561435d57612919614341936142f983610882816142f38a6143579c6118ba6118b36142e9866142e36143069f6143009f61091a916123d5565b956123d5565b51925161ffff1690565b996123d5565b519061266a565b92613350565b6143296143116122ce565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b60018189015261299361297c61091a858c6123d5565b0161428e565b5050505050614357565b5095939250505061050c92613564565b5091929390505f5b83518110156143a1578061439b613db661091a600194886123d5565b0161437f565b5090929161050c92613564565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016916143e96105b46105b4613054565b9082169081036144ad5750506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481019290925230602483015260209182816044815f865af180156106c3576144819284925f92611900575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106c3575f9261449757505090565b61050c9250803d10610e1157610e028183611598565b8203612b4d57506040517f4cdad50600000000000000000000000000000000000000000000000000000000815260048101929092526020908290818060248101612b14560000000000000000000000000c150ff246d2d5878f838afe50ee37fa64aeeab700000000000000000000000058e5d76fbbd7e1b51f0fc0f66b7734e108be04610000000000000000000000000fefee13864c431717f5b2678607b6ce532a170c00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000072efd78dee86d5fef7d280355c203a481fb90fd8000000000000000000000000000000000000000000000000000000000000002d44656c6179656420596561726e205553445420436f6d706f756e645633204c656e64657220287973555344542900000000000000000000000000000000000000