@pvpbet/pvpbet
Version:
A decentralized PVP betting platform based on the Ethereum Virtual Machine (EVM).
1,255 lines • 92.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "GovTokenStaking",
"sourceName": "contracts/GovTokenStaking.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [],
"name": "CannotReceive",
"type": "error"
},
{
"inputs": [],
"name": "CannotRestake",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidAmount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "InvalidChip",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "InvalidToken",
"type": "error"
},
{
"inputs": [],
"name": "InvalidUnlockWaitingPeriod",
"type": "error"
},
{
"inputs": [],
"name": "MathOverflowedMulDiv",
"type": "error"
},
{
"inputs": [],
"name": "NoClaimableRewards",
"type": "error"
},
{
"inputs": [],
"name": "NoStakedRecordFound",
"type": "error"
},
{
"inputs": [],
"name": "NoUnstakedRecordFound",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "StakedAmountDeductionFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "StakedAmountInsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "UnauthorizedAccess",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "paid",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "Underpayment",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Claimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Distributed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "govToken",
"type": "address"
}
],
"name": "GovTokenSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"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": false,
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "RewardTokenSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Staked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Unstaked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "votingEscrow",
"type": "address"
}
],
"name": "VotingEscrowSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "accRewardPerWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "accRewardPerWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "custodian",
"type": "address"
}
],
"name": "batchDeductStakedAmountAndTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "claimedRewards",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "claimedRewards",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "correctRewardDebt",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
}
],
"name": "correctRewardDebt",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "custodian",
"type": "address"
}
],
"name": "deductStakedAmountAndTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "distribute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "distribute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "from",
"type": "uint8"
},
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "to",
"type": "uint8"
}
],
"name": "extendUnlockWaitingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "from",
"type": "uint8"
},
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "to",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "extendUnlockWaitingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "govToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialVotingEscrow",
"type": "address"
},
{
"internalType": "address",
"name": "initialGovToken",
"type": "address"
},
{
"internalType": "address[]",
"name": "initialRewardTokens",
"type": "address[]"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "restake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "rewardDebt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "rewardDebt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rewardTokens",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newGovToken",
"type": "address"
}
],
"name": "setGovToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "setRewardTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newVotingEscrow",
"type": "address"
}
],
"name": "setVotingEscrow",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "stake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "stake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "stakeMinValue",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
}
],
"name": "stakedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
}
],
"name": "stakedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "stakedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "stakedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "stakedWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "stakedWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "unclaimedRewards",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "unclaimedRewards",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
}
],
"name": "unstake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "unstake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
}
],
"name": "unstakedRecords",
"outputs": [
{
"components": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockTime",
"type": "uint256"
}
],
"internalType": "struct UnstakedRecord[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "unstakedRecords",
"outputs": [
{
"components": [
{
"internalType": "enum IGovTokenStaking.UnlockWaitingPeriod",
"name": "unlockWaitingPeriod",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockTime",
"type": "uint256"
}
],
"internalType": "struct UnstakedRecord[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "votingEscrow",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161408061003e6000396000818161217f015281816121a801526122e901526140806000f3fe6080604052600436106102ae5760003560e01c80637b4717a411610175578063c5046d85116100dc578063e4fc6b6d11610095578063f2e79dd11161006f578063f2e79dd11461094f578063f2fde38b14610964578063f993185514610984578063fb932108146109a457600080fd5b8063e4fc6b6d146108f1578063ecc1d8c7146108f9578063edfceab21461091957600080fd5b8063c5046d8514610816578063ce5ec92e1461082b578063d1ab58f41461084b578063d54f33ab14610891578063dd752e55146108b1578063df545837146108d157600080fd5b8063aa6bb09a1161012e578063aa6bb09a14610705578063ad3cb1cc14610742578063b4545b9e14610773578063bce1b52014610793578063bd834345146107b3578063c2b18aa0146107f457600080fd5b80637b4717a41461060d5780638129fc1c1461065357806387a02172146106685780638da5cb5b14610688578063949813b8146106c5578063a86ea695146106e557600080fd5b80634e71d92d1161021957806358ba9d27116101d257806358ba9d27146105355780635b72b0cb1461056b578063715018a61461058b57806377a24f36146105a05780637934c69d146105c05780637b2f3752146105ed57600080fd5b80634e71d92d1461046b5780634f1ef286146104805780634f2bfe5b1461049357806352d1902d146104b157806354fd4d50146104c65780635873eb9b146104f457600080fd5b8063201e81a81161026b578063201e81a8146103c15780632769b90b146103e15780633351b61c14610401578063373d6132146104215780633ccfd60b14610436578063458cf89c1461044b57600080fd5b806305268cff146102b357806306fdde03146102ea57806307b14524146103315780630ffaec881461035f5780631478a20b1461037f5780631e83409a146103a1575b600080fd5b3480156102bf57600080fd5b506001546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f657600080fd5b50604080518082019091526015815274505650426574476f76546f6b656e5374616b696e6760581b60208201525b6040516102e191906137d5565b34801561033d57600080fd5b5061035161034c366004613824565b6109c4565b6040519081526020016102e1565b34801561036b57600080fd5b5061035161037a366004613866565b6109f3565b34801561038b57600080fd5b5061039f61039a366004613881565b610a32565b005b3480156103ad57600080fd5b5061039f6103bc3660046138ab565b610b11565b3480156103cd57600080fd5b5061039f6103dc366004613987565b610b61565b3480156103ed57600080fd5b506103516103fc3660046139bb565b610b75565b34801561040d57600080fd5b5061039f61041c366004613a22565b610bc8565b34801561042d57600080fd5b50610351610c1b565b34801561044257600080fd5b5061039f610cc9565b34801561045757600080fd5b5061039f610466366004613a75565b610d8c565b34801561047757600080fd5b5061039f610e2b565b61039f61048e366004613b13565b610e78565b34801561049f57600080fd5b506000546001600160a01b03166102cd565b3480156104bd57600080fd5b50610351610e97565b3480156104d257600080fd5b50604080518082019091526005815264312e312e3160d81b6020820152610324565b34801561050057600080fd5b5061035161050f3660046138ab565b6001600160a01b0316600090815260096020908152604080832083805290915290205490565b34801561054157600080fd5b506103516105503660046138ab565b6001600160a01b031660009081526005602052604090205490565b34801561057757600080fd5b5061039f610586366004613bb8565b610eb4565b34801561059757600080fd5b5061039f610f4f565b3480156105ac57600080fd5b5061039f6105bb366004613beb565b610f63565b3480156105cc57600080fd5b506105e06105db3660046139bb565b61108d565b6040516102e19190613c80565b3480156105f957600080fd5b5061039f610608366004613ce0565b61114e565b34801561061957600080fd5b50610351610628366004613824565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561065f57600080fd5b5061039f61119b565b34801561067457600080fd5b5061039f610683366004613866565b6112af565b34801561069457600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102cd565b3480156106d157600080fd5b506103516106e03660046138ab565b61135f565b3480156106f157600080fd5b5061039f6107003660046138ab565b611385565b34801561071157600080fd5b506000805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c754610351565b34801561074e57600080fd5b50610324604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561077f57600080fd5b5061039f61078e366004613d21565b611397565b34801561079f57600080fd5b5061039f6107ae366004613d4b565b611411565b3480156107bf57600080fd5b506103516107ce3660046138ab565b6001600160a01b03166000908152600a6020908152604080832083805290915290205490565b34801561080057600080fd5b50610809611530565b6040516102e19190613d64565b34801561082257600080fd5b50600254610351565b34801561083757600080fd5b5061039f6108463660046138ab565b611592565b34801561085757600080fd5b50610351610866366004613824565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561089d57600080fd5b5061039f6108ac366004613db1565b6115a4565b3480156108bd57600080fd5b5061039f6108cc366004613d21565b61162e565b3480156108dd57600080fd5b506105e06108ec3660046138ab565b6116c0565b61039f611776565b34801561090557600080fd5b5061039f610914366004613e31565b611781565b34801561092557600080fd5b506103516109343660046138ab565b6001600160a01b031660009081526008602052604090205490565b34801561095b57600080fd5b50600354610351565b34801561097057600080fd5b5061039f61097f3660046138ab565b611824565b34801561099057600080fd5b5061035161099f3660046138ab565b61185f565b3480156109b057600080fd5b5061039f6109bf366004613e6d565b6118f2565b6001600160a01b0382166000908152600560205260408120546109ea90849084906118fc565b90505b92915050565b600060046000836002811115610a0b57610a0b613c48565b6002811115610a1c57610a1c613c48565b8152602001908152602001600020549050919050565b6000816002811115610a4657610a46613c48565b03610a64576040516357b3acf160e01b815260040160405180910390fd5b806002811115610a7657610a76613c48565b826002811115610a8857610a88613c48565b10610aa6576040516357b3acf160e01b815260040160405180910390fd5b33600081815260066020526040812081856002811115610ac857610ac8613c48565b6002811115610ad957610ad9613c48565b8152602001908152602001600020549050610af5828583611987565b610b00828583611a1e565b610b0b828483611ab9565b50505050565b33600081815260056020526040812054610b2e90839085906118fc565b905080600003610b515760405163f40c208960e01b815260040160405180910390fd5b610b5c828483611b45565b505050565b610b69611beb565b610b7281611c46565b50565b6001600160a01b038216600090815260066020526040812081836002811115610ba057610ba0613c48565b6002811115610bb157610bb1613c48565b815260200190815260200160002054905092915050565b610bd0611beb565b8160005b81811015610c1457610c0c858583818110610bf157610bf1613e89565b9050602002016020810190610c0691906138ab565b84611d5d565b600101610bd4565b5050505050565b60008080610c2b60025b60010190565b905060005b81811015610cc1576000816002811115610c4c57610c4c613c48565b90506000816002811115610c6257610c62613c48565b03610c6d5750610cb9565b610cb560046000836002811115610c8657610c86613c48565b6002811115610c9757610c97613c48565b81526020019081526020016000205485611dd690919063ffffffff16565b9350505b600101610c30565b509092915050565b336000818152600760205260408120610ce190611dda565b805190915060005b81811015610b0b576000838281518110610d0557610d05613e89565b60200260200101519050610d3a610d246001546001600160a01b031690565b60208301516001600160a01b0388169190611ff3565b50805160208201516040516001600160a01b038816927f83637d0d125e3dae88720b1ad229ce05c339c065b6282caf315dcb35a999d6d492610d7b92613e9f565b60405180910390a250600101610ce9565b6000866002811115610da057610da0613c48565b03610dbe576040516357b3acf160e01b815260040160405180910390fd5b600254851015610de15760405163162908e360e11b815260040160405180910390fd5b33610e0c610df76001546001600160a01b031690565b6001600160a01b03831690888888888861200a565b50610e178187612109565b610e22818888611ab9565b50505050505050565b336000818152600560205260408120548190610e4a90849083906118fc565b905080600003610e6d5760405163f40c208960e01b815260040160405180910390fd5b610b5c838383611b45565b610e80612174565b610e8982612219565b610e938282612221565b5050565b6000610ea16122de565b5060008051602061402b83398151915290565b6000546001600160a01b03163314610ee657604051633733be5960e21b81523360048201526024015b60405180910390fd5b81610ef384600183612327565b90508015610f0a57610f0784600283612327565b90505b8015610f29576040516322fb20b360e01b815260040160405180910390fd5b610c14610f3e6001546001600160a01b031690565b6001600160a01b0384169085611ff3565b610f57611beb565b610f6160006123ab565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610fa85750825b90506000826001600160401b03166001148015610fc45750303b155b905081158015610fd2575080155b15610ff05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561101a57845460ff60401b1916600160401b1785555b61102261119b565b61102b8861241c565b61103487612471565b61103d86611c46565b831561108357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6001600160a01b038216600090815260076020908152604080832080548251818502810185019093528083526060946109ea9487949392919084015b8282101561113c576000848152602090206040805160608101909152600384029091018054829060ff16600281111561110457611104613c48565b600281111561111557611115613c48565b815260200160018201548152602001600282015481525050815260200190600101906110c9565b5050505061254390919063ffffffff16565b611156611beb565b8060005b81811015610b0b5761119384848381811061117757611177613e89565b905060200201602081019061118c91906138ab565b6000611d5d565b60010161115a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156111e05750825b90506000826001600160401b031660011480156111fc5750303b155b90508115801561120a575080155b156112285760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561125257845460ff60401b1916600160401b1785555b61125b33612644565b611263612655565b8315610c1457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b336000818152600660205260408120818460028111156112d1576112d1613c48565b60028111156112e2576112e2613c48565b81526020019081526020016000205490506112fe828483611987565b611308828261265d565b611313828483611a1e565b610b5c604051806060016040528085600281111561133357611333613c48565b81526020808201859052600060409283018190526001600160a01b038716815260079091522090612696565b6001600160a01b0381166000908152600560205260408120546109ed90839083906118fc565b61138e33612219565b610b7281612471565b336113a3818484611987565b6113ae818484612745565b91506113ba818361265d565b6113c5818484611a1e565b610b5c60405180606001604052808560028111156113e5576113e5613c48565b81526020808201869052600060409283018190526001600160a01b038616815260079091522090612696565b336000818152600760205260409020548210611440576040516334ea6fcd60e01b815260040160405180910390fd5b6001600160a01b038116600090815260076020526040812080548490811061146a5761146a613e89565b6000918252602090912060408051606081019091526003909202018054829060ff16600281111561149d5761149d613c48565b60028111156114ae576114ae613c48565b815260200160018201548152602001600282015481525050905080604001514211156114ed576040516343465ae760e11b815260040160405180910390fd5b6001600160a01b038216600090815260076020526040902061150f90846127b0565b61151d828260200151612109565b610b5c8282600001518360200151611ab9565b6060600b80548060200260200160405190810160405280929190818152602001828054801561158857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161156a575b5050505050905090565b61159b33612219565b610b728161241c565b6000546001600160a01b031633146115d157604051633733be5960e21b8152336004820152602401610edd565b8360005b81811015610e22576116268787838181106115f2576115f2613e89565b905060200201602081019061160791906138ab565b86868481811061161957611619613e89565b9050602002013585610eb4565b6001016115d5565b600082600281111561164257611642613c48565b03611660576040516357b3acf160e01b815260040160405180910390fd5b6002548110156116835760405163162908e360e11b815260040160405180910390fd5b336116aa6116996001546001600160a01b031690565b6001600160a01b03831690846128a0565b506116b58183612109565b610b5c818484611ab9565b6001600160a01b0381166000908152600760209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561176b576000848152602090206040805160608101909152600384029091018054829060ff16600281111561173357611733613c48565b600281111561174457611744613c48565b815260200160018201548152602001600282015481525050815260200190600101906116f8565b505050509050919050565b610f61600034612aa6565b600082600281111561179557611795613c48565b036117b3576040516357b3acf160e01b815260040160405180910390fd5b8160028111156117c5576117c5613c48565b8360028111156117d7576117d7613c48565b106117f5576040516357b3acf160e01b815260040160405180910390fd5b33611801818584611987565b61180c818584612745565b9150611819818584611a1e565b610b0b818484611ab9565b61182c611beb565b6001600160a01b03811661185657604051631e4fbdf760e01b815260006004820152602401610edd565b610b72816123ab565b6000808061186d6002610c25565b905060005b818110156118e957600081600281111561188e5761188e613c48565b905060008160028111156118a4576118a4613c48565b036118af57506118e1565b6001600160a01b03861660009081526006602052604081206118dd91836002811115610c8657610c86613c48565b9350505b600101611872565b50909392505050565b610e938282612aa6565b6001600160a01b0383166000908152600560205260408120548181611922576000611953565b6001600160a01b03808716600090815260096020908152604080832093891683529290522054611953908584612bc8565b6001600160a01b03861660009081526008602052604090205490915061197b90850282612c90565b925050505b9392505050565b6001600160a01b0383166000908152600660205260408120818460028111156119b2576119b2613c48565b60028111156119c3576119c3613c48565b8152602001908152602001600020549050806000036119f557604051630b6a056960e31b815260040160405180910390fd5b81811015610b0b578383828460405163308c9dff60e11b8152600401610edd9493929190613eba565b611a29838383612cac565b6001600160a01b03831660009081526005602052604081205490611a4c85612db0565b905081811015611a6557808203611a638682612e6f565b505b611a6f8582612f5e565b846001600160a01b03167f9bda9a567fe5ce9bcfb637505de9a1dc9d112a34e25a8524026e3d869f95b4718585604051611aaa929190613e9f565b60405180910390a25050505050565b611ac4838383612fad565b6001600160a01b03831660009081526005602052604081205490611ae785612db0565b905081811115611b0057818103611afe8682613074565b505b611b0a8582612f5e565b846001600160a01b03167f3cf14181ae25669a913d72411736fc5c01f538fa503e963b0b2e56bcefb3edaf8585604051611aaa929190613e9f565b6001600160a01b038381166000818152600960209081526040808320948716808452948252808320805487019055838352600a825280832094835293905291909120805483019055611b98908383611ff3565b50816001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268383604051611bde91815260200190565b60405180910390a3505050565b33611c1d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f615760405163118cdaa760e01b8152336004820152602401610edd565b6000600b805480602002602001604051908101604052809291908181526020018280548015611c9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c80575b505083519394506000925050505b81811015611d0c576000838281518110611cc857611cc8613e89565b60200260200101519050611ce5818661319790919063ffffffff16565b611d03576001600160a01b0381166000908152600860205260408120555b50600101611cac565b508251611d2090600b906020860190613737565b507fa1749ac7c93cc69c34654a02dd46920061d3db5577e75d6561ff2f7199ddc37183604051611d509190613d64565b60405180910390a1505050565b6001600160a01b038281166000818152600560209081526040808320549486168084526008835281842054948452600983528184209084529091529020549082029081811115610c14576001600160a01b0380861660009081526009602090815260408083209388168352929052208290555050505050565b0190565b8054606090429060009081816001600160401b03811115611dfd57611dfd6138c6565b604051908082528060200260200182016040528015611e5357816020015b611e406040805160608101909152806000815260200160008152602001600081525090565b815260200190600190039081611e1b5790505b50905060005b82811015611f7f576000878281548110611e7557611e75613e89565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611ea857611ea8613c48565b6002811115611eb957611eb9613c48565b81526020016001820154815260200160028201548152505090508060400151861115611f0e5780838681518110611ef257611ef2613e89565b6020026020010181905250611f078560010190565b9450611f76565b8415611f7657808886840381548110611f2957611f29613e89565b6000918252602090912082516003909202018054909190829060ff19166001836002811115611f5a57611f5a613c48565b0217905550602082015160018201556040909101516002909101555b50600101611e59565b508215611fde5760005b83811015611fdc5786805480611fa157611fa1613ee9565b600082815260208120600360001990930192830201805460ff1916815560018101829055600201559055611fd58160010190565b9050611f89565b505b81831015611fea578281525b95945050505050565b600061200284848460006131f6565b949350505050565b60006001600160a01b03871661206057600019860361203157876001600160a01b03163195505b8534101561205b5760405163d17e444b60e01b815234600482015260248101879052604401610edd565b6120fa565b86600187016120d6576040516370a0823160e01b81526001600160a01b038a811660048301528216906370a0823190602401602060405180830381865afa1580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190613eff565b96505b866000036120e85760009150506120fe565b6120f8888a308a8a8a8a8a6133b9565b505b5060015b979650505050505050565b6000546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044015b600060405180830381600087803b15801561215857600080fd5b505af115801561216c573d6000803e3d6000fd5b505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121fb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121ef60008051602061402b833981519152546001600160a01b031690565b6001600160a01b031614155b15610f615760405163703e46dd60e11b815260040160405180910390fd5b610b72611beb565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561227b575060408051601f3d908101601f1916820190925261227891810190613eff565b60015b6122a357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610edd565b60008051602061402b83398151915281146122d457604051632a87526960e21b815260048101829052602401610edd565b610b5c8383613471565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f615760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038316600090815260066020526040812081908185600281111561235457612354613c48565b600281111561236557612365613c48565b815260200190815260200160002054905082811061239157612388858585611a1e565b600091506123a3565b61239c858583611a1e565b8083035b91505b509392505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fdfc99f06c00ec9d9c39735fe0e3b20e8d77ecbe0eed7f1622dbda285002954e8906020015b60405180910390a150565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916001600160a01b038516916124b491613f18565b600060405180830381855afa9150503d80600081146124ef576040519150601f19603f3d011682016040523d82523d6000602084013e6124f4565b606091505b5091509150816125175760405163c1ab6dc160e01b815260040160405180910390fd5b60008180602001905181019061252d9190613f34565b60ff169050600a81900a600255610b0b846134c7565b815160609060009081816001600160401b03811115612564576125646138c6565b6040519080825280602002602001820160405280156125ba57816020015b6125a76040805160608101909152806000815260200160008152602001600081525090565b8152602001906001900390816125825790505b50905060005b82811015611fdc5760008782815181106125dc576125dc613e89565b602002602001015190508660028111156125f8576125f8613c48565b8151600281111561260b5761260b613c48565b0361263b578083868151811061262357612623613e89565b60200260200101819052506126388560010190565b94505b506001016125c0565b61264c613515565b610b728161355e565b610f61613515565b600054604051632770a7eb60e21b81526001600160a01b0384811660048301526024820184905290911690639dc29fac9060440161213e565b6002815160028111156126ab576126ab613c48565b036126c157626ebe0042015b60408201526126ed565b6001815160028111156126d6576126d6613c48565b036126e65762093a8042016126b7565b4260408201525b8154600181810184556000848152602090208351600390930201805484939192839160ff19169083600281111561272657612726613c48565b0217905550602082015181600101556040820151816002015550505050565b6001600160a01b038316600090815260066020526040812081908185600281111561277257612772613c48565b600281111561278357612783613c48565b815260200190815260200160002054905082811180156127a65750600254838203105b61200257826123a0565b81548082106127be57505050565b6000198101825b8181101561285f578460018201815481106127e2576127e2613e89565b906000526020600020906003020185828154811061280257612802613e89565b6000918252602090912082546003909202018054909160ff1690829060ff1916600183600281111561283657612836613c48565b0217905550600182810154908201556002918201549101556128588160010190565b90506127c5565b508380548061287057612870613ee9565b600082815260208120600360001990930192830201805460ff191681556001810182905560020155905550505050565b60006001600160a01b0383166128f65760001982036128c757836001600160a01b03163191505b813410156128f15760405163d17e444b60e01b815234600482015260248101839052604401610edd565b612a9c565b826001830161296c576040516370a0823160e01b81526001600160a01b0386811660048301528216906370a0823190602401602060405180830381865afa158015612945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129699190613eff565b92505b8260000361297e576000915050611980565b604051636eb1769f60e11b81526001600160a01b0386811660048301523060248301526000919083169063dd62ed3e90604401602060405180830381865afa1580156129ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f29190613eff565b905083811015612a1f5760405163d17e444b60e01b81526004810182905260248101859052604401610edd565b6040516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018690528316906323b872dd906064016020604051808303816000875af1158015612a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a989190613f57565b5050505b5060019392505050565b33612ab28184846128a0565b50826001600160a01b0316816001600160a01b03167fad4a9acf26d8bba7a8cf1a41160d59be042ee554578e256c98d2ab74cdd4354284604051612af891815260200190565b60405180910390a36003548015801590612b7a5750612b7a84600b805480602002602001604051908101604052809291908181526020018280548015612b6757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612b49575b505050505061319790919063ffffffff16565b15610b0b57612ba9612b8c8483613566565b6001600160a01b0386166000908152600860205260409020540190565b6001600160a01b03851660009081526008602052604090205550505050565b6000838302816000198587098281108382030391505080600003612bff57838281612bf557612bf5613f79565b0492505050611980565b808411612c1f5760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b0290565b600081831115612ca357508082036109ed565b50600092915050565b6001600160a01b0383166000908152600660205260408120612d0b91839190856002811115612cdd57612cdd613c48565b6002811115612cee57612cee613c48565b815260200190815260200160002054612e6a90919063ffffffff16565b6001600160a01b038416600090815260066020526040812090846002811115612d3657612d36613c48565b6002811115612d4757612d47613c48565b815260200190815260200160002081905550612d7381600460