[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isExcluded", "type": "bool" } ], "name": "ExcludeFromFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "indexed": false, "internalType": "bool", "name": "isExcluded", "type": "bool" } ], "name": "ExcludeMultipleAccountsFromFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newValue", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldValue", "type": "uint256" } ], "name": "GasForProcessingUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newLiquidityWallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldLiquidityWallet", "type": "address" } ], "name": "LiquidityWalletUpdated", "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": "uint256", "name": "iterations", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "claims", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastProcessedIndex", "type": "uint256" }, { "indexed": true, "internalType": "bool", "name": "automatic", "type": "bool" }, { "indexed": false, "internalType": "uint256", "name": "gas", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "processor", "type": "address" } ], "name": "ProcessedDividendTracker", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensSwapped", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "SendDividends", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pair", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "value", "type": "bool" } ], "name": "SetAutomatedMarketMakerPair", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensSwapped", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethReceived", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokensIntoLiqudity", "type": "uint256" } ], "name": "SwapAndLiquify", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "path", "type": "address[]" } ], "name": "SwapBNBForTokens", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "UpdateDividendTracker", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "UpdateRouter", "type": "event" }, { "inputs": [], "name": "USDC", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "USDCRewardsFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_marketingWalletAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_maxTxAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAddress", "type": "address" } ], "name": "_updateRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "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": "", "type": "address" } ], "name": "automatedMarketMakerPairs", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deadWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "dividendTokenBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dividendTracker", "outputs": [ { "internalType": "contract HFADividendTracker", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "excludeFromDividends", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "excludeFromFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "excludeMultipleAccountsFromFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "gasForProcessing", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getAccountDividendsInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getAccountDividendsInfoAtIndex", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getClaimWait", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLastProcessedIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNumberOfDividendTokenHolders", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalDividendsDistributed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "address", "name": "account", "type": "address" } ], "name": "isExcludedFromFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "marketingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxWalletToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pairContract", "outputs": [ { "internalType": "contract ITraderJoePair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "name": "processDividendTracker", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "contract IJoeRouter02", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pair", "type": "address" }, { "internalType": "bool", "name": "value", "type": "bool" } ], "name": "setAutomatedMarketMakerPair", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "setExcludeFromAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" }, { "internalType": "bool", "name": "value", "type": "bool" } ], "name": "setExcludeFromMaxTx", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "wallet", "type": "address" } ], "name": "setMarketingWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxTxAmount", "type": "uint256" } ], "name": "setMaxTxAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxToken", "type": "uint256" } ], "name": "setMaxWalletTokend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rewardFee", "type": "uint256" }, { "internalType": "uint256", "name": "_liquidityFee", "type": "uint256" }, { "internalType": "uint256", "name": "_marketingFee", "type": "uint256" } ], "name": "setUSDCRewardsFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapTokensAtAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newSwapAmount", "type": "uint256" } ], "name": "swaptokenchange", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "sender", "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": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "claimWait", "type": "uint256" } ], "name": "updateClaimWait", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAddress", "type": "address" } ], "name": "updateDividendTracker", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateGasForProcessing", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "withdrawableDividendOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a0604052600a805461dead6001600160a01b031990911617815573b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e608052683635c9adc5dea00000600b5569043c33c1937564800000600c5569152d02c7e14af6800000600d55600e8190556003600f81905560026010819055620000a19290916200008d919062000690602090811b62001f9117901c565b6200069060201b62001f911790919060201c565b601155601280546001600160a01b03191673788ffa6d45be99a962b910297ed90bc69b670228179055620493e0601355348015620000de57600080fd5b506040518060400160405280600f81526020016e090cac8ceca408ceadcc84082ecc2f608b1b8152506040518060400160405280600381526020016248464160e81b815250816003908162000134919062000b6f565b50600462000143828262000b6f565b5050506000620001586200070060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604051620001b49062000abd565b604051809103906000f080158015620001d1573d6000803e3d6000fd5b50600980546001600160a01b03929092166001600160a01b0319928316179055600780549091167360ae616a2155ee3d9a68541ba4544862310933d49081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000c3b565b6001600160a01b031663c9c65396600760009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fd919062000c3b565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000370919062000c3b565b600880546001600160a01b03929092166001600160a01b03199283168117909155600680549092168117909155620003aa90600162000704565b60095460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620003f157600080fd5b505af115801562000406573d6000803e3d6000fd5b505060095460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200045057600080fd5b505af115801562000465573d6000803e3d6000fd5b50506009546001600160a01b031691506331e79db090506200048f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620004d157600080fd5b505af1158015620004e6573d6000803e3d6000fd5b5050600954600a5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200053457600080fd5b505af115801562000549573d6000803e3d6000fd5b505060095460075460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200059757600080fd5b505af1158015620005ac573d6000803e3d6000fd5b50505050620005cc620005c46200086860201b60201c565b600162000877565b601254620005e5906001600160a01b0316600162000877565b620005f230600162000877565b6001601560006200060b6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260159093528183208054851660019081179091556012549091168352912080549092161790556200068a620006796005546001600160a01b031690565b69d3c21bcecceda1000000620009bc565b62000c88565b6000806200069f838562000c66565b905083811015620006f75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b3390565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036200079c5760405162461bcd60e51b815260206004820152603d60248201527f4846413a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c75650000006064820152608401620006ee565b6001600160a01b0382166000908152601660205260409020805460ff191682158015919091179091556200082c5760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200081257600080fd5b505af115801562000827573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031690565b6005546001600160a01b03163314620008d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006ee565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036200095d5760405162461bcd60e51b815260206004820152602f60248201527f4846413a204163636f756e7420697320616c7265616479207468652076616c7560448201526e65206f6620276578636c756465642760881b6064820152608401620006ee565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b03821662000a145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006ee565b62000a30816002546200069060201b62001f911790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a6391839062001f9162000690821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b612233806200448483390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000af657607f821691505b60208210810362000b1757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ab857600081815260208120601f850160051c8101602086101562000b465750805b601f850160051c820191505b8181101562000b675782815560010162000b52565b505050505050565b81516001600160401b0381111562000b8b5762000b8b62000acb565b62000ba38162000b9c845462000ae1565b8462000b1d565b602080601f83116001811462000bdb576000841562000bc25750858301515b600019600386901b1c1916600185901b17855562000b67565b600085815260208120601f198616915b8281101562000c0c5788860151825594840194600190910190840162000beb565b508582101562000c2b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c4e57600080fd5b81516001600160a01b0381168114620006f757600080fd5b80820180821115620006fa57634e487b7160e01b600052601160045260246000fd5b6080516137cb62000cb96000396000818161070601528181612d8101528181612e23015261311401526137cb6000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c492f046116100f7578063e7841ec011610095578063f27fd2541161006f578063f27fd25414610a4e578063f2aad9e714610a6e578063f2fde38b14610a8e578063f887ea4014610aae57600080fd5b8063e7841ec0146109f9578063e98030c714610a0e578063ec28438a14610a2e57600080fd5b8063dd62ed3e116100d1578063dd62ed3e14610971578063e01a6a9e146109b7578063e2f45605146109cd578063e6c75f71146109e357600080fd5b8063c492f04614610911578063c9e79b6b14610931578063db41dc281461095157600080fd5b8063a457c2d711610164578063a9059cbb1161013e578063a9059cbb1461083c578063ad56c13c1461085c578063b62496f5146108c1578063c0246668146108f157600080fd5b8063a457c2d7146107dc578063a8aa1b31146107fc578063a8b9d2401461081c57600080fd5b80639a7a23d6116101a05780639a7a23d6146107715780639c1b8af5146107915780639f34a5b4146107a7578063a26579ad146107c757600080fd5b80638da5cb5b1461072857806395d89b411461074657806398118cb41461075b57600080fd5b80634fbee193116102a057806370a082311161023e57806385141a771161021857806385141a7714610694578063871c128d146106b457806388bdd9be146106d457806389a30271146106f457600080fd5b806370a0823114610633578063715018a6146106695780637d1db4a51461067e57600080fd5b806364b0f6531161027a57806364b0f653146105c85780636843cd84146105dd5780636b67c4df146105fd578063700bb1911461061357600080fd5b80634fbee1931461054f5780635b89029c146105885780635d098b38146105a857600080fd5b8063313ce5671161030d5780634144d9e4116102e75780634144d9e4146104da57806349928a50146104fa5780634d709adf1461051a5780634e71d92d1461053a57600080fd5b8063313ce5671461047c57806331e79db01461049857806339509351146104ba57600080fd5b806318160ddd1161034957806318160ddd146103fa57806323b872dd1461040f5780632c1f52161461042f57806330bb4cff1461046757600080fd5b806306fdde031461037b578063095ea7b3146103a657806313114a9d146103d657600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610ace565b60405161039d91906131a5565b60405180910390f35b3480156103b257600080fd5b506103c66103c1366004613208565b610b60565b604051901515815260200161039d565b3480156103e257600080fd5b506103ec60115481565b60405190815260200161039d565b34801561040657600080fd5b506002546103ec565b34801561041b57600080fd5b506103c661042a366004613234565b610b77565b34801561043b57600080fd5b5060095461044f906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b34801561047357600080fd5b506103ec610be0565b34801561048857600080fd5b506040516012815260200161039d565b3480156104a457600080fd5b506104b86104b3366004613275565b610c53565b005b3480156104c657600080fd5b506103c66104d5366004613208565b610ce9565b3480156104e657600080fd5b5060125461044f906001600160a01b031681565b34801561050657600080fd5b506104b8610515366004613275565b610d1f565b34801561052657600080fd5b5060065461044f906001600160a01b031681565b34801561054657600080fd5b506104b8610db0565b34801561055b57600080fd5b506103c661056a366004613275565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561059457600080fd5b506104b86105a33660046132a0565b610e28565b3480156105b457600080fd5b506104b86105c3366004613275565b610e7d565b3480156105d457600080fd5b506103ec610ec9565b3480156105e957600080fd5b506103ec6105f8366004613275565b610f13565b34801561060957600080fd5b506103ec60105481565b34801561061f57600080fd5b506104b861062e3660046132d9565b610f83565b34801561063f57600080fd5b506103ec61064e366004613275565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b506104b8611055565b34801561068a57600080fd5b506103ec600c5481565b3480156106a057600080fd5b50600a5461044f906001600160a01b031681565b3480156106c057600080fd5b506104b86106cf3660046132d9565b6110c9565b3480156106e057600080fd5b506104b86106ef366004613275565b611219565b34801561070057600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073457600080fd5b506005546001600160a01b031661044f565b34801561075257600080fd5b506103906115a2565b34801561076757600080fd5b506103ec600f5481565b34801561077d57600080fd5b506104b861078c3660046132a0565b6115b1565b34801561079d57600080fd5b506103ec60135481565b3480156107b357600080fd5b506104b86107c23660046132d9565b611684565b3480156107d357600080fd5b506103ec6116c6565b3480156107e857600080fd5b506103c66107f7366004613208565b611710565b34801561080857600080fd5b5060085461044f906001600160a01b031681565b34801561082857600080fd5b506103ec610837366004613275565b61175f565b34801561084857600080fd5b506103c6610857366004613208565b611792565b34801561086857600080fd5b5061087c610877366004613275565b61179f565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161039d565b3480156108cd57600080fd5b506103c66108dc366004613275565b60166020526000908152604090205460ff1681565b3480156108fd57600080fd5b506104b861090c3660046132a0565b61183a565b34801561091d57600080fd5b506104b861092c3660046132f2565b61194b565b34801561093d57600080fd5b506104b861094c3660046132d9565b611a27565b34801561095d57600080fd5b506104b861096c366004613378565b611a69565b34801561097d57600080fd5b506103ec61098c3660046133a4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c357600080fd5b506103ec600e5481565b3480156109d957600080fd5b506103ec600b5481565b3480156109ef57600080fd5b506103ec600d5481565b348015610a0557600080fd5b506103ec611b10565b348015610a1a57600080fd5b506104b8610a293660046132d9565b611b5a565b348015610a3a57600080fd5b506104b8610a493660046132d9565b611bb5565b348015610a5a57600080fd5b5061087c610a693660046132d9565b611bf7565b348015610a7a57600080fd5b506104b8610a89366004613275565b611c39565b348015610a9a57600080fd5b506104b8610aa9366004613275565b611ea6565b348015610aba57600080fd5b5060075461044f906001600160a01b031681565b606060038054610add906133d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b09906133d2565b8015610b565780601f10610b2b57610100808354040283529160200191610b56565b820191906000526020600020905b815481529060010190602001808311610b3957829003601f168201915b5050505050905090565b6000610b6d338484611ff7565b5060015b92915050565b6000610b8484848461211c565b610bd68433610bd185604051806060016040528060288152602001613749602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906127df565b611ff7565b5060019392505050565b600954604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4e919061340c565b905090565b6005546001600160a01b03163314610c865760405162461bcd60e51b8152600401610c7d90613425565b60405180910390fd5b60095460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610cce57600080fd5b505af1158015610ce2573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b6d918590610bd19086611f91565b6005546001600160a01b03163314610d495760405162461bcd60e51b8152600401610c7d90613425565b6001600160a01b0381811660008181526015602090815260408083208054600160ff19918216811790925560149093529281902080549092169092179055600954905163031e79db60e41b81526004810192909252909116906331e79db090602401610cb4565b60095460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e25919061345a565b50565b6005546001600160a01b03163314610e525760405162461bcd60e51b8152600401610c7d90613425565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ea75760405162461bcd60e51b8152600401610c7d90613425565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600954604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610c2a573d6000803e3d6000fd5b6009546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b71919061340c565b6009546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190613477565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b0316331461107f5760405162461bcd60e51b8152600401610c7d90613425565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110f35760405162461bcd60e51b8152600401610c7d90613425565b62030d40811015801561110957506207a1208111155b61117b5760405162461bcd60e51b815260206004820152603960248201527f4846413a20676173466f7250726f63657373696e67206d75737420626520626560448201527f747765656e203230302c30303020616e64203530302c303030000000000000006064820152608401610c7d565b60135481036111e65760405162461bcd60e51b815260206004820152603160248201527f4846413a2043616e6e6f742075706461746520676173466f7250726f63657373604482015270696e6720746f2073616d652076616c756560781b6064820152608401610c7d565b60135460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601355565b6005546001600160a01b031633146112435760405162461bcd60e51b8152600401610c7d90613425565b6009546001600160a01b03908116908216036112bc5760405162461bcd60e51b815260206004820152603260248201527f4846413a20546865206469766964656e6420747261636b657220616c7265616460448201527179206861732074686174206164647265737360701b6064820152608401610c7d565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d91906134a5565b6001600160a01b0316146113b75760405162461bcd60e51b815260206004820152604560248201527f4846413a20546865206e6577206469766964656e6420747261636b6572206d7560448201527f7374206265206f776e6564206279207468652048464120746f6b656e20636f6e6064820152641d1c9858dd60da1b608482015260a401610c7d565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561145257600080fd5b505af1158015611466573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db061148b6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561152b57600080fd5b505af115801561153f573d6000803e3d6000fd5b50506009546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600980546001600160a01b0319166001600160a01b039290921691909117905550565b606060048054610add906133d2565b6005546001600160a01b031633146115db5760405162461bcd60e51b8152600401610c7d90613425565b6008546001600160a01b03908116908316036116765760405162461bcd60e51b815260206004820152604e60248201527f4275484641726e3a205468652050616e63616b6553776170207061697220636160448201527f6e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d6160648201526d726b65744d616b6572506169727360901b608482015260a401610c7d565b6116808282612819565b5050565b6005546001600160a01b031633146116ae5760405162461bcd60e51b8152600401610c7d90613425565b6116c081670de0b6b3a76400006134d8565b600d5550565b60095460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610c2a573d6000803e3d6000fd5b6000610b6d3384610bd185604051806060016040528060258152602001613771602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906127df565b6009546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610f42565b6000610b6d33848461211c565b60095460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f91906134ef565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b031633146118645760405162461bcd60e51b8152600401610c7d90613425565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036118ec5760405162461bcd60e51b815260206004820152602f60248201527f4846413a204163636f756e7420697320616c7265616479207468652076616c7560448201526e65206f6620276578636c756465642760881b6064820152608401610c7d565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119755760405162461bcd60e51b8152600401610c7d90613425565b60005b828110156119e657816014600086868581811061199757611997613559565b90506020020160208101906119ac9190613275565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806119de8161356f565b915050611978565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611a1a93929190613588565b60405180910390a1505050565b6005546001600160a01b03163314611a515760405162461bcd60e51b8152600401610c7d90613425565b611a6381670de0b6b3a76400006134d8565b600b5550565b6005546001600160a01b03163314611a935760405162461bcd60e51b8152600401610c7d90613425565b600e839055600f8290556010819055611ab681611ab08585611f91565b90611f91565b601181905560191015611b0b5760405162461bcd60e51b815260206004820152601860248201527f46656573204d75737420626520323525204f72206c65737300000000000000006044820152606401610c7d565b505050565b6009546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610c2a573d6000803e3d6000fd5b6005546001600160a01b03163314611b845760405162461bcd60e51b8152600401610c7d90613425565b60095460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610cb4565b6005546001600160a01b03163314611bdf5760405162461bcd60e51b8152600401610c7d90613425565b611bf181670de0b6b3a76400006134d8565b600c5550565b600954604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd906024016117dd565b6005546001600160a01b03163314611c635760405162461bcd60e51b8152600401610c7d90613425565b6007546001600160a01b0390811690821603611cd25760405162461bcd60e51b815260206004820152602860248201527f4846413a2054686520726f7574657220616c7265616479206861732074686174604482015267206164647265737360c01b6064820152608401610c7d565b6007546040516001600160a01b03918216918316907f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd90600090a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d91906134a5565b6001600160a01b031663c9c65396600760009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1291906134a5565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8291906134a5565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b03163314611ed05760405162461bcd60e51b8152600401610c7d90613425565b6001600160a01b038116611f355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611f9e83856135e1565b905083811015611ff05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c7d565b9392505050565b6001600160a01b0383166120595760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7d565b6001600160a01b0382166120ba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121425760405162461bcd60e51b8152600401610c7d906135f4565b6001600160a01b0382166121685760405162461bcd60e51b8152600401610c7d90613639565b6005546001600160a01b0384811691161480159061219457506005546001600160a01b03838116911614155b80156121b957506001600160a01b03831660009081526015602052604090205460ff16155b80156121de57506001600160a01b03821660009081526015602052604090205460ff16155b1561224657600c548111156122465760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c7d565b6005546001600160a01b0384811691161480159061227257506005546001600160a01b03838116911614155b801561228657506001600160a01b03821615155b801561229d57506001600160a01b03821661dead14155b80156122b757506008546001600160a01b03838116911614155b80156122dc57506001600160a01b03831660009081526015602052604090205460ff16155b801561230157506001600160a01b03821660009081526015602052604090205460ff16155b15612388576001600160a01b038216600090815260208190526040902054600d5461232c83836135e1565b11156123865760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610c7d565b505b8060000361239c57611b0b83836000612978565b30600090815260208190526040902054600b54811080159081906123ca5750600854600160a01b900460ff16155b80156123ef57506001600160a01b03851660009081526016602052604090205460ff16155b801561240957506005546001600160a01b03868116911614155b801561242357506005546001600160a01b03858116911614155b15612501576008805460ff60a01b1916600160a01b17905560115460105460009161245991612453908690612a81565b90612b03565b90504761246582612b45565b60006124714783612c97565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156124ac573d6000803e3d6000fd5b5060006124ca601154612453600f5489612a8190919063ffffffff16565b90506124d581612cd9565b306000908152602081905260409020546124ee81612d60565b50506008805460ff60a01b191690555050505b6008546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061254f57506001600160a01b03851660009081526014602052604090205460ff165b15612558575060005b6005546001600160a01b0387811691161480159061258457506008546001600160a01b03868116911614155b801561259e57506008546001600160a01b03878116911614155b156125a7575060005b80156125e45760006064601154866125bf91906134d8565b6125c9919061367c565b90506125d5818661369e565b94506125e2873083612978565b505b6125ef868686612978565b6009546001600160a01b031663e30443bc87612620816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561266657600080fd5b505af1925050508015612677575060015b506009546001600160a01b031663e30443bc866126a9816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156126ef57600080fd5b505af1925050508015612700575060015b50600854600160a01b900460ff166127d7576013546009546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af192505050801561277f575060408051601f3d908101601f1916820190925261277c91810190613477565b60015b156127d55760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050565b600081848411156128035760405162461bcd60e51b8152600401610c7d91906131a5565b506000612810848661369e565b95945050505050565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036128af5760405162461bcd60e51b815260206004820152603d60248201527f4846413a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c75650000006064820152608401610c7d565b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915561293c5760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561292357600080fd5b505af1158015612937573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b03831661299e5760405162461bcd60e51b8152600401610c7d906135f4565b6001600160a01b0382166129c45760405162461bcd60e51b8152600401610c7d90613639565b612a0181604051806060016040528060268152602001613723602691396001600160a01b03861660009081526020819052604090205491906127df565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612a309082611f91565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161210f565b600082600003612a9357506000610b71565b6000612a9f83856134d8565b905082612aac858361367c565b14611ff05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c7d565b6000611ff083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f2f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b7a57612b7a613559565b6001600160a01b03928316602091820292909201810191909152600754604080516339d94ae160e11b8152905191909316926373b295c29260048083019391928290030181865afa158015612bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf791906134a5565b81600181518110612c0a57612c0a613559565b6001600160a01b039283166020918202929092010152600754612c309130911684611ff7565b600754604051633b158ab160e11b81526001600160a01b039091169063762b156290612c699085906000908690309042906004016136b1565b600060405180830381600087803b158015612c8357600080fd5b505af11580156127d7573d6000803e3d6000fd5b6000611ff083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127df565b6000612ce6826002612b03565b90506000612cf48383612c97565b905047612d0083612b45565b6000612d0c4783612c97565b9050612d188382612f5d565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b612d698161302b565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df4919061340c565b60095460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015612e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e92919061345a565b90508015611b0b57600954604051635fb1cc4560e01b8152600481018490526001600160a01b0390911690635fb1cc4590602401600060405180830381600087803b158015612ee057600080fd5b505af1158015612ef4573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39350019050611a1a565b60008183612f505760405162461bcd60e51b8152600401610c7d91906131a5565b506000612810848661367c565b600754612f759030906001600160a01b031684611ff7565b6007546001600160a01b031663f91b3f72823085600080612f9e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613006573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ce29190613477565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061306257613062613559565b6001600160a01b03928316602091820292909201810191909152600754604080516339d94ae160e11b8152905191909316926373b295c29260048083019391928290030181865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df91906134a5565b816001815181106130f2576130f2613559565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061314657613146613559565b6001600160a01b03928316602091820292909201015260075461316c9130911684611ff7565b600754604051635c11d79560e01b81526001600160a01b0390911690635c11d79590612c699085906000908690309042906004016136b1565b600060208083528351808285015260005b818110156131d2578581018301518582016040015282016131b6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e2557600080fd5b6000806040838503121561321b57600080fd5b8235613226816131f3565b946020939093013593505050565b60008060006060848603121561324957600080fd5b8335613254816131f3565b92506020840135613264816131f3565b929592945050506040919091013590565b60006020828403121561328757600080fd5b8135611ff0816131f3565b8015158114610e2557600080fd5b600080604083850312156132b357600080fd5b82356132be816131f3565b915060208301356132ce81613292565b809150509250929050565b6000602082840312156132eb57600080fd5b5035919050565b60008060006040848603121561330757600080fd5b833567ffffffffffffffff8082111561331f57600080fd5b818601915086601f83011261333357600080fd5b81358181111561334257600080fd5b8760208260051b850101111561335757600080fd5b6020928301955093505084013561336d81613292565b809150509250925092565b60008060006060848603121561338d57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156133b757600080fd5b82356133c2816131f3565b915060208301356132ce816131f3565b600181811c908216806133e657607f821691505b60208210810361340657634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561341e57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561346c57600080fd5b8151611ff081613292565b60008060006060848603121561348c57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156134b757600080fd5b8151611ff0816131f3565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b7157610b716134c2565b600080600080600080600080610100898b03121561350c57600080fd5b8851613517816131f3565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b634e487b7160e01b600052603260045260246000fd5b600060018201613581576135816134c2565b5060010190565b6040808252810183905260008460608301825b868110156135cb5782356135ae816131f3565b6001600160a01b031682526020928301929091019060010161359b565b5080925050508215156020830152949350505050565b80820180821115610b7157610b716134c2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261369957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b7157610b716134c2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137015784516001600160a01b0316835293830193918301916001016136dc565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201211bd29f1c313e5044850d9100d7bad4420b32241a533b6479c7c7b299875d764736f6c6343000812003360c060405273b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e6080523480156200002957600080fd5b506040518060400160405280601381526020017f4846415f4469766964656e5f547261636b6572000000000000000000000000008152506040518060400160405280601481526020017f4846415f4469766964656e645f547261636b657200000000000000000000000081525081818160039081620000a99190620001df565b506004620000b88282620001df565b5050506000620000cd6200013660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e106011555068056bc75e2d6310000060a052620002ab565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016557607f821691505b6020821081036200018657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001da57600081815260208120601f850160051c81016020861015620001b55750805b601f850160051c820191505b81811015620001d657828155600101620001c1565b5050505b505050565b81516001600160401b03811115620001fb57620001fb6200013a565b62000213816200020c845462000150565b846200018c565b602080601f8311600181146200024b5760008415620002325750858301515b600019600386901b1c1916600185901b178555620001d6565b600085815260208120601f198616915b828110156200027c578886015182559484019460019091019084016200025b565b50858210156200029b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611f54620002df600039600081816104c00152610d330152600081816103e001526117b10152611f546000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806385a6b3ae11610125578063bc4c4b37116100ad578063e7841ec01161007c578063e7841ec01461052e578063e98030c714610536578063f2fde38b14610549578063fbcbc0f11461055c578063ffb2c4791461056f57600080fd5b8063bc4c4b37146104a8578063be10b614146104bb578063dd62ed3e146104e2578063e30443bc1461051b57600080fd5b806395d89b41116100f457806395d89b411461043e578063a457c2d714610446578063a8b9d24014610459578063a9059cbb1461046c578063aafd847a1461047f57600080fd5b806385a6b3ae146103d257806389a30271146103db5780638da5cb5b1461041a57806391b89fba1461042b57600080fd5b806331e79db0116101a85780635fb1cc45116101775780635fb1cc451461037d5780636a474002146103905780636f2789ec1461039857806370a08231146103a1578063715018a6146103ca57600080fd5b806331e79db0146102da57806339509351146102ef5780634e7b827f146103025780635183d6fd1461032557600080fd5b8063226cfa3d116101ef578063226cfa3d1461027c57806323b872dd1461029c57806327ce0147146102af5780633009a609146102c2578063313ce567146102cb57600080fd5b806306fdde0314610221578063095ea7b31461023f57806309bbedde1461026257806318160ddd14610274575b600080fd5b61022961059d565b6040516102369190611b86565b60405180910390f35b61025261024d366004611be9565b61062f565b6040519015158152602001610236565b600a545b604051908152602001610236565b600254610266565b61026661028a366004611c15565b60106020526000908152604090205481565b6102526102aa366004611c32565b610646565b6102666102bd366004611c15565b6106af565b610266600e5481565b60405160128152602001610236565b6102ed6102e8366004611c15565b61070b565b005b6102526102fd366004611be9565b61083b565b610252610310366004611c15565b600f6020526000908152604090205460ff1681565b610338610333366004611c73565b610871565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b6102ed61038b366004611c73565b6109c5565b6102ed610a83565b61026660115481565b6102666103af366004611c15565b6001600160a01b031660009081526020819052604090205490565b6102ed610b23565b61026660095481565b6104027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b6005546001600160a01b0316610402565b610266610439366004611c15565b610b97565b610229610ba2565b610252610454366004611be9565b610bb1565b610266610467366004611c15565b610c00565b61025261047a366004611be9565b610c2c565b61026661048d366004611c15565b6001600160a01b031660009081526008602052604090205490565b6102526104b6366004611c9a565b610c39565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666104f0366004611cd3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ed610529366004611be9565b610ce7565b600e54610266565b6102ed610544366004611c73565b610e6f565b6102ed610557366004611c15565b610fe0565b61033861056a366004611c15565b6110cb565b61058261057d366004611c73565b611234565b60408051938452602084019290925290820152606001610236565b6060600380546105ac90611d01565b80601f01602080910402602001604051908101604052809291908181526020018280546105d890611d01565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b5050505050905090565b600061063c338484611351565b5060015b92915050565b6000610653848484611475565b6106a584336106a085604051806060016040528060288152602001611ed2602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906114d0565b611351565b5060019392505050565b6001600160a01b03811660009081526007602090815260408083205491839052822054600654600160801b92610701926106fc926106f6916106f1919061150a565b611593565b906115a3565b6115e1565b6106409190611d51565b6005546001600160a01b0316331461073e5760405162461bcd60e51b815260040161073590611d73565b60405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff161561076457600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff191660011790556107929082906115f4565b60405163131836e760e21b8152600a60048201526001600160a01b0382166024820152734c66b0d939f1e3356de4bca19e0f2e9bcab73d1690634c60db9c9060440160006040518083038186803b1580156107ec57600080fd5b505af4158015610800573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161063c9185906106a09086611659565b600080600080600080600080600a734c66b0d939f1e3356de4bca19e0f2e9bcab73d1663deb3d89690916040518263ffffffff1660e01b81526004016108b991815260200190565b602060405180830381865af41580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190611da8565b891061091f5750600096506000199550859450869350839250829150819050806109ba565b6040516368d54f3f60e11b8152600a6004820152602481018a9052600090734c66b0d939f1e3356de4bca19e0f2e9bcab73d169063d1aa9e7e90604401602060405180830381865af4158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190611dc1565b90506109a8816110cb565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b031633146109ef5760405162461bcd60e51b815260040161073590611d73565b60006109fa60025490565b11610a0457600080fd5b8015610a8057610a37610a1660025490565b610a2483600160801b61150a565b610a2e9190611d51565b60065490611659565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a7c9082611659565b6009555b50565b60405162461bcd60e51b815260206004820152606360248201527f4846415f4469766964656e645f547261636b65723a207769746864726177446960448201527f766964656e642064697361626c65642e20557365207468652027636c61696d2760648201527f2066756e6374696f6e206f6e20746865206d61696e2048464120636f6e74726160848201526231ba1760e91b60a482015260c401610735565b6005546001600160a01b03163314610b4d5760405162461bcd60e51b815260040161073590611d73565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061064082610c00565b6060600480546105ac90611d01565b600061063c33846106a085604051806060016040528060258152602001611efa602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906114d0565b6001600160a01b03811660009081526008602052604081205461064090610c26846106af565b906116b8565b600061063c338484611475565b6005546000906001600160a01b03163314610c665760405162461bcd60e51b815260040161073590611d73565b6000610c71846116fa565b90508015610cdd576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ccb9085815260200190565b60405180910390a36001915050610640565b5060009392505050565b6005546001600160a01b03163314610d115760405162461bcd60e51b815260040161073590611d73565b6001600160a01b0382166000908152600f602052604090205460ff16610e6b577f00000000000000000000000000000000000000000000000000000000000000008110610de057610d6282826115f4565b604051632f0ad01760e21b8152600a60048201526001600160a01b038316602482015260448101829052734c66b0d939f1e3356de4bca19e0f2e9bcab73d169063bc2b405c9060640160006040518083038186803b158015610dc357600080fd5b505af4158015610dd7573d6000803e3d6000fd5b50505050610e5e565b610deb8260006115f4565b60405163131836e760e21b8152600a60048201526001600160a01b0383166024820152734c66b0d939f1e3356de4bca19e0f2e9bcab73d1690634c60db9c9060440160006040518083038186803b158015610e4557600080fd5b505af4158015610e59573d6000803e3d6000fd5b505050505b610e69826001610c39565b505b5050565b6005546001600160a01b03163314610e995760405162461bcd60e51b815260040161073590611d73565b610e108110158015610eae5750620151808111155b610f365760405162461bcd60e51b815260206004820152604d60248201527f4275484641726e5f4469766964656e645f547261636b65723a20636c61696d5760448201527f616974206d757374206265207570646174656420746f206265747765656e203160648201526c20616e6420323420686f75727360981b608482015260a401610735565b6011548103610fad5760405162461bcd60e51b815260206004820152603b60248201527f4846415f4469766964656e645f547261636b65723a2043616e6e6f742075706460448201527f61746520636c61696d5761697420746f2073616d652076616c756500000000006064820152608401610735565b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b6005546001600160a01b0316331461100a5760405162461bcd60e51b815260040161073590611d73565b6001600160a01b03811661106f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610735565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152600a60048201526001600160a01b03821660248201528190600090819081908190819081908190734c66b0d939f1e3356de4bca19e0f2e9bcab73d16906317e142d190604401602060405180830381865af415801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f9190611da8565b96506000199550600087126111c157600e5487111561118d57600e5461118690889061187f565b95506111c1565b600e54600a54600091106111a25760006111b1565b600e54600a546111b1916116b8565b90506111bd88826115a3565b9650505b6111ca88610c00565b94506111d5886106af565b6001600160a01b0389166000908152601060205260409020549094509250826111ff57600061120d565b60115461120d908490611659565b915042821161121d576000611227565b61122782426116b8565b9050919395975091939597565b600a5460009081908190808203611256575050600e546000925082915061134a565b600e546000805a90506000805b898410801561127157508582105b15611339578461128081611dde565b600a549096508610905061129357600094505b6000600a60000186815481106112ab576112ab611df7565b60009182526020808320909101546001600160a01b031680835260109091526040909120549091506112dc906118bc565b156112ff576112ec816001610c39565b156112ff57816112fb81611dde565b9250505b8261130981611dde565b93505060005a9050808511156113305761132d61132686836116b8565b8790611659565b95505b93506112639050565b600e85905590975095509193505050505b9193909250565b6001600160a01b0383166113b35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610735565b6001600160a01b0382166114145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610735565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602a60248201527f4846415f4469766964656e645f547261636b65723a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b6064820152608401610735565b600081848411156114f45760405162461bcd60e51b81526004016107359190611b86565b5060006115018486611e0d565b95945050505050565b60008260000361151c57506000610640565b60006115288385611e20565b9050826115358583611d51565b1461158c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610735565b9392505050565b6000818181121561064057600080fd5b6000806115b08385611e37565b9050600083121580156115c35750838112155b806115d857506000831280156115d857508381125b61158c57600080fd5b6000808212156115f057600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561163357600061162183836116b8565b905061162d84826118e3565b50610e69565b80821015610e6957600061164782846116b8565b90506116538482611947565b50505050565b6000806116668385611e5f565b90508381101561158c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610735565b600061158c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d0565b60008061170683610c00565b90508015611876576001600160a01b0383166000908152600860205260409020546117319082611659565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906117809084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156117fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118209190611e72565b90508061186f576001600160a01b03841660009081526008602052604090205461184a90836116b8565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b60008061188c8385611e8f565b90506000831215801561189f5750838113155b806115d857506000831280156115d8575083811361158c57600080fd5b6000428211156118ce57506000919050565b6011546118db42846116b8565b101592915050565b6118ed828261198b565b6119276119086106f18360065461150a90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061187f565b6001600160a01b0390921660009081526007602052604090209190915550565b6119518282611a76565b61192761196c6106f18360065461150a90919063ffffffff16565b6001600160a01b038416600090815260076020526040902054906115a3565b6001600160a01b0382166119e15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610735565b6119ed60008383610e69565b6002546119fa9082611659565b6002556001600160a01b038216600090815260208190526040902054611a209082611659565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611ad65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610735565b611ae282600083610e69565b611b1f81604051806060016040528060228152602001611eb0602291396001600160a01b03851660009081526020819052604090205491906114d0565b6001600160a01b038316600090815260208190526040902055600254611b4590826116b8565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611a6a565b600060208083528351808285015260005b81811015611bb357858101830151858201604001528201611b97565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a8057600080fd5b60008060408385031215611bfc57600080fd5b8235611c0781611bd4565b946020939093013593505050565b600060208284031215611c2757600080fd5b813561158c81611bd4565b600080600060608486031215611c4757600080fd5b8335611c5281611bd4565b92506020840135611c6281611bd4565b929592945050506040919091013590565b600060208284031215611c8557600080fd5b5035919050565b8015158114610a8057600080fd5b60008060408385031215611cad57600080fd5b8235611cb881611bd4565b91506020830135611cc881611c8c565b809150509250929050565b60008060408385031215611ce657600080fd5b8235611cf181611bd4565b91506020830135611cc881611bd4565b600181811c90821680611d1557607f821691505b602082108103611d3557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082611d6e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611dba57600080fd5b5051919050565b600060208284031215611dd357600080fd5b815161158c81611bd4565b600060018201611df057611df0611d3b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561064057610640611d3b565b808202811582820484141761064057610640611d3b565b8082018281126000831280158216821582161715611e5757611e57611d3b565b505092915050565b8082018082111561064057610640611d3b565b600060208284031215611e8457600080fd5b815161158c81611c8c565b818103600083128015838313168383128216171561186f5761186f611d3b56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209a7d6996a99125f56e136d7534d38a56c68f1ba9c3414b8217390714ec8f2f9664736f6c63430008120033