3 txs
5 calls
constructor
constructor(address _governance)
functions
defaultOracleDecimals
viewfunction defaultOracleDecimals() view returns (uint8)
getMorphoRewardsRate
viewfunction getMorphoRewardsRate(address _vault) view returns (uint256)
getRewardsRate
viewfunction getRewardsRate(address _vault) view returns (uint256 totalAPR)
getVaultConfig
viewfunction getVaultConfig(address _vault) view returns (uint256 morphoRate, address assetPriceOracle, uint256 rewardTokenCount)
getVaultRewardTokens
viewfunction getVaultRewardTokens(address _vault) view returns (tuple[])
governance
viewfunction governance() view returns (address)
MAX_BPS
viewfunction MAX_BPS() view returns (uint256)
morphoToken
viewfunction morphoToken() view returns (address)
morphoWethPool
viewfunction morphoWethPool() view returns (address)
ORACLE_DECIMALS
viewfunction ORACLE_DECIMALS() view returns (uint256)
per
viewfunction per() view returns (uint256)
SECONDS_PER_YEAR
viewfunction SECONDS_PER_YEAR() view returns (uint256)
vaultRewards
viewfunction vaultRewards(address) view returns (uint256 morphoRate, uint8 assetDecimals, address assetPriceOracle)
WAD
viewfunction WAD() view returns (uint256)
wethUsdOracle
viewfunction wethUsdOracle() view returns (address)
removeVaultRewards
nonpayablefunction removeVaultRewards(address _vault)
setMorphoPricing
nonpayablefunction setMorphoPricing(address _morphoToken, address _morphoWethPool, address _wethUsdOracle)
setMorphoRate
nonpayablefunction setMorphoRate(address _vault, uint256 _morphoRate)
setMorphoRates
nonpayablefunction setMorphoRates(address[] _vaults, uint256[] _morphoRates)
setPer
nonpayablefunction setPer(uint256 _per)
setVaultRewards
nonpayablefunction setVaultRewards(address _vault, uint256 _morphoRate, address[] _tokens, address[] _priceOracles, uint256[] _rewardRates, address _assetPriceOracle)
transferGovernance
nonpayablefunction transferGovernance(address _newGovernance)
updatePriceOracle
nonpayablefunction updatePriceOracle(address _vault, uint256 _tokenIndex, address _priceOracle)
updateRewardRate
nonpayablefunction updateRewardRate(address _vault, uint256 _tokenIndex, uint256 _rewardRate)
events
GovernanceTransferred
event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance)
MorphoRateUpdated
event MorphoRateUpdated(address indexed vault, uint256 morphoRate)
RewardTokenAdded
event RewardTokenAdded(address indexed vault, address indexed token, uint256 rewardRate)
RewardTokenRemoved
event RewardTokenRemoved(address indexed vault, address indexed token)
VaultRewardsUpdated
event VaultRewardsUpdated(address indexed vault, uint256 morphoRate, uint256 rewardTokenCount)
errors
R
error R()
T
error T()
creation bytecode
0x60806040526002805460ff191660081790556305f5e10060055534801562000025575f80fd5b506040516200371338038062003713833981016040819052620000489162000109565b5f80546001600160a01b0319166001600160a01b03831690811782556040518392907f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80908290a35050600280547458d97b57bb95320f9a05dc918aef65434969c2b200610100600160a81b0319909116179055600380546001600160a01b03199081167325b96761e765b9ac20db18fa57fa91e3b617ec6f1790915560048054909116735f4ec3df9cbd43714fe2740f5e3616155c5b841917905562000138565b5f602082840312156200011a575f80fd5b81516001600160a01b038116811462000131575f80fd5b9392505050565b6135cd80620001465f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c806399e34231116100bf578063de1eb9a311610079578063de1eb9a3146102e1578063e51be96814610347578063e6a69ab8146103a6578063f7e9d166146103b1578063f7fff6aa146103c4578063fd967f47146103d7575f80fd5b806399e34231146102565780639df6e24d14610269578063b70bc3b51461027c578063b8543e701461029c578063ca44bb53146102af578063d38bfff4146102ce575f80fd5b80634709a4e9116101105780634709a4e9146101ee5780635aa6e675146102015780636893f913146102135780636a146024146102265780636cc8c543146102355780637ec9c3b81461024d575f80fd5b80630241c4ae14610157578063161c15d01461016c5780631ea155021461017f578063234474dc1461019d57806330b9fa25146101c8578063361870c1146101db575b5f80fd5b61016a610165366004612db2565b6103e0565b005b61016a61017a366004612ddc565b61046f565b61018a6305f5e10081565b6040519081526020015b60405180910390f35b6004546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610194565b61016a6101d6366004612e3b565b61047c565b6003546101b0906001600160a01b031681565b61016a6101fc366004612ea2565b61060f565b5f546101b0906001600160a01b031681565b61016a610221366004612ed4565b6106ed565b61018a670de0b6b3a764000081565b6002546101b09061010090046001600160a01b031681565b61018a60055481565b61016a610264366004612f1c565b61080f565b61016a610277366004612f37565b610899565b61028f61028a366004612f1c565b6109e3565b6040516101949190612f6b565b61018a6102aa366004612f1c565b610a8b565b6002546102bc9060ff1681565b60405160ff9091168152602001610194565b61016a6102dc366004612f1c565b610ac4565b6103246102ef366004612f1c565b6001600160a01b039081165f908152600160208190526040909120805460028201549190920154919361010090910490921691565b604080519384526001600160a01b03909216602084015290820152606001610194565b610380610355366004612f1c565b60016020525f90815260409020805460029091015460ff81169061010090046001600160a01b031683565b6040805193845260ff90921660208401526001600160a01b031690820152606001610194565b61018a6301e1855881565b61018a6103bf366004612f1c565b610b60565b61016a6103d2366004612fdd565b610d3c565b61018a61271081565b6103e8611253565b6001600160a01b0382166104175760405162461bcd60e51b815260040161040e9061309d565b60405180910390fd5b6001600160a01b0382165f8181526001602052604090819020839055517fd730882674feb88f24f966855778fe520d4c46810ee76d49b78f78a87edb726a906104639084815260200190565b60405180910390a25050565b610477611253565b600555565b610484611253565b8281146104cb5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604482015260640161040e565b5f5b83811015610608575f8585838181106104e8576104e86130c4565b90506020020160208101906104fd9190612f1c565b6001600160a01b0316036105235760405162461bcd60e51b815260040161040e9061309d565b828282818110610535576105356130c4565b9050602002013560015f878785818110610551576105516130c4565b90506020020160208101906105669190612f1c565b6001600160a01b0316815260208101919091526040015f2055848482818110610591576105916130c4565b90506020020160208101906105a69190612f1c565b6001600160a01b03167fd730882674feb88f24f966855778fe520d4c46810ee76d49b78f78a87edb726a8484848181106105e2576105e26130c4565b905060200201356040516105f891815260200190565b60405180910390a26001016104cd565b5050505050565b610617611253565b6001600160a01b03831661063d5760405162461bcd60e51b815260040161040e9061309d565b6001600160a01b0383165f9081526001602081905260409091200154821061069d5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b604482015260640161040e565b8060015f856001600160a01b03166001600160a01b031681526020019081526020015f2060010183815481106106d5576106d56130c4565b905f5260205f20906004020160020181905550505050565b6106f5611253565b6001600160a01b03831661073b5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161040e565b6001600160a01b0382166107805760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081c1bdbdb60a21b604482015260640161040e565b6001600160a01b0381166107c75760405162461bcd60e51b815260206004820152600e60248201526d496e76616c6964206f7261636c6560901b604482015260640161040e565b600280546001600160a01b0394851661010002610100600160a81b0319909116179055600380549284166001600160a01b031993841617905560048054919093169116179055565b610817611253565b6001600160a01b0381165f9081526001602081905260408220828155919061084190830182612d3f565b5060020180546001600160a81b0319169055604080515f80825260208201526001600160a01b038316917f3bdb93f5f2e87d9bff77ae9311c98da6fb4a8378fb8101c01a61a958eebfcfaf910160405180910390a250565b6108a1611253565b6001600160a01b0383166108c75760405162461bcd60e51b815260040161040e9061309d565b6001600160a01b0383165f908152600160208190526040909120015482106109275760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b604482015260640161040e565b6001600160a01b0381166109745760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207072696365206f7261636c6560601b604482015260640161040e565b8060015f856001600160a01b03166001600160a01b031681526020019081526020015f2060010183815481106109ac576109ac6130c4565b905f5260205f2090600402016001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6001600160a01b0381165f9081526001602081815260408084209092018054835181840281018401909452808452606094919290919084015b82821015610a80575f848152602090819020604080516080810182526004860290920180546001600160a01b039081168452600180830154909116848601526002820154928401929092526003015460ff1660608301529083529092019101610a1c565b505050509050919050565b6001600160a01b0381165f90815260016020526040812080548203610ab257505f92915050565b8054610abd9061129c565b9392505050565b610acc611253565b6001600160a01b038116610b115760405162461bcd60e51b815260206004820152600c60248201526b5a45524f204144445245535360a01b604482015260640161040e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce809190a35050565b6001600160a01b0381165f9081526001602052604081208054158015610b8857506001810154155b15610b9557505f92915050565b5f610c15846001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf991906130d8565b60028401546001600160a01b036101008204169060ff16611497565b9050805f03610c2757505f9392505050565b815415610c4b575f610c3b835f015461129c565b9050610c478185613103565b9350505b5f5b6001830154811015610d34575f836001018281548110610c6f57610c6f6130c4565b5f918252602080832060408051608081018252600490940290910180546001600160a01b03908116855260018201541692840192909252600282015490830181905260039091015460ff1660608301529092509003610cce5750610d2c565b5f6301e185588260400151610ce39190613116565b90505f610cf98284602001518560600151611497565b90505f85610d0f670de0b6b3a764000084613116565b610d199190613141565b9050610d258189613103565b9750505050505b600101610c4d565b505050919050565b610d44611253565b6001600160a01b038916610d6a5760405162461bcd60e51b815260040161040e9061309d565b8584148015610d7857508582145b610dbc5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604482015260640161040e565b6001600160a01b0389165f9081526001602081905260408220610de192910190612d3f565b6001600160a01b03808a165f818152600160209081526040918290208c815560028101805495871661010002610100600160a81b03199096169590951790945581516338d52e0f60e01b815291516338d52e0f9260048082019392918290030181865afa158015610e54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e789190613160565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed7919061318b565b60028201805460ff191660ff929092169190911790555f5b87811015611202575f898983818110610f0a57610f0a6130c4565b9050602002016020810190610f1f9190612f1c565b6001600160a01b031603610f655760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161040e565b5f878783818110610f7857610f786130c4565b9050602002016020810190610f8d9190612f1c565b6001600160a01b031603610fda5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207072696365206f7261636c6560601b604482015260640161040e565b8160010160405180608001604052808b8b85818110610ffb57610ffb6130c4565b90506020020160208101906110109190612f1c565b6001600160a01b03168152602001898985818110611030576110306130c4565b90506020020160208101906110459190612f1c565b6001600160a01b03168152602001878785818110611065576110656130c4565b9050602002013581526020018b8b85818110611083576110836130c4565b90506020020160208101906110989190612f1c565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f7919061318b565b60ff9081169091528254600180820185555f948552602094859020845160049093020180546001600160a01b03199081166001600160a01b039485161782559585015191810180549096169190921617909355604082015160028401556060909101516003909201805460ff191692909116919091179055888882818110611181576111816130c4565b90506020020160208101906111969190612f1c565b6001600160a01b03168b6001600160a01b03167f8ab68562a70a02d12b0bbb803d106d670bb6660d060e8cc535baee4fcb04598b8787858181106111dc576111dc6130c4565b905060200201356040516111f291815260200190565b60405180910390a3600101610eef565b50604080518a8152602081018990526001600160a01b038c16917f3bdb93f5f2e87d9bff77ae9311c98da6fb4a8378fb8101c01a61a958eebfcfaf910160405180910390a250505050505050505050565b5f546001600160a01b0316331461129a5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015260640161040e565b565b5f8115806112b357506003546001600160a01b0316155b156112bf57505f919050565b60035460408051630dfe168160e01b815290516001600160a01b03909216915f918391630dfe1681916004808201926020929091908290030181865afa15801561130b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132f9190613160565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113929190613160565b6002549091505f906001600160a01b036101009091048116908416036113ba575060016113e7565b6002546001600160a01b036101009091048116908316036113dc57505f6113e7565b505f95945050505050565b5f6114278583898561141757611412600173fffd8963efd1fc6a506488495d951d5263988d266131a4565b611522565b6114126401000276a360016131cb565b9150505f811261143d57505f9695505050505050565b6004545f90611454906001600160a01b0316611bcc565b9050805f0361146a57505f979650505050505050565b60055481611477846131eb565b6114819190613116565b61148b9190613141565b98975050505050505050565b5f835f036114a657505f610abd565b6001600160a01b0383166114de576114bf82600a6132e5565b6114cd6305f5e10086613116565b6114d79190613141565b9050610abd565b5f6114e884611bcc565b9050805f036114fa575f915050610abd565b61150583600a6132e5565b61150f8287613116565b6115199190613141565b95945050505050565b5f80835f036115585760405162461bcd60e51b8152602060048201526002602482015261415360f01b604482015260640161040e565b5f80876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ba9190613324565b5050505050915091508661160a57816001600160a01b0316856001600160a01b0316118015611605575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038616105b611638565b816001600160a01b0316856001600160a01b031610801561163857506401000276a36001600160a01b038616115b61166a5760405162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015260640161040e565b5f6040518060a00160405280846001600160a01b031681526020018360020b81526020018a6001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ee91906133bd565b6001600160801b031681526020018a6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175c91906133d6565b62ffffff1681526020018a6001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c691906133f8565b600290810b9091526040805160a0810182528a81525f602080830182905285516001600160a01b03168385015285015190930b6060820152908301516001600160801b031660808201529192508813905b80511580159061183d5750876001600160a01b031681604001516001600160a01b031614155b15611b87576040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260408201516001600160a01b039081168252606083015160808601516118a9928f1691635339c296918f611cd1565b1515604083015260020b60208201819052620d89e71913156118d457620d89e7196020820152611908565b6118e1620d89e719613411565b60020b816020015160020b1315611908576118ff620d89e719613411565b60020b60208201525b6119158160200151611eb2565b6001600160a01b03166060820152604082015161198a908c61194f578a6001600160a01b031683606001516001600160a01b031611611969565b8a6001600160a01b031683606001516001600160a01b0316105b611977578260600151611979565b8a5b6080850151855160608901516121cd565b60c085015260a084015260808301526001600160a01b0316604083015282156119ec576119c08160c001518260800151016123b5565b825103825260a08101516119d3906123b5565b826020018181516119e49190613431565b905250611a2f565b6119f98160a001516123b5565b825101825260c08101516080820151611a1a91611a1591613103565b6123b5565b82602001818151611a2b9190613450565b9052505b80606001516001600160a01b031682604001516001600160a01b031603611b4b57806040015115611b2657602081015160405163f30dba9360e01b815260029190910b60048201525f906001600160a01b038e169063f30dba939060240161010060405180830381865afa158015611aa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acd9190613477565b5050505050509150508b15611adf575f035b5f81600f0b12611afe57808360800151611af99190613519565b611b16565b611b0781613539565b8360800151611b16919061355e565b6001600160801b03166080840152505b8a611b35578060200151611b3e565b60018160200151035b60020b6060830152611b81565b805f01516001600160a01b031682604001516001600160a01b031614611b8157611b7882604001516123c9565b60020b60608301525b50611817565b8115158a151514611ba85760208101518151611ba3908b613431565b611bba565b8051611bb4908a613431565b81602001515b909c909b509950505050505050505050565b5f6001600160a01b038216611be657506305f5e100919050565b816001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c40575060408051601f3d908101601f19168201909252611c3d918101906130d8565b60015b611c4b57505f919050565b5f8113611c5a57505f92915050565b5f611c64846126ce565b90508060ff16600803611c78575092915050565b60088160ff161015611cac57611c8f81600861357e565b611c9a90600a6132e5565b611ca49083613116565b949350505050565b611cb760088261357e565b611cc290600a6132e5565b611ca49083613141565b919050565b5f805f8460020b8660020b81611ce957611ce961312d565b0590505f8660020b128015611d1557508460020b8660020b81611d0e57611d0e61312d565b0760020b15155b15611d1e575f19015b8315611de5576040516001600160e01b031960e089901b168152600282900b600881901d600181810b600485015290926101009092079160ff83169190911b80015f1901905f9082908d908d90602401602060405180830381865afa158015611d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dad91906130d8565b168015159650905085611dc757888360ff16860302611dda565b88611dd18261273e565b840360ff168603025b965050505050611ea7565b60405160e088901b6001600160e01b0319168152600182810160020b600881901d80830b6004850152926101009091079160ff83161b5f190119905f9082908d908d90602401602060405180830381865afa158015611e46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6a91906130d8565b168015159650905085611e8a57888360ff0360ff16866001010102611ea0565b8883611e95836127dc565b0360ff168660010101025b9650505050505b509550959350505050565b5f805f8360020b12611ec7578260020b611ece565b8260020b5f035b9050620d89e8811115611ef4576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f03611f0957600160801b611f1b565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611f4f576ffff97272373d413259a46990580e213a0260801c5b6004821615611f6e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611f8d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611fac576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611fcb576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611fea576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612009576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612029576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612049576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612069576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612089576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156120a9576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156120c9576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156120e9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612109576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561212a576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561214a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612169576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612186576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156121a557805f19816121a1576121a161312d565b0490505b6401000000008106156121b95760016121bb565b5f5b60ff16602082901c0192505050919050565b5f8080806001600160a01b03808916908a161015818712801590612250575f6122048989620f42400362ffffff16620f42406128c3565b90508261221d576122188c8c8c600161296d565b61222a565b61222a8b8d8c60016129dc565b955085811061223b578a965061224a565b6122478c8b8386612a91565b96505b50612296565b81612266576122618b8b8b5f6129dc565b612272565b6122728a8c8b5f61296d565b935083885f031061228557899550612296565b6122938b8a8a5f0385612ad9565b95505b6001600160a01b038a81169087161482156122f8578080156122b55750815b6122cb576122c6878d8c60016129dc565b6122cd565b855b95508080156122da575081155b6122ef576122ea878d8c5f61296d565b6122f1565b845b9450612341565b8080156123025750815b612318576123138c888c600161296d565b61231a565b855b9550808015612327575081155b61233c576123378c888c5f6129dc565b61233e565b845b94505b811580156123505750885f0385115b1561235b57885f0394505b81801561237a57508a6001600160a01b0316876001600160a01b031614155b156123895785890393506123a6565b6123a3868962ffffff168a620f42400362ffffff16612b1f565b93505b50505095509550955095915050565b5f600160ff1b82106123c5575f80fd5b5090565b5f6401000276a36001600160a01b03831610801590612404575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b612421576040516324c070df60e11b815260040160405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106124b557607f810383901c91506124bf565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146126bf57886001600160a01b03166126a482611eb2565b6001600160a01b031611156126b957816126c1565b806126c1565b815b9998505050505050505050565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612729575060408051601f3d908101601f191682019092526127269181019061318b565b60015b61273857505060025460ff1690565b92915050565b5f80821161274a575f80fd5b600160801b821061275d57608091821c91015b68010000000000000000821061277557604091821c91015b640100000000821061278957602091821c91015b62010000821061279b57601091821c91015b61010082106127ac57600891821c91015b601082106127bc57600491821c91015b600482106127cc57600291821c91015b60028210611ccc57600101919050565b5f8082116127e8575f80fd5b5060ff6001600160801b0382161561280357607f190161280b565b608082901c91505b67ffffffffffffffff82161561282457603f190161282c565b604082901c91505b63ffffffff82161561284157601f1901612849565b602082901c91505b61ffff82161561285c57600f1901612864565b601082901c91505b60ff821615612876576007190161287e565b600882901c91505b600f8216156128905760031901612898565b600482901c91505b60038216156128aa57600119016128b2565b600282901c91505b6001821615611ccc575f1901919050565b5f80805f19858709858702925082811083820303915050805f036128f7575f84116128ec575f80fd5b508290049050610abd565b808411612902575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f836001600160a01b0316856001600160a01b0316111561298c579293925b816129b9576129b4836001600160801b03168686036001600160a01b0316600160601b6128c3565b611519565b611519836001600160801b03168686036001600160a01b0316600160601b612b1f565b5f836001600160a01b0316856001600160a01b031611156129fb579293925b600160601b600160e01b03606084901b166001600160a01b038686038116908716612a24575f80fd5b83612a5a57866001600160a01b0316612a478383896001600160a01b03166128c3565b81612a5457612a5461312d565b04612a86565b612a86612a718383896001600160a01b0316612b1f565b886001600160a01b0316808204910615150190565b979650505050505050565b5f80856001600160a01b031611612aa6575f80fd5b5f846001600160801b031611612aba575f80fd5b81612acc576129b48585856001612b5b565b6115198585856001612c3d565b5f80856001600160a01b031611612aee575f80fd5b5f846001600160801b031611612b02575f80fd5b81612b13576129b48585855f612c3d565b6115198585855f612b5b565b5f612b2b8484846128c3565b90505f8280612b3c57612b3c61312d565b8486091115610abd575f198110612b51575f80fd5b6001019392505050565b5f8115612bcb575f6001600160a01b03841115612b8f57612b8a84600160601b876001600160801b03166128c3565b612ba6565b612ba66001600160801b038616606086901b613141565b9050612bc3612bbe826001600160a01b038916613103565b612d2a565b915050611ca4565b5f6001600160a01b03841115612bf857612bf384600160601b876001600160801b0316612b1f565b612c15565b612c15606085901b6001600160801b038716808204910615150190565b905080866001600160a01b031611612c2b575f80fd5b6001600160a01b038616039050611ca4565b5f825f03612c4c575083611ca4565b600160601b600160e01b03606085901b168215612cde576001600160a01b03861684810290858281612c8057612c8061312d565b0403612cb057818101828110612cae57612ca483896001600160a01b031683612b1f565b9350505050611ca4565b505b50612bc38185612cc96001600160a01b038a1683613141565b612cd39190613103565b808204910615150190565b6001600160a01b03861684810290858281612cfb57612cfb61312d565b04148015612d0857508082115b612d10575f80fd5b808203612ca4612bbe846001600160a01b038b1684612b1f565b806001600160a01b0381168114611ccc575f80fd5b5080545f8255600402905f5260205f2090810190612d5d9190612d60565b50565b5b808211156123c55780546001600160a01b0319908116825560018201805490911690555f600282015560038101805460ff19169055600401612d61565b6001600160a01b0381168114612d5d575f80fd5b5f8060408385031215612dc3575f80fd5b8235612dce81612d9e565b946020939093013593505050565b5f60208284031215612dec575f80fd5b5035919050565b5f8083601f840112612e03575f80fd5b50813567ffffffffffffffff811115612e1a575f80fd5b6020830191508360208260051b8501011115612e34575f80fd5b9250929050565b5f805f8060408587031215612e4e575f80fd5b843567ffffffffffffffff80821115612e65575f80fd5b612e7188838901612df3565b90965094506020870135915080821115612e89575f80fd5b50612e9687828801612df3565b95989497509550505050565b5f805f60608486031215612eb4575f80fd5b8335612ebf81612d9e565b95602085013595506040909401359392505050565b5f805f60608486031215612ee6575f80fd5b8335612ef181612d9e565b92506020840135612f0181612d9e565b91506040840135612f1181612d9e565b809150509250925092565b5f60208284031215612f2c575f80fd5b8135610abd81612d9e565b5f805f60608486031215612f49575f80fd5b8335612f5481612d9e565b9250602084013591506040840135612f1181612d9e565b602080825282518282018190525f919060409081850190868401855b82811015612fd057815180516001600160a01b039081168652878201511687860152858101518686015260609081015160ff169085015260809093019290850190600101612f87565b5091979650505050505050565b5f805f805f805f805f60c08a8c031215612ff5575f80fd5b893561300081612d9e565b985060208a0135975060408a013567ffffffffffffffff80821115613023575f80fd5b61302f8d838e01612df3565b909950975060608c0135915080821115613047575f80fd5b6130538d838e01612df3565b909750955060808c013591508082111561306b575f80fd5b506130788c828d01612df3565b90945092505060a08a013561308c81612d9e565b809150509295985092959850929598565b6020808252600d908201526c125b9d985b1a59081d985d5b1d609a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156130e8575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115612738576127386130ef565b8082028115828204841417612738576127386130ef565b634e487b7160e01b5f52601260045260245ffd5b5f8261315b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613170575f80fd5b8151610abd81612d9e565b805160ff81168114611ccc575f80fd5b5f6020828403121561319b575f80fd5b610abd8261317b565b6001600160a01b038281168282160390808211156131c4576131c46130ef565b5092915050565b6001600160a01b038181168382160190808211156131c4576131c46130ef565b5f600160ff1b82016131ff576131ff6130ef565b505f0390565b600181815b8085111561323f57815f1904821115613225576132256130ef565b8085161561323257918102915b93841c939080029061320a565b509250929050565b5f8261325557506001612738565b8161326157505f612738565b816001811461327757600281146132815761329d565b6001915050612738565b60ff841115613292576132926130ef565b50506001821b612738565b5060208310610133831016604e8410600b84101617156132c0575081810a612738565b6132ca8383613205565b805f19048211156132dd576132dd6130ef565b029392505050565b5f610abd60ff841683613247565b8051600281900b8114611ccc575f80fd5b805161ffff81168114611ccc575f80fd5b80518015158114611ccc575f80fd5b5f805f805f805f60e0888a03121561333a575f80fd5b875161334581612d9e565b9650613353602089016132f3565b955061336160408901613304565b945061336f60608901613304565b935061337d60808901613304565b925061338b60a0890161317b565b915061339960c08901613315565b905092959891949750929550565b80516001600160801b0381168114611ccc575f80fd5b5f602082840312156133cd575f80fd5b610abd826133a7565b5f602082840312156133e6575f80fd5b815162ffffff81168114610abd575f80fd5b5f60208284031215613408575f80fd5b610abd826132f3565b5f8160020b627fffff198103613429576134296130ef565b5f0392915050565b8181035f8312801583831316838312821617156131c4576131c46130ef565b8082018281125f83128015821682158216171561346f5761346f6130ef565b505092915050565b5f805f805f805f80610100898b03121561348f575f80fd5b613498896133a7565b9750602089015180600f0b81146134ad575f80fd5b80975050604089015195506060890151945060808901518060060b81146134d2575f80fd5b60a08a01519094506134e381612d9e565b60c08a015190935063ffffffff811681146134fc575f80fd5b915061350a60e08a01613315565b90509295985092959890939650565b6001600160801b038181168382160190808211156131c4576131c46130ef565b5f81600f0b6f7fffffffffffffffffffffffffffffff198103613429576134296130ef565b6001600160801b038281168282160390808211156131c4576131c46130ef565b60ff8281168282160390811115612738576127386130ef56fea2646970667358221220911136a7f3f6f31d51993a7ef7ebeb48ad9057614cfda9c71e76efe7f708299364736f6c634300081700330000000000000000000000001b5f15dcb82d25f91c65b53cee151e8b9fbdd271