Address Contract Partially Verified
Address
0xa2D4af83f7403285bC1041700737663F8ac43380
Balance
0.000000000 ETH
Nonce
1
Code Size
18967 bytes
Creator
0x3D219e5c...D80A at tx 0x0bd80cda...93f57b
Indexed Transactions
0
Contract Bytecode
18967 bytes
0x608060405260043610610338575f3560e01c8063790ca413116101aa578063b62496f5116100f6578063e2f4560511610094578063ee5ecc891161006e578063ee5ecc8914610b97578063f2fde38b14610bbf578063f8b45b0514610be7578063fd72e22a14610c1157610339565b8063e2f4560514610b1b578063e5c6ca3f14610b45578063e6c1909b14610b6d57610339565b8063d00efb2f116100d0578063d00efb2f14610a63578063d107439b14610a8d578063d5759ba314610ab5578063dd62ed3e14610adf57610339565b8063b62496f5146109d5578063b8eb354614610a11578063cb96372814610a3b57610339565b80639966774411610163578063acb2ad6f1161013d578063acb2ad6f14610933578063ad29ffde1461095d578063afa4f3b214610985578063b2f3bba2146109ad57610339565b806399667744146108a55780639c0db5f3146108cf578063a9059cbb146108f757610339565b8063790ca413146107bf5780638c2d86cb146107e95780638da5cb5b146107ff5780638e84afec14610829578063926443521461085157806395d89b411461087b57610339565b806347062402116102845780635cce86cd1161022257806370a08231116101fc57806370a082311461071957806370db69d614610755578063715018a61461077f57806375f0a8741461079557610339565b80635cce86cd1461069d57806362b09c14146106d95780636ca541e5146106ef57610339565b80634fbee1931161025e5780634fbee193146105f9578063538ba4f91461063557806356cd40e71461065f57806359512ab01461067557610339565b8063470624021461057b57806349bd5a5e146105a55780634e6fd6c4146105cf57610339565b806322461173116102f1578063307aebc9116102cb578063307aebc9146104c1578063313ce567146104eb57806336b19cd7146105155780633bbac5791461053f57610339565b8063224611731461043357806323b872dd1461045b5780632b14ca561461049757610339565b806301339c211461033b57806306fdde0314610351578063095ea7b31461037b578063106a5a8f146103b75780631694505e146103df57806318160ddd1461040957610339565b5b005b348015610346575f5ffd5b5061034f610c3b565b005b34801561035c575f5ffd5b506103656110be565b6040516103729190613f4e565b60405180910390f35b348015610386575f5ffd5b506103a1600480360381019061039c9190614003565b61114e565b6040516103ae919061405b565b60405180910390f35b3480156103c2575f5ffd5b506103dd60048036038101906103d891906140ff565b611170565b005b3480156103ea575f5ffd5b506103f36111cc565b60405161040091906141b7565b60405180910390f35b348015610414575f5ffd5b5061041d6111f0565b60405161042a91906141df565b60405180910390f35b34801561043e575f5ffd5b50610459600480360381019061045491906141f8565b6111f9565b005b348015610466575f5ffd5b50610481600480360381019061047c9190614223565b611329565b60405161048e919061405b565b60405180910390f35b3480156104a2575f5ffd5b506104ab611357565b6040516104b891906141df565b60405180910390f35b3480156104cc575f5ffd5b506104d561135d565b6040516104e2919061405b565b60405180910390f35b3480156104f6575f5ffd5b506104ff611370565b60405161050c919061428e565b60405180910390f35b348015610520575f5ffd5b50610529611378565b60405161053691906142b6565b60405180910390f35b34801561054a575f5ffd5b50610565600480360381019061056091906141f8565b61139d565b604051610572919061405b565b60405180910390f35b348015610586575f5ffd5b5061058f6113ba565b60405161059c91906141df565b60405180910390f35b3480156105b0575f5ffd5b506105b96113c0565b6040516105c691906142b6565b60405180910390f35b3480156105da575f5ffd5b506105e36113e5565b6040516105f091906142b6565b60405180910390f35b348015610604575f5ffd5b5061061f600480360381019061061a91906141f8565b6113eb565b60405161062c919061405b565b60405180910390f35b348015610640575f5ffd5b50610649611408565b60405161065691906142b6565b60405180910390f35b34801561066a575f5ffd5b5061067361140c565b005b348015610680575f5ffd5b5061069b600480360381019061069691906142cf565b611467565b005b3480156106a8575f5ffd5b506106c360048036038101906106be91906141f8565b6114c3565b6040516106d0919061405b565b60405180910390f35b3480156106e4575f5ffd5b506106ed6114e0565b005b3480156106fa575f5ffd5b5061070361153b565b604051610710919061405b565b60405180910390f35b348015610724575f5ffd5b5061073f600480360381019061073a91906141f8565b61154e565b60405161074c91906141df565b60405180910390f35b348015610760575f5ffd5b50610769611594565b60405161077691906141df565b60405180910390f35b34801561078a575f5ffd5b5061079361159a565b005b3480156107a0575f5ffd5b506107a96115ad565b6040516107b691906142b6565b60405180910390f35b3480156107ca575f5ffd5b506107d36115d2565b6040516107e091906141df565b60405180910390f35b3480156107f4575f5ffd5b506107fd6115d8565b005b34801561080a575f5ffd5b5061081361164b565b60405161082091906142b6565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a91906142fa565b611672565b005b34801561085c575f5ffd5b50610865611716565b604051610872919061405b565b60405180910390f35b348015610886575f5ffd5b5061088f611729565b60405161089c9190613f4e565b60405180910390f35b3480156108b0575f5ffd5b506108b96117b9565b6040516108c691906142b6565b60405180910390f35b3480156108da575f5ffd5b506108f560048036038101906108f091906140ff565b6117de565b005b348015610902575f5ffd5b5061091d60048036038101906109189190614003565b611b32565b60405161092a919061405b565b60405180910390f35b34801561093e575f5ffd5b50610947611b54565b60405161095491906141df565b60405180910390f35b348015610968575f5ffd5b50610983600480360381019061097e91906140ff565b611b5a565b005b348015610990575f5ffd5b506109ab60048036038101906109a691906142fa565b611bb6565b005b3480156109b8575f5ffd5b506109d360048036038101906109ce91906141f8565b611cbb565b005b3480156109e0575f5ffd5b506109fb60048036038101906109f691906141f8565b611cd0565b604051610a08919061405b565b60405180910390f35b348015610a1c575f5ffd5b50610a25611ced565b604051610a3291906141df565b60405180910390f35b348015610a46575f5ffd5b50610a616004803603810190610a5c91906141f8565b611cf3565b005b348015610a6e575f5ffd5b50610a77611f84565b604051610a8491906141df565b60405180910390f35b348015610a98575f5ffd5b50610ab36004803603810190610aae91906142fa565b611f8a565b005b348015610ac0575f5ffd5b50610ac9612018565b604051610ad6919061405b565b60405180910390f35b348015610aea575f5ffd5b50610b056004803603810190610b009190614325565b61202b565b604051610b1291906141df565b60405180910390f35b348015610b26575f5ffd5b50610b2f6120ad565b604051610b3c91906141df565b60405180910390f35b348015610b50575f5ffd5b50610b6b6004803603810190610b6691906142fa565b6120b3565b005b348015610b78575f5ffd5b50610b81612141565b604051610b8e919061405b565b60405180910390f35b348015610ba2575f5ffd5b50610bbd6004803603810190610bb891906141f8565b612154565b005b348015610bca575f5ffd5b50610be56004803603810190610be091906141f8565b612284565b005b348015610bf2575f5ffd5b50610bfb612308565b604051610c0891906141df565b60405180910390f35b348015610c1c575f5ffd5b50610c2561230e565b604051610c3291906142b6565b60405180910390f35b610c43612333565b600a60189054906101000a900460ff1615610c8a576040517fcfa6d87800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d179190614377565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc09190614377565b6040518363ffffffff1660e01b8152600401610ddd9291906143a2565b6020604051808303815f875af1158015610df9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1d9190614377565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e8860065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016123ba565b610ed3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61244b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f1a3061154e565b5f5f610f2461164b565b426040518863ffffffff1660e01b8152600401610f4696959493929190614402565b60606040518083038185885af1158015610f62573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f879190614475565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110269291906144c5565b6020604051808303815f875af1158015611042573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110669190614500565b506001600a60186101000a81548160ff02191690831515021790555043600b8190555042600c819055507f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e266960405160405180910390a1565b6060600480546110cd90614558565b80601f01602080910402602001604051908101604052809291908181526020018280546110f990614558565b80156111445780601f1061111b57610100808354040283529160200191611144565b820191905f5260205f20905b81548152906001019060200180831161112757829003601f168201915b5050505050905090565b5f5f61115861245d565b905061116581858561244b565b600191505092915050565b611178612333565b5f5f90505b838390508110156111c6576111b984848381811061119e5761119d614588565b5b90506020020160208101906111b391906141f8565b83612464565b808060010191505061117d565b50505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600354905090565b611201612333565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611266576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc7437ce8158bef32791d96ac3bc7bc4bfb58de297e65d1f290f147ffe25c0f9360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161131d9291906143a2565b60405180910390a15050565b5f5f61133361245d565b90506113408582856124f5565b61134b858585612587565b60019150509392505050565b60135481565b600a60189054906101000a900460ff1681565b5f6012905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015602052805f5260405f205f915054906101000a900460ff1681565b60125481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6016602052805f5260405f205f915054906101000a900460ff1681565b5f81565b611414612333565b5f600a60146101000a81548160ff0219169083151502179055507ff771b1e218dc92494b39e21852f9c24c3b448d6697c2b485cc1f0cff3c9ec7815f60405161145d919061405b565b60405180910390a1565b61146f612333565b80600a60166101000a81548160ff0219169083151502179055507f06cf69227e5c2b5a71319bc3784f6a5355ea0ba2a69bc4c39d64413dfa5a012b816040516114b8919061405b565b60405180910390a150565b6017602052805f5260405f205f915054906101000a900460ff1681565b6114e8612333565b5f600a60156101000a81548160ff0219169083151502179055507f381fb4c4aa72df83c60e7e567b9b6faf3fc2b05a6da932da9f071d63442c828f5f604051611531919061405b565b60405180910390a1565b600a60159054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600e5481565b6115a2612333565b6115ab5f612677565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6115e0612333565b600a60199054906101000a900460ff1661162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906145ff565b60405180910390fd5b5f600a60196101000a81548160ff021916908315150217905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61167a612333565b600b54430361168f5780601281905550611713565b6012548111156116cb576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6012549050816012819055507f5fcc0eea159d45a3b8d481be746c9beed251431a542a5fed4484be37ab783e8d828260405161170992919061461d565b60405180910390a1505b50565b600a60199054906101000a900460ff1681565b60606005805461173890614558565b80601f016020809104026020016040519081016040528092919081815260200182805461176490614558565b80156117af5780601f10611786576101008083540402835291602001916117af565b820191905f5260205f20905b81548152906001019060200180831161179257829003601f168201915b5050505050905090565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117e6612333565b600a60199054906101000a900460ff16611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c9061468e565b60405180910390fd5b5f5f90505b83839050811015611b2c5760185f85858481811061185b5761185a614588565b5b905060200201602081019061187091906141f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561193657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1684848381811061190857611907614588565b5b905060200201602081019061191d91906141f8565b73ffffffffffffffffffffffffffffffffffffffff1614155b801561199557503073ffffffffffffffffffffffffffffffffffffffff1684848381811061196757611966614588565b5b905060200201602081019061197c91906141f8565b73ffffffffffffffffffffffffffffffffffffffff1614155b80156119f457505f73ffffffffffffffffffffffffffffffffffffffff168484838181106119c6576119c5614588565b5b90506020020160208101906119db91906141f8565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015611ae8575060165f858584818110611a1157611a10614588565b5b9050602002016020810190611a2691906141f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611ae7575060175f858584818110611a8a57611a89614588565b5b9050602002016020810190611a9f91906141f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b5b15611b1f57611b1e848483818110611b0357611b02614588565b5b9050602002016020810190611b1891906141f8565b836126ed565b5b808060010191505061183a565b50505050565b5f5f611b3c61245d565b9050611b49818585612587565b600191505092915050565b60145481565b611b62612333565b5f5f90505b83839050811015611bb057611ba3848483818110611b8857611b87614588565b5b9050602002016020810190611b9d91906141f8565b8361277e565b8080600101915050611b67565b50505050565b611bbe612333565b5f611bc76111f0565b9050620f4240600182611bda91906146d9565b611be49190614747565b821015611c1d576040517f1fbaba3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8600582611c2d91906146d9565b611c379190614747565b821115611c70576040517ffd7850ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6011549050826011819055507f190dc7c30bc62ef30e35c5f5512ad715a1bd03230f2d89c965249246c8d8ecca8382604051611cae92919061461d565b60405180910390a1505050565b611cc3612333565b611ccd815f6126ed565b50565b6018602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b611cfb612333565b5f3390505f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e16575f4791505f8211611d70576040517f4870bf9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1682604051611d94906147a4565b5f6040518083038185875af1925050503d805f8114611dce576040519150601f19603f3d011682016040523d82523d5f602084013e611dd3565b606091505b50508091505080611e10576040517f6730ca4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50611f46565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e4f91906142b6565b602060405180830381865afa158015611e6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8e91906147b8565b90505f8111611ec9576040517fdf95788300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611f049291906144c5565b6020604051808303815f875af1158015611f20573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f449190614500565b505b7f07c81a5e6d155913a9ed2ce53630058179c89fc94bb5de130620b0245c9f6a0b8382604051611f779291906144c5565b60405180910390a1505050565b600b5481565b611f92612333565b601454811115611fce576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6014549050816014819055507f8fd531ce6f3cbc5b8cc01a0413b630e3f11569780ee5cf8d0c78e03bca30bc25828260405161200c92919061461d565b60405180910390a15050565b600a60149054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b6120bb612333565b6013548111156120f7576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6013549050816013819055507f125b37650f21d088600cef1223439f6a8bd70800debfd486c503a8a2d19d4b01828260405161213592919061461d565b60405180910390a15050565b600a60169054906101000a900460ff1681565b61215c612333565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121c1576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe20a721838fcbbb3840bd5d97dde1ffeb479fe73d75736fa6fdfc0f220aae00560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516122789291906143a2565b60405180910390a15050565b61228c612333565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122fc575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122f391906142b6565b60405180910390fd5b61230581612677565b50565b60105481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61233b61245d565b73ffffffffffffffffffffffffffffffffffffffff1661235961164b565b73ffffffffffffffffffffffffffffffffffffffff16146123b85761237c61245d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123af91906142b6565b60405180910390fd5b565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab828260405161243f9291906147e3565b60405180910390a15050565b612458838383600161280f565b505050565b5f33905090565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282826040516124e99291906147e3565b60405180910390a15050565b5f612500848461202b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125815781811015612572578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016125699392919061480a565b60405180910390fd5b61258084848484035f61280f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f7575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee91906142b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612667575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161265e91906142b6565b60405180910390fd5b6126728383836129de565b505050565b5f61268061164b565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146126ca576126bf815f61277e565b6126c9815f612464565b5b6126d582600161277e565b6126e0826001612464565b6126e9826136fc565b5050565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507ff7f8b40d08076851dfb7cfd6c584ae9a829a570f264abee45e0d7ca342ae8dc882826040516127729291906147e3565b60405180910390a15050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782826040516128039291906147e3565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361287f575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161287691906142b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ef575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128e691906142b6565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156129d8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516129cf91906141df565b60405180910390a35b50505050565b5f3390505f32905060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612a67576040517fe6a6c0d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480612ae8575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612b1e576040517fe6a6c0d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612b8357508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80612bd5575060155f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612c0b576040517fe6a6c0d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60189054906101000a900460ff1680612c6c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612cbd575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612cf3576040517f8dda39df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a60149054906101000a900460ff168015612d1d5750600a60179054906101000a900460ff16155b8015612dc1575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612dbf575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b9050801561338c57612dd161164b565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612e3f5750612e0f61164b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e7757505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612eb1575061dead73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561338b57600a60159054906101000a900460ff16156130d5577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f74575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156130d457600343612f86919061483f565b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541080156130195750600343612fd9919061483f565b60195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b61304f576040517fc069bb4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4360195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504360195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613172575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561320757600e548411156131b3576040517fb19dae1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546131bf8661154e565b856131ca9190614872565b1115613202576040517fd867451100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61338a565b60185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132a4575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132ea57600f548411156132e5576040517fe2a90e1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613389565b60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613388576010546133448661154e565b8561334f9190614872565b1115613387576040517fd867451100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5b5b5f600a60169054906101000a900460ff1680156133b65750600a60179054906101000a900460ff16155b801561345a575060165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613458575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015613653575f5f905060185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134bd57505f601354115b156134e3576064601354876134d291906146d9565b6134dc9190614747565b905061362f565b60185f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561353a57505f601254115b156135605760646012548761354f91906146d9565b6135599190614747565b905061362e565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156135fe575060185f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561360b57505f601454115b1561362d5760646014548761362091906146d9565b61362a9190614747565b90505b5b5b5f811115613651578086613643919061483f565b95506136508830836137bd565b5b505b5f61365d3061154e565b90505f60115482101590508280156136bc575060185f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136c55750805b156136e657600d544311156136e5576136dd826139d9565b43600d819055505b5b6136f18989896137bd565b505050505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361380d578060035f8282546138019190614872565b925050819055506138dd565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613897578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161388e9392919061480a565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613924578060035f828254039250508190555061396f565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139cc91906141df565b60405180910390a3505050565b6001600a60176101000a81548160ff0219169083151502179055505f5f600267ffffffffffffffff811115613a1157613a106148a5565b5b604051908082528060200260200182016040528015613a3f5781602001602082028036833780820191505090505b50905030815f81518110613a5657613a55614588565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b1d9190614377565b81600181518110613b3157613b30614588565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014601154613b7b91906146d9565b905080841115613b89578093505b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b8152600401613bea959493929190614989565b5f604051808303815f87803b158015613c01575f5ffd5b505af1158015613c13573d5f5f3e3d5ffd5b505050505f4790505f6103e861013b83613c2d91906146d9565b613c379190614747565b90505f6103e860b484613c4a91906146d9565b613c549190614747565b90505f6103e8606485613c6791906146d9565b613c719190614747565b90505f6103e861019586613c8591906146d9565b613c8f9190614747565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613cd6906147a4565b5f6040518083038185875af1925050503d805f8114613d10576040519150601f19603f3d011682016040523d82523d5f602084013e613d15565b606091505b50508098505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d60906147a4565b5f6040518083038185875af1925050503d805f8114613d9a576040519150601f19603f3d011682016040523d82523d5f602084013e613d9f565b606091505b505080985050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613dea906147a4565b5f6040518083038185875af1925050503d805f8114613e24576040519150601f19603f3d011682016040523d82523d5f602084013e613e29565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613e74906147a4565b5f6040518083038185875af1925050503d805f8114613eae576040519150601f19603f3d011682016040523d82523d5f602084013e613eb3565b606091505b50508098505050505050505050505f600a60176101000a81548160ff02191690831515021790555050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613f2082613ede565b613f2a8185613ee8565b9350613f3a818560208601613ef8565b613f4381613f06565b840191505092915050565b5f6020820190508181035f830152613f668184613f16565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f9f82613f76565b9050919050565b613faf81613f95565b8114613fb9575f5ffd5b50565b5f81359050613fca81613fa6565b92915050565b5f819050919050565b613fe281613fd0565b8114613fec575f5ffd5b50565b5f81359050613ffd81613fd9565b92915050565b5f5f6040838503121561401957614018613f6e565b5b5f61402685828601613fbc565b925050602061403785828601613fef565b9150509250929050565b5f8115159050919050565b61405581614041565b82525050565b5f60208201905061406e5f83018461404c565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261409557614094614074565b5b8235905067ffffffffffffffff8111156140b2576140b1614078565b5b6020830191508360208202830111156140ce576140cd61407c565b5b9250929050565b6140de81614041565b81146140e8575f5ffd5b50565b5f813590506140f9816140d5565b92915050565b5f5f5f6040848603121561411657614115613f6e565b5b5f84013567ffffffffffffffff81111561413357614132613f72565b5b61413f86828701614080565b93509350506020614152868287016140eb565b9150509250925092565b5f819050919050565b5f61417f61417a61417584613f76565b61415c565b613f76565b9050919050565b5f61419082614165565b9050919050565b5f6141a182614186565b9050919050565b6141b181614197565b82525050565b5f6020820190506141ca5f8301846141a8565b92915050565b6141d981613fd0565b82525050565b5f6020820190506141f25f8301846141d0565b92915050565b5f6020828403121561420d5761420c613f6e565b5b5f61421a84828501613fbc565b91505092915050565b5f5f5f6060848603121561423a57614239613f6e565b5b5f61424786828701613fbc565b935050602061425886828701613fbc565b925050604061426986828701613fef565b9150509250925092565b5f60ff82169050919050565b61428881614273565b82525050565b5f6020820190506142a15f83018461427f565b92915050565b6142b081613f95565b82525050565b5f6020820190506142c95f8301846142a7565b92915050565b5f602082840312156142e4576142e3613f6e565b5b5f6142f1848285016140eb565b91505092915050565b5f6020828403121561430f5761430e613f6e565b5b5f61431c84828501613fef565b91505092915050565b5f5f6040838503121561433b5761433a613f6e565b5b5f61434885828601613fbc565b925050602061435985828601613fbc565b9150509250929050565b5f8151905061437181613fa6565b92915050565b5f6020828403121561438c5761438b613f6e565b5b5f61439984828501614363565b91505092915050565b5f6040820190506143b55f8301856142a7565b6143c260208301846142a7565b9392505050565b5f819050919050565b5f6143ec6143e76143e2846143c9565b61415c565b613fd0565b9050919050565b6143fc816143d2565b82525050565b5f60c0820190506144155f8301896142a7565b61442260208301886141d0565b61442f60408301876143f3565b61443c60608301866143f3565b61444960808301856142a7565b61445660a08301846141d0565b979650505050505050565b5f8151905061446f81613fd9565b92915050565b5f5f5f6060848603121561448c5761448b613f6e565b5b5f61449986828701614461565b93505060206144aa86828701614461565b92505060406144bb86828701614461565b9150509250925092565b5f6040820190506144d85f8301856142a7565b6144e560208301846141d0565b9392505050565b5f815190506144fa816140d5565b92915050565b5f6020828403121561451557614514613f6e565b5b5f614522848285016144ec565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061456f57607f821691505b6020821081036145825761458161452b565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f416c72656164792044697361626c6564000000000000000000000000000000005f82015250565b5f6145e9601083613ee8565b91506145f4826145b5565b602082019050919050565b5f6020820190508181035f830152614616816145dd565b9050919050565b5f6040820190506146305f8301856141d0565b61463d60208301846141d0565b9392505050565b7f43616e277420416464206d6f726520626f7473206e6f770000000000000000005f82015250565b5f614678601783613ee8565b915061468382614644565b602082019050919050565b5f6020820190508181035f8301526146a58161466c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6146e382613fd0565b91506146ee83613fd0565b92508282026146fc81613fd0565b91508282048414831517614713576147126146ac565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61475182613fd0565b915061475c83613fd0565b92508261476c5761476b61471a565b5b828204905092915050565b5f81905092915050565b50565b5f61478f5f83614777565b915061479a82614781565b5f82019050919050565b5f6147ae82614784565b9150819050919050565b5f602082840312156147cd576147cc613f6e565b5b5f6147da84828501614461565b91505092915050565b5f6040820190506147f65f8301856142a7565b614803602083018461404c565b9392505050565b5f60608201905061481d5f8301866142a7565b61482a60208301856141d0565b61483760408301846141d0565b949350505050565b5f61484982613fd0565b915061485483613fd0565b925082820390508181111561486c5761486b6146ac565b5b92915050565b5f61487c82613fd0565b915061488783613fd0565b925082820190508082111561489f5761489e6146ac565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61490481613f95565b82525050565b5f61491583836148fb565b60208301905092915050565b5f602082019050919050565b5f614937826148d2565b61494181856148dc565b935061494c836148ec565b805f5b8381101561497c578151614963888261490a565b975061496e83614921565b92505060018101905061494f565b5085935050505092915050565b5f60a08201905061499c5f8301886141d0565b6149a960208301876143f3565b81810360408301526149bb818661492d565b90506149ca60608301856142a7565b6149d760808301846141d0565b969550505050505056fea264697066735822122099150a52ef53585f39df1f9864cdf7b90e87bcee9e4c9c0af9d1a1c26e7eaa7864736f6c634300081b0033
Verified Source Code Partial Match
Compiler: v0.8.27+commit.40a35a09
EVM: cancun
Optimization: No
CreateAI.sol 791 lines
/*
Create AI - [CREATE]
The Ultimate AI Ecosystem suite for content creators and game developers. Advanced tools Powering an immersive world of creative ideas and content
WEB: https://create-ai.io/
Twitter(X): https://x.com/createai_
PORTAL: https://t.me/createai_portal
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.27;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
interface IERC20Errors {
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return 18;
}
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(address owner, address spender)
public
view
virtual
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 value)
public
virtual
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function _transfer(
address from,
address to,
uint256 value
) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
function _update(
address from,
address to,
uint256 value
) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
_totalSupply -= value;
}
} else {
unchecked {
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
function _approve(
address owner,
address spender,
uint256 value
) internal {
_approve(owner, spender, value, true);
}
function _approve(
address owner,
address spender,
uint256 value,
bool emitEvent
) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
function _spendAllowance(
address owner,
address spender,
uint256 value
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(
spender,
currentAllowance,
value
);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IUniswapV2Router {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
contract CreateAI is Ownable, ERC20 {
IUniswapV2Router public immutable uniswapV2Router;
address public constant ZERO_ADDRESS = address(0);
address public constant DEAD_ADDRESS = address(0xdEaD);
address public uniswapV2Pair;
address public operationsWallet;
address public marketingWallet;
address public adminWallet;
address public expenseWallet;
bool public isLimitsEnabled;
bool public isCooldownEnabled;
bool public isTaxEnabled;
bool private inSwapBack;
bool public isLaunched;
bool public CanAddBots;
uint256 public launchBlock;
uint256 public launchTime;
uint256 private lastSwapBackExecutionBlock;
uint256 public maxBuy;
uint256 public maxSell;
uint256 public maxWallet;
uint256 public swapTokensAtAmount;
uint256 public buyFee;
uint256 public sellFee;
uint256 public transferFee;
mapping(address => bool) public isBot;
mapping(address => bool) public isExcludedFromFees;
mapping(address => bool) public isExcludedFromLimits;
mapping(address => bool) public automatedMarketMakerPairs;
mapping(address => uint256) private _holderLastTransferTimestamp;
event Launch();
event SetOperationsWallet(address newWallet, address oldWallet);
event SetmarketingWallet(address newWallet, address oldWallet);
event SetLimitsEnabled(bool status);
event SetCooldownEnabled(bool status);
event SetTaxesEnabled(bool status);
event SetMaxBuy(uint256 amount);
event SetMaxSell(uint256 amount);
event SetMaxWallet(uint256 amount);
event SetSwapTokensAtAmount(uint256 newValue, uint256 oldValue);
event SetBuyFees(uint256 newValue, uint256 oldValue);
event SetSellFees(uint256 newValue, uint256 oldValue);
event SetTransferFees(uint256 newValue, uint256 oldValue);
event ExcludeFromFees(address account, bool isExcluded);
event ExcludeFromLimits(address account, bool isExcluded);
event SetBots(address account, bool isExcluded);
event SetAutomatedMarketMakerPair(address pair, bool value);
event WithdrawStuckTokens(address token, uint256 amount);
error AlreadyLaunched();
error AddressZero();
error AmountTooLow();
error AmountTooHigh();
error FeeTooHigh();
error AMMAlreadySet();
error NoNativeTokens();
error NoTokens();
error FailedToWithdrawNativeTokens();
error BotDetected();
error TransferDelay();
error MaxBuyAmountExceed();
error MaxSellAmountExceed();
error MaxWalletAmountExceed();
error NotLaunched();
modifier lockSwapBack() {
inSwapBack = true;
_;
inSwapBack = false;
}
constructor() Ownable(msg.sender) ERC20("Create AI", "CREATE") {
address sender = msg.sender;
_mint(sender, 100_000_000 ether);
uint256 totalSupply = totalSupply();
operationsWallet = 0x94e817a2d10D5D7fd3268480F4a263c1b6951a73; //31.5
marketingWallet = 0x6816559Da854ad4272f6ABF3999D770F58487A02; //40.5
adminWallet = 0x65a14Ace692bA6Df5D3A31AFC224a22fB504219B; //18
expenseWallet = 0x35EaeA96Bc652925C8084F723365069DE78B4dB6; //10
maxBuy = (totalSupply * 12) / 1000;
maxSell = (totalSupply * 12) / 1000;
maxWallet = (totalSupply * 12) / 1000;
swapTokensAtAmount = (totalSupply * 375) / 1000000;
isLimitsEnabled = true;
isCooldownEnabled = true;
isTaxEnabled = true;
CanAddBots = true;
buyFee = 20;
sellFee = 70;
transferFee = 70;
uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_excludeFromFees(address(this), true);
_excludeFromFees(address(0xdead), true);
_excludeFromFees(sender, true);
_excludeFromFees(operationsWallet, true);
_excludeFromFees(marketingWallet, true);
_excludeFromLimits(address(this), true);
_excludeFromLimits(address(0xdead), true);
_excludeFromLimits(sender, true);
_excludeFromLimits(operationsWallet, true);
_excludeFromLimits(marketingWallet, true);
}
receive() external payable {}
fallback() external payable {}
function _transferOwnership(address newOwner) internal override {
address oldOwner = owner();
if (oldOwner != address(0)) {
_excludeFromFees(oldOwner, false);
_excludeFromLimits(oldOwner, false);
}
_excludeFromFees(newOwner, true);
_excludeFromLimits(newOwner, true);
super._transferOwnership(newOwner);
}
function launch() external onlyOwner {
require(!isLaunched, AlreadyLaunched());
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
_setAutomatedMarketMakerPair(uniswapV2Pair, true);
_approve(address(this), address(uniswapV2Router), type(uint256).max);
uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
isLaunched = true;
launchBlock = block.number;
launchTime = block.timestamp;
emit Launch();
}
function setOperationsWallet(address _operationsWallet) external onlyOwner {
require(_operationsWallet != address(0), AddressZero());
address oldWallet = operationsWallet;
operationsWallet = _operationsWallet;
emit SetOperationsWallet(operationsWallet, oldWallet);
}
function setmarketingWallet(address _marketingWallet)
external
onlyOwner
{
require(_marketingWallet != address(0), AddressZero());
address oldWallet = marketingWallet;
marketingWallet = _marketingWallet;
emit SetmarketingWallet(marketingWallet, oldWallet);
}
function RemoveLimits() external onlyOwner {
isLimitsEnabled = false;
emit SetLimitsEnabled(false);
}
function RemoveCooldown() external onlyOwner {
isCooldownEnabled = false;
emit SetCooldownEnabled(false);
}
function setTaxesEnabled(bool value) external onlyOwner {
isTaxEnabled = value;
emit SetTaxesEnabled(value);
}
function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
uint256 _totalSupply = totalSupply();
require(amount >= (_totalSupply * 1) / 1000000, AmountTooLow());
require(amount <= (_totalSupply * 5) / 1000, AmountTooHigh());
uint256 oldValue = swapTokensAtAmount;
swapTokensAtAmount = amount;
emit SetSwapTokensAtAmount(amount, oldValue);
}
function ReduceBuyFees(uint256 _buyFee) external onlyOwner {
if (block.number == launchBlock){
buyFee = _buyFee;
} else {
require(_buyFee <= buyFee, FeeTooHigh());
uint256 oldValue = buyFee;
buyFee = _buyFee;
emit SetBuyFees(_buyFee, oldValue);
}}
function ReduceSellFees(uint256 _sellFee) external onlyOwner {
require(_sellFee <= sellFee, FeeTooHigh());
uint256 oldValue = sellFee;
sellFee = _sellFee;
emit SetSellFees(_sellFee, oldValue);
}
function ReduceTransferFees(uint256 _transferFee) external onlyOwner {
require(_transferFee <= transferFee, FeeTooHigh());
uint256 oldValue = transferFee;
transferFee = _transferFee;
emit SetTransferFees(_transferFee, oldValue);
}
function excludeFromFees(address[] calldata accounts, bool value)
external
onlyOwner
{
for (uint256 i = 0; i < accounts.length; i++) {
_excludeFromFees(accounts[i], value);
}
}
function excludeFromLimits(address[] calldata accounts, bool value)
external
onlyOwner
{
for (uint256 i = 0; i < accounts.length; i++) {
_excludeFromLimits(accounts[i], value);
}
}
function DisableAddBots() external onlyOwner {
require(CanAddBots, "Already Disabled");
CanAddBots = false;
}
function setBots(address[] calldata accounts, bool value)
external
onlyOwner
{
require(CanAddBots, "Can't Add more bots now");
for (uint256 i = 0; i < accounts.length; i++) {
if (
(!automatedMarketMakerPairs[accounts[i]]) &&
(accounts[i] != address(uniswapV2Router)) &&
(accounts[i] != address(this)) &&
(accounts[i] != ZERO_ADDRESS) &&
(!isExcludedFromFees[accounts[i]] &&
!isExcludedFromLimits[accounts[i]])
) _setBots(accounts[i], value);
}
}
function RemoveBotWallet(address _wallet) external onlyOwner {
_setBots(_wallet, false);
}
function withdrawStuckTokens(address _token) external onlyOwner {
address sender = msg.sender;
uint256 amount;
if (_token == ZERO_ADDRESS) {
bool success;
amount = address(this).balance;
require(amount > 0, NoNativeTokens());
(success, ) = address(sender).call{value: amount}("");
require(success, FailedToWithdrawNativeTokens());
} else {
amount = IERC20(_token).balanceOf(address(this));
require(amount > 0, NoTokens());
IERC20(_token).transfer(msg.sender, amount);
}
emit WithdrawStuckTokens(_token, amount);
}
function _update(
address from,
address to,
uint256 amount
) internal virtual override {
address sender = msg.sender;
address origin = tx.origin;
require(!isBot[from], BotDetected());
require(sender == from || !isBot[sender], BotDetected());
require(
origin == from || origin == sender || !isBot[origin],
BotDetected()
);
require(
isLaunched ||
isExcludedFromLimits[from] ||
isExcludedFromLimits[to],
NotLaunched()
);
bool limits = isLimitsEnabled &&
!inSwapBack &&
!(isExcludedFromLimits[from] || isExcludedFromLimits[to]);
if (limits) {
if (
from != owner() &&
to != owner() &&
to != ZERO_ADDRESS &&
to != DEAD_ADDRESS
) {
if (isCooldownEnabled) {
if (to != address(uniswapV2Router) && to != uniswapV2Pair) {
require(
_holderLastTransferTimestamp[origin] <
block.number - 3 &&
_holderLastTransferTimestamp[to] <
block.number - 3,
TransferDelay()
);
_holderLastTransferTimestamp[origin] = block.number;
_holderLastTransferTimestamp[to] = block.number;
}
}
if (
automatedMarketMakerPairs[from] && !isExcludedFromLimits[to]
) {
require(amount <= maxBuy, MaxBuyAmountExceed());
require(
amount + balanceOf(to) <= maxWallet,
MaxWalletAmountExceed()
);
} else if (
automatedMarketMakerPairs[to] && !isExcludedFromLimits[from]
) {
require(amount <= maxSell, MaxSellAmountExceed());
} else if (!isExcludedFromLimits[to]) {
require(
amount + balanceOf(to) <= maxWallet,
MaxWalletAmountExceed()
);
}
}
}
bool takeFee = isTaxEnabled &&
!inSwapBack &&
!(isExcludedFromFees[from] || isExcludedFromFees[to]);
if (takeFee) {
uint256 fees = 0;
if (automatedMarketMakerPairs[to] && sellFee > 0) {
fees = (amount * sellFee) / 100;
} else if (automatedMarketMakerPairs[from] && buyFee > 0) {
fees = (amount * buyFee) / 100;
} else if (
!automatedMarketMakerPairs[to] &&
!automatedMarketMakerPairs[from] &&
transferFee > 0
) {
fees = (amount * transferFee) / 100;
}
if (fees > 0) {
amount -= fees;
super._update(from, address(this), fees);
}
}
uint256 balance = balanceOf(address(this));
bool shouldSwap = balance >= swapTokensAtAmount;
if (takeFee && !automatedMarketMakerPairs[from] && shouldSwap) {
if (block.number > lastSwapBackExecutionBlock) {
_swapBack(balance);
lastSwapBackExecutionBlock = block.number;
}
}
super._update(from, to, amount);
}
function _swapBack(uint256 balance) internal virtual lockSwapBack {
bool success;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
uint256 maxSwapAmount = swapTokensAtAmount * 20;
if (balance > maxSwapAmount) {
balance = maxSwapAmount;
}
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
balance,
0,
path,
address(this),
block.timestamp
);
uint256 ethBalance = address(this).balance;
uint256 ethForOperations = (ethBalance * 315) / 1000;
uint256 ethForAdmin = (ethBalance * 180) / 1000;
uint256 ethForExpense = (ethBalance * 100) / 1000;
uint256 ethForMarketing = (ethBalance * 405) / 1000;
(success, ) = address(operationsWallet).call{value: ethForOperations}(
""
);
(success, ) = address(adminWallet).call{value: ethForAdmin}(
""
);
(success, ) = address(expenseWallet).call{value: ethForExpense}(
""
);
(success, ) = address(marketingWallet).call{value: ethForMarketing}(
""
);
}
function _excludeFromFees(address account, bool value) internal virtual {
isExcludedFromFees[account] = value;
emit ExcludeFromFees(account, value);
}
function _excludeFromLimits(address account, bool value) internal virtual {
isExcludedFromLimits[account] = value;
emit ExcludeFromLimits(account, value);
}
function _setBots(address account, bool value) internal virtual {
isBot[account] = value;
emit SetBots(account, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value)
internal
virtual
{
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
}
Read Contract
CanAddBots 0x92644352 → bool
DEAD_ADDRESS 0x4e6fd6c4 → address
ZERO_ADDRESS 0x538ba4f9 → address
adminWallet 0x36b19cd7 → address
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyFee 0x47062402 → uint256
decimals 0x313ce567 → uint8
expenseWallet 0x99667744 → address
isBot 0x3bbac579 → bool
isCooldownEnabled 0x6ca541e5 → bool
isExcludedFromFees 0x4fbee193 → bool
isExcludedFromLimits 0x5cce86cd → bool
isLaunched 0x307aebc9 → bool
isLimitsEnabled 0xd5759ba3 → bool
isTaxEnabled 0xe6c1909b → bool
launchBlock 0xd00efb2f → uint256
launchTime 0x790ca413 → uint256
marketingWallet 0x75f0a874 → address
maxBuy 0x70db69d6 → uint256
maxSell 0xb8eb3546 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
operationsWallet 0xfd72e22a → address
owner 0x8da5cb5b → address
sellFee 0x2b14ca56 → uint256
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
transferFee 0xacb2ad6f → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 21 functions
These functions modify contract state and require a wallet transaction to execute.
DisableAddBots 0x8c2d86cb
No parameters
ReduceBuyFees 0x8e84afec
uint256 _buyFee
ReduceSellFees 0xe5c6ca3f
uint256 _sellFee
ReduceTransferFees 0xd107439b
uint256 _transferFee
RemoveBotWallet 0xb2f3bba2
address _wallet
RemoveCooldown 0x62b09c14
No parameters
RemoveLimits 0x56cd40e7
No parameters
approve 0x095ea7b3
address spender
uint256 value
returns: bool
excludeFromFees 0xad29ffde
address[] accounts
bool value
excludeFromLimits 0x106a5a8f
address[] accounts
bool value
launch 0x01339c21
No parameters
renounceOwnership 0x715018a6
No parameters
setBots 0x9c0db5f3
address[] accounts
bool value
setOperationsWallet 0xee5ecc89
address _operationsWallet
setSwapTokensAtAmount 0xafa4f3b2
uint256 amount
setTaxesEnabled 0x59512ab0
bool value
setmarketingWallet 0x22461173
address _marketingWallet
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool
transferOwnership 0xf2fde38b
address newOwner
withdrawStuckTokens 0xcb963728
address _token
Recent Transactions
No transactions found for this address