[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "_creator", "type": "address" }, { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "uint256", "name": "_totalTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_k", "type": "uint256" }, { "internalType": "uint256", "name": "_alpha", "type": "uint256" }, { "internalType": "uint256", "name": "_saleGoal", "type": "uint256" }, { "internalType": "uint8", "name": "_creatorshare", "type": "uint8" }, { "internalType": "uint256", "name": "_feePercent", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "uint256", "name": "y", "type": "uint256" } ], "name": "PRBMath_MulDiv18_Overflow", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "uint256", "name": "y", "type": "uint256" }, { "internalType": "uint256", "name": "denominator", "type": "uint256" } ], "name": "PRBMath_MulDiv_Overflow", "type": "error" }, { "inputs": [ { "internalType": "UD60x18", "name": "x", "type": "uint256" } ], "name": "PRBMath_UD60x18_Exp2_InputTooBig", "type": "error" }, { "inputs": [ { "internalType": "UD60x18", "name": "x", "type": "uint256" } ], "name": "PRBMath_UD60x18_Exp_InputTooBig", "type": "error" }, { "inputs": [ { "internalType": "UD60x18", "name": "x", "type": "uint256" } ], "name": "PRBMath_UD60x18_Log_InputTooSmall", "type": "error" }, { "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": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TokensPurchased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TokensSold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "alpha", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "minTokensOut", "type": "uint256" } ], "name": "buy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "claimTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "creator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "creatorshare", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feePercent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllHistoricalData", "outputs": [ { "components": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "totalRaised", "type": "uint256" } ], "internalType": "struct EtherfunSale.HistoricalData[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllTokenHolders", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "getEthIn", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenHoldersCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ethAmount", "type": "uint256" } ], "name": "getTokenIn", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "historicalData", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "totalRaised", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isTokenHolder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "k", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_launchContract", "type": "address" }, { "internalType": "uint8", "name": "buyLpFee", "type": "uint8" }, { "internalType": "uint8", "name": "sellLpFee", "type": "uint8" }, { "internalType": "uint8", "name": "buyProtocolFee", "type": "uint8" }, { "internalType": "uint8", "name": "sellProtocolFee", "type": "uint8" }, { "internalType": "address", "name": "firstBuyer", "type": "address" }, { "internalType": "address", "name": "saleInitiator", "type": "address" } ], "name": "launchSale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "launched", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxContribution", "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": "saleGoal", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minEthOut", "type": "uint256" } ], "name": "sell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "status", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "lockFactoryOwner", "type": "address" } ], "name": "takeFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokenBalances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenHolders", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokensSold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRaised", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vistaFactoryAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "wethAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6080604052601380546001600160a01b031990811673420000000000000000000000000000000000000617909155601480548216739c9dfc8b5d8f1cb1b7f854108db16be1c21ea4001790556016805490911673c07dff4c8c129aa8fa8b91cc67d74aed77e4fef1179055348015610075575f80fd5b5060405161314638038061314683398101604081905261009491610358565b60015f55898960046100a683826104a8565b5060056100b382826104a8565b5050600680546001600160a01b03808c166001600160a01b03199283161790925560078054928b1692909116919091179055506008869055600c859055600d849055600e839055600b805460ff841660ff1990911617905560158190555f600f5561011e308761012d565b50505050505050505050610587565b6001600160a01b03821661015b5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6101665f838361016a565b5050565b6001600160a01b038316610194578060035f8282546101899190610562565b909155506102049050565b6001600160a01b0383165f90815260016020526040902054818110156101e65760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610152565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166102205760038054829003905561023e565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161028391815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102b3575f80fd5b81516001600160401b038111156102cc576102cc610290565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102fa576102fa610290565b604052818152838201602001851015610311575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610343575f80fd5b919050565b805160ff81168114610343575f80fd5b5f805f805f805f805f806101408b8d031215610372575f80fd5b8a516001600160401b03811115610387575f80fd5b6103938d828e016102a4565b60208d0151909b5090506001600160401b038111156103b0575f80fd5b6103bc8d828e016102a4565b9950506103cb60408c0161032d565b97506103d960608c0161032d565b60808c015160a08d015160c08e015160e08f0151939a509198509650945092506104066101008c01610348565b91505f6101208c01519050809150509295989b9194979a5092959850565b600181811c9082168061043857607f821691505b60208210810361045657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104a357805f5260205f20601f840160051c810160208510156104815750805b601f840160051c820191505b818110156104a0575f815560010161048d565b50505b505050565b81516001600160401b038111156104c1576104c1610290565b6104d5816104cf8454610424565b8461045c565b6020601f821160018114610507575f83156104f05750848201515b5f19600385901b1c1916600184901b1784556104a0565b5f84815260208120601f198516915b828110156105365787850151825560209485019460019092019101610516565b508482101561055357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561058157634e487b7160e01b5f52601160045260245ffd5b92915050565b612bb2806105945f395ff3fe608060405260043610610236575f3560e01c80637529873411610129578063c45a0155116100a8578063dd62ed3e1161006d578063dd62ed3e14610679578063df8de3e7146106bd578063e963eb33146106dc578063f25f4b56146106fb578063f67848861461071a575f80fd5b8063c45a015514610608578063c5c4744c14610627578063c7c049fc1461063c578063cce7ec1314610651578063db1d0fd514610664575f80fd5b8063923108d9116100ee578063923108d91461058057806395d89b411461059f578063a5bf8ec6146105b3578063a9059cbb146105d4578063b4f40c61146105f3575f80fd5b8063752987341461050f5780637e1c0c09146105235780637fd6f15c146105385780638091f3bf1461054d5780638d3d65761461056b575f80fd5b806332fb56ca116101b557806362f39bb41161017a57806362f39bb41461043f5780636334a8c41461046057806365731fe9146104795780636a272462146104a757806370a08231146104db575f80fd5b806332fb56ca146103ab578063468f3dcd146103cc5780634f0e0ef3146103e0578063518ab2a8146103ff578063523fba7f14610414575f80fd5b806318160ddd116101fb57806318160ddd14610319578063200d2ed21461032d57806323b872dd1461034c5780632c5b5ae21461036b578063313ce5671461038a575f80fd5b806302d05d3f1461024157806306fdde031461027d578063089a122c1461029e578063095ea7b3146102cb5780630efc51a7146102fa575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b50600654610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610288575f80fd5b50610291610739565b6040516102749190612761565b3480156102a9575f80fd5b506102bd6102b8366004612796565b6107c9565b604051908152602001610274565b3480156102d6575f80fd5b506102ea6102e53660046127c1565b610855565b6040519015158152602001610274565b348015610305575f80fd5b506102bd610314366004612796565b61086e565b348015610324575f80fd5b506003546102bd565b348015610338575f80fd5b50600b546102ea9062010000900460ff1681565b348015610357575f80fd5b506102ea6103663660046127eb565b6108ef565b348015610376575f80fd5b50601454610260906001600160a01b031681565b348015610395575f80fd5b5060125b60405160ff9091168152602001610274565b3480156103b6575f80fd5b506103bf610914565b6040516102749190612829565b3480156103d7575f80fd5b506011546102bd565b3480156103eb575f80fd5b50601354610260906001600160a01b031681565b34801561040a575f80fd5b506102bd600f5481565b34801561041f575f80fd5b506102bd61042e366004612874565b60106020525f908152604090205481565b34801561044a575f80fd5b50610453610973565b604051610274919061288f565b34801561046b575f80fd5b50600b546103999060ff1681565b348015610484575f80fd5b506102ea610493366004612874565b60126020525f908152604090205460ff1681565b3480156104b2575f80fd5b506104c66104c13660046128d2565b6109e2565b60408051928352602083019190915201610274565b3480156104e6575f80fd5b506102bd6104f5366004612874565b6001600160a01b03165f9081526001602052604090205490565b34801561051a575f80fd5b506102bd610d91565b34801561052e575f80fd5b506102bd60085481565b348015610543575f80fd5b506102bd60155481565b348015610558575f80fd5b50600b546102ea90610100900460ff1681565b348015610576575f80fd5b506102bd600a5481565b34801561058b575f80fd5b5061026061059a366004612796565b610e76565b3480156105aa575f80fd5b50610291610e9e565b3480156105be575f80fd5b506105d26105cd366004612874565b610ead565b005b3480156105df575f80fd5b506102ea6105ee3660046127c1565b6110d3565b3480156105fe575f80fd5b506102bd600c5481565b348015610613575f80fd5b50600754610260906001600160a01b031681565b348015610632575f80fd5b506102bd60095481565b348015610647575f80fd5b506102bd600e5481565b6104c661065f3660046127c1565b6110e0565b34801561066f575f80fd5b506102bd600d5481565b348015610684575f80fd5b506102bd610693366004612904565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156106c8575f80fd5b506105d26106d7366004612874565b611480565b3480156106e7575f80fd5b506104c66106f6366004612796565b611584565b348015610706575f80fd5b50601654610260906001600160a01b031681565b348015610725575f80fd5b506105d2610734366004612950565b6115b0565b606060048054610748906129d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610774906129d9565b80156107bf5780601f10610796576101008083540402835291602001916107bf565b820191905f5260205f20905b8154815290600101906020018083116107a257829003601f168201915b5050505050905090565b5f806107d4600f5490565b600c5490915083905f6107e6600d5490565b90505f61080f836108096108026107fd868a61187b565b611889565b869061187b565b906118e5565b90505f610837846108096108306107fd6108298b8b6118e5565b889061187b565b879061187b565b905061084961084683836118e5565b90565b98975050505050505050565b5f336108628185856118f3565b60019150505b92915050565b5f8061087960095490565b600c5490915083905f61088b600d5490565b90505f6108bc826108b66108b1670de0b6b3a76400006108ab8a89611905565b9061191c565b61192a565b90611905565b90505f6108e0836108b66108b1670de0b6b3a76400006108ab896108b68d8d61191c565b905061084961084682846118e5565b5f336108fc85828561195a565b6109078585856119d5565b60019150505b9392505050565b606060118054806020026020016040519081016040528092919081815260200182805480156107bf57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161094c575050505050905090565b60606017805480602002602001604051908101604052809291908181526020015f905b828210156109d9578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190610996565b50505050905090565b6007545f9081906001600160a01b03163314610a195760405162461bcd60e51b8152600401610a1090612a11565b60405180910390fd5b610a21611a32565b600b54610100900460ff1615610a495760405162461bcd60e51b8152600401610a1090612a37565b5f8411610aa45760405162461bcd60e51b815260206004820152602360248201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610a10565b6001600160a01b0385165f90815260106020526040902054841115610b0b5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e63650000000000006044820152606401610a10565b600b5462010000900460ff1615610b4d5760405162461bcd60e51b8152602060048201526006602482015265189bdb99195960d21b6044820152606401610a10565b5f610b57856107c9565b905083811015610b795760405162461bcd60e51b8152600401610a1090612a66565b47811115610bc95760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606401610a10565b5f606460155483610bda9190612ac1565b610be49190612aec565b90505f610bf18284612b0b565b905086600f5f828254610c049190612b0b565b925050819055508260095f828254610c1c9190612b0b565b90915550506001600160a01b0388165f9081526010602052604081208054899290610c48908490612b0b565b90915550506040516001600160a01b0389169082156108fc029083905f818181858888f19350505050158015610c80573d5f803e3d5ffd5b506016546001600160a01b03166108fc610c9b600285612aec565b6040518115909202915f818181858888f19350505050158015610cc0573d5f803e3d5ffd5b50734c5fbf8d815379379b3695ba77b5d3f898c1230b6108fc610ce4600285612aec565b6040518115909202915f818181858888f19350505050158015610d09573d5f803e3d5ffd5b50610d12611a89565b6040805188815260208101839052428183015290516001600160a01b038a16917f6db63bebf1e6540277744df32846ebdb98385b1a73f2d5de49b28348add63f50919081900360600190a250506009546001600160a01b0387165f90815260106020526040902054909350915050610d8960015f55565b935093915050565b60145460135460405163e6a4390560e01b81523060048201526001600160a01b0391821660248201525f9291909116908290829063e6a4390590604401602060405180830381865afa158015610de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0d9190612b1e565b9050806001600160a01b03166361047d336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6f9190612b39565b9250505090565b60118181548110610e85575f80fd5b5f918252602090912001546001600160a01b0316905081565b606060058054610748906129d9565b6007546001600160a01b03163314610ed75760405162461bcd60e51b8152600401610a1090612a11565b610edf611a32565b60145460135460405163e6a4390560e01b81523060048201526001600160a01b0391821660248201529116905f90829063e6a4390590604401602060405180830381865afa158015610f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612b1e565b90506001600160a01b038116610fa05760405162461bcd60e51b815260206004820152600e60248201526d14185a5c881b9bdd08199bdd5b9960921b6044820152606401610a10565b5f819050806001600160a01b031663666da64f6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610fdc575f80fd5b505af1158015610fee573d5f803e3d5ffd5b504792505050806110325760405162461bcd60e51b815260206004820152600e60248201526d139bc81155120818db185a5b595960921b6044820152606401610a10565b5f61103e600283612aec565b90505f61104b8284612b0b565b6040519091506001600160a01b0388169083156108fc029084905f818181858888f19350505050158015611081573d5f803e3d5ffd5b50604051734c5fbf8d815379379b3695ba77b5d3f898c1230b9082156108fc029083905f818181858888f193505050501580156110c0573d5f803e3d5ffd5b505050505050506110d060015f55565b50565b5f336108628185856119d5565b6007545f9081906001600160a01b0316331461110e5760405162461bcd60e51b8152600401610a1090612a11565b611116611a32565b600b54610100900460ff161561113e5760405162461bcd60e51b8152600401610a1090612a37565b600e546111539067016345785d8a0000612b50565b346009546111619190612b50565b11156111a35760405162461bcd60e51b815260206004820152601160248201527014d85b194819dbd85b081c995858da1959607a1b6044820152606401610a10565b5f34116111e05760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152606401610a10565b600b5462010000900460ff16156112225760405162461bcd60e51b8152602060048201526006602482015265189bdb99195960d21b6044820152606401610a10565b5f6064601554346112339190612ac1565b61123d9190612aec565b90505f61124a8234612b0b565b90505f6112568261086e565b9050858110156112785760405162461bcd60e51b8152600401610a1090612a66565b80600f5f8282546112899190612b50565b925050819055508160095f8282546112a19190612b50565b90915550506001600160a01b0387165f90815260106020526040812080548392906112cd908490612b50565b90915550506001600160a01b0387165f9081526012602052604090205460ff16611354576011805460018082019092557f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b038a169081179091555f908152601260205260409020805460ff191690911790555b6016546001600160a01b03166108fc61136e600286612aec565b6040518115909202915f818181858888f19350505050158015611393573d5f803e3d5ffd5b50734c5fbf8d815379379b3695ba77b5d3f898c1230b6108fc6113b7600286612aec565b6040518115909202915f818181858888f193505050501580156113dc573d5f803e3d5ffd5b50600e54600954106113fa57600b805462ff00001916620100001790555b611402611a89565b6040805183815260208101839052428183015290516001600160a01b038916917f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f1919081900360600190a250506009546001600160a01b0386165f9081526010602052604090205490935091505061147960015f55565b9250929050565b6007546001600160a01b031633146114aa5760405162461bcd60e51b8152600401610a1090612a11565b6114b2611a32565b600b54610100900460ff166114fd5760405162461bcd60e51b815260206004820152601160248201527014d85b19481b9bdd081b185d5b98da1959607a1b6044820152606401610a10565b6001600160a01b0381165f90815260106020526040902054806115575760405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e7320746f20636c61696d60701b6044820152606401610a10565b6001600160a01b0382165f9081526010602052604081205561157a3083836119d5565b506110d060015f55565b60178181548110611593575f80fd5b5f9182526020909120600290910201805460019091015490915082565b6007546001600160a01b031633146115da5760405162461bcd60e51b8152600401610a1090612a11565b6115e2611a32565b600b54610100900460ff161561160a5760405162461bcd60e51b8152600401610a1090612a37565b600e5460095410156116565760405162461bcd60e51b815260206004820152601560248201527414d85b194819dbd85b081b9bdd081c995858da1959605a1b6044820152606401610a10565b600b5462010000900460ff1661169b5760405162461bcd60e51b815260206004820152600a6024820152691b9bdd08189bdb99195960b21b6044820152606401610a10565b600b805461ff001916610100179055600f546008545f916116bb91612b0b565b600954600b54919250905f9060649083906116d99060ff1683612b63565b60ff166116e69190612ac1565b6116f09190612aec565b90506116fd308b856118f3565b600654604051637f0dfdd360e11b8152306004820152602481018590525f60448201819052606482015260ff808c166084830152808b1660a4830152808a1660c4830152881660e48201526001600160a01b03918216610104820152908b169063fe1bfba6908390610124015f604051808303818588803b158015611780575f80fd5b505af1158015611792573d5f803e3d5ffd5b50479350505081151590506117e95760405162461bcd60e51b815260206004820152601c60248201527f4e6f2062616c616e636520666f722063726561746f72207368617265000000006044820152606401610a10565b6001600160a01b0386166108fc611801600284612aec565b6040518115909202915f818181858888f19350505050158015611826573d5f803e3d5ffd5b506001600160a01b0385166108fc61183f600284612aec565b6040518115909202915f818181858888f19350505050158015611864573d5f803e3d5ffd5b505050505061187260015f55565b50505050505050565b5f61090d6108468484611b03565b5f81680736ea4425c11ac6308111156118b857604051630d7b1d6560e11b815260048101849052602401610a10565b6714057b7ef767814f81026118dd6118d8670de0b6b3a7640000835b0490565b611bb5565b949350505050565b5f61090d6108468385612b0b565b6119008383836001611c09565b505050565b5f61090d61084684670de0b6b3a764000085611cdb565b5f61090d6108468385612b50565b5f6108686714057b7ef767814f670de0b6b3a764000061194c61084686611daa565b02816118d4576118d4612ad8565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f1981146119cf57818110156119c157604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610a10565b6119cf84848484035f611c09565b50505050565b6001600160a01b0383166119fe57604051634b637e8f60e11b81525f6004820152602401610a10565b6001600160a01b038216611a275760405163ec442f0560e01b81525f6004820152602401610a10565b611900838383611edb565b60025f5403611a835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a10565b60025f55565b6040805180820190915242815260095460208201908152601780546001810182555f9190915291517fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15600290930292830155517fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1690910155565b5f80805f19848609848602925082811083820303915050805f03611b345750670de0b6b3a764000090049050610868565b670de0b6b3a76400008110611b6657604051635173648d60e01b81526004810186905260248101859052604401610a10565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f81680a688906bd8affffff811115611be45760405163b3b6ba1f60e01b815260048101849052602401610a10565b5f611bfb670de0b6b3a7640000604084901b612aec565b90506118dd61084682612001565b6001600160a01b038416611c325760405163e602df0560e01b81525f6004820152602401610a10565b6001600160a01b038316611c5b57604051634a1406b160e11b81525f6004820152602401610a10565b6001600160a01b038085165f90815260026020908152604080832093871683529290522082905580156119cf57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611ccd91815260200190565b60405180910390a350505050565b5f80805f19858709858702925082811083820303915050805f03611d1257838281611d0857611d08612ad8565b049250505061090d565b838110611d4357604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610a10565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f81670de0b6b3a7640000811015611dd85760405163036d32ef60e41b815260048101849052602401610a10565b5f611e63670de0b6b3a7640000830460016fffffffffffffffffffffffffffffffff821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff198101611e8c5750949350505050565b671bc16d674ec800006706f05b59d3b200005b8015611ecf57670de0b6b3a7640000838002049250818310611ec7579283019260019290921c915b60011c611e9f565b50919695505050505050565b6001600160a01b038316611f05578060035f828254611efa9190612b50565b90915550611f759050565b6001600160a01b0383165f9081526001602052604090205481811015611f575760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610a10565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216611f9157600380548290039055611faf565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ff491815260200190565b60405180910390a3505050565b600160bf1b67ff0000000000000082161561210e576780000000000000008216156120355768016a09e667f3bcc9090260401c5b674000000000000000821615612054576801306fe0a31b7152df0260401c5b672000000000000000821615612073576801172b83c7d517adce0260401c5b6710000000000000008216156120925768010b5586cf9890f62a0260401c5b6708000000000000008216156120b1576801059b0d31585743ae0260401c5b6704000000000000008216156120d057680102c9a3e778060ee70260401c5b6702000000000000008216156120ef5768010163da9fb33356d80260401c5b67010000000000000082161561210e57680100b1afa5abcbed610260401c5b66ff00000000000082161561220d57668000000000000082161561213b5768010058c86da1c09ea20260401c5b6640000000000000821615612159576801002c605e2e8cec500260401c5b662000000000000082161561217757680100162f3904051fa10260401c5b6610000000000000821615612195576801000b175effdc76ba0260401c5b66080000000000008216156121b357680100058ba01fb9f96d0260401c5b66040000000000008216156121d15768010002c5cc37da94920260401c5b66020000000000008216156121ef576801000162e525ee05470260401c5b660100000000000082161561220d5768010000b17255775c040260401c5b65ff00000000008216156123035765800000000000821615612238576801000058b91b5bc9ae0260401c5b6540000000000082161561225557680100002c5c89d5ec6d0260401c5b652000000000008216156122725768010000162e43f4f8310260401c5b6510000000000082161561228f57680100000b1721bcfc9a0260401c5b650800000000008216156122ac5768010000058b90cf1e6e0260401c5b650400000000008216156122c9576801000002c5c863b73f0260401c5b650200000000008216156122e657680100000162e430e5a20260401c5b65010000000000821615612303576801000000b1721835510260401c5b64ff000000008216156123f05764800000000082161561232c57680100000058b90c0b490260401c5b6440000000008216156123485768010000002c5c8601cc0260401c5b642000000000821615612364576801000000162e42fff00260401c5b6410000000008216156123805768010000000b17217fbb0260401c5b64080000000082161561239c576801000000058b90bfce0260401c5b6404000000008216156123b857680100000002c5c85fe30260401c5b6402000000008216156123d45768010000000162e42ff10260401c5b6401000000008216156123f057680100000000b17217f80260401c5b63ff0000008216156124d45763800000008216156124175768010000000058b90bfc0260401c5b6340000000821615612432576801000000002c5c85fe0260401c5b632000000082161561244d57680100000000162e42ff0260401c5b6310000000821615612468576801000000000b17217f0260401c5b630800000082161561248357680100000000058b90c00260401c5b630400000082161561249e5768010000000002c5c8600260401c5b63020000008216156124b9576801000000000162e4300260401c5b63010000008216156124d45768010000000000b172180260401c5b62ff00008216156125af57628000008216156124f9576801000000000058b90c0260401c5b6240000082161561251357680100000000002c5c860260401c5b6220000082161561252d5768010000000000162e430260401c5b6210000082161561254757680100000000000b17210260401c5b620800008216156125615768010000000000058b910260401c5b6204000082161561257b576801000000000002c5c80260401c5b6202000082161561259557680100000000000162e40260401c5b620100008216156125af576801000000000000b1720260401c5b61ff00821615612681576180008216156125d257680100000000000058b90260401c5b6140008216156125eb5768010000000000002c5d0260401c5b612000821615612604576801000000000000162e0260401c5b61100082161561261d5768010000000000000b170260401c5b610800821615612636576801000000000000058c0260401c5b61040082161561264f57680100000000000002c60260401c5b61020082161561266857680100000000000001630260401c5b61010082161561268157680100000000000000b10260401c5b60ff82161561274a5760808216156126a257680100000000000000590260401c5b60408216156126ba576801000000000000002c0260401c5b60208216156126d257680100000000000000160260401c5b60108216156126ea576801000000000000000b0260401c5b600882161561270257680100000000000000060260401c5b600482161561271a57680100000000000000030260401c5b600282161561273257680100000000000000010260401c5b600182161561274a57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156127a6575f80fd5b5035919050565b6001600160a01b03811681146110d0575f80fd5b5f80604083850312156127d2575f80fd5b82356127dd816127ad565b946020939093013593505050565b5f805f606084860312156127fd575f80fd5b8335612808816127ad565b92506020840135612818816127ad565b929592945050506040919091013590565b602080825282518282018190525f918401906040840190835b818110156128695783516001600160a01b0316835260209384019390920191600101612842565b509095945050505050565b5f60208284031215612884575f80fd5b813561090d816127ad565b602080825282518282018190525f918401906040840190835b818110156128695783518051845260209081015181850152909301926040909201916001016128a8565b5f805f606084860312156128e4575f80fd5b83356128ef816127ad565b95602085013595506040909401359392505050565b5f8060408385031215612915575f80fd5b8235612920816127ad565b91506020830135612930816127ad565b809150509250929050565b803560ff8116811461294b575f80fd5b919050565b5f805f805f805f60e0888a031215612966575f80fd5b8735612971816127ad565b965061297f6020890161293b565b955061298d6040890161293b565b945061299b6060890161293b565b93506129a96080890161293b565b925060a08801356129b9816127ad565b915060c08801356129c9816127ad565b8091505092959891949750929550565b600181811c908216806129ed57607f821691505b602082108103612a0b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b4f6e6c7920666163746f727960a01b604082015260600190565b60208082526015908201527414d85b1948185b1c9958591e481b185d5b98da1959605a1b604082015260600190565b60208082526027908201527f536c69707061676520746f6f20686967682c207472616e73616374696f6e2072604082015266195d995c9d195960ca1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761086857610868612aad565b634e487b7160e01b5f52601260045260245ffd5b5f82612b0657634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561086857610868612aad565b5f60208284031215612b2e575f80fd5b815161090d816127ad565b5f60208284031215612b49575f80fd5b5051919050565b8082018082111561086857610868612aad565b60ff828116828216039081111561086857610868612aad56fea2646970667358221220345ba31ffefd3edc9c017bba9dfbcf55376a3f3b2c284b647bfbc188a8c21b5364736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c07dff4c8c129aa8fa8b91cc67d74aed77e4fef100000000000000000000000050d9187e8cc1a27a43ef6d08686ede1e72122e150000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000314b3d2e423000000000000000000000000000000000000000000000000000000000000ab8acb8000000000000000000000000000000000000000000000000014d1120d7b160000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000021426173656420416d65726963616e20537570706f7274657273206f6620456c6f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241534500000000000000000000000000000000000000000000000000000000