@volare.finance/volare.js
Version:
The SDK for Volare Protocol
1,381 lines • 134 kB
JSON
{
"_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