0 txs
299 calls
constructor
No constructor.
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
auctionParams
viewfunction auctionParams() view returns (uint128 relStrike, uint48 tenor, uint48 earliestExerciseTenor, uint32 decayStartTime, uint32 decayDuration, uint64 relPremiumStart, uint64 relPremiumFloor, uint128 minSpot, uint128 maxSpot)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
borrowedUnderlyingAmounts
viewfunction borrowedUnderlyingAmounts(address) view returns (uint256)
currAsk
viewfunction currAsk() view returns (uint64)
decimals
viewfunction decimals() view returns (uint8)
distPartner
viewfunction distPartner() view returns (address)
exerciseFee
viewfunction exerciseFee() view returns (uint96)
isAuction
viewfunction isAuction() view returns (bool)
name
viewfunction name() view returns (string)
optionInfo
viewfunction optionInfo() view returns (address underlyingToken, uint48 expiry, address settlementToken, uint48 earliestExercise, uint128 notional, uint128 strike, tuple advancedSettings)
optionMinted
viewfunction optionMinted() view returns (bool)
owner
viewfunction owner() view returns (address)
premiumPaid
viewfunction premiumPaid() view returns (uint128)
previewBid
viewfunction previewBid(uint256 relBid, uint256 _refSpot, bytes[] _oracleData) view returns (tuple preview, address __distPartner)
router
viewfunction router() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalBorrowed
viewfunction totalBorrowed() view returns (uint128)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
handleAuctionBid
nonpayablefunction handleAuctionBid(uint256 relBid, address optionReceiver, uint256 _refSpot, bytes[] _oracleData) returns (tuple preview, address __distPartner)
handleBorrow
nonpayablefunction handleBorrow(address borrower, address underlyingReceiver, uint128 underlyingBorrowAmount) returns (address settlementToken, uint256 collateralAmount, uint256 collateralFeeAmount)
handleExercise
nonpayablefunction handleExercise(address exerciser, address underlyingReceiver, uint256 underlyingExerciseAmount, bool payInSettlementToken, bytes[] oracleData) returns (address settlementToken, uint256 settlementAmount, uint256 exerciseFeeAmount)
handleOffChainVoting
nonpayablefunction handleOffChainVoting(bytes32 spaceId, address delegate)
handleOnChainVoting
nonpayablefunction handleOnChainVoting(address delegate)
handleRepay
nonpayablefunction handleRepay(address borrower, address collateralReceiver, uint128 underlyingRepayAmount) returns (address underlyingToken, uint256 unlockedCollateralAmount)
handleWithdraw
nonpayablefunction handleWithdraw(address to, address token, uint256 amount)
initializeAuction
nonpayablefunction initializeAuction(address _router, address _owner, uint96 _exerciseFee, tuple _auctionInitialization, uint256 oTokenIndex, address __distPartner)
initializeMintOption
nonpayablefunction initializeMintOption(address _router, address _owner, address optionReceiver, uint96 _exerciseFee, tuple _optionInfo, tuple _optionNaming)
initializeRFQMatch
nonpayablefunction initializeRFQMatch(address _router, address _owner, address optionReceiver, uint96 _exerciseFee, tuple _rfqInitialization, uint256 oTokenIndex)
redeem
nonpayablefunction redeem(address to)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool success)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool success)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Initialized
event Initialized(uint64 version)
OffChainVotingDelegation
event OffChainVotingDelegation(address allowedDelegateRegistry, bytes32 spaceId, address delegate)
OnChainVotingDelegation
event OnChainVotingDelegation(address delegate)
Redeem
event Redeem(address indexed sender, address to, address underlyingToken, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
TransferOwnership
event TransferOwnership(address indexed sender, address oldOwner, address newOwner)
Withdraw
event Withdraw(address indexed sender, address indexed to, address indexed token, uint256 amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
FailedInnerCall
error FailedInnerCall()
InvalidBid
error InvalidBid()
InvalidBorrowAmount
error InvalidBorrowAmount()
InvalidBorrowCap
error InvalidBorrowCap()
InvalidBorrowTime
error InvalidBorrowTime()
InvalidEarliestExerciseTenor
error InvalidEarliestExerciseTenor()
InvalidExercise
error InvalidExercise()
InvalidExerciseAmount
error InvalidExerciseAmount()
InvalidExerciseTime
error InvalidExerciseTime()
InvalidInitialization
error InvalidInitialization()
InvalidMinMaxSpot
error InvalidMinMaxSpot()
InvalidNotional
error InvalidNotional()
InvalidOracle
error InvalidOracle()
InvalidRelPremiums
error InvalidRelPremiums()
InvalidRepayAmount
error InvalidRepayAmount()
InvalidRepayTime
error InvalidRepayTime()
InvalidSender
error InvalidSender()
InvalidStrike
error InvalidStrike()
InvalidTenor
error InvalidTenor()
InvalidTokenPair
error InvalidTokenPair()
InvalidWithdraw
error InvalidWithdraw()
NoAllowedDelegateRegistry
error NoAllowedDelegateRegistry()
NoOptionMinted
error NoOptionMinted()
NothingToRedeem
error NothingToRedeem()
NothingToRepay
error NothingToRepay()
NotInitializing
error NotInitializing()
OnlyAvailableForAuctions
error OnlyAvailableForAuctions()
OwnerAlreadySet
error OwnerAlreadySet()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
VotingDelegationNotAllowed
error VotingDelegationNotAllowed()
creation bytecode
0x60806040523480156200001157600080fd5b506040805160208082018352600080835283519182019093529182529060036200003c8382620001ba565b5060046200004b8282620001ba565b50620000599150506200005f565b62000286565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000b05760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001105780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013e57607f821691505b6020821081036200015f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001b5576000816000526020600020601f850160051c81016020861015620001905750805b601f850160051c820191505b81811015620001b1578281556001016200019c565b5050505b505050565b81516001600160401b03811115620001d657620001d662000113565b620001ee81620001e7845462000129565b8462000165565b602080601f8311600181146200022657600084156200020d5750858301515b600019600386901b1c1916600185901b178555620001b1565b600085815260208120601f198616915b82811015620002575788860151825594840194600190910190840162000236565b5085821015620002765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61495b80620002966000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806370a082311161012a578063c17723f9116100bd578063dd62ed3e1161008c578063f0aa49d211610071578063f0aa49d214610796578063f2fde38b146107a8578063f887ea40146107bb57600080fd5b8063dd62ed3e1461073c578063df1d444e1461077557600080fd5b8063c17723f9146106cd578063d0e8dcff146106da578063d1c699aa146106ed578063d951124d1461072957600080fd5b806395d89b41116100f957806395d89b411461067f578063a3620ec414610687578063a9059cbb1461069a578063b53512f2146106ad57600080fd5b806370a08231146105fe5780638da5cb5b146106275780639076e9041461063a57806395a2251f1461066c57600080fd5b806331cd4e62116101bd578063537952081161018c5780635b6a251b116101715780635b6a251b146105c55780635c8ad611146105d857806367ff93a6146105eb57600080fd5b806353795208146104c5578063568f02f8146104d857600080fd5b806331cd4e621461042857806343814e1e146104605780634c19386c1461048057806351b10f13146104b257600080fd5b806323b872dd116101f957806323b872dd1461029f57806323c8affa146102b25780632844e1e0146102c7578063313ce5671461040b57600080fd5b806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c57806318f9f30f1461027e575b600080fd5b6102336107ce565b604051610240919061356d565b60405180910390f35b61025c610257366004613595565b610860565b6040519015158152602001610240565b6002545b604051908152602001610240565b61029161028c366004613713565b61087a565b60405161024092919061379b565b61025c6102ad3660046138c6565b610d0e565b6102c56102c0366004613928565b610d92565b005b600e54600f546010546040805160a08101825260115467ffffffffffffffff81168252600160401b81046001600160a01b03908116602084015260ff600160e01b83048116151594840194909452600160e81b909104909216151560608201526012548216608082015261036e948281169465ffffffffffff600160a01b92839004811695948216949290910416916001600160801b0380831692600160801b9004169087565b604080516001600160a01b03988916815265ffffffffffff97881660208083019190915296891681830152969094166060808801919091526001600160801b039384166080808901919091529390921660a0870152805167ffffffffffffffff1660c087015293840151861660e0860152918301511515610100850152908201511515610120840152015190911661014082015261016001610240565b600554610100900460ff1660405160ff9091168152602001610240565b61043b6104363660046139bb565b611367565b604080516001600160a01b039094168452602084019290925290820152606001610240565b610468611726565b6040516001600160a01b039091168152602001610240565b60085461049a90600160801b90046001600160801b031681565b6040516001600160801b039091168152602001610240565b6102c56104c0366004613a3a565b611776565b6102c56104d3366004613a6a565b6118af565b601354601454601554610553926001600160801b038082169365ffffffffffff600160801b808504821695600160b01b86049092169463ffffffff600160e01b9091048116949084169367ffffffffffffffff64010000000082048116946c0100000000000000000000000090920416928183169291041689565b604080516001600160801b039a8b16815265ffffffffffff998a166020820152989097169688019690965263ffffffff948516606088015293909216608086015267ffffffffffffffff90811660a08601521660c0840152831660e08301529190911661010082015261012001610240565b60085461049a906001600160801b031681565b6102c56105e6366004613b00565b6119f5565b61043b6105f9366004613b32565b611b1b565b61027061060c366004613b00565b6001600160a01b031660009081526020819052604090205490565b600a54610468906001600160a01b031681565b61064d610648366004613b32565b611e20565b604080516001600160a01b039093168352602083019190915201610240565b6102c561067a366004613b00565b612082565b610233612175565b610291610695366004613b7d565b612184565b61025c6106a8366004613595565b61230d565b6102706106bb366004613b00565b600d6020526000908152604090205481565b600c5461025c9060ff1681565b6102c56106e83660046138c6565b61238d565b600b5461070c90600160a01b90046bffffffffffffffffffffffff1681565b6040516bffffffffffffffffffffffff9091168152602001610240565b6102c5610737366004613be0565b6124c1565b61027061074a366004613c7d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61077d6126e7565b60405167ffffffffffffffff9091168152602001610240565b600c5461025c90610100900460ff1681565b6102c56107b6366004613b00565b6127bc565b600954610468906001600160a01b031681565b6060600680546107dd90613cab565b80601f016020809104026020016040519081016040528092919081815260200182805461080990613cab565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b60003361086e818585612913565b60019150505b92915050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905290806108e46126e7565b600b54600c546001600160a01b039091169350909150610100900460ff1615610919576109116003612925565b925050610d06565b8067ffffffffffffffff16861015610935576109116004612925565b600e54600f5460115460405163517382cf60e11b81526001600160a01b039384169392831692600092600160401b9004169063a2e7059e9061097f90869086908c90600401613ce5565b602060405180830381865afa15801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190613d66565b9050808810156109df576109d46001612925565b955050505050610d06565b6015546001600160801b0316811080610a095750601554600160801b90046001600160801b031681115b15610a18576109d46002612925565b600c5462010000900460ff1615610a33576109d46005612925565b601154601054600160e01b90910460ff16906001600160801b03166000610b2383610b0657866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190613d7f565b610ac590600a613e9c565b670de0b6b3a764000086610ae38667ffffffffffffffff8d16613eab565b610aed9190613eab565b610af79190613ec2565b610b019190613ec2565b6129fe565b670de0b6b3a7640000610af78467ffffffffffffffff8b16613eab565b601354909150600090610b4d90670de0b6b3a764000090610af7906001600160801b031688613eab565b601354909150600090610b7890610b7390600160801b900465ffffffffffff1642613ee4565b612a3b565b601354909150600090610b9e90610b7390600160b01b900465ffffffffffff1642613ee4565b600954600b546040517f3849153b00000000000000000000000000000000000000000000000000000000815292935060009283926001600160a01b0390811692633849153b92610bf992909116908a90600e90600401613ef7565b6040805180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190613fe0565b604080516101808101909152919350915080600081526020018b6001600160a01b031681526020018c6001600160a01b03168152602001866001600160801b031681526020018565ffffffffffff1681526020018465ffffffffffff168152602001876001600160801b0316815260200189610cb5578b610cb7565b8c5b6001600160a01b031681526020018a81526020018d67ffffffffffffffff168152602001836001600160801b03168152602001826001600160801b03168152509d505050505050505050505050505b935093915050565b6000610d1b848484612a6e565b60095460405163536a4ee560e11b81526001600160a01b03878116600483015286811660248301526044820186905292935091169063a6d49dca90606401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050509392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610dd85750825b905060008267ffffffffffffffff166001148015610df55750303b155b905081158015610e03575080155b15610e215760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e5057845468ff00000000000000001916600160401b1785555b610e606040890160208a01613b00565b6001600160a01b0316610e7660208a018a613b00565b6001600160a01b031603610eb6576040517f8686656d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ec66060890160408a0161400f565b6001600160801b0316600003610f08576040517f950466ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f186080890160608a0161400f565b6001600160801b0316600003610f5a576040517f9a5818d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f6a60a0890160808a01614040565b65ffffffffffff16600003610fab576040517f82d4642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fbb60c0890160a08a01614040565b610fc8906201518061405d565b65ffffffffffff16610fe060a08a0160808b01614040565b65ffffffffffff161015611020576040517f7a098ab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103261012089016101008a01614099565b67ffffffffffffffff161580611061575061105561014089016101208a01614099565b67ffffffffffffffff16155b806110a1575061107961014089016101208a01614099565b67ffffffffffffffff166110956101208a016101008b01614099565b67ffffffffffffffff16105b156110d8576040517f563184a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ea61018089016101608a0161400f565b6001600160801b03161580611132575061110c61016089016101408a0161400f565b6001600160801b03166111276101808a016101608b0161400f565b6001600160801b0316105b15611169576040517fc9ad7cfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061117d6101c08a016101a08b01613b00565b6001600160a01b0316036111bd576040517f9589a27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400006111d86101a08a016101808b01614099565b67ffffffffffffffff16111561121a576040517fa7e9b5b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112276020890189613b00565b600e80546001600160a01b0319166001600160a01b03929092169190911790556112576040890160208a01613b00565b600f80546001600160a01b0319166001600160a01b03929092169190911790556112876060890160408a0161400f565b601080546001600160801b0319166001600160801b0392909216919091179055610180880160116112b882826140dd565b50506060880160136112ca8282614210565b5050600c805460ff19166001179055600b80546001600160a01b0388166001600160a01b031990911617905561130f8b8b8b61130960208d018d613b00565b8b612a94565b831561135a57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b600954600090819081906001600160a01b0316331461139957604051636edaef2f60e11b815260040160405180910390fd5b600c54610100900460ff166113c157604051632f8268ed60e01b815260040160405180910390fd5b600e54600160a01b900465ffffffffffff164211806113f05750600f54600160a01b900465ffffffffffff1642105b15611427576040517f9bafde7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85158061143e57506010546001600160801b031686115b15611475576040517f3bd8dc6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e546010546040805163313ce56760e01b815290516001600160a01b0390931692600160801b9092046001600160801b031691600091849163313ce567916004808201926020929091908290030181865afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190613d7f565b60ff169050600e60010160009054906101000a90046001600160a01b031695506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190613d7f565b60ff169050611593838b846001612c6b565b600b54909650670de0b6b3a7640000906115c290600160a01b90046bffffffffffffffffffffffff1688613eab565b6115cc9190613ec2565b94506000896116ed576115e082600a614458565b6115eb84600a614458565b6115f59190613eab565b60115460405163517382cf60e11b8152600160401b9091046001600160a01b03169063a2e7059e9061162f908c908a908f90600401613ce5565b602060405180830381865afa15801561164c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116709190613d66565b61167a8d87613eab565b6116849190613eab565b61168e9190613ec2565b90508a81118061169c575080155b156116d3576040517fe7668eec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546116ed906001600160a01b03878116911683612ccb565b61170c8c6116fb838e614464565b6001600160a01b0388169190612ccb565b6117168d8c612d4b565b5050505050955095509592505050565b600c5460009060ff16156117445750600b546001600160a01b031690565b6040517fa9d552b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546001600160a01b031633146117a157604051636edaef2f60e11b815260040160405180910390fd5b6012546001600160a01b0316806117e4576040517fd741db9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fbd86e508000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03838116602483015282169063bd86e50890604401600060405180830381600087803b15801561184757600080fd5b505af115801561185b573d6000803e3d6000fd5b5050604080516001600160a01b0385811682526020820188905286168183015290517fa8e9ed9d5a3dbe1d9fe6d227405bddc7076d509b3d1a7149862baa1d10ece8929350908190036060019150a1505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156118f55750825b905060008267ffffffffffffffff1660011480156119125750303b155b905081158015611920575080155b1561193e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561196d57845468ff00000000000000001916600160401b1785555b86600e61197a8282614477565b5061198b9050610160880188614689565b61199990602081019061400f565b600880546001600160801b0319166001600160801b03929092169190911790556119d28b8b8a6119cc60208c018c613b00565b8a612a94565b61130f896119e660a08a0160808b0161400f565b6001600160801b03168d612d85565b600a546001600160a01b03163314611a2057604051636edaef2f60e11b815260040160405180910390fd5b601154600160e81b900460ff16611a63576040517fb703ee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e546040517f5c19a95c0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b50506040516001600160a01b03841681527f97272ae3625415c9e42454bb806ca07e49c86e720ecae7d9f22c54479e6a2e249250602001905060405180910390a150565b600954600090819081906001600160a01b03163314611b4d57604051636edaef2f60e11b815260040160405180910390fd5b600c54610100900460ff16611b7557604051632f8268ed60e01b815260040160405180910390fd5b600e54600160a01b900465ffffffffffff16421180611ba45750600f54600160a01b900465ffffffffffff1642105b15611bdb576040517f37a5533500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160801b0384161580611c4c5750601154601054611c0f9167ffffffffffffffff16906001600160801b0316613eab565b600854670de0b6b3a764000090611c37908790600160801b90046001600160801b03166146a9565b6001600160801b0316611c4a9190613eab565b115b15611c83576040517f3894de6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54601054600e546040805163313ce56760e01b815290516001600160a01b039485169750611d1d946001600160801b03600160801b9095048516948a1693169163313ce5679160048083019260209291908290030181865afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190613d7f565b60ff166001612c6b565b600b54909250670de0b6b3a764000090611d4c90600160a01b90046bffffffffffffffffffffffff1684613eab565b611d569190613ec2565b905083600860108282829054906101000a90046001600160801b0316611d7c91906146a9565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550836001600160801b0316600d6000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611dde9190613ee4565b90915550611df79050866001600160801b038616612d4b565b600e54611e17906001600160a01b0316866001600160801b038716612ccb565b93509350939050565b60095460009081906001600160a01b03163314611e5057604051636edaef2f60e11b815260040160405180910390fd5b600c54610100900460ff16611e7857604051632f8268ed60e01b815260040160405180910390fd5b600e54600160a01b900465ffffffffffff16421115611ec3576040517f4aa1f71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600854600160801b90046001600160801b0316600003611f0f576040517fd32e7fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160801b0383161580611f4557506001600160a01b0385166000908152600d60205260409020546001600160801b038416115b15611f7c576040517f3d56fe3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e546010546040805163313ce56760e01b815290516001600160a01b039093169450612014926001600160801b03600160801b909304831692871691869163313ce567916004808201926020929091908290030181865afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a9190613d7f565b60ff166000612c6b565b600880546001600160801b03600160801b8083048216889003821602918116919091179091556001600160a01b0387166000908152600d60205260409020805491861691829003905590915061206b908690612dab565b600f54610d06906001600160a01b03168583612ccb565b600a546001600160a01b03163381146120ae57604051636edaef2f60e11b815260040160405180910390fd5b33600090815260208190526040812054908190036120f8576040517f9890af6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e546001600160a01b031661210e3383612d4b565b6121226001600160a01b0382168584612ccb565b604080516001600160a01b0386811682528316602082015290810183905233907fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef09060600160405180910390a250505050565b6060600780546107dd90613cab565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526009546000906001600160a01b031633811461221457604051636edaef2f60e11b815260040160405180910390fd5b61221f87868661087a565b909350915060008351600581111561223957612239613763565b14612270576040517fc6388ef700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060830151601080546001600160801b03928316600160801b029083168181179092556080860151600e805465ffffffffffff928316600160a01b90810265ffffffffffff60a01b199283161790925560a0890151600f805491909416909202911617905560c0860151600880549185166001600160801b03199290921691909117905561230392899291161783612d85565b5094509492505050565b60006123198383612de1565b60095460405163536a4ee560e11b81523360048201526001600160a01b0386811660248301526044820186905292935091169063a6d49dca90606401600060405180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b5050505092915050565b6009546001600160a01b031633148015906123b35750600a546001600160a01b03163314155b156123d157604051636edaef2f60e11b815260040160405180910390fd5b600c54610100900460ff1680156123f95750600e54600160a01b900465ffffffffffff164211155b15612430576040517f35411d8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54610100900460ff1661245157600c805462ff00001916620100001790555b6124656001600160a01b0383168483612ccb565b816001600160a01b0316836001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516124b491815260200190565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156125075750825b905060008267ffffffffffffffff1660011480156125245750303b155b905081158015612532575080155b156125505760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561257f57845468ff00000000000000001916600160401b1785555b86600e61258c8282614477565b5050600980546001600160a01b03199081166001600160a01b038e811691909117909255600a80549091168c8316179055600b8054909116600160a01b6bffffffffffffffffffffffff8b16021790556125f0896119e660a08a0160808b0161400f565b61130f6125fd87806146c9565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263f9250505060208901896146c9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126819250505060208b018b613b00565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e29190613d7f565b612def565b60135460145460009163ffffffff600160e01b9091048116911682428311156127255750601454640100000000900467ffffffffffffffff166127ab565b61272f8284613ee4565b42101561278c57601454428490039067ffffffffffffffff6c010000000000000000000000008204811664010000000090920416908103906000856127748585613eab565b61277e9190613ec2565b90910393506127ab92505050565b506014546c01000000000000000000000000900467ffffffffffffffff165b6127b481612e71565b935050505090565b600a546001600160a01b03163381146127e857604051636edaef2f60e11b815260040160405180910390fd5b816001600160a01b0316816001600160a01b031603612833576040517fcf04b1bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b038481169182179092556009546040517fc18abe0d000000000000000000000000000000000000000000000000000000008152848416600482015260248101929092529091169063c18abe0d90604401600060405180830381600087803b1580156128b257600080fd5b505af11580156128c6573d6000803e3d6000fd5b5050604080516001600160a01b038581168252861660208201523393507f6954f1cdad46901994f29d9b1f78744c873c527bad04d294b4954cc8caf367da92500160405180910390a25050565b6129208383836001612ea8565b505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526040518061018001604052808360058111156129a4576129a4613763565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015292915050565b60006001600160801b03821115612a37576040516306dfcc6560e41b815260806004820152602481018390526044015b60405180910390fd5b5090565b600065ffffffffffff821115612a37576040516306dfcc6560e41b81526030600482015260248101839052604401612a2e565b600033612a7c858285612fb0565b612a87858585613041565b60019150505b9392505050565b600980546001600160a01b038088166001600160a01b031992831617909255600a80548784169216919091179055600b80546bffffffffffffffffffffffff8616600160a01b02908316179055604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516000928516916306fdde0391600480830192869291908290030181865afa158015612b39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b619190810190614717565b90506000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612ba3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bcb9190810190614717565b9050612c6282612bda856130a0565b604051602001612beb92919061478e565b60405160208183030381529060405282612c04866130a0565b604051602001612c1592919061478e565b604051602081830303815290604052866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126be573d6000803e3d6000fd5b50505050505050565b600080612c788587613eab565b90506000612c8785600a614458565b90508315612cb95780612c9b600184614464565b612ca59190613ec2565b612cb0906001613ee4565b92505050612cc3565b612cb08183613ec2565b949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612920908490613140565b6001600160a01b038216612d7557604051634b637e8f60e11b815260006004820152602401612a2e565b612d81826000836131bc565b5050565b600c805461ff001916610100179055612d9e8383612dab565b6129208382600019612913565b6001600160a01b038216612dd55760405163ec442f0560e01b815260006004820152602401612a2e565b612d81600083836131bc565b60003361086e818585613041565b60055460ff1615612e2c576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805460ff191660011790556006612e458482614836565b506007612e528382614836565b506005805460ff9092166101000261ff00199092169190911790555050565b600067ffffffffffffffff821115612a3757604080516306dfcc6560e41b8152600481019190915260248101839052604401612a2e565b6001600160a01b038416612eeb576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401612a2e565b6001600160a01b038316612f2e576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401612a2e565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015612faa57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612fa191815260200190565b60405180910390a35b50505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114612faa5781811015613032576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401612a2e565b612faa84848484036000612ea8565b6001600160a01b03831661306b57604051634b637e8f60e11b815260006004820152602401612a2e565b6001600160a01b0382166130955760405163ec442f0560e01b815260006004820152602401612a2e565b6129208383836131bc565b606060006130ad836132ff565b600101905060008167ffffffffffffffff8111156130cd576130cd6135c1565b6040519080825280601f01601f1916602001820160405280156130f7576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461310157509392505050565b60006131556001600160a01b038416836133e1565b9050805160001415801561317a57508080602001905181019061317891906148f6565b155b15612920576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612a2e565b6001600160a01b0383166131e75780600260008282546131dc9190613ee4565b909155506132729050565b6001600160a01b03831660009081526020819052604090205481811015613253576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101839052606401612a2e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661328e576002805482900390556132ad565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132f291815260200190565b60405180910390a3505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613348577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613374576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061339257662386f26fc10000830492506010015b6305f5e10083106133aa576305f5e100830492506008015b61271083106133be57612710830492506004015b606483106133d0576064830492506002015b600a83106108745760010192915050565b6060612a8d8383600084600080856001600160a01b031684866040516134079190614913565b60006040518083038185875af1925050503d8060008114613444576040519150601f19603f3d011682016040523d82523d6000602084013e613449565b606091505b5091509150613459868383613463565b9695505050505050565b60608261347857613473826134d8565b612a8d565b815115801561348f57506001600160a01b0384163b155b156134d1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612a2e565b5080612a8d565b8051156134e85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60005b83811015613538578181015183820152602001613520565b50506000910152565b6000815180845261355981602086016020860161351d565b601f01601f19169290920160200192915050565b602081526000612a8d6020830184613541565b6001600160a01b038116811461351a57600080fd5b600080604083850312156135a857600080fd5b82356135b381613580565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613600576136006135c1565b604052919050565b600067ffffffffffffffff821115613622576136226135c1565b50601f01601f191660200190565b600082601f83011261364157600080fd5b8135602067ffffffffffffffff8083111561365e5761365e6135c1565b8260051b61366d8382016135d7565b938452858101830193838101908886111561368757600080fd5b84880192505b85831015613707578235848111156136a55760008081fd5b8801603f81018a136136b75760008081fd5b8581013560406136ce6136c983613608565b6135d7565b8281528c828486010111156136e35760008081fd5b828285018a830137600092810189019290925250835250918401919084019061368d565b98975050505050505050565b60008060006060848603121561372857600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561374d57600080fd5b61375986828701613630565b9150509250925092565b634e487b7160e01b600052602160045260246000fd5b6006811061379757634e487b7160e01b600052602160045260246000fd5b9052565b60006101a0820190506137af828551613779565b60208401516137c960208401826001600160a01b03169052565b5060408401516137e460408401826001600160a01b03169052565b5060608401516137ff60608401826001600160801b03169052565b506080840151613819608084018265ffffffffffff169052565b5060a084015161383360a084018265ffffffffffff169052565b5060c084015161384e60c08401826001600160801b03169052565b5060e084015161386960e08401826001600160a01b03169052565b5061010084810151908301526101208085015167ffffffffffffffff1690830152610140808501516001600160801b039081169184019190915261016080860151909116908301526001600160a01b038316610180830152612a8d565b6000806000606084860312156138db57600080fd5b83356138e681613580565b925060208401356138f681613580565b929592945050506040919091013590565b80356bffffffffffffffffffffffff8116811461392357600080fd5b919050565b6000806000806000808688036102c081121561394357600080fd5b873561394e81613580565b9650602088013561395e81613580565b955061396c60408901613907565b9450610220605f198201121561398157600080fd5b5060608701925061028087013591506102a087013561399f81613580565b809150509295509295509295565b801515811461351a57600080fd5b600080600080600060a086880312156139d357600080fd5b85356139de81613580565b945060208601356139ee81613580565b9350604086013592506060860135613a05816139ad565b9150608086013567ffffffffffffffff811115613a2157600080fd5b613a2d88828901613630565b9150509295509295909350565b60008060408385031215613a4d57600080fd5b823591506020830135613a5f81613580565b809150509250929050565b60008060008060008060c08789031215613a8357600080fd5b8635613a8e81613580565b95506020870135613a9e81613580565b94506040870135613aae81613580565b9350613abc60608801613907565b9250608087013567ffffffffffffffff811115613ad857600080fd5b8701610180818a031215613aeb57600080fd5b8092505060a087013590509295509295509295565b600060208284031215613b1257600080fd5b8135612a8d81613580565b6001600160801b038116811461351a57600080fd5b600080600060608486031215613b4757600080fd5b8335613b5281613580565b92506020840135613b6281613580565b91506040840135613b7281613b1d565b809150509250925092565b60008060008060808587031215613b9357600080fd5b843593506020850135613ba581613580565b925060408501359150606085013567ffffffffffffffff811115613bc857600080fd5b613bd487828801613630565b91505092959194509250565b600080600080600080868803610200811215613bfb57600080fd5b8735613c0681613580565b96506020880135613c1681613580565b95506040880135613c2681613580565b9450613c3460608901613907565b9350610160607f1982011215613c4957600080fd5b506080870191506101e087013567ffffffffffffffff811115613c6b57600080fd5b87016040818a03121561399f57600080fd5b60008060408385031215613c9057600080fd5b8235613c9b81613580565b91506020830135613a5f81613580565b600181811c90821680613cbf57607f821691505b602082108103613cdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000606082016001600160a01b0380871684526020818716602086015260606040860152829150855180845260808601925060808160051b87010193506020870160005b82811015613d5757607f19888703018552613d45868351613541565b95509383019390830190600101613d29565b50939998505050505050505050565b600060208284031215613d7857600080fd5b5051919050565b600060208284031215613d9157600080fd5b815160ff81168114612a8d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613df3578160001904821115613dd957613dd9613da2565b80851615613de657918102915b93841c9390800290613dbd565b509250929050565b600082613e0a57506001610874565b81613e1757506000610874565b8160018114613e2d5760028114613e3757613e53565b6001915050610874565b60ff841115613e4857613e48613da2565b50506001821b610874565b5060208310610133831016604e8410600b8410161715613e76575081810a610874565b613e808383613db8565b8060001904821115613e9457613e94613da2565b029392505050565b6000612a8d60ff841683613dfb565b808202811582820484141761087457610874613da2565b600082613edf57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561087457610874613da2565b6001600160a01b0384811682526001600160801b0384811660208401528354808316604085015260a01c65ffffffffffff9081166060850152600185015480841660808601526101a08501939291613f5e60a08701828460a01c1665ffffffffffff169052565b505060028501549081166001600160801b031660c085015260801c60e080850191909152600385015467ffffffffffffffff8116610100860152604081901c6001600160a01b039081166101208701529181901c60ff908116151561014087015260e89190911c16151561016085015260048501541661018084015250612cc3565b60008060408385031215613ff357600080fd5b8251613ffe81613b1d565b6020840151909250613a5f81613b1d565b60006020828403121561402157600080fd5b8135612a8d81613b1d565b65ffffffffffff8116811461351a57600080fd5b60006020828403121561405257600080fd5b8135612a8d8161402c565b65ffffffffffff81811683821601908082111561407c5761407c613da2565b5092915050565b67ffffffffffffffff8116811461351a57600080fd5b6000602082840312156140ab57600080fd5b8135612a8d81614083565b6000813561087481614083565b6000813561087481613580565b60008135610874816139ad565b81356140e881614083565b67ffffffffffffffff8116905081548167ffffffffffffffff198216178355602084013561411581613580565b7bffffffffffffffffffffffffffffffffffffffff00000000000000008160401b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050506040820135614170816139ad565b815460ff60e01b191681151560e01b60ff60e01b16178255506060820135614197816139ad565b815460ff60e81b191681151560e81b60ff60e81b161782555060808201356141be81613580565b6001820180546001600160a01b0319166001600160a01b038316179055505050565b6000813561087481613b1d565b600081356108748161402c565b6000813563ffffffff8116811461087457600080fd5b813561421b81613b1d565b81546001600160801b0319166001600160801b0382161782555060208201356142438161402c565b81547fffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffff1660809190911b75ffffffffffff00000000000000000000000000000000161781556142e4614297604084016141ed565b82547fffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b7bffffffffffff0000000000000000000000000000000000000000000016178255565b6143406142f3606084016141fa565b82547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016178255565b6001810161436a614353608085016141fa565b825463ffffffff191663ffffffff91909116178255565b6143a361437960a085016140b6565b82546bffffffffffffffff00000000191660209190911b6bffffffffffffffff0000000016178255565b6143f76143b260c085016140b6565b82547fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff1660609190911b73ffffffffffffffff00000000000000000000000016178255565b506002810161442861440b60e085016141e0565b82546001600160801b0319166001600160801b0391909116178255565b61292061443861010085016141e0565b82546001600160801b031660809190911b6001600160801b031916178255565b6000612a8d8383613dfb565b8181038181111561087457610874613da2565b813561448281613580565b81546001600160a01b0319166001600160a01b0382161782555060208201356144aa8161402c565b815465ffffffffffff60a01b191660a082901b65ffffffffffff60a01b16178255506001810160408301356144de81613580565b81546001600160a01b0319166001600160a01b0382161782555060608301356145068161402c565b815465ffffffffffff60a01b191660a082901b65ffffffffffff60a01b16178255505060028101608083013561453b81613b1d565b81546001600160801b0319166001600160801b0382161782555060a083013561456381613b1d565b81546001600160801b0316608082901b6001600160801b03191617825550506003810160c083013561459481614083565b815460e08501356145a481613580565b7bffffffffffffffffffffffffffffffffffffffff00000000000000008160401b1667ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000084161717845550505061462961460b61010085016140d0565b82805460ff60e01b191691151560e01b60ff60e01b16919091179055565b61465761463961012085016140d0565b82805460ff60e81b191691151560e81b60ff60e81b16919091179055565b50612d8161466861014084016140c3565b600483016001600160a01b0382166001600160a01b03198254161781555050565b60008235607e1983360301811261469f57600080fd5b9190910192915050565b6001600160801b0381811683821601908082111561407c5761407c613da2565b6000808335601e198436030181126146e057600080fd5b83018035915067ffffffffffffffff8211156146fb57600080fd5b60200191503681900382131561471057600080fd5b9250929050565b60006020828403121561472957600080fd5b815167ffffffffffffffff81111561474057600080fd5b8201601f8101841361475157600080fd5b805161475f6136c982613608565b81815285602083850101111561477457600080fd5b61478582602083016020860161351d565b95945050505050565b600083516147a081846020880161351d565b7f204f00000000000000000000000000000000000000000000000000000000000090830190815283516147da81600284016020880161351d565b01600201949350505050565b601f821115612920576000816000526020600020601f850160051c8101602086101561480f5750805b601f850160051c820191505b8181101561482e5782815560010161481b565b505050505050565b815167ffffffffffffffff811115614850576148506135c1565b6148648161485e8454613cab565b846147e6565b602080601f83116001811461489957600084156148815750858301515b600019600386901b1c1916600185901b17855561482e565b600085815260208120601f198616915b828110156148c8578886015182559484019460019091019084016148a9565b50858210156148e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561490857600080fd5b8151612a8d816139ad565b6000825161469f81846020870161351d56fea2646970667358221220cb26159e85eac1301bec514277cde6c6c3fd92e6f1a4627c7fbc7f7e6f0ec4fa64736f6c63430008180033