UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

1,572 lines 90.7 kB
{ "_format": "hh-sol-artifact-1", "contractName": "RelayerRewardsPoolV1", "sourceName": "contracts/deprecated/V1/RelayerRewardsPoolV1.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "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": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "parameter", "type": "string" } ], "name": "InvalidParameter", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "NoRewardsToClaim", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerAlreadyRegistered", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerNotRegistered", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "RewardsAlreadyClaimed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "RoundNotEnded", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "UnauthorizedUnregister", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "B3TRAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newWeight", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldWeight", "type": "uint256" } ], "name": "ClaimWeightUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newBlocks", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldBlocks", "type": "uint256" } ], "name": "EarlyAccessBlocksUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "EmissionsAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userCount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalWeightedActions", "type": "uint256" } ], "name": "ExpectedActionsReduced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldFee", "type": "uint256" } ], "name": "FeeCapUpdated", "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": "relayer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "voter", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "actionCount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "weight", "type": "uint256" } ], "name": "RelayerActionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newDenominator", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldDenominator", "type": "uint256" } ], "name": "RelayerFeeDenominatorUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldFee", "type": "uint256" } ], "name": "RelayerFeePercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RelayerRewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "relayer", "type": "address" } ], "name": "RelayerUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalRewards", "type": "uint256" } ], "name": "RewardsDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAutoVoteUsers", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalWeightedActions", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "numRelayers", "type": "uint256" } ], "name": "TotalAutoVotingActionsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newWeight", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldWeight", "type": "uint256" } ], "name": "VoteWeightUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "XAllocationVotingAddressUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "POOL_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "totalReward", "type": "uint256" } ], "name": "calculateRelayerFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "claimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "completedWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getB3trAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getClaimWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEarlyAccessBlocks", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEmissionsAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeeCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "getMissedAutoVotingUsersCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRegisteredRelayers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRelayerFeeDenominator", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRelayerFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "getTotalRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVoteWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getXAllocationVotingAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "upgrader", "type": "address" }, { "internalType": "address", "name": "b3trAddress", "type": "address" }, { "internalType": "address", "name": "emissionsAddress", "type": "address" }, { "internalType": "address", "name": "xAllocationVotingAddress", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isClaimEarlyAccessActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "isRegisteredRelayer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isRewardClaimable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "isVoteEarlyAccessActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "uint256", "name": "userCount", "type": "uint256" } ], "name": "reduceExpectedActionsForRound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "registerRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "enum RelayerActionV1", "name": "action", "type": "uint8" } ], "name": "registerRelayerAction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "b3trAddress", "type": "address" } ], "name": "setB3TRAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newWeight", "type": "uint256" } ], "name": "setClaimWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blocks", "type": "uint256" } ], "name": "setEarlyAccessBlocks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "emissionsAddress", "type": "address" } ], "name": "setEmissionsAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFeeCap", "type": "uint256" } ], "name": "setFeeCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newDenominator", "type": "uint256" } ], "name": "setRelayerFeeDenominator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFeePercentage", "type": "uint256" } ], "name": "setRelayerFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAutoVotingUsers", "type": "uint256" } ], "name": "setTotalActionsForRound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newWeight", "type": "uint256" } ], "name": "setVoteWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "xAllocationVotingAddress", "type": "address" } ], "name": "setXAllocationVotingAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalRelayerActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalRelayerWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "totalWeightedActions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer", "type": "address" } ], "name": "unregisterRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" } ], "name": "validateClaimDuringEarlyAccess", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "internalType": "address", "name": "voter", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" } ], "name": "validateVoteDuringEarlyAccess", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516137a26200010460003960008181612ce401528181612d0d0152612e5501526137a26000f3fe6080604052600436106102705760003560e01c806301ffc9a7146102755780631459457a146102aa57806314d92307146102cc578063189ca316146102ec5780631bc3a6731461030c578063241f9e2b1461032e578063248a9ca31461035c57806324a697a31461037c57806325d3155e1461039c5780632f2ff15d146103b1578063338111e7146103d157806336568abe146103f157806336a7c134146104115780633bb18a76146104265780633d009cee1461044657806347b0b33e1461046657806348c2bd78146104865780634f1ef286146104a65780634f6981ee146104b957806352d1902d146104d957806354fd4d50146104ee578063552164ee1461052157806356f1612f1461054157806357181609146105615780635ae1cd14146105815780635f72790a146105a157806362f29478146105c1578063675d0f8d146105d65780636bb07c73146105f65780636c7b69cb146106165780636cf88e73146106365780637f5e98bd14610656578063855302011461066b57806389a96d351461068b5780638d2340a0146106ab57806391d14854146106c05780639858b78a146106e0578063a217fddf14610700578063ac4aa16b14610715578063ad3cb1cc14610737578063b7fe075a14610768578063b8f6dba71461077d578063be9412df1461079f578063d428cffc146107b4578063d547741f146107c9578063d5684392146107e9578063d94290e514610809578063dc404a0e14610829578063df171b0c14610849578063e2bbb15814610869578063e5ed920b14610889578063e78168b5146108a9578063e7dfe672146108c9578063f5e57b39146108e9578063f72c0d8b14610909575b600080fd5b34801561028157600080fd5b5061029561029036600461314b565b61092b565b60405190151581526020015b60405180910390f35b3480156102b657600080fd5b506102ca6102c5366004613191565b610962565b005b3480156102d857600080fd5b506102ca6102e73660046131f6565b610d6c565b3480156102f857600080fd5b506102ca610307366004613211565b610f92565b34801561031857600080fd5b5061032161106e565b6040516102a1919061322a565b34801561033a57600080fd5b5061034e61034936600461323e565b61108c565b6040519081526020016102a1565b34801561036857600080fd5b5061034e610377366004613211565b6110c1565b34801561038857600080fd5b506102ca610397366004613211565b6110e1565b3480156103a857600080fd5b50610321611171565b3480156103bd57600080fd5b506102ca6103cc366004613268565b61118f565b3480156103dd57600080fd5b5061034e6103ec36600461323e565b6111b1565b3480156103fd57600080fd5b506102ca61040c366004613268565b6112dd565b34801561041d57600080fd5b5061034e611315565b34801561043257600080fd5b506102ca6104413660046131f6565b61132a565b34801561045257600080fd5b50610295610461366004613211565b611424565b34801561047257600080fd5b506102ca6104813660046131f6565b6114de565b34801561049257600080fd5b506102956104a1366004613211565b6115c7565b6102ca6104b43660046132aa565b611664565b3480156104c557600080fd5b5061034e6104d4366004613211565b611683565b3480156104e557600080fd5b5061034e611701565b3480156104fa57600080fd5b506040805180820190915260018152603160f81b60208201525b6040516102a1919061338f565b34801561052d57600080fd5b5061034e61053c366004613211565b61171e565b34801561054d57600080fd5b506102ca61055c3660046131f6565b61173e565b34801561056d57600080fd5b506102ca61057c3660046131f6565b611827565b34801561058d57600080fd5b506102ca61059c3660046133c2565b611919565b3480156105ad57600080fd5b506102ca6105bc3660046133fe565b611a70565b3480156105cd57600080fd5b5061034e611b76565b3480156105e257600080fd5b506102ca6105f1366004613211565b611b8b565b34801561060257600080fd5b506102ca610611366004613211565b611c7d565b34801561062257600080fd5b506102ca610631366004613268565b611d57565b34801561064257600080fd5b506102ca610651366004613420565b611fd9565b34801561066257600080fd5b5061034e6121a5565b34801561067757600080fd5b5061034e610686366004613211565b6121ba565b34801561069757600080fd5b506102ca6106a6366004613211565b6121da565b3480156106b757600080fd5b506103216122ce565b3480156106cc57600080fd5b506102956106db366004613268565b6122e9565b3480156106ec57600080fd5b5061034e6106fb36600461323e565b61231f565b34801561070c57600080fd5b5061034e600081565b34801561072157600080fd5b5061072a612354565b6040516102a19190613473565b34801561074357600080fd5b50610514604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561077457600080fd5b5061034e6123c0565b34801561078957600080fd5b5061034e60008051602061368d83398151915281565b3480156107ab57600080fd5b5061034e6123d5565b3480156107c057600080fd5b5061034e6123ea565b3480156107d557600080fd5b506102ca6107e4366004613268565b6123ff565b3480156107f557600080fd5b506102956108043660046131f6565b61241b565b34801561081557600080fd5b506102ca610824366004613211565b61244b565b34801561083557600080fd5b5061034e610844366004613211565b61251a565b34801561085557600080fd5b5061034e610864366004613211565b612564565b34801561087557600080fd5b506102ca6108843660046133fe565b612584565b34801561089557600080fd5b506102ca6108a43660046133c2565b61270f565b3480156108b557600080fd5b5061034e6108c4366004613211565b61285f565b3480156108d557600080fd5b506102ca6108e43660046133fe565b61287f565b3480156108f557600080fd5b50610295610904366004613211565b612ae9565b34801561091557600080fd5b5061034e6000805160206136ad83398151915281565b60006001600160e01b03198216637965db0b60e01b148061095c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061096c612b2d565b805490915060ff600160401b82041615906001600160401b03166000811580156109935750825b90506000826001600160401b031660011480156109af5750303b155b9050811580156109bd575080155b156109db5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610a0457845460ff60401b1916600160401b1785555b6001600160a01b038a16610a785760405162461bcd60e51b815260206004820152603060248201527f52656c6179657252657761726473506f6f6c3a2061646d696e2063616e6e6f7460448201526f206265207a65726f206164647265737360801b60648201526084015b60405180910390fd5b6001600160a01b038916610aea5760405162461bcd60e51b815260206004820152603360248201527f52656c6179657252657761726473506f6f6c3a2075706772616465722063616e6044820152726e6f74206265207a65726f206164647265737360681b6064820152608401610a6f565b6001600160a01b038816610b585760405162461bcd60e51b815260206004820152602f60248201527f52656c6179657252657761726473506f6f6c3a20623374722063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610a6f565b6001600160a01b038716610bcb5760405162461bcd60e51b815260206004820152603460248201527f52656c6179657252657761726473506f6f6c3a20656d697373696f6e732063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610a6f565b6001600160a01b038616610c465760405162461bcd60e51b815260206004820152603c60248201527f52656c6179657252657761726473506f6f6c3a2078416c6c6f636174696f6e5660448201527b6f74696e672063616e6e6f74206265207a65726f206164647265737360201b6064820152608401610a6f565b610c4e612b51565b610c56612b5b565b610c5e612b51565b610c6960008b612b6b565b50610c826000805160206136ad8339815191528a612b6b565b50610c9b60008051602061368d8339815191528b612b6b565b506000610ca6612c0c565b80546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018054928c1692909316919091179091556003600b830155600c820155600a60108201556064601182015568056bc75e2d63100000601282015562069780600f90910155508315610d6057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6001600160a01b0381163314801590610d9a5750610d9860008051602061368d833981519152336122e9565b155b8015610dae5750610dac6000336122e9565b155b15610ddd57604051630147b5b160e31b81523360048201526001600160a01b0382166024820152604401610a6f565b6000610de7612c0c565b6001600160a01b0383166000908152600d8201602052604090205490915060ff16610e27578160405163138cb58960e31b8152600401610a6f919061322a565b6001600160a01b0382166000908152600d820160205260408120805460ff191690555b600e820154811015610f5957826001600160a01b031682600e018281548110610e7557610e756134c0565b6000918252602090912001546001600160a01b031603610f4757600e82018054610ea1906001906134ec565b81548110610eb157610eb16134c0565b600091825260209091200154600e830180546001600160a01b039092169183908110610edf57610edf6134c0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600e01805480610f2057610f206134ff565b600082815260209020810160001990810180546001600160a01b0319169055019055610f59565b80610f5181613515565b915050610e4a565b506040516001600160a01b038316907f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c38352190600090a25050565b60008051602061368d833981519152610fab81336122e9565b80610fbc5750610fbc6000336122e9565b610fd85760405162461bcd60e51b8152600401610a6f9061352e565b81600003611016576040516305519d6f60e51b815260206004820152600a6024820152691d9bdd1955d95a59da1d60b21b6044820152606401610a6f565b6000611020612c0c565b600b8101805490859055604051919250907fc6d810f6c3aa465110416db0d540c72fcfe818503d1580fd90df38a482f81af890611060908690849061358b565b60405180910390a150505050565b600080611079612c0c565b600201546001600160a01b031692915050565b600080611097612c0c565b6000938452600401602090815260408085206001600160a01b039690961685529490525050205490565b6000806110cc612c30565b60009384526020525050604090206001015490565b60008051602061368d8339815191526110fa81336122e9565b8061110b575061110b6000336122e9565b6111275760405162461bcd60e51b8152600401610a6f9061352e565b6000611131612c0c565b600f8101805490859055604051919250907f9f49ab705704ba5579e12282116057bb42856ad21fc913b1786bf1effc722b8d90611060908690849061358b565b60008061117c612c0c565b600101546001600160a01b031692915050565b611198826110c1565b6111a181612c54565b6111ab8383612b6b565b50505050565b6000806111bc612c0c565b604051631e804e7760e11b8152600481018590529091503090633d009cee90602401602060405180830381865afa1580156111fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121f9190613599565b61122d57600091505061095c565b600083815260088201602090815260408083206001600160a01b038816845290915290205460ff161561126457600091505061095c565b600083815260058201602090815260408083206001600160a01b038816845282528083205486845260078501835281842054600386019093529220548215806112ab575081155b156112bd57600094505050505061095c565b816112c884836135bb565b6112d291906135d2565b979650505050505050565b6001600160a01b03811633146113065760405163334bd91960e11b815260040160405180910390fd5b6113108282612c61565b505050565b600080611320612c0c565b6012015492915050565b60008051602061368d83398151915261134381336122e9565b8061135457506113546000336122e9565b6113705760405162461bcd60e51b8152600401610a6f9061352e565b6001600160a01b0382166113c2576040516305519d6f60e51b815260206004820152601860248201527778416c6c6f636174696f6e566f74696e674164647265737360401b6044820152606401610a6f565b60006113cc612c0c565b6002810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907f897acaec25783ce4cf8ff29c16715e089a40d285e2e5d6fcf567af00f471425990600090a350505050565b60008061142f612c0c565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa925050508015611497575060408051601f3d908101601f1916820190925261149491810190613599565b60015b6114a45750600092915050565b806114b3575060009392505050565b506000928352600781016020908152604080852054600a909301909152909220549190911015919050565b60008051602061368d8339815191526114f781336122e9565b8061150857506115086000336122e9565b6115245760405162461bcd60e51b8152600401610a6f9061352e565b6001600160a01b038216611569576040516305519d6f60e51b815260206004820152600b60248201526a623374724164647265737360a81b6044820152606401610a6f565b6000611573612c0c565b80546001600160a01b038581166001600160a01b03198316811784556040519394509116918291907fb3061a8192d243178b0fd92d1809bc86c3fa3b177c046cf74974c45c32cd25e090600090a350505050565b6000806115d2612c0c565b60028101546040516368377f6d60e11b8152600481018690529192506000916001600160a01b039091169063d06efeda906024015b602060405180830381865afa158015611624573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164891906135f4565b905081600f01548161165a919061360d565b4310949350505050565b61166c612cd9565b61167582612d7e565b61167f8282612d96565b5050565b60008061168e612c0c565b6000848152600782016020908152604080832054600a850190925290912054919250908181106116c357506000949350505050565b60006116cf82846134ec565b9050600084600c015485600b01546116e7919061360d565b905060006116f582846135d2565b98975050505050505050565b600061170b612e4a565b506000805160206136cd83398151915290565b600080611729612c0c565b60009384526003016020525050604090205490565b6001600160a01b038116611765576040516305519d6f60e51b8152600401610a6f90613620565b600061176f612c0c565b6001600160a01b0383166000908152600d8201602052604090205490915060ff16156117b05781604051634df9fbcf60e01b8152600401610a6f919061322a565b6001600160a01b0382166000818152600d830160209081526040808320805460ff19166001908117909155600e860180549182018155845291832090910180546001600160a01b03191684179055517fc3b80e866c8bfbccbded69771f510856bb44660d40a0b760d9f0781728543e4e9190a25050565b60008051602061368d83398151915261184081336122e9565b8061185157506118516000336122e9565b61186d5760405162461bcd60e51b8152600401610a6f9061352e565b6001600160a01b0382166118b7576040516305519d6f60e51b815260206004820152601060248201526f656d697373696f6e734164647265737360801b6044820152606401610a6f565b60006118c1612c0c565b6001810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907fee0bb99897b3f409686cb6e56601a38cea38e9e00d9b28752b3be7b28ea8b0ad90600090a350505050565b6000611923612c0c565b905061192e84612ae9565b6119385750505050565b826001600160a01b0316826001600160a01b0316036119d25760405162461bcd60e51b815260206004820152605c602482015260008051602061370d83398151915260448201527f75736572732063616e6e6f7420636c61696d20666f72207468656d73656c766560648201527b1cc8191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd960221b608482015260a401610a6f565b6001600160a01b0382166000908152600d8201602052604090205460ff166111ab5760405162461bcd60e51b8152602060048201526057602482015260008051602061374d83398151915260448201527f74206120726567697374657265642072656c6179657220647572696e6720636c606482015276185a5b4819585c9b1e481858d8d95cdcc81c195c9a5bd9604a1b608482015260a401610a6f565b60008051602061368d833981519152611a8981336122e9565b80611a9a5750611a9a6000336122e9565b611ab65760405162461bcd60e51b8152600401610a6f9061352e565b6000611ac0612c0c565b9050611acd8360026135bb565b6000858152600683016020526040902055600c810154600b820154611af2919061360d565b611afc90846135bb565b600085815260078301602081815260408084208590556006860182529283902054918152600e85015483518881529182019290925291820192909252606081019190915284907f0cfbd04f27dfdd7116e3d63de583a7cc8a337032164396bb6d7cac1deffbe415906080015b60405180910390a250505050565b600080611b81612c0c565b600f015492915050565b60008051602061368d833981519152611ba481336122e9565b80611bb55750611bb56000336122e9565b611bd15760405162461bcd60e51b8152600401610a6f9061352e565b600082118015611be2575060328211155b611c335760405162461bcd60e51b815260206004820152602e602482015260008051602061372d83398151915260448201526d3e203020616e64203c3d2035302560901b6064820152608401610a6f565b6000611c3d612c0c565b60108101805490859055604051919250907f27af4d4dc613005fec6b04e77e25da6e4959b86d30ed1919104596e9211198ee90611060908690849061358b565b60008051602061368d833981519152611c9681336122e9565b80611ca75750611ca76000336122e9565b611cc35760405162461bcd60e51b8152600401610a6f9061352e565b60008211611d0d5760405162461bcd60e51b8152602060048201526023602482015260008051602061372d83398151915260448201526203e20360ec1b6064820152608401610a6f565b6000611d17612c0c565b60128101805490859055604051919250907f3fbd83025056799b6fe5bc1a011ec202bfc22364cb9adb116bb3c71cf47990a690611060908690849061358b565b611d5f612e93565b6000611d69612c0c565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa158015611db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd99190613599565b611df95760405163652d87c560e01b815260048101849052602401610a6f565b600083815260088201602090815260408083206001600160a01b038616845290915290205460ff1615611e4357818360405163ae19b57760e01b8152600401610a6f929190613641565b60405163338111e760e01b8152600090309063338111e790611e6b9086908890600401613641565b602060405180830381865afa158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eac91906135f4565b905080600003611ed3578284604051634c8463db60e01b8152600401610a6f929190613641565b600084815260088301602090815260408083206001600160a01b038088168552925291829020805460ff191660011790558354915163a9059cbb60e01b815291169063a9059cbb90611f2b9086908590600401613641565b6020604051808303816000875af1158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e9190613599565b611f8b576040516312171d8360e31b815260040160405180910390fd5b83836001600160a01b03167f930b7d519086654efd667eab36b878a04585f80f21637ea555a4317bdc53197383604051611fc791815260200190565b60405180910390a3505061167f612ec9565