0 txs
0 calls
constructor
constructor(address osToken, address assetToken, address osTokenVaultController, address osTokenConfig, address osTokenFlashLoans, address osTokenVaultEscrow, address strategiesRegistry, address strategyProxyImplementation, address balancerVault, address aavePool, address aaveOsToken, address aaveVarDebtAssetToken)
functions
getStrategyProxy
viewfunction getStrategyProxy(address vault, address user) view returns (address proxy)
isStrategyProxyExiting
viewfunction isStrategyProxyExiting(address proxy) view returns (bool isExiting)
strategyId
purefunction strategyId() pure returns (bytes32)
claimExitedAssets
nonpayablefunction claimExitedAssets(address vault, address user, tuple exitPosition)
deposit
nonpayablefunction deposit(address vault, uint256 osTokenShares)
enterExitQueue
nonpayablefunction enterExitQueue(address vault, uint256 positionPercent) returns (uint256 positionTicket)
forceEnterExitQueue
nonpayablefunction forceEnterExitQueue(address vault, address user) returns (uint256 positionTicket)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
permit
nonpayablefunction permit(address vault, uint256 osTokenShares, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
receiveFlashLoan
nonpayablefunction receiveFlashLoan(uint256 osTokenShares, bytes userData)
rescueLendingAssets
nonpayablefunction rescueLendingAssets(address vault, uint256 assets, uint256 maxSlippagePercent)
rescueVaultAssets
nonpayablefunction rescueVaultAssets(address vault, tuple exitPosition)
updateVaultState
nonpayablefunction updateVaultState(address vault, tuple harvestParams)
upgradeProxy
nonpayablefunction upgradeProxy(address vault)
events
Deposited
event Deposited(address indexed vault, address indexed user, uint256 osTokenShares, uint256 leverageOsTokenShares)
ExitedAssetsClaimed
event ExitedAssetsClaimed(address indexed vault, address indexed user, uint256 osTokenShares, uint256 assets)
ExitQueueEntered
event ExitQueueEntered(address indexed vault, address indexed user, uint256 positionTicket, uint256 timestamp, uint256 osTokenShares, uint256 positionPercent)
LendingAssetsRescued
event LendingAssetsRescued(address indexed vault, address indexed user, uint256 osTokenShares, uint256 assets)
StrategyProxyCreated
event StrategyProxyCreated(bytes32 indexed strategyProxyId, address indexed vault, address indexed user, address proxy)
StrategyProxyUpgraded
event StrategyProxyUpgraded(address indexed vault, address indexed user, address strategy)
VaultAssetsRescued
event VaultAssetsRescued(address indexed vault, address indexed user, uint256 osTokenShares, uint256 assets)
errors
AccessDenied
error AccessDenied()
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC1167FailedCreateClone
error ERC1167FailedCreateClone()
ExitQueueNotEntered
error ExitQueueNotEntered()
ExitRequestNotProcessed
error ExitRequestNotProcessed()
FailedInnerCall
error FailedInnerCall()
InvalidAssets
error InvalidAssets()
InvalidBalancerPoolId
error InvalidBalancerPoolId()
InvalidExitQueuePercent
error InvalidExitQueuePercent()
InvalidExitQueueTicket
error InvalidExitQueueTicket()
InvalidFlashloanAction
error InvalidFlashloanAction()
InvalidMaxSlippagePercent
error InvalidMaxSlippagePercent()
InvalidPosition
error InvalidPosition()
InvalidShares
error InvalidShares()
InvalidVault
error InvalidVault()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotHarvested
error NotHarvested()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UpgradeFailed
error UpgradeFailed()
ValueNotChanged
error ValueNotChanged()
ZeroAddress
error ZeroAddress()
creation bytecode
0x610200346102f857601f61484f38819003918201601f19168301916001600160401b038311848410176102fc57808492610180946040528339810103126102f85761004981610310565b9061005660208201610310565b61006260408301610310565b61006e60608401610310565b61007a60808501610310565b61008660a08601610310565b61009260c08701610310565b9161009f60e08801610310565b936100ad6101008901610310565b956100bb6101208a01610310565b976100d66101606100cf6101408d01610310565b9b01610310565b6001600160a01b039b8c1661016052908b1661018052908a1660c05290891660e052908816610100529087166101205290861660805260a091909152908416610140529083166101a0529082166101c052166101e05260405161452a908161032582396080518181816105670152818161160d01528181612a07015281816130210152818161343201528181613a050152613e5f015260a0518181816116710152613eea015260c05181818161018a015281816111ea015281816132e7015281816137460152818161383801528181613af80152613bd0015260e051818181613c8401526140f60152610100518181816101f60152818161108f0152818161145a015281816119cf01528181611cb70152818161324a0152818161355501526138b301526101205181818161194201528181611c2a015261433b0152610140518161313501526101605181818161082201528181610fd3015281816120640152818161228c0152818161250c0152818161281001528181612c0c01528181612deb01528181612fe6015281816133f10152818161366f015281816137a50152614295015261018051818181611f92015281816122f9015281816125a601528181612acc01528181612ba8015281816130a3015281816134e30152818161422901526143e201526101a051818181611fce015281816120a00152818161245e01528181612879015261298e01526101c05181611ed601526101e05181611f410152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102f85756fe60806040526004361015610011575f80fd5b5f3560e01c80632a5a0d7e146100f45780633ab7f631146100ef5780633b0c6d67146100ea57806347e7ef24146100e5578063492f4e18146100e057806374474d28146100db5780637ac2ff7b146100d65780639ab02a0f146100d1578063a6ed20f0146100cc578063ac9650d8146100c7578063b580e046146100c2578063d694dd24146100bd578063e28e20e4146100b85763e368fdb7146100b3575f80fd5b610cf6565b610cb4565b610af8565b610ac4565b610a54565b6109a6565b610909565b610762565b6104fa565b6104c0565b61048d565b61044e565b61033c565b61010e565b6001600160a01b0381160361010a57565b5f80fd5b3461010a57606036600319011261010a5760043561012b816100f9565b604435602435670de0b6b3a764000082101561032d5761014b33846115cb565b9161015583611eac565b508215908115610323575b50610314576040516363737ac960e11b815260048101839052906020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102da576101cf925f926102df575b506101c99082612147565b90610e5c565b60408051600360208201526001600160a01b038581169282019290925260608101939093527f0000000000000000000000000000000000000000000000000000000000000000169161022e81608081015b03601f1981018352826108ad565b823b1561010a57610258925f9283604051809681958294635296a43160e01b845260048401610e8c565b03925af180156102da576102bb927fb7972ed828b18abfbec411ed2ee61877a59573dd54d2145a70099fa408f737a992610299926102c0575b50339061226d565b60408051928352602083019190915233946001600160a01b0316938291820190565b0390a3005b806102ce5f6102d4936108ad565b806104b6565b5f610291565b610e2a565b6101c99192506103069060203d60201161030d575b6102fe81836108ad565b810190610e1b565b91906101be565b503d6102f4565b6318374fd160e21b5f5260045ffd5b905082115f610160565b63edbc804d60e01b5f5260045ffd5b3461010a57604036600319011261010a57600435610359816100f9565b6024356001600160401b03811161010a5780360391608060031984011261010a576001600160a01b031690813b1561010a5760405192631a7ff55360e01b8452602060048501528160040135602485015260248201358060130b80910361010a57604485015260448201356103cd816100f9565b6001600160a01b0316606485810191909152820135906022190181121561010a5701602460048201359101916001600160401b03821161010a578160051b3603831361010a57835f8161042e829682966080608485015260a4840191610ea3565b03925af180156102da5761043e57005b806102ce5f61044c936108ad565b005b3461010a57602036600319011261010a5760043561046b816100f9565b60018060a01b03165f525f602052602060ff60405f2054166040519015158152f35b3461010a57604036600319011261010a5761044c6004356104ad816100f9565b60243590610f49565b5f91031261010a57565b3461010a575f36600319011261010a5760206040517f8b74cefe9f33d72ccd3521e6d331272921607e547c75c914c2c56cfdad9defed8152f35b3461010a57602036600319011261010a57600435610517816100f9565b61052133826115cb565b6001600160a01b0381165f908152602081905260409020610544905b5460ff1690565b61074857604051633933604760e11b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690602081602481855afa9081156102da575f91610719575b501561070a575f6105ce916105b2611333565b90604051808095819463682d2ff360e01b83526004830161135a565b03915afa9081156102da575f916106e8575b508051156106d9576105fe8160208061060a94518301019101611391565b6001600160a01b031690565b906001600160a01b03821680159081156106cf575b506106c0576001600160a01b0316803b1561010a5760405163f2fde38b60e01b81526001600160a01b0383166004820152905f908290602490829084905af180156102da576106ac575b506040516001600160a01b0391821681523392909116907f746871013d9225e5b11b13b9256515b47fa5378b085f1ba9b07b5f5112480ccf9080602081016102bb565b806102ce5f6106ba936108ad565b5f610669565b638c8728c760e01b5f5260045ffd5b905030145f61061f565b6355299b4960e01b5f5260045ffd5b61070491503d805f833e6106fc81836108ad565b810190610ec7565b5f6105e0565b634ca8886760e01b5f5260045ffd5b61073b915060203d602011610741575b61073381836108ad565b810190611307565b5f61059f565b503d610729565b630e3d8e8d60e11b5f5260045ffd5b60ff81160361010a57565b3461010a5760c036600319011261010a575f80610853600435610784816100f9565b60243561080b604435916102206064359461079e86610757565b6084356107af60a435923390612634565b5060405163d505accf60e01b60208201523360248201526001600160a01b03821660448201526064810195909552608485019690965260ff90961660a484015260c483019590955260e482019490945291928290610104820190565b604051631cff79cd60e01b815294859384928391907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b03926001600160a01b03165af161086657005b61044c903d805f833e6106fc81836108ad565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b038211176108a857604052565b610879565b90601f801991011681019081106001600160401b038211176108a857604052565b604051906108dd60c0836108ad565b565b604051906108dd6080836108ad565b6001600160401b0381116108a857601f01601f191660200190565b3461010a57604036600319011261010a576024356004356001600160401b03821161010a573660238301121561010a57816004013590610948826108ee565b9161095660405193846108ad565b808352366024828601011161010a576020815f92602461044c97018387013784010152611458565b604090600319011261010a57600435610996816100f9565b906024356109a3816100f9565b90565b3461010a5760206109bf6109b93661097e565b906115cb565b6040516001600160a01b039091168152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610a2757505050505090565b9091929394602080610a45600193603f1986820301875289516109d1565b97019301930191939290610a18565b3461010a57602036600319011261010a576004356001600160401b03811161010a573660238201121561010a578060040135906001600160401b03821161010a573660248360051b8301011161010a57610ac0916024610ab49201611818565b604051918291826109f5565b0390f35b3461010a57608036600319011261010a57600435610ae1816100f9565b606036602319011261010a57602461044c916118e5565b3461010a57604036600319011261010a57600435610b15816100f9565b6024359081158015610ca3575b610c9457610b3033826115cb565b90610b4d61053d8360018060a01b03165f525f60205260405f2090565b61074857610b6683610b5f8484612666565b9050612147565b8015610c8557604051634933c21560e11b602082015260248101829052610bb1905f90610b968160448101610220565b60405180938192631cff79cd60e01b83528760048401610f27565b0381836001600160a01b0389165af180156102da57602095610c31610c24610c0e610c60947f91cd78d9994c342f6ef7d71956ecef9721d78270434de929d6d35a762ef3d041965f91610c6b575b508a8082518301019101610e1b565b9760018060a01b03165f525f60205260405f2090565b805460ff19166001179055565b6040805187815242602082015290810194909452606084015233936001600160a01b0316929081906080820190565b0390a3604051908152f35b610c7f91503d805f833e6106fc81836108ad565b5f610bff565b63673f032f60e11b5f5260045ffd5b6326bf739360e21b5f5260045ffd5b50670de0b6b3a76400008211610b22565b3461010a5760a036600319011261010a57600435610cd1816100f9565b60243590610cde826100f9565b606036604319011261010a5761044c91604491611bd1565b3461010a57610d043661097e565b90610d0f82826139f8565b1561070a57610d1e82826115cb565b90610d3b61053d8360018060a01b03165f525f60205260405f2090565b61074857610d55670de0b6b3a7640000610b5f8484612666565b8015610c8557604051634933c21560e11b602082015260248101829052610d85905f90610b968160448101610220565b0381836001600160a01b0389165af180156102da57602095610de7610c24610c0e670de0b6b3a7640000947f91cd78d9994c342f6ef7d71956ecef9721d78270434de929d6d35a762ef3d041965f91610c6b57508a8082518301019101610e1b565b604080518781524260208201529081019490945260608401919091526001600160a01b039081169316918060808101610c60565b9081602091031261010a575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b9060028201809211610e5757565b610e35565b91908201809211610e5757565b634e487b7160e01b5f52602160045260245ffd5b60041115610e8757565b610e69565b6040906109a39392815281602082015201906109d1565b81835290916001600160fb1b03831161010a5760209260051b809284830137010190565b60208183031261010a578051906001600160401b03821161010a570181601f8201121561010a57602081519101610efd826108ee565b92610f0b60405194856108ad565b8284528282011161010a57815f926020928386015e8301015290565b6001600160a01b0390911681526040602082018190526109a3929101906109d1565b9080156112f857610f5a3383612634565b506001600160a01b0381165f908152602081905260409020610f7b9061053d565b610748576040516323b872dd60e01b60208201523360248201526001600160a01b038216604482015260648101839052611004905f90610fbe8160848101610220565b604051631cff79cd60e01b81529283918291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b0381836001600160a01b0387165af180156102da576112e0575b506110298184612666565b908361103484611eac565b9093829315908115916112d6575b5080156112cd575b80156112c4575b6111ac575b5050611063915084612eb7565b801561116657604080515f60208201526001600160a01b038681169282019290925292811660608401527f0000000000000000000000000000000000000000000000000000000000000000166110c683608081015b03601f1981018552846108ad565b803b1561010a57604051635296a43160e01b8152925f9184918290849082906110f3908860048401610e8c565b03925af19081156102da577ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c59261114d92611152575b5060408051948552602085019190915233946001600160a01b031693918291820190565b0390a3565b806102ce5f611160936108ad565b5f611129565b5050604080519182525f602083015233926001600160a01b0316917ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5918190810161114d565b6111e69250816111c7916111c2602094886127f6565b610e5c565b604051809381926303d1689d60e11b8352600483019190602083019252565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156102da57611234915f916112a5575b5061122e61296a565b90612147565b8082101561125d5761106391611256910361124f8185612ab2565b8386612b5b565b835f611056565b5050604080519283525f602084015233936001600160a01b0316927ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c59250908190810161114d565b6112be915060203d60201161030d576102fe81836108ad565b5f611225565b50801515611051565b5083151561104a565b905015155f611042565b6112f3903d805f833e6106fc81836108ad565b61101e565b636edcc52360e01b5f5260045ffd5b9081602091031261010a5751801515810361010a5790565b6040519061132e6020836108ad565b5f8252565b604051906113426040836108ad565b600982526875706772616465563160b81b6020830152565b9060406109a3927f8b74cefe9f33d72ccd3521e6d331272921607e547c75c914c2c56cfdad9defed815281602082015201906109d1565b9081602091031261010a57516109a3816100f9565b5190600482101561010a57565b9081602091031261010a576109a3906113a6565b9081606091031261010a576113db816113a6565b91604060208301516113ec816100f9565b92015190565b919082608091031261010a57611407826113a6565b916020810151611416816100f9565b91606060408301516113ec816100f9565b9081606091031261010a5761143b816113a6565b916040602083015161144c816100f9565b9201516109a3816100f9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361070a5781519161149d602080830194830101846113b3565b6114a681610e7d565b806114d357506108dd926020826114c09351010190611427565b6001600160a01b039081169250166137a3565b6114dc81610e7d565b6001810361150d57506108dd926020826114f993510101906113f2565b92506001600160a01b039081169116613665565b61151681610e7d565b6002810361154757506108dd9260208261153393510101906113f2565b92506001600160a01b0390811691166133e8565b80611553600392610e7d565b0361157c576108dd9260208261156c93510101906113c7565b91506001600160a01b0316612fe3565b63adc9f0f960e01b5f5260045ffd5b7f8b74cefe9f33d72ccd3521e6d331272921607e547c75c914c2c56cfdad9defed81526001600160a01b0391821660208201529116604082015260600190565b906115e46102209160405192839160208301958661158b565b5190206040516338e1dd3160e21b81526004810182905291906020836024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9283156102da575f936116cc575b506001600160a01b038316156116505750565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff60248201527f00000000000000000000000000000000000000000000000000000000000000006014820152733d602d80600a3d3981f3363d3d373d3d3d363d73815260588101919091526037600c820120607882015260556043909101209150565b6116ef91935060203d6020116116f6575b6116e781836108ad565b810190611391565b915f61163d565b503d6116dd565b6001600160401b0381116108a85760051b60200190565b9061171e826116fd565b61172b60405191826108ad565b828152809261173c601f19916116fd565b01905f5b82811061174c57505050565b806060602080938501015201611740565b634e487b7160e01b5f52603260045260245ffd5b91908110156117b25760051b81013590601e198136030182121561010a5701908135916001600160401b03831161010a57602001823603811361010a579190565b61175d565b908092918237015f815290565b3d156117ee573d906117d5826108ee565b916117e360405193846108ad565b82523d5f602084013e565b606090565b9060206109a39281815201906109d1565b80518210156117b25760209160051b010190565b91909161182483611714565b925f5b81811061183357505050565b5f80611840838587611771565b90611850604051809381936117b7565b0390305af461185d6117c4565b901561188357906001916118718288611804565b5261187c8187611804565b5001611827565b604481511061010a576118a58160248060046118bd9501518301019101610ec7565b60405162461bcd60e51b8152918291600483016117f3565b0390fd5b9081606091031261010a5780516118d7816100f9565b916040602083015192015190565b906118f033836115cb565b9061191461191061053d8460018060a01b03165f525f60205260405f2090565b1590565b611bc257604051633adbb5af60e01b81526001600160a01b03848116600483015282356024830181905292907f000000000000000000000000000000000000000000000000000000000000000016606083604481845afa9283156102da575f80915f95611b8d575b506001600160a01b03878116911603611b7e576001841115611b185715611aa2575b505060408051600260208201526001600160a01b0386811692820192909252848216606082015260808101939093527f000000000000000000000000000000000000000000000000000000000000000016916119fd8160a08101610220565b823b1561010a57611a27925f9283604051809681958294635296a43160e01b845260048401610e8c565b03925af180156102da5761114d927f0751a391154a0437ff29e885c1cfbd7f0e63201c8fc308298cee3ba65ef470579261029992611a8e575b506001600160a01b0381165f908152602081905260409020611a87905b805460ff19169055565b339061226d565b806102ce5f611a9c936108ad565b5f611a60565b60408201359160200135813b1561010a576040516398e99bb760e01b81526001600160a01b038816600482015260248101869052604481019190915260648101929092525f908290608490829084905af180156102da57611b04575b8061199e565b806102ce5f611b12936108ad565b5f611afe565b5050505050611a7d611b399160018060a01b03165f525f60205260405f2090565b604080515f808252602082015233926001600160a01b0316917f0751a391154a0437ff29e885c1cfbd7f0e63201c8fc308298cee3ba65ef4705791908190810161114d565b63154a26f760e21b5f5260045ffd5b915050611bb391935060603d606011611bbb575b611bab81836108ad565b8101906118c1565b93915f61197c565b503d611ba1565b63171a12d760e21b5f5260045ffd5b91611bdc82846115cb565b91611bfc61191061053d8560018060a01b03165f525f60205260405f2090565b611bc257604051633adbb5af60e01b81526001600160a01b03858116600483015283356024830181905293907f000000000000000000000000000000000000000000000000000000000000000016606083604481845afa9283156102da575f80915f95611e87575b506001600160a01b03888116911603611b7e576001841115611e1c5715611da6575b505060408051600160208201526001600160a01b0387811692820192909252858216606082015260808101949094527f00000000000000000000000000000000000000000000000000000000000000001692611ce58160a08101610220565b833b1561010a57611d0f935f9283604051809781958294635296a43160e01b845260048401610e8c565b03925af19081156102da577f0692d4883b7fdb846537c159a4f16ab7f36fd8be83e2b46f05f66e563e01286e92611a7d92611d92575b50611d6b611d53828661226d565b93909560018060a01b03165f525f60205260405f2090565b6040805194855260208501929092526001600160a01b03908116941692908190810161114d565b806102ce5f611da0936108ad565b5f611d45565b60408201359160200135813b1561010a576040516398e99bb760e01b81526001600160a01b038916600482015260248101879052604481019190915260648101929092525f908290608490829084905af180156102da57611e08575b80611c86565b806102ce5f611e16936108ad565b5f611e02565b5050505091611e3f9150611a7d9060018060a01b03165f525f60205260405f2090565b604080515f80825260208201526001600160a01b0392831693909216917f0692d4883b7fdb846537c159a4f16ab7f36fd8be83e2b46f05f66e563e01286e918190810161114d565b915050611ea491935060603d606011611bbb57611bab81836108ad565b93915f611c64565b604051630ed1279f60e11b81526001600160a01b03821660048201529091602082806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156102da575f92612108575b508180612055575b50604051630ed1279f60e11b81526001600160a01b03909316600484015260208380602481015b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9283156102da575f93612034575b508280611f835750565b60405163386497fd60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820152919350602082806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da57612010925f92612013575b50613d2e565b91565b61202d91925060203d60201161030d576102fe81836108ad565b905f61200a565b61204e91935060203d60201161030d576102fe81836108ad565b915f611f79565b60405163d15e005360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820152939250602084806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9384156102da57611f3d946020926120e8925f926120f05750613d2e565b929350611f16565b61202d919250843d861161030d576102fe81836108ad565b61212291925060203d60201161030d576102fe81836108ad565b905f611f0e565b8115612133570490565b634e487b7160e01b5f52601260045260245ffd5b808202905f19838209908280831092039180830392146121c05781670de0b6b3a764000011156121b1577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b63227bc15360e01b5f5260045ffd5b50670de0b6b3a76400009250500490565b90670de0b6b3a76400008202905f19670de0b6b3a764000084099282808510940393808503941461226157838211156121b157670de0b6b3a7640000829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50906109a39250612129565b6040516370a0823160e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016939190602081602481885afa9081156102da575f916123ff575b50809481612366575b50506040516370a0823160e01b81526001600160a01b0382166004820152602081806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da575f91612347575b5080938161233e57505050565b6108dd92613d6a565b612360915060203d60201161030d576102fe81836108ad565b5f612331565b60405163a9059cbb60e01b60208201526001600160a01b038616602482015260448101929092526123c5915f916123aa82606481015b03601f1981018452836108ad565b604051631cff79cd60e01b8152938492839260048401610f27565b0381836001600160a01b0387165af180156102da576123e5575b806122cf565b6123f8903d805f833e6106fc81836108ad565b505f6123df565b612418915060203d60201161030d576102fe81836108ad565b5f6122c6565b600161242991613e34565b90918183811561262e5750506040516328530a4760e01b6020820152600160248201526124ab906001600160a01b03858116917f0000000000000000000000000000000000000000000000000000000000000000909116905f906124908160448101610220565b60405180958192631cff79cd60e01b83528560048401610f27565b038183865af19283156102da5761253d93612616575b5060405163095ea7b360e01b60208201526001600160a01b03821660248201525f1960448201525f906124f78160648101610220565b604051631cff79cd60e01b81529485918291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b038183865af19182156102da5761022061258f6125d7935f9687966125fe575b5060405163095ea7b360e01b60208201526001600160a01b0390911660248201525f1960448201529182906064820190565b604051631cff79cd60e01b815294859384928391907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b03925af180156102da576125e85750565b6125fb903d805f833e6106fc81836108ad565b50565b612611903d8089833e6106fc81836108ad565b61255d565b612629903d805f833e6106fc81836108ad565b6124c1565b93509150565b9061242991613e34565b51906001600160801b038216820361010a57565b9081602091031261010a576109a39061263e565b604051630e56821560e31b81525f9392916001600160a01b031690602081600481855afa9081156102da575f916127d7575b506127c85760405163f04da65b60e01b81526001600160a01b0383166004820152602081602481855afa9081156102da575f916127a9575b508061274c575b50604051632764b59160e11b81526001600160a01b03909216600483015260209082908180602481015b03915afa80156102da576001600160801b03915f9161271f57501690565b612741915060203d602011612745575b61273981836108ad565b810190612652565b1690565b503d61272f565b6040516303d1689d60e11b81526004810191909152909350602081602481875afa9182156102da57612701926020925f9161278c575b50949150916126d7565b6127a39150833d851161030d576102fe81836108ad565b5f612782565b6127c2915060203d60201161030d576102fe81836108ad565b5f6126d0565b63e775715160e01b5f5260045ffd5b6127f0915060203d6020116107415761073381836108ad565b5f612698565b60405163617ba03760e01b60208201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482019390935291811660648301525f608483018190529182916128aa916128628160a48101610220565b604051631cff79cd60e01b815294859384928391907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b03926001600160a01b03165af180156102da576125e85750565b519061ffff8216820361010a57565b9081606091031261010a5761291160408051926128ef8461088d565b6128f8816128c4565b8452612906602082016128c4565b6020850152016128c4565b604082015290565b90655af3107a4000820291808304655af3107a40001490151715610e5757565b604051906129486040836108ad565b60138252721b585e109bdc9c9bddd31d1d94195c98d95b9d606a1b6020830152565b60405163b286f46760e01b8152600160048201526060816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102da576129d16129d8916129dd935f91612a83575b505161ffff1690565b61ffff1690565b612919565b612a035f6129e9612939565b6040518093819263682d2ff360e01b83526004830161135a565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da575f91612a69575b5080518015612a645781602080612a5e936109a3969501019101610e1b565b9061408b565b505090565b612a7d91503d805f833e6106fc81836108ad565b5f612a3f565b612aa5915060603d606011612aab575b612a9d81836108ad565b8101906128d3565b5f6129c8565b503d612a93565b60405163a415bcad60e01b60208201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820193909352600260648201525f6084820181905292821660a482015282916128aa916128628160c48101610220565b939291612b499060409260018060a01b031686526060602087015260608601906109d1565b930152565b91908203918211610e5757565b604051632e1a7d4d60e01b6020820152602481018490526001600160a01b03831693919290612bd9905f90612b938160448101610220565b604051631cff79cd60e01b81529283918291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b038183895af180156102da57612d67575b506040516370a0823160e01b81526001600160a01b03828116600483015290947f00000000000000000000000000000000000000000000000000000000000000009091169290602086602481875afa9485156102da57612ca9965f96612d40575b50604051631b7f2ce960e11b60208201526001600160a01b03851660248201525f1960448201525f606482018190529392918490612c8c83608481016110b8565b60405163fa4bb79d60e01b8152998a958694859360048501612b24565b03925af19182156102da57612cee94602093612d28575b506040516370a0823160e01b81526001600160a01b0390921660048301529093849190829081906024820190565b03915afa80156102da576109a3925f91612d09575b50612b4e565b612d22915060203d60201161030d576102fe81836108ad565b5f612d03565b612d3b903d805f833e6106fc81836108ad565b612cc0565b5f9392919650612d5e9060203d60201161030d576102fe81836108ad565b95909192612c4b565b612d7a903d805f833e6106fc81836108ad565b612bea565b604051632e1a7d4d60e01b6020820152602481018490529093926001600160a01b0383169291612db8905f90612b938160448101610220565b038183885af180156102da57612e9f575b506040516370a0823160e01b81526001600160a01b03838116600483015290957f00000000000000000000000000000000000000000000000000000000000000009091169390602087602481885afa9586156102da57612ca9975f97612e6c575b50604051631b7f2ce960e11b60208201526001600160a01b038616602482015260448101919091525f606482018190529392918490612c8c83608481016110b8565b6110b89197505f949392612c8c612e92879360203d60201161030d576102fe81836108ad565b9993505092939450612e2a565b612eb2903d805f833e6106fc81836108ad565b612dc9565b612ec3612ecb916140cd565b61122e61296a565b670de0b6b3a764000003670de0b6b3a76400008111610e5757612eee90826121d1565b908103908111610e575790565b60405190612f0a6040836108ad565b600e82526d18985b185b98d95c941bdbdb125960921b6020830152565b909194939260e08252825160e083015260208301516002811015610e875761010083015260408301516001600160a01b03908116610120840152606084015116610140830152608083015161016083015260a09092015160c061018083018190529290612fda90612f9d906101a08501906109d1565b9660208401906060809160018060a01b03815116845260208101511515602085015260018060a01b03604082015116604085015201511515910152565b60a08201520152565b917f00000000000000000000000000000000000000000000000000000000000000009261301182828661415d565b61301d5f6129e9612efb565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da575f916133a5575b50805115613396578060208061307493518301019101610e1b565b6001600160a01b03909416936130886108ce565b908152600160208201526001600160a01b03851660408201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660608201528360808201526130de61131f565b60a08201526001600160a01b038216936131956130f96108df565b6001600160a01b0385168152925f60208501526001600160a01b03871660408501525f6060850181905260405163095ea7b360e01b60208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166024820181905260448201899052919061317a8160648101610220565b60405180958192631cff79cd60e01b83528d60048401610f27565b0381838c5af19283156102da576131f09561239c89946131d5935f9761337e575b506040516352bbbe2960e01b6020820152958693429260248601612f27565b604051631cff79cd60e01b8152948592839260048401610f27565b038183895af19182156102da5761320d92613366575b508261420f565b61321681611eac565b809291806132a6575b5050936132896110b8936132385f96946125d79861427b565b60405163a9059cbb60e01b60208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015260448101919091529384906064820190565b83604051809681958294631cff79cd60e01b845260048401610f27565b6132e3949196929593506132c46020916132be61296a565b906121d1565b604051809681926363737ac960e11b8352600483019190602083019252565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da576132385f96613338613289946125d79a6110b8998b926133455750612b4e565b959750939750509361321f565b61335f91925060203d60201161030d576102fe81836108ad565b905f612d03565b613379903d805f833e6106fc81836108ad565b613206565b613391903d808a833e6106fc81836108ad565b6131b6565b635904ec9360e11b5f5260045ffd5b6133b991503d805f833e6106fc81836108ad565b5f613059565b604051906133ce6040836108ad565b600b82526a1c995cd8dd5955985d5b1d60aa1b6020830152565b918361342191837f00000000000000000000000000000000000000000000000000000000000000009561341c84838961415d565b6142e0565b9161342e5f6129e96133bf565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da575f9161364b575b5080511561363c5761348b6105fe8260208061351495518301019101611391565b936134958561241e565b5060405163a9059cbb60e01b60208201526001600160a01b0382166024820152604481018390529095905f906134ce8160648101610220565b604051631cff79cd60e01b81529485918291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b0381836001600160a01b038a165af19081156102da5761353b938792613624575b50612b5b565b60405163a9059cbb60e01b60208201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018790529194821692909116906135b9905f9061359e8160648101610220565b60405180938192631cff79cd60e01b83528660048401610f27565b038183875af180156102da576125d7965f96613289936135dd9361360c5750612b4e565b60405163a9059cbb60e01b60208201526001600160a01b039095166024860152604485015283606481016110b8565b61361f903d808b833e6106fc81836108ad565b612d03565b613637903d805f833e6106fc81836108ad565b613535565b630681d31960e51b5f5260045ffd5b61365f91503d805f833e6106fc81836108ad565b5f61346a565b90918361369a91847f00000000000000000000000000000000000000000000000000000000000000009461341c84838861415d565b6136a383611eac565b906136af82938261408b565b6136b9818761420f565b808203613705575b505050916110b8916136db6128aa956132385f968561427b565b604051631cff79cd60e01b815294859384928692849290916001600160a01b031660048401610f27565b61374294929593506020916137239161371c61296a565b91036121d1565b604051809581926363737ac960e11b8352600483019190602083019252565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156102da576128aa956132386137966136db935f986110b8988a926133455750612b4e565b94965050958294506136c1565b7f00000000000000000000000000000000000000000000000000000000000000006137cf84848361415d565b6040516370a0823160e01b81526001600160a01b038481166004830152919091169290602081602481875afa80156102da57613813915f91613911575b50826127f6565b6040516303d1689d60e11b815260048101859052926020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9283156102da57856138a06128aa97613289938661389061388b6110b89a5f9c8d916138f2575b506132be856140cd565b610e49565b9161389b8383612ab2565b612d7f565b5060405163a9059cbb60e01b60208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015260448101919091529384906064820190565b61390b915060203d60201161030d576102fe81836108ad565b5f613881565b61392a915060203d60201161030d576102fe81836108ad565b5f61380c565b6040519061393f6040836108ad565b601882527f7661756c74466f726365457869744c747650657263656e7400000000000000006020830152565b51906001600160401b038216820361010a57565b9081606091031261010a57612911604080519261399b8461088d565b6139a48161263e565b84526139b26020820161396b565b60208501520161396b565b604051906139cc6040836108ad565b601982527f626f72726f77466f726365457869744c747650657263656e74000000000000006020830152565b90613a0390826115cb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691613a55905f613a3b613930565b6040518094819263682d2ff360e01b83526004830161135a565b0381875afa9182156102da575f92613d12575b508151151580613c5b575b613b9b575b50505f613aa392613a876139bd565b90604051808096819463682d2ff360e01b83526004830161135a565b03915afa9182156102da575f92613b7f575b508151613ac3575b50505f90565b602091613ad2613af492611eac565b604094919451809481926303d1689d60e11b8352600483019190602083019252565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da57613b48925f92613b5a575b508060208061122e93518301019101610e1b565b1115613b55575f80613abd565b600190565b61122e919250613b789060203d60201161030d576102fe81836108ad565b9190613b34565b613b949192503d805f833e6106fc81836108ad565b905f613ab5565b6020613baa84613bcc93612666565b604092919251809481926303d1689d60e11b8352600483019190602083019252565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156102da575f92613c34575b5061122e83602080613c209596518301019101610e1b565b1115613c2d575f80613a78565b5050600190565b613c209250613c5461122e9160203d60201161030d576102fe81836108ad565b9250613c08565b5060405163e48a5f7b60e01b81526001600160a01b0382166004820152606081806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102da57613cdb60206001600160401b039384935f91613ce3575b5001516001600160401b031690565b161415613a73565b613d05915060603d606011613d0b575b613cfd81836108ad565b81019061397f565b5f613ccc565b503d613cf3565b613d279192503d805f833e6106fc81836108ad565b905f613a68565b816b019d971e4fe8401e7400000019048111158215171561010a576b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b604051632e1a7d4d60e01b6020820152602481018490526001600160a01b03919091169290613da2905f90612b938160448101610220565b038183885af180156102da57613e07575b50823b1561010a576040516324a084df60e01b81526001600160a01b039290921660048301526024820152905f908290604490829084905af180156102da57613df95750565b806102ce5f6108dd936108ad565b613e1a903d805f833e6106fc81836108ad565b613db3565b9081602091031261010a57516109a381610757565b9091613e4083836115cb565b604051633933604760e11b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016939190602081602481885afa9081156102da575f9161406c575b5061406457506001600160a01b038416908115614055576001600160a01b0381169485158015613ff3575b61363c57613ee06102209160405192839160208301958661158b565b51902093613f0e857f0000000000000000000000000000000000000000000000000000000000000000614433565b946001946001600160a01b038716803b1561010a5760405163189acdbd60e31b8152306004820152905f908290602490829084905af180156102da57613fdf575b50803b1561010a576040516307a64c9360e11b8152600481018390526001600160a01b0388166024820152905f908290604490829084905af180156102da57613fcb575b506040516001600160a01b03871681527f5f321e0bf9a864b125a672da82d50bc69795f0d681bf419a50a1f63eeaf77fe490602090a4565b806102ce5f613fd9936108ad565b5f613f93565b806102ce5f613fed936108ad565b5f613f4f565b5060405163054fd4d560e41b81526020816004818a5afa9081156102da5760039160ff915f91614026575b501610613ec4565b614048915060203d60201161404e575b61404081836108ad565b810190613e1f565b5f61401e565b503d614036565b63d92e233d60e01b5f5260045ffd5b93505f925050565b614085915060203d6020116107415761073381836108ad565b5f613e99565b9080821015614098575090565b905090565b604051906140ac6040836108ad565b60128252711b585e15985d5b1d131d1d94195c98d95b9d60721b6020830152565b60405163e48a5f7b60e01b81526001600160a01b039091166004820152606081806024810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156102da57604061414591614151935f91613ce3575001516001600160401b031690565b6001600160401b031690565b612a035f6129e961409d565b60405163a9059cbb60e01b602082019081526001600160a01b039390931660248201526044808201949094529283526141be915f918291906141a06064876108ad565b60018060a01b031694519082865af16141b76117c4565b9083614496565b80519081151591826141f4575b50506141d45750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6142079250602080918301019101611307565b155f806141cb565b60405163573ade8160e01b60208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015260448201939093526002606482015291811660848301525f9182916128aa916128628160a48101610220565b604051631a4ca37b60e21b60208201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482019390935291811660648301525f9182916128aa916128628160848101610220565b604051630a2ebb1960e11b60208201526001600160a01b0390911660248201526044810192909252606482019290925290919061436c905f906143268160848101610220565b604051631cff79cd60e01b81529283918291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048401610f27565b0381836001600160a01b0388165af180156102da5761439c915f91614419575b5060208082518301019101610e1b565b918215614413575f836128aa92604051630d0e30db60e41b6020820152600481526143c86024826108ad565b60405163fa4bb79d60e01b815294859384928692849290917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048501612b24565b505f9150565b61442d91503d805f833e6106fc81836108ad565b5f61438c565b6e5af43d82803e903d91602b57fd5bf390763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b17602052603760095ff5906001600160a01b0382161561448757565b6330be1a3d60e21b5f5260045ffd5b906144ba57508051156144ab57805190602001fd5b630a12f52160e11b5f5260045ffd5b815115806144eb575b6144cb575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156144c356fea2646970667358221220ec3f01e9b59c3752410b7e3fad006a0670c5646888bbbe7123b92fcc702e57f664736f6c634300081a0033000000000000000000000000f1c9acdc66974dfb6decb12aa385b9cd01190e38000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002a261e60fb14586b474c208b1b7ac6d0f5000306000000000000000000000000287d1e2a8de183a8bf8f2b09fa1340fbd766eb59000000000000000000000000ebe12d858e55ddc5fc5a8153dc3e117824fbf5d200000000000000000000000009e84205df7c68907e619d07afd90143c576360500000000000000000000000090b82e4b3aa385b4a02b7ebc1892a4bed6b5c4650000000000000000000000008f48130b9b96b58035b4a9389ecdabc00d59d0c8000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c800000000000000000000000087870bca3f3fd6335c3f4ce8392d69350b4fa4e2000000000000000000000000927709711794f3de5ddbf1d176bee2d55ba13c21000000000000000000000000ea51d7853eefb32b6ee06b1c12e6dcca88be0ffe