0 txs
0 calls
constructor
constructor(address registry, address lpStakingTime)
functions
ASSET_TYPE
viewfunction ASSET_TYPE() view returns (uint256)
assetState
viewfunction assetState(address asset) view returns (uint128 lastRewardPerTokenGlobal, uint128 totalStaked, bool allowed)
assetToPid
viewfunction assetToPid(address asset) view returns (uint256 pid)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
baseURI
viewfunction baseURI() view returns (string)
getApproved
viewfunction getApproved(uint256) view returns (address)
getRiskFactors
viewfunction getRiskFactors(address creditor, address asset, uint256 assetId) view returns (uint16 collateralFactor, uint16 liquidationFactor)
getValue
viewfunction getValue(address creditor, address asset, uint256 assetId, uint256 assetAmount) view returns (uint256 valueInUsd, uint256 collateralFactor, uint256 liquidationFactor)
inAssetModule
viewfunction inAssetModule(address) view returns (bool)
isAllowed
viewfunction isAllowed(address asset, uint256 assetId) view returns (bool allowed)
isApprovedForAll
viewfunction isApprovedForAll(address, address) view returns (bool)
lastExposureAssetToUnderlyingAsset
viewfunction lastExposureAssetToUnderlyingAsset(address creditor, bytes32 assetKey, bytes32 underlyingAssetKey) view returns (uint256 exposure)
lastExposuresAsset
viewfunction lastExposuresAsset(address creditor, bytes32 assetKey) view returns (uint112 lastExposureAsset, uint112 lastUsdExposureAsset)
LP_STAKING_TIME
viewfunction LP_STAKING_TIME() view returns (address)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 id) view returns (address owner)
positionState
viewfunction positionState(uint256 position) view returns (address asset, uint128 amountStaked, uint128 lastRewardPerTokenPosition, uint128 lastRewardPosition)
REGISTRY
viewfunction REGISTRY() view returns (address)
REWARD_TOKEN
viewfunction REWARD_TOKEN() view returns (address)
rewardOf
viewfunction rewardOf(uint256 positionId) view returns (uint256 currentRewardClaimable)
riskParams
viewfunction riskParams(address creditor) view returns (uint112 lastUsdExposureProtocol, uint112 maxUsdExposureProtocol, uint16 riskFactor)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string uri)
totalStaked
viewfunction totalStaked(address asset) view returns (uint256 totalStaked_)
addAsset
nonpayablefunction addAsset(uint256 pid)
approve
nonpayablefunction approve(address spender, uint256 id)
burn
nonpayablefunction burn(uint256 positionId)
claimReward
nonpayablefunction claimReward(uint256 positionId) returns (uint256 rewards)
decreaseLiquidity
nonpayablefunction decreaseLiquidity(uint256 positionId, uint128 amount) returns (uint256 rewards)
increaseLiquidity
nonpayablefunction increaseLiquidity(uint256 positionId, uint128 amount)
initialize
nonpayablefunction initialize()
mint
nonpayablefunction mint(address asset, uint128 amount) returns (uint256 positionId)
processDirectDeposit
nonpayablefunction processDirectDeposit(address creditor, address asset, uint256 assetId, uint256 amount) returns (uint256 recursiveCalls)
processDirectWithdrawal
nonpayablefunction processDirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 amount)
processIndirectDeposit
nonpayablefunction processIndirectDeposit(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 recursiveCalls, uint256 usdExposureUpperAssetToAsset)
processIndirectWithdrawal
nonpayablefunction processIndirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 usdExposureUpperAssetToAsset)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string newBaseURI)
setRiskParameters
nonpayablefunction setRiskParameters(address creditor, uint112 maxUsdExposureProtocol_, uint16 riskFactor)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 id)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 indexed id)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
LiquidityDecreased
event LiquidityDecreased(uint256 indexed positionId, address indexed asset, uint128 amount)
LiquidityIncreased
event LiquidityIncreased(uint256 indexed positionId, address indexed asset, uint128 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
RewardPaid
event RewardPaid(uint256 indexed positionId, address indexed reward, uint128 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed id)
errors
AssetAlreadySet
error AssetAlreadySet()
AssetNotAllowed
error AssetNotAllowed()
ExposureNotInLimits
error ExposureNotInLimits()
NotOwner
error NotOwner()
OnlyRegistry
error OnlyRegistry()
Overflow
error Overflow()
PoolNotAllowed
error PoolNotAllowed()
RewardTokenNotAllowed
error RewardTokenNotAllowed()
RiskFactorNotInLimits
error RiskFactorNotInLimits()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6101006040526001600b5534801562000016575f80fd5b50604051620046c8380380620046c8833981016040819052620000399162000238565b604080518082018252601a81527f4172636164696120537461726761746520506f736974696f6e730000000000006020808301919091528251808401845260048152630615347560e41b918101919091525f80546001600160a01b03191633908117825593518694849284928792600292849284929182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0390911660a0526080525060059050620000f9838262000313565b50600662000108828262000313565b5050506001600160a01b03841660e08190526040805163953d9cf160e01b8152905191945063953d9cf1935060048082019350602092918290030181865afa15801562000157573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017d9190620003df565b6001600160a01b0390811660c081905260a051604051630f8350ed60e41b815260048101929092525f60248301529091169063f8350ed090604401602060405180830381865afa158015620001d4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fa919062000404565b620002185760405163c52db36360e01b815260040160405180910390fd5b505062000425565b6001600160a01b038116811462000235575f80fd5b50565b5f80604083850312156200024a575f80fd5b8251620002578162000220565b60208401519092506200026a8162000220565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200029e57607f821691505b602082108103620002bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200030e57805f5260205f20601f840160051c81016020851015620002ea5750805b601f840160051c820191505b818110156200030b575f8155600101620002f6565b50505b505050565b81516001600160401b038111156200032f576200032f62000275565b620003478162000340845462000289565b84620002c3565b602080601f8311600181146200037d575f8415620003655750858301515b5f19600386901b1c1916600185901b178555620003d7565b5f85815260208120601f198616915b82811015620003ad578886015182559484019460019091019084016200038c565b5085821015620003cb57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620003f0575f80fd5b8151620003fd8162000220565b9392505050565b5f6020828403121562000415575f80fd5b81518015158114620003fd575f80fd5b60805160a05160c05160e0516141d5620004f35f395f818161041d01528181610adb015281816127fd015281816128af015281816132720152818161334801526135ca01525f818161073b015281816119340152818161197401528181611c7401528181611cb4015261298701525f81816102bc015281816108dc01528181610b7601528181610efd01528181611001015281816114c80152818161162701528181611de00152818161249e01528181612c130152612f7301525f81816106fa01526115f001526141d55ff3fe608060405234801561000f575f80fd5b5060043610610276575f3560e01c80636c0360eb1161015657806399d7b594116100ca578063be29184f11610084578063be29184f146107f4578063c87b56dd14610807578063daa3770c1461081a578063e985e9c51461082d578063f2fde38b1461085a578063f8350ed01461086d575f80fd5b806399d7b5941461075d5780639bfd8d6114610770578063a22cb465146107a8578063ae169a50146107bb578063b88d4fde146107ce578063ba9270ff146107e1575f80fd5b806382d6b1661161011b57806382d6b1661461060f57806384b2fc501461066d5780638815eb39146106f55780638da5cb5b1461071c57806395d89b411461072e57806399248ea714610736575f80fd5b80636c0360eb1461057357806370a082311461057b57806373aecb981461058e57806374bd94ca146105a15780638129fc1c14610607575f80fd5b80632341eb86116101ed57806342966c68116101b257806342966c681461048257806349bccc5d146104955780634c5fad58146104c357806353b85a50146104e257806355f804b31461054d5780636352211e14610560575f80fd5b80632341eb86146103dd57806323b872dd146104055780632dc0e4f5146104185780633a8fe5e71461043f57806342842e0e1461046f575f80fd5b8063095ea7b31161023e578063095ea7b3146103335780630b71d25614610346578063128f5ad51461035957806315ed93bc1461036c578063172350931461038e5780631ba0408c146103af575f80fd5b806301ffc9a71461027a578063024874c7146102a257806306433b1b146102b757806306fdde03146102f6578063081812fc1461030b575b5f80fd5b61028d610288366004613764565b610880565b60405190151581526020015b60405180910390f35b6102b56102b036600461379a565b6108d1565b005b6102de7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610299565b6102fe610953565b60405161029991906137ff565b6102de610319366004613831565b60096020525f90815260409020546001600160a01b031681565b6102b5610341366004613848565b6109df565b6102b5610354366004613831565b610ac3565b6102b5610367366004613888565b610c73565b61028d61037a3660046138b2565b60016020525f908152604090205460ff1681565b6103a161039c3660046138cd565b610ef1565b604051908152602001610299565b6103c26103bd36600461391a565b610f98565b6040805161ffff938416815292909116602083015201610299565b6103f06103eb3660046138cd565b610ff4565b60408051928352602083019190915201610299565b6102b561041336600461391a565b6110a7565b6102de7f000000000000000000000000000000000000000000000000000000000000000081565b6103a161044d366004613958565b600460209081525f938452604080852082529284528284209052825290205481565b6102b561047d36600461391a565b611269565b6102b5610490366004613831565b61133a565b6104a86104a336600461379a565b61135f565b60408051938452602084019290925290820152606001610299565b6103a16104d13660046138b2565b60106020525f908152604090205481565b6105236104f03660046138b2565b60026020525f90815260409020546001600160701b0380821691600160701b810490911690600160e01b900461ffff1683565b604080516001600160701b03948516815293909216602084015261ffff1690820152606001610299565b6102b561055b3660046139c8565b6113c3565b6102de61056e366004613831565b6113f9565b6102fe61144f565b6103a16105893660046138b2565b61145c565b6102b561059c366004613a07565b6114bd565b6105df6105af3660046138b2565b600e6020525f9081526040902080546001909101546001600160801b0380831692600160801b9004169060ff1683565b604080516001600160801b039485168152939092166020840152151590820152606001610299565b6102b5611590565b61064d61061d366004613848565b600360209081525f92835260408084209091529082529020546001600160701b0380821691600160701b90041682565b604080516001600160701b03938416815292909116602083015201610299565b6106bc61067b366004613831565b600f6020525f90815260409020805460018201546002909201546001600160a01b03909116916001600160801b0380821692600160801b9092048116911684565b604080516001600160a01b0390951685526001600160801b03938416602086015291831691840191909152166060820152608001610299565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b5f546102de906001600160a01b031681565b6102fe611680565b6102de7f000000000000000000000000000000000000000000000000000000000000000081565b6103a161076b366004613888565b61168d565b6103a161077e3660046138b2565b6001600160a01b03165f908152600e6020526040902054600160801b90046001600160801b031690565b6102b56107b6366004613a6d565b611a39565b6103a16107c9366004613831565b611aa4565b6102b56107dc366004613aa4565b611d12565b6103a16107ef36600461379a565b611dd4565b6103a1610802366004613b12565b611e57565b6102fe610815366004613831565b6120b0565b6103a1610828366004613831565b61210c565b61028d61083b366004613b3c565b600a60209081525f928352604080842090915290825290205460ff1681565b6102b56108683660046138b2565b6121be565b61028d61087b366004613848565b612231565b5f6301ffc9a760e01b6001600160e01b0319831614806108b057506380ac58cd60e01b6001600160e01b03198316145b806108cb5750635b5e139f60e01b6001600160e01b03198316145b92915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461091a576040516310f5403960e31b815260040160405180910390fd5b5f610927848460a01b1790565b90505f61093d868361093886613b7c565b61225a565b905061094a86838361234b565b50505050505050565b6005805461096090613b96565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90613b96565b80156109d75780601f106109ae576101008083540402835291602001916109d7565b820191905f5260205f20905b8154815290600101906020018083116109ba57829003601f168201915b505050505081565b5f818152600760205260409020546001600160a01b031633811480610a2657506001600160a01b0381165f908152600a6020908152604080832033845290915290205460ff165b610a685760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b5f8281526009602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b604051631526fe2760e01b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631526fe2790602401608060405180830381865afa158015610b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4c9190613bce565b5050604051630f8350ed60e41b81526001600160a01b0380841660048301525f60248301529293507f00000000000000000000000000000000000000000000000000000000000000009092169163f8350ed09150604401602060405180830381865afa158015610bbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be29190613c0a565b610bff5760405163f31017e560e01b815260040160405180910390fd5b6001600160a01b0381165f908152600e602052604090206001015460ff1615610c3b576040516338981b6360e21b815260040160405180910390fd5b6001600160a01b03165f90815260106020908152604080832093909355600e9052206001908101805460ff19169091179055565b5050565b600b54600114610c955760405162461bcd60e51b8152600401610a5f90613c25565b6002600b556001600160801b0381165f03610cc357604051631f2a200560e01b815260040160405180910390fd5b5f828152600760205260409020546001600160a01b03163314610cf9576040516330cd747160e01b815260040160405180910390fd5b5f828152600f60209081526040808320815160808101835281546001600160a01b03168082526001808401546001600160801b0380821685890152600160801b918290048116858801526002909501548516606080860191909152838952600e8852978690208651988901875280548087168a5291909104851696880196909652949094015460ff16151592850192909252909290610d9f90839033903090881661264f565b610da981846126e0565b6020820151909450909150610dbf908590613c49565b6001600160801b0316602080830191909152830151610ddf908590613c49565b6001600160801b0390811660208581019182525f888152600f82526040808220885181546001600160a01b0319166001600160a01b039182161782559451828a0151908716600160801b91881682021760018084019190915560608b0151600290930180546001600160801b031916938916939093179092559488168352600e845291819020865193870151938616938616909402929092178355908401519101805460ff1916911515919091179055610e9c90839086166127e6565b6040516001600160801b03851681526001600160a01b0383169086907f9abd1d094136705ff411635c87833da6ef00260fd3d48f682c51af12d819cb8a9060200160405180910390a350506001600b55505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3b576040516310f5403960e31b815260040160405180910390fd5b5f610f48868660a01b1790565b90505f610f5688838661225a565b90505f610f6489848461234b565b9050811580610f71575080155b15610f7e575f9350610f8c565b610f8981878461290d565b93505b50505095945050505050565b5f805f610fa7858560a01b1790565b90505f610fb382612928565b90506060610fc488846001856129cb565b5090505f610fd28984612a89565b90505f80610fe18b8585612c9a565b909d909c509a5050505050505050505050565b5f80336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461103f576040516310f5403960e31b815260040160405180910390fd5b5f61104c878760a01b1790565b90505f61105a89838761225a565b90505f80611069838c86612e38565b91509150825f1480611079575080155b15611086575f9450611094565b61109181898561290d565b94505b5060010199929850919650505050505050565b5f818152600760205260409020546001600160a01b038481169116146110fc5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610a5f565b6001600160a01b0382166111465760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610a5f565b336001600160a01b038416148061117f57506001600160a01b0383165f908152600a6020908152604080832033845290915290205460ff165b8061119f57505f818152600960205260409020546001600160a01b031633145b6111dc5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610a5f565b6001600160a01b038084165f81815260086020908152604080832080545f19019055938616808352848320805460010190558583526007825284832080546001600160a01b03199081168317909155600990925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6112748383836110a7565b6001600160a01b0382163b15806113195750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af11580156112e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130d9190613c70565b6001600160e01b031916145b6113355760405162461bcd60e51b8152600401610a5f90613c8b565b505050565b5f818152600f6020526040902060010154610c6f9082906001600160801b031661168d565b5f805f8061136f878760a01b1790565b90505f61137b82612928565b90505f8061138b8b858a866129cb565b9150915080515f036113a4576113a18b84612a89565b90505b6113af8b8383612c9a565b919d909c50909a5098505050505050505050565b5f546001600160a01b031633146113ec5760405162461bcd60e51b8152600401610a5f90613cb5565b600d611335828483613d33565b5f818152600760205260409020546001600160a01b03168061144a5760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610a5f565b919050565b600d805461096090613b96565b5f6001600160a01b0382166114a25760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610a5f565b506001600160a01b03165f9081526008602052604090205490565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611506576040516310f5403960e31b815260040160405180910390fd5b6127108161ffff16111561152d57604051630b1c8e2560e01b815260040160405180910390fd5b6001600160a01b039092165f908152600260205260409020805461ffff909316600160e01b0261ffff60e01b196001600160701b03909316600160701b02929092166fffffffffffffffffffffffffffffffff60701b1990931692909217179055565b5f546001600160a01b031633146115b95760405162461bcd60e51b8152600401610a5f90613cb5565b305f81815260016020819052604091829020805460ff191690911790555163f1751c7b60e01b81526bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260248101919091526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f1751c7b906044015f604051808303815f87803b158015611668575f80fd5b505af115801561167a573d5f803e3d5ffd5b50505050565b6006805461096090613b96565b5f600b546001146116b05760405162461bcd60e51b8152600401610a5f90613c25565b6002600b556001600160801b0382165f036116de57604051631f2a200560e01b815260040160405180910390fd5b5f838152600760205260409020546001600160a01b03163314611714576040516330cd747160e01b815260040160405180910390fd5b5f838152600f60209081526040808320815160808101835281546001600160a01b03168082526001808401546001600160801b0380821685890152600160801b918290048116858801526002909501548516606080860191909152838952600e8852978690208651988901875280548087168a529190910490941695870195909552919093015460ff1615159184019190915290916117b381846126e0565b60208201519094509091506117c9908690613ded565b6001600160801b03166020808301919091528301516117e9908690613ded565b6001600160801b03908116602085018190526060850180515f909152909116945015611883575f868152600f6020908152604091829020855181546001600160a01b0319166001600160a01b0390911617815590850151918501516001600160801b03928316600160801b918416919091021760018201556060850151600290910180546001600160801b031916919092161790556118c0565b5f868152600f6020526040812080546001600160a01b0319168155600181019190915560020180546001600160801b03191690556118c086613170565b6001600160a01b0382165f908152600e60209081526040918290208351918401516001600160801b03928316600160801b91841691909102178155918301516001909201805460ff191692151592909217909155611921908390871661323a565b83156119c55761195b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866132a3565b6040516001600160801b03851681526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087907f99eb7ece63bef2ec97b991da7cf3763c7c533b1614782a4afd1b7b028db3189f9060200160405180910390a35b6119e26001600160a01b038316336001600160801b0388166132a3565b6040516001600160801b03861681526001600160a01b0383169087907febb4af0f9fd35b0598266926c9d1ccb8f8d96944d09acdb5ff6c7c10c3eaa79b9060200160405180910390a350506001600b555092915050565b335f818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f600b54600114611ac75760405162461bcd60e51b8152600401610a5f90613c25565b6002600b555f828152600760205260409020546001600160a01b03163314611b02576040516330cd747160e01b815260040160405180910390fd5b5f828152600f60209081526040808320815160808101835281546001600160a01b03168082526001808401546001600160801b0380821685890152600160801b918290048116858801526002909501548516606080860191909152838952600e8852978690208651988901875280548087168a529190910490941695870195909552919093015460ff161515918401919091529091611ba181846126e0565b6060810180515f808352898152600f60209081526040808320865181546001600160a01b0319166001600160a01b0391821617825583880151838901516001600160801b03918216600160801b9183168202176001808601919091559851600290940180546001600160801b03191694831694909417909355908b168552600e8452938290208851938901519385169385169091029290921782558601519301805460ff19169315159390931790925516955093509050611c6182613320565b8315611d0557611c9b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866132a3565b6040516001600160801b03851681526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169086907f99eb7ece63bef2ec97b991da7cf3763c7c533b1614782a4afd1b7b028db3189f9060200160405180910390a35b50506001600b5550919050565b611d1d8585856110a7565b6001600160a01b0384163b1580611db15750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290611d659033908a90899089908990600401613e0d565b6020604051808303815f875af1158015611d81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da59190613c70565b6001600160e01b031916145b611dcd5760405162461bcd60e51b8152600401610a5f90613c8b565b5050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e1e576040516310f5403960e31b815260040160405180910390fd5b5f611e2b858560a01b1790565b90505f611e3987838661225a565b90505f611e47828985612e38565b5060010198975050505050505050565b5f600b54600114611e7a5760405162461bcd60e51b8152600401610a5f90613c25565b6002600b556001600160801b0382165f03611ea857604051631f2a200560e01b815260040160405180910390fd5b611ec66001600160a01b03841633306001600160801b03861661264f565b6001600160a01b0383165f908152600e6020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001015460ff16151591810182905290611f3557604051634847234360e01b815260040160405180910390fd5b604080516080810182525f6020820181905291810182905260608101919091526001600160a01b0385168152611f6b82826126e0565b60208201519193509150611f80908590613c49565b6001600160801b039081166020848101918252868316848201818152600c80546001908101918290555f828152600f865260408082208a5181546001600160a01b0319166001600160a01b039182161782559551828c0151908b16600160801b918c168202178286015560608c0151600290920180546001600160801b031916928c1692909217909155948e168252600e90965285902089519651968816969097169092029490941785559186015193909101805460ff19169315159390931790925593506120509086906127e6565b61205a33846133b1565b6040516001600160801b03851681526001600160a01b0386169084907f9abd1d094136705ff411635c87833da6ef00260fd3d48f682c51af12d819cb8a9060200160405180910390a350506001600b5592915050565b60605f600d80546120c090613b96565b9050116120db5760405180602001604052805f8152506108cb565b600d6120e683613479565b6040516020016120f7929190613e5f565b60405160208183030381529060405292915050565b5f818152600f60209081526040808320815160808101835281546001600160a01b03168082526001808401546001600160801b0380821685890152600160801b918290048116858801526002909501548516606080860191909152928852600e875285882086519384018752805480871685529190910490941695820195909552919093015460ff161515918101919091526121a881836126e0565b606001516001600160801b031695945050505050565b5f546001600160a01b031633146121e75760405162461bcd60e51b8152600401610a5f90613cb5565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f6001600160a01b0383163014801561224c5750600c548211155b156108cb5750600192915050565b5f808213156122a1576001600160a01b0384165f90815260036020908152604080832086845290915290205461229a9083906001600160701b0316613ee2565b90506122f9565b6001600160a01b0384165f9081526003602090815260408083208684529091529020546001600160701b03166122d683613b7c565b81116122e2575f6122f5565b6122eb83613b7c565b6122f59082613ef5565b9150505b6123028161357e565b6001600160a01b03949094165f9081526003602090815260408083209583529490529290922080546001600160701b0319166001600160701b0390941693909317909255919050565b5f8061235684612928565b90505f612365868686856129cb565b5090505f805f805b8551811015612580576001600160a01b038a165f9081526004602090815260408083208c8452909152812087519091908890849081106123af576123af613f08565b602002602001015181526020019081526020015f20548582815181106123d7576123d7613f08565b60200260200101516123e99190613f1c565b93508481815181106123fd576123fd613f08565b602002602001015160045f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8b81526020019081526020015f205f88848151811061244a5761244a613f08565b602002602001015181526020019081526020015f208190555061249486828151811061247857612478613f08565b60200260200101516001600160a01b0381169160a09190911c90565b80935081945050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631e3b06628b85858986815181106124e0576124e0613f08565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810187905260a4016020604051808303815f875af1158015612548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256c9190613f3b565b6125769088613ee2565b965060010161236d565b506001600160a01b0389165f8181526003602090815260408083208c8452825280832080546001600160701b038c8116600160701b908102600160701b600160e01b0319841617909355958552600290935290832054910483169216908289106125ef57508188038101612600565b888303821115612600575087820381035b6126098161357e565b6001600160a01b039c909c165f90815260026020526040902080546001600160701b0319166001600160701b03909d169c909c17909b5550959998505050505050505050565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080611dcd5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610a5f565b60408051606080820183525f80835260208084018290528385018290528451608081018652828152908101829052938401819052908301529060208401516001600160801b0316156127ca575f61275a670de0b6b3a764000086602001516001600160801b0316612753875f0151613592565b919061290d565b905061276581613633565b85516001600160801b0391018116808752604086015160208701519103821692505f91670de0b6b3a7640000911683020490506127b98186606001516001600160801b03166127b49190613ee2565b613633565b6001600160801b0316606086015250505b505081516001600160801b0316604082015281815b9250929050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905283169063095ea7b3906044016020604051808303815f875af1158015612852573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128769190613c0a565b506001600160a01b038281165f9081526010602052604090819020549051631c57762b60e31b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063e2bbb158906044015b5f604051808303815f87803b1580156128f3575f80fd5b505af1158015612905573d5f803e3d5ffd5b505050505050565b5f825f190484118302158202612921575f80fd5b5091020490565b604080516002808252606082810184529260a085901c929190602083019080368337019050505f828152600f60205260409020549092506001600160a01b0316825f8151811061297a5761297a613f08565b60209081029190910101527f0000000000000000000000000000000000000000000000000000000000000000826001815181106129b9576129b9613f08565b60200260200101818152505050919050565b606080835f036129fa576040805160028082526060820183529091602083019080368337019050509150612a80565b60408051600280825260608201835260a088901c926020830190803683375050505f828152600f602052604081206001015482519295506001600160801b031691859190612a4a57612a4a613f08565b602002602001018181525050612a5f8161210c565b83600181518110612a7257612a72613f08565b602002602001018181525050505b94509492505050565b80516060905f8167ffffffffffffffff811115612aa857612aa8613cdb565b604051908082528060200260200182016040528015612ad1578160200160208202803683370190505b5090505f8267ffffffffffffffff811115612aee57612aee613cdb565b604051908082528060200260200182016040528015612b17578160200160208202803683370190505b5090505f8367ffffffffffffffff811115612b3457612b34613cdb565b604051908082528060200260200182016040528015612b5d578160200160208202803683370190505b5090505f5b84811015612bfb57612b7f87828151811061247857612478613f08565b858381518110612b9157612b91613f08565b60200260200101858481518110612baa57612baa613f08565b6020026020010182815250826001600160a01b03166001600160a01b03168152505050670de0b6b3a7640000828281518110612be857612be8613f08565b6020908102919091010152600101612b62565b5060405163cbdcbc3b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbdcbc3b90612c4e908a90879087908790600401613fa0565b5f60405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c8f9190810190614072565b979650505050505050565b5f805f80612cf0855f81518110612cb357612cb3613f08565b60200260200101515f0151670de0b6b3a7640000885f81518110612cd957612cd9613f08565b602002602001015161290d9092919063ffffffff16565b90505f612d3086600181518110612d0957612d09613f08565b60200260200101515f0151670de0b6b3a764000089600181518110612cd957612cd9613f08565b9050612d3c8183613ee2565b94508415612deb578486600181518110612d5857612d58613f08565b6020026020010151602001518202875f81518110612d7857612d78613f08565b60200260200101516020015184020181612d9457612d94613f52565b0493508486600181518110612dab57612dab613f08565b6020026020010151604001518202875f81518110612dcb57612dcb613f08565b60200260200101516040015184020181612de757612de7613f52565b0492505b6001600160a01b0388165f90815260026020526040902054600160e01b900461ffff16612e1b818661271061290d565b9450612e2a818561271061290d565b935050505093509350939050565b5f805f80612e4585612928565b90505f612e5487878a856129cb565b5090505f805f805f805b875181101561305d576001600160a01b038d165f9081526004602090815260408083208f8452909152812089519091908a9084908110612ea057612ea0613f08565b602002602001015181526020019081526020015f2054878281518110612ec857612ec8613f08565b6020026020010151612eda9190613f1c565b9550868181518110612eee57612eee613f08565b602002602001015160045f8f6001600160a01b03166001600160a01b031681526020019081526020015f205f8e81526020019081526020015f205f8a8481518110612f3b57612f3b613f08565b602002602001015181526020019081526020015f2081905550612f6988828151811061247857612478613f08565b80955081965050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a6674a78e87878b8681518110612fb557612fb5613f08565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810189905260a40160408051808303815f875af115801561301c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613040919061413f565b909350915061304f828b613ee2565b9a83019a9950600101612e5e565b506001600160a01b038c165f8181526003602090815260408083208f8452825280832080546001600160701b038f8116600160701b908102600160701b600160e01b0319841617909355958552600290935292205491900482169116818b106130cc57818b03810199506130de565b8a82038111156130de578a8203810399505b6001600160a01b038e165f90815260026020526040902054600160701b90046001600160701b03168a10613125576040516366b09a5960e01b815260040160405180910390fd5b5050506001600160a01b03909a165f90815260026020526040902080546001600160701b039097166001600160701b0319909716969096179095555094989397509295505050505050565b5f818152600760205260409020546001600160a01b0316806131c15760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610a5f565b6001600160a01b0381165f81815260086020908152604080832080545f190190558583526007825280832080546001600160a01b031990811690915560099092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038281165f9081526010602052604090819020549051630441a3e760e41b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063441a3e70906044016128dc565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f51141617169150508061167a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610a5f565b6001600160a01b038181165f90815260106020526040808220549051630441a3e760e41b81527f0000000000000000000000000000000000000000000000000000000000000000939093169263441a3e70926133889291600401918252602082015260400190565b5f604051808303815f87803b15801561339f575f80fd5b505af1158015611dcd573d5f803e3d5ffd5b6133bb8282613643565b6001600160a01b0382163b158061345d5750604051630a85bd0160e11b8082523360048301525f6024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303815f875af115801561342d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134519190613c70565b6001600160e01b031916145b610c6f5760405162461bcd60e51b8152600401610a5f90613c8b565b6060815f0361349f5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156134c857806134b281614161565b91506134c19050600a83614179565b91506134a2565b5f8167ffffffffffffffff8111156134e2576134e2613cdb565b6040519080825280601f01601f19166020018201604052801561350c576020820181803683370190505b5090505b841561357657613521600183613ef5565b915061352e600a8661418c565b613539906030613ee2565b60f81b81838151811061354e5761354e613f08565b60200101906001600160f81b03191690815f1a90535061356f600a86614179565b9450613510565b949350505050565b5f600160701b821061358e575f80fd5b5090565b6001600160a01b038181165f908152601060205260408082205490516331289fd560e21b8152600481019190915230602482015290917f0000000000000000000000000000000000000000000000000000000000000000169063c4a27f5490604401602060405180830381865afa15801561360f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190613f3b565b5f600160801b821061358e575f80fd5b6001600160a01b03821661368d5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610a5f565b5f818152600760205260409020546001600160a01b0316156136e25760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610a5f565b6001600160a01b0382165f81815260086020908152604080832080546001019055848352600790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114613761575f80fd5b50565b5f60208284031215613774575f80fd5b813561377f8161374c565b9392505050565b6001600160a01b0381168114613761575f80fd5b5f805f80608085870312156137ad575f80fd5b84356137b881613786565b935060208501356137c881613786565b93969395505050506040820135916060013590565b5f5b838110156137f75781810151838201526020016137df565b50505f910152565b602081525f825180602084015261381d8160408501602087016137dd565b601f01601f19169190910160400192915050565b5f60208284031215613841575f80fd5b5035919050565b5f8060408385031215613859575f80fd5b823561386481613786565b946020939093013593505050565b80356001600160801b038116811461144a575f80fd5b5f8060408385031215613899575f80fd5b823591506138a960208401613872565b90509250929050565b5f602082840312156138c2575f80fd5b813561377f81613786565b5f805f805f60a086880312156138e1575f80fd5b85356138ec81613786565b945060208601356138fc81613786565b94979496505050506040830135926060810135926080909101359150565b5f805f6060848603121561392c575f80fd5b833561393781613786565b9250602084013561394781613786565b929592945050506040919091013590565b5f805f6060848603121561396a575f80fd5b833561397581613786565b95602085013595506040909401359392505050565b5f8083601f84011261399a575f80fd5b50813567ffffffffffffffff8111156139b1575f80fd5b6020830191508360208285010111156127df575f80fd5b5f80602083850312156139d9575f80fd5b823567ffffffffffffffff8111156139ef575f80fd5b6139fb8582860161398a565b90969095509350505050565b5f805f60608486031215613a19575f80fd5b8335613a2481613786565b925060208401356001600160701b0381168114613a3f575f80fd5b9150604084013561ffff81168114613a55575f80fd5b809150509250925092565b8015158114613761575f80fd5b5f8060408385031215613a7e575f80fd5b8235613a8981613786565b91506020830135613a9981613a60565b809150509250929050565b5f805f805f60808688031215613ab8575f80fd5b8535613ac381613786565b94506020860135613ad381613786565b935060408601359250606086013567ffffffffffffffff811115613af5575f80fd5b613b018882890161398a565b969995985093965092949392505050565b5f8060408385031215613b23575f80fd5b8235613b2e81613786565b91506138a960208401613872565b5f8060408385031215613b4d575f80fd5b8235613b5881613786565b91506020830135613a9981613786565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201613b9057613b90613b68565b505f0390565b600181811c90821680613baa57607f821691505b602082108103613bc857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f805f8060808587031215613be1575f80fd5b8451613bec81613786565b60208601516040870151606090970151919890975090945092505050565b5f60208284031215613c1a575f80fd5b815161377f81613a60565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b6001600160801b03818116838216019080821115613c6957613c69613b68565b5092915050565b5f60208284031215613c80575f80fd5b815161377f8161374c565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b601f82111561133557805f5260205f20601f840160051c81016020851015613d145750805b601f840160051c820191505b81811015611dcd575f8155600101613d20565b67ffffffffffffffff831115613d4b57613d4b613cdb565b613d5f83613d598354613b96565b83613cef565b5f601f841160018114613d90575f8515613d795750838201355b5f19600387901b1c1916600186901b178355611dcd565b5f83815260208120601f198716915b82811015613dbf5786850135825560209485019460019092019101613d9f565b5086821015613ddb575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160801b03828116828216039080821115613c6957613c69613b68565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454613e6c81613b96565b60018281168015613e845760018114613e9957613ec5565b60ff1984168752821515830287019450613ec5565b885f526020805f205f5b85811015613ebc5781548a820152908401908201613ea3565b50505082870194505b505050508351613ed98183602088016137dd565b01949350505050565b808201808211156108cb576108cb613b68565b818103818111156108cb576108cb613b68565b634e487b7160e01b5f52603260045260245ffd5b8181035f831280158383131683831282161715613c6957613c69613b68565b5f60208284031215613f4b575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015613f9557815187529582019590820190600101613f79565b509495945050505050565b6001600160a01b0385811682526080602080840182905286519184018290525f928782019290919060a0860190855b81811015613fed578551851683529483019491830191600101613fcf565b505085810360408701526140018189613f66565b93505050508281036060840152612c8f8185613f66565b6040516060810167ffffffffffffffff8111828210171561403b5761403b613cdb565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406a5761406a613cdb565b604052919050565b5f6020808385031215614083575f80fd5b825167ffffffffffffffff8082111561409a575f80fd5b818501915085601f8301126140ad575f80fd5b8151818111156140bf576140bf613cdb565b6140cd848260051b01614041565b818152848101925060609182028401850191888311156140eb575f80fd5b938501935b828510156141335780858a031215614106575f80fd5b61410e614018565b85518152868601518782015260408087015190820152845293840193928501926140f0565b50979650505050505050565b5f8060408385031215614150575f80fd5b505080516020909101519092909150565b5f6001820161417257614172613b68565b5060010190565b5f8261418757614187613f52565b500490565b5f8261419a5761419a613f52565b50069056fea2646970667358221220e6f976e249a11444532496af569f4a7459ab69f5ef5d525d794ac2c4f3e794a064736f6c63430008160033000000000000000000000000d0690557600eb8be8391d1d97346e2aab5300d5f00000000000000000000000006eb48763f117c7be887296cdcdfad2e4092739c