UNPKG

@volare.finance/volare.js

Version:
1,381 lines 134 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Controller", "sourceName": "contracts/vanilla/Controller.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isOperator", "type": "bool" } ], "name": "AccountOperatorUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "CallExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isRestricted", "type": "bool" } ], "name": "CallRestricted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "CollateralAssetDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "CollateralAssetWithdrawed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "donator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Donated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldFullPauser", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newFullPauser", "type": "address" } ], "name": "FullPauserUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "vToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LongVTokenDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "address", "name": "vToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LongVTokenWithdrawed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "collateral", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "NakedCapUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldPartialPauser", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newPartialPauser", "type": "address" } ], "name": "PartialPauserUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "vToken", "type": "address" }, { "indexed": true, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "address", "name": "collateral", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vTokenBurned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "vToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ShortVTokenBurned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "address", "name": "vToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ShortVTokenMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "SystemFullyPaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "SystemPartiallyPaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "liquidator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "auctionPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "debtAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" } ], "name": "VaultLiquidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "vaultType", "type": "uint256" } ], "name": "VaultOpened", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "VaultSettled", "type": "event" }, { "inputs": [], "name": "addressbook", "outputs": [ { "internalType": "contract IAddressbook", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculator", "outputs": [ { "internalType": "contract IMarginCalculator", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "callRestricted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlying", "type": "address" }, { "internalType": "address", "name": "_strike", "type": "address" }, { "internalType": "address", "name": "_collateral", "type": "address" }, { "internalType": "uint256", "name": "_expiry", "type": "uint256" } ], "name": "canSettleAssets", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "donate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "fullPauser", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "getAccountVaultCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getConfiguration", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" } ], "name": "getNakedCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" } ], "name": "getNakedPoolBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_vToken", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "getPayout", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_vaultId", "type": "uint256" } ], "name": "getProceed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_vaultId", "type": "uint256" } ], "name": "getVault", "outputs": [ { "components": [ { "internalType": "address[]", "name": "shortVTokens", "type": "address[]" }, { "internalType": "address[]", "name": "longVTokens", "type": "address[]" }, { "internalType": "address[]", "name": "collateralAssets", "type": "address[]" }, { "internalType": "uint256[]", "name": "shortAmounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "longAmounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" } ], "internalType": "struct LibMarginVault.Vault", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_vaultId", "type": "uint256" } ], "name": "getVaultWithDetails", "outputs": [ { "components": [ { "internalType": "address[]", "name": "shortVTokens", "type": "address[]" }, { "internalType": "address[]", "name": "longVTokens", "type": "address[]" }, { "internalType": "address[]", "name": "collateralAssets", "type": "address[]" }, { "internalType": "uint256[]", "name": "shortAmounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "longAmounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" } ], "internalType": "struct LibMarginVault.Vault", "name": "", "type": "tuple" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_vToken", "type": "address" } ], "name": "hasExpired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addressbook", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_vaultId", "type": "uint256" } ], "name": "isLiquidatable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_operator", "type": "address" } ], "name": "isOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_vToken", "type": "address" } ], "name": "isSettlementAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum LibActions.ActionType", "name": "actionType", "type": "uint8" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "secondAddress", "type": "address" }, { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct LibActions.ActionArgs[]", "name": "_actions", "type": "tuple[]" } ], "name": "operate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "oracle", "outputs": [ { "internalType": "contract IOracleV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "partialPauser", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IMarginPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refreshConfiguration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isRestricted", "type": "bool" } ], "name": "setCallRestriction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_fullPauser", "type": "address" } ], "name": "setFullPauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_collateral", "type": "address" }, { "internalType": "uint256", "name": "_cap", "type": "uint256" } ], "name": "setNakedCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "bool", "name": "_isOperator", "type": "bool" } ], "name": "setOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_partialPauser", "type": "address" } ], "name": "setPartialPauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_fullyPaused", "type": "bool" } ], "name": "setSystemFullyPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_partiallyPaused", "type": "bool" } ], "name": "setSystemPartiallyPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_vaultId", "type": "uint256" } ], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "systemFullyPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "systemPartiallyPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "whitelist", "outputs": [ { "internalType": "contract IWhitelist", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506200001d3362000027565b6001805562000082565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b61579880620000926000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80639f677ed911610130578063cdee058a116100b8578063e723406c1161007c578063e723406c146105a8578063eab7775b146105bb578063ef4fcafa146105cf578063f2fde38b146105e2578063f77bc88b146105f557600080fd5b8063cdee058a14610525578063ce3e39c014610539578063d66dd43e1461054c578063d99d13f514610575578063e69d849d1461059557600080fd5b8063beca75d7116100ff578063beca75d71461049a578063c220101d146104ad578063c644d3a2146104c0578063caa6d21a146104e9578063cab2e8051461051257600080fd5b80639f677ed914610425578063b617f0c614610438578063b6363cf21461044b578063bc463a3d1461048757600080fd5b806364681083116101be5780637dc0d1d0116101825780637dc0d1d0146103b35780638da5cb5b146103c657806393e59dc1146103dd5780639daafbe8146103f05780639db938911461041257600080fd5b8063646810831461033c5780636bd50cef146103445780636c0c3b991461038457806370dc320c14610398578063715018a6146103ab57600080fd5b80633fdfb2aa116102055780633fdfb2aa146102b2578063485cc955146102e2578063558a7297146102f5578063565eea1914610308578063573c473e1461032957600080fd5b806314b93faf1461023757806316f0115b1461025f57806329729d881461028a5780632eb1c3a71461029d575b600080fd5b61024a610245366004615050565b610608565b60405190151581526020015b60405180910390f35b600654610272906001600160a01b031681565b6040516001600160a01b039091168152602001610256565b600854610272906001600160a01b031681565b6102b06102ab366004615140565b610616565b005b6102c56102c0366004615140565b6106b2565b604080519315158452602084019290925290820152606001610256565b6102b06102f0366004615018565b6106d7565b6102b0610303366004615113565b610897565b61031b610316366004615140565b61094e565b604051908152602001610256565b6102b061033736600461522d565b6109f6565b6102b0610ac2565b600354600454600554600654604080516001600160a01b039586168152938516602085015291841691830191909152919091166060820152608001610256565b60085461024a90600160b01b900460ff1681565b600254610272906001600160a01b031681565b6102b0610ad4565b600454610272906001600160a01b031681565b6000546201000090046001600160a01b0316610272565b600354610272906001600160a01b031681565b6104036103fe366004615140565b610ae6565b604051610256939291906154fb565b600754610272906001600160a01b031681565b6102b061043336600461522d565b610d7f565b6102b061044636600461516b565b610e44565b61024a610459366004615018565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b6102b0610495366004614fd9565b610eae565b6102b06104a8366004614fd9565b610f7c565b61031b6104bb366004615140565b61104a565b61031b6104ce366004614fd9565b6001600160a01b03166000908152600e602052604090205490565b61031b6104f7366004614fd9565b6001600160a01b031660009081526009602052604090205490565b6102b061052036600461522d565b611104565b60085461024a90600160a01b900460ff1681565b600554610272906001600160a01b031681565b61031b61055a366004614fd9565b6001600160a01b03166000908152600f602052604090205490565b610588610583366004615140565b611192565b60405161025691906154c6565b6102b06105a3366004615140565b6113f3565b61024a6105b6366004614fd9565b611496565b60085461024a90600160a81b900460ff1681565b6102b06105dd366004615140565b6114b7565b6102b06105f0366004614fd9565b611504565b61024a610603366004614fd9565b61157a565b600060015b95945050505050565b61061e6115f6565b600081116106595760405162461bcd60e51b815260206004820152600360248201526221999b60e91b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152600e602052604090819020839055517f6ff730ba70e34bd5ca823424bd15ab869cadc6bad079b527c71bde444ad6402b906106a69084815260200190565b60405180910390a25050565b6000806000806000806106c58888611657565b91985096509450505050509250925092565b600054610100900460ff16158080156106f75750600054600160ff909116105b806107115750303b158015610711575060005460ff166001145b6107745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610650565b6000805460ff191660011790558015610797576000805461ff0019166101001790555b6001600160a01b0383166107d25760405162461bcd60e51b8152602060048201526002602482015261433760f01b6044820152606401610650565b6001600160a01b03821661080d5760405162461bcd60e51b8152602060048201526002602482015261086760f31b6044820152606401610650565b61081682611504565b600280546001600160a01b0319166001600160a01b03851617905561083961171b565b6008805460ff60b01b1916600160b01b1790558015610892576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b336000908152600b602090815260408083206001600160a01b038616845290915290205460ff16151581151514156108e15760405162461bcd60e51b8152600401610650906154aa565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f1ae45540b0875932452da603b351ce2f1758258ba1345e79f8fc94f044cb078791015b60405180910390a35050565b60006109ed61095f6008600a61561a565b600554604051630478409360e41b81526001600160a01b0387811660048301526109e792879291169063478409309060240160206040518083038186803b1580156109a957600080fd5b505afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e1919061529b565b90611975565b90611981565b90505b92915050565b6007546001600160a01b03163314610a355760405162461bcd60e51b8152602060048201526002602482015261219960f11b6044820152606401610650565b60085460ff600160a01b9091041615158115151415610a665760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527f531c3d7229f510a8da00a0f5792686958cdd9c8a120c3c030a6053cd66b68556906020015b60405180910390a150565b610aca6115f6565b610ad261171b565b565b610adc6115f6565b610ad2600061198d565b610aee614e3d565b6001600160a01b0383166000818152600a602090815260408083208684528252808320848452600c8352818420878552835281842054948452600d83528184208785528352818420548251825460e09581028201860190945260c081018481529596879693959094929391928692849290918491840182828015610b9b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b7d575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610bfd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bdf575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610c5f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c41575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610cb757602002820191906000526020600020905b815481526020019060010190808311610ca3575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610d0f57602002820191906000526020600020905b815481526020019060010190808311610cfb575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610d6757602002820191906000526020600020905b815481526020019060010190808311610d53575b50505050508152505092509250925092509250925092565b6008546001600160a01b03163314610dbe5760405162461bcd60e51b8152602060048201526002602482015261433160f01b6044820152606401610650565b60085460ff600160a81b9091041615158115151415610def5760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f4f1d0445688d95c99ca9fc036f551b205fd18ff26a4443b1979c16d1ba66b53590602001610ab7565b610e4c6119e8565b610e54611a42565b6000806000610e6284611a81565b9250925092508215610e9f57610e788282611eab565b6001600160a01b0382166000908152600d6020908152604080832084845290915290204290555b505050610eab60018055565b50565b610eb66115f6565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152600360248201526243313160e81b6044820152606401610650565b6007546001600160a01b0382811691161415610f205760405162461bcd60e51b8152600401610650906154aa565b6007546040516001600160a01b038084169216907f1440312dbc326ddc21bfa95078324bf5aaf6899e8a27cba3057c60adfc84e40b90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610f846115f6565b6001600160a01b038116610fc05760405162461bcd60e51b815260206004820152600360248201526204331360ec1b6044820152606401610650565b6008546001600160a01b0382811691161415610fee5760