UNPKG

@gooddollar/goodprotocol

Version:
1,713 lines 100 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SuperToken", "sourceName": "contracts/token/superfluid/SuperToken.sol", "abi": [ { "inputs": [ { "internalType": "contract ISuperfluid", "name": "host", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "SF_TOKEN_AGREEMENT_ALREADY_EXISTS", "type": "error" }, { "inputs": [], "name": "SF_TOKEN_AGREEMENT_DOES_NOT_EXIST", "type": "error" }, { "inputs": [], "name": "SF_TOKEN_BURN_INSUFFICIENT_BALANCE", "type": "error" }, { "inputs": [], "name": "SF_TOKEN_MOVE_INSUFFICIENT_BALANCE", "type": "error" }, { "inputs": [], "name": "SF_TOKEN_ONLY_HOST", "type": "error" }, { "inputs": [], "name": "SF_TOKEN_ONLY_LISTED_AGREEMENT", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_MINT_TO_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_NFT_PROXY_ALREADY_SET", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_NO_UNDERLYING_TOKEN", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_ONLY_GOV_OWNER", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_ONLY_HOST", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_ONLY_SELF", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_TRANSFER_TO_TOKEN_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32[]", "name": "data", "type": "bytes32[]" } ], "name": "AgreementCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "penaltyAccount", "type": "address" }, { "indexed": true, "internalType": "address", "name": "rewardAccount", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardAmount", "type": "uint256" } ], "name": "AgreementLiquidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "liquidatorAccount", "type": "address" }, { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "penaltyAccount", "type": "address" }, { "indexed": true, "internalType": "address", "name": "bondAccount", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "bailoutAmount", "type": "uint256" } ], "name": "AgreementLiquidatedBy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "liquidatorAccount", "type": "address" }, { "indexed": true, "internalType": "address", "name": "targetAccount", "type": "address" }, { "indexed": false, "internalType": "address", "name": "rewardAmountReceiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardAmount", "type": "uint256" }, { "indexed": false, "internalType": "int256", "name": "targetAccountBalanceDelta", "type": "int256" }, { "indexed": false, "internalType": "bytes", "name": "liquidationTypeData", "type": "bytes" } ], "name": "AgreementLiquidatedV2", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "slotId", "type": "uint256" } ], "name": "AgreementStateUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "AgreementTerminated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "agreementClass", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32[]", "name": "data", "type": "bytes32[]" } ], "name": "AgreementUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "AuthorizedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "bailoutAccount", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bailoutAmount", "type": "uint256" } ], "name": "Bailout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Burned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "uuid", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "codeAddress", "type": "address" } ], "name": "CodeUpdated", "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": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "RevokedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Sent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "authorizeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "castrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "data", "type": "bytes32[]" } ], "name": "createAgreement", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "feeRecipient", "type": "address" }, { "internalType": "address", "name": "gatewayFeeRecipient", "type": "address" }, { "internalType": "address", "name": "baseFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "refund", "type": "uint256" }, { "internalType": "uint256", "name": "tipTxFee", "type": "uint256" }, { "internalType": "uint256", "name": "gatewayFee", "type": "uint256" }, { "internalType": "uint256", "name": "baseTxFee", "type": "uint256" } ], "name": "creditGasFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "debitGasFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultOperators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getAccountActiveAgreements", "outputs": [ { "internalType": "contract ISuperAgreement[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "agreementClass", "type": "address" }, { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "uint256", "name": "dataLength", "type": "uint256" } ], "name": "getAgreementData", "outputs": [ { "internalType": "bytes32[]", "name": "data", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "agreementClass", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "slotId", "type": "uint256" }, { "internalType": "uint256", "name": "dataLength", "type": "uint256" } ], "name": "getAgreementStateSlot", "outputs": [ { "internalType": "bytes32[]", "name": "slotData", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCodeAddress", "outputs": [ { "internalType": "address", "name": "codeAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getHost", "outputs": [ { "internalType": "address", "name": "host", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "granularity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "underlyingToken", "type": "address" }, { "internalType": "uint8", "name": "underlyingDecimals", "type": "uint8" }, { "internalType": "string", "name": "n", "type": "string" }, { "internalType": "string", "name": "s", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "isAccountCritical", "outputs": [ { "internalType": "bool", "name": "isCritical", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAccountCriticalNow", "outputs": [ { "internalType": "bool", "name": "isCritical", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "isAccountSolvent", "outputs": [ { "internalType": "bool", "name": "isSolvent", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAccountSolventNow", "outputs": [ { "internalType": "bool", "name": "isSolvent", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "isOperatorFor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "bytes", "name": "liquidationTypeData", "type": "bytes" }, { "internalType": "address", "name": "liquidatorAccount", "type": "address" }, { "internalType": "bool", "name": "useDefaultRewardAccount", "type": "bool" }, { "internalType": "address", "name": "targetAccount", "type": "address" }, { "internalType": "uint256", "name": "rewardAmount", "type": "uint256" }, { "internalType": "int256", "name": "targetAccountBalanceDelta", "type": "int256" } ], "name": "makeLiquidationPayoutsV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "operationApprove", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "operationDecreaseAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "operationIncreaseAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "operationSend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "operationTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorSend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "poolAdminNFT", "outputs": [ { "internalType": "contract IPoolAdminNFT", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolMemberNFT", "outputs": [ { "internalType": "contract IPoolMemberNFT", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "realtimeBalanceOf", "outputs": [ { "internalType": "int256", "name": "availableBalance", "type": "int256" }, { "internalType": "uint256", "name": "deposit", "type": "uint256" }, { "internalType": "uint256", "name": "owedDeposit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "realtimeBalanceOfNow", "outputs": [ { "internalType": "int256", "name": "availableBalance", "type": "int256" }, { "internalType": "uint256", "name": "deposit", "type": "uint256" }, { "internalType": "uint256", "name": "owedDeposit", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "revokeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "selfApproveFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "send", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "int256", "name": "delta", "type": "int256" } ], "name": "settleBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "uint256", "name": "dataLength", "type": "uint256" } ], "name": "terminateAgreement", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "data", "type": "bytes32[]" } ], "name": "updateAgreementData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "slotId", "type": "uint256" }, { "internalType": "bytes32[]", "name": "slotData", "type": "bytes32[]" } ], "name": "updateAgreementStateSlot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAddress", "type": "address" } ], "name": "updateCode", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003e5838038062003e58833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051613d2a6200012e6000396000818161030e015281816108de0152818161095a01528181610ca101528181610cd501528181610d5d01528181610d9101528181610e2401528181610e950152818161103901528181611085015281816111b60152818161139d015281816113d10152818161177b015281816117af01528181611831015281816118d40152818161195c01528181611fd70152818161207e015281816125650152612de80152613d2a6000f3fe608060405234801561001057600080fd5b50600436106102515760003560e01c806306e485381461025657806306fdde0314610274578063090c415e14610289578063095ea7b31461029e57806312a6a3f8146102c157806316d055d6146102d457806318160ddd146102e75780631863e809146102f957806320bc44251461030c57806323b872dd1461033b578063270483971461034e5780632ec8eec714610361578063313ce56714610394578063386fa221146103a357806339509351146103b657806342fe0980146103c957806346951954146103dc5780634b2763b3146103ef5780634b61cc331461040257806350d75d251461042257806352d1902d1461042a578063556f0dc71461043257806358cf96721461043957806362aa52871461044c57806362ad1b831461045f57806366a12fb6146104725780636a30b253146104855780636c2d9f2f1461049857806370a08231146104ab57806379359f6f146104be578063959b8c3f146104d157806395d89b41146104e45780639903ad38146104ec5780639bd9bbc6146104f4578063a1b2bf8b14610507578063a457c2d71461051a578063a9059cbb1461052d578063b84cdd4a14610540578063bb0d196e14610553578063c4b1584c14610566578063c76058fc14610579578063c780fd821461058c578063ca0c1e7f1461059f578063cf97256d146105b2578063d95b6371146105c5578063d9d078d6146105d8578063dd62ed3e146105eb578063eb3537cc14610624578063fad8b32a14610652578063fc673c4f14610665578063fe9d930314610678575b600080fd5b61025e61068b565b60405161026b9190612eb5565b60405180910390f35b61027c61069c565b60405161026b9190612f48565b61029c610297366004612fbb565b61072e565b005b6102b16102ac366004613016565b6107e2565b604051901515815260200161026b565b61029c6102cf366004613042565b6107f9565b61029c6102e236600461308d565b6108dc565b6003545b60405190815260200161026b565b61029c6103073660046131a1565b610943565b7f00000000000000000000000000000000000000000000000000000000000000005b60405161026b9190613233565b6102b1610349366004613247565b610be8565b61029c61035c366004613288565b610bfe565b61037461036f3660046132aa565b610c9a565b60408051948552602085019390935291830152606082015260800161026b565b6040516012815260200161026b565b61025e6103b13660046132aa565b610e20565b6102b16103c4366004613016565b610f06565b61029c6103d7366004613308565b610f42565b61029c6103ea3660046132aa565b61102e565b61029c6103fd366004613247565b611083565b6104156104103660046133a2565b611115565b60405161026b91906133e8565b61032e61115a565b6102eb611164565b60016102eb565b61029c610447366004613016565b611188565b61029c61045a366004613247565b6111b4565b61029c61046d366004613420565b611213565b61029c610480366004613247565b6112c1565b61029c6104933660046134be565b6112e1565b6104156104a636600461353e565b61132a565b6102eb6104b93660046132aa565b61136c565b6102b16104cc3660046132aa565b611395565b61029c6104df3660046132aa565b611451565b61027c6114a2565b61029c6114b1565b61029c610502366004613573565b6115c1565b61029c610515366004613042565b61161b565b6102b1610528366004613016565b6116c5565b6102b161053b366004613016565b611714565b6102b161054e366004613016565b611722565b6102b16105613660046132aa565b611773565b60195461032e906001600160a01b031681565b60185461032e906001600160a01b031681565b61029c61059a366004613247565b61182f565b61029c6105ad3660046135c2565b6118d2565b61029c6105c0366004613016565b611945565b6102b16105d336600461362d565b611a33565b6102b16105e6366004613016565b611a41565b6102eb6105f936600461362d565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b610637610632366004613016565b611a5b565b6040805193845260208401929092529082015260600161026b565b61029c6106603660046132aa565b611b8a565b61029c610673366004613666565b611bdb565b61029c6106863660046136ad565b611c84565b60606106976012611cf6565b905090565b6060600f80546106ab906136eb565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906136eb565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600033858560405160200161074593929190613725565b60405160208183030381529060405280519060200120905061079a81848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d5c92505050565b6040518481526001600160a01b0386169033907f30f416fa68fca014a0f334464c64b000ba53e99b6d2afdea9d5ca756372d5985906020015b60405180910390a35050505050565b60006107ef338484611d9d565b5060015b92915050565b6040513390600090610811908390879060200161376e565b60408051601f19818403018152919052805160209091012090506108358184611e4d565b156108535760405163782a90fb60e11b815260040160405180910390fd5b61089081858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d5c92505050565b816001600160a01b03167f770ea40a13a4644573ed785e5c7116890709947918747febc5add46feb531e2d8686866040516108cd939291906137ab565b60405180910390a25050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633141580610912575060005b156109305760405163c51efddd60e01b815260040160405180910390fd5b61093c84848484611e89565b5050505050565b604051632329212160e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638ca484849061098f903390600401613233565b602060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d091906137ec565b6109ed5760405163327fd99160e21b815260040160405180910390fd5b60006109f7611fd2565b90506001600160a01b038116610a0a5750845b600085610a175786610a19565b815b905060008313610ab657610a2c8361381f565b610a3585612111565b14610a4257610a4261383b565b610a4b84612111565b6001600160a01b03821660009081526002602052604081208054909190610a73908490613851565b90915550506001600160a01b03851660009081526002602052604081208054859290610aa0908490613851565b90915550610ab1905085828661217f565b610b80565b8515610ac457610ac461383b565b82610ace85612111565b610ad89190613851565b6001600160a01b03831660009081526002602052604081208054909190610b00908490613879565b90915550610b0f905084612111565b6001600160a01b03881660009081526002602052604081208054909190610b37908490613851565b90915550506001600160a01b03851660009081526002602052604081208054859290610b64908490613851565b90915550610b75905082888661217f565b610b8082868561217f565b846001600160a01b0316876001600160a01b0316336001600160a01b03167fb8381a3ce157650e06186e3e8f4dd4dc29236f2688b6eed1893d0a60d7c6386f8c8589898f604051610bd5959493929190613899565b60405180910390a4505050505050505050565b6000610bf633858585611e89565b949350505050565b6040513390600090610c16908390869060200161376e565b604051602081830303815290604052805190602001209050610c388184611e4d565b610c555760405163dae1880960e01b815260040160405180910390fd5b610c5f81846121b2565b60405184815233907f71a63dc095de07aa5512ad57a7596a39516317e316981a1cd71000057be1537b9060200160405180910390a250505050565b60008080807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610cd35742610d55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5591906138d7565b9050610e11857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d8f5742611a5b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063291906138d7565b91979096509094509092509050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e64576040805160008152602081019091526107f3565b6001600160a01b038281166000908152600160205260409081902054905163c56a069d60e01b8152901960048201527f00000000000000000000000000000000000000000000000000000000000000009091169063c56a069d90602401600060405180830381865afa158015610ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f391908101906138f0565b3360008181526011602090815260408083206001600160a01b038716845290915281205490916107ef918590610f3d9086906139a1565b611d9d565b600054610100900460ff16610fb25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084015b60405180910390fd5b600e805460ff8716600160a01b026001600160a81b03199091166001600160a01b03891617179055600f610fe7848683613a02565b506010610ff5828483613a02565b50610fff306121d3565b6040516000808252908190600080516020613ca8833981519152906020015b60405180910390a3505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110775760405163263dcdc160e21b815260040160405180910390fd5b611080816122e9565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331415806110b9575060005b156110d75760405163c51efddd60e01b815260040160405180910390fd5b6001600160a01b038084166000908152601160209081526040808320938616835292905220546111109084908490610f3d9085906139a1565b505050565b6060600085858560405160200161112e93929190613725565b60405160208183030381529060405280519060200120905061115081846124bb565b9695505050505050565b600061069761254a565b7f6bfbb132610e56cb96575dba244667b9d6dbfeffe22b68a79fa16f2d18eb001990565b33156111a65760405162461bcd60e51b8152600401610fa990613ac1565b6111b0828261255d565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331415806111ea575060005b156112085760405163c51efddd60e01b815260040160405180910390fd5b611110838383611d9d565b336112206012828a61261f565b61123d5760405163f7f0222760e01b815260040160405180910390fd5b6112b78189898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a9081908401838280828437600092019190915250600192506126c8915050565b5050505050505050565b33301461120857604051630fff4cc960e31b815260040160405180910390fd5b33156112ff5760405162461bcd60e51b8152600401610fa990613ac1565b611309888561276a565b6113148888856127c4565b61131f8886836127c4565b6112b78887846127c4565b60606000848460405160200161134192919061376e565b60405160208183030381529060405280519060200120905061136381846124bb565b95945050505050565b60008061137883610c9a565b50505090506000811261138b578061138e565b60005b9392505050565b60006107f3827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113cf5742611a41565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e691906138d7565b3361145e601282846127e1565b806001600160a01b0316826001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35050565b6060601080546106ab906136eb565b600054610100900460ff16158080156114d15750600054600160ff909116105b806114f257506114e0306128e5565b1580156114f2575060005460ff166001145b6115555760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610fa9565b6000805460ff191660011790558015611578576000805461ff0019166101001790555b8015611080576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a150565b6116153333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250600191506126c89050565b50505050565b6040513390600090611633908390879060200161376e565b60405160208183030381529060405280519060200120905061168881858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d5c92505050565b336001600160a01b03167f0c4c547b3a4fcaa5be8353b3111472b124155bccc86de811d4a481c9e6e9faca8686866040516108cd939291906137ab565b60006107ef3384610f3d856040518060600160405280602a8152602001613c7e602a91393360009081526011602090815260408083206001600160a01b038d16845290915290205491906128f4565b600061138e33338585611e89565b6000806000806117328686611a5b565b925092509250600061175a82841161174b576000612111565b6117558385613aeb565b612111565b6117649085613851565b60001315979650505050505050565b60006107f3827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117ad5742611722565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e9190