Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x3B604747ad1720C01ded0455728b62c0d2F100F0
Balance 0.183916 ETH
Nonce 1
Code Size 13973 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

13973 bytes
0x6080604052600436106103b05760003560e01c806370a08231116101e7578063a9059cbb1161010d578063d8c6404b116100a0578063f2fde38b1161006f578063f2fde38b14610b28578063f887ea4014610b48578063f8a194fc14610b68578063fd69c21514610b7e57600080fd5b8063d8c6404b14610a92578063dd62ed3e14610aac578063e01af92c14610af2578063e2f4560514610b1257600080fd5b8063bbf1af95116100dc578063bbf1af9514610a26578063cbf7e88814610a46578063d4cdeb3c14610a5c578063d7c94efd14610a7c57600080fd5b8063a9059cbb146109b0578063aacebbe3146109d0578063b225d4b7146109f0578063bbde77c114610a1057600080fd5b806388f820201161018557806391053d941161015457806391053d941461091d57806395d89b411461093d578063a457c2d714610970578063a8aa1b311461099057600080fd5b806388f82020146108915780638c0b5e22146108c95780638da5cb5b146108df5780638ea5220f146108fd57600080fd5b806379c4903c116101c157806379c4903c146108255780637cb332bb1461083b5780637d8dbe241461085b578063872f59691461087b57600080fd5b806370a08231146107d0578063715018a6146107f057806375f0a8741461080557600080fd5b8063450dde46116102d75780635a565c391161026a578063690c22ca11610239578063690c22ca1461076c5780636b67c4df146107825780636ddd171314610798578063704ce43e146107ba57600080fd5b80635a565c391461070a57806361a4036e146107205780636612e66f146107365780636827e7641461075657600080fd5b806352390c02116102a657806352390c02146106635780635342acb414610683578063589d89dc146106bc57806359927044146106d257600080fd5b8063450dde46146105e95780634549b03914610603578063455a439614610623578063457ffca21461064357600080fd5b80631cdd3be31161034f578063361ff9bf1161031e578063361ff9bf146105695780633685d4191461058957806339509351146105a957806342966c68146105c957600080fd5b80631cdd3be3146104dd57806323b872dd1461050d5780632d8381191461052d578063313ce5671461054d57600080fd5b806309c58fcd1161038b57806309c58fcd146104545780631264c9c41461047357806318160ddd146104935780631816467f146104bd57600080fd5b8062e6be7b146103bc57806306fdde03146103de578063095ea7b31461042457600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103dc6103d73660046131c4565b610b9e565b005b3480156103ea57600080fd5b5060408051808201909152600b81526a5741474d492047414d455360a81b60208201525b60405161041b919061340f565b60405180910390f35b34801561043057600080fd5b5061044461043f3660046131fe565b610c98565b604051901515815260200161041b565b34801561046057600080fd5b50600a5461044490610100900460ff1681565b34801561047f57600080fd5b506103dc61048e3660046132d9565b610caf565b34801561049f57600080fd5b506c1bc49558fd67ce0b69c00000005b60405190815260200161041b565b3480156104c957600080fd5b506103dc6104d83660046131c4565b610cf3565b3480156104e957600080fd5b506104446104f83660046131c4565b601e6020526000908152604090205460ff1681565b34801561051957600080fd5b50610444610528366004613263565b610e0f565b34801561053957600080fd5b506104af6105483660046132f4565b610e78565b34801561055957600080fd5b506040516012815260200161041b565b34801561057557600080fd5b506103dc61058436600461335e565b610efc565b34801561059557600080fd5b506103dc6105a43660046131c4565b610fb1565b3480156105b557600080fd5b506104446105c43660046131fe565b611165565b3480156105d557600080fd5b506103dc6105e43660046132f4565b61119b565b3480156105f557600080fd5b50600a546104449060ff1681565b34801561060f57600080fd5b506104af61061e36600461330d565b6113d2565b34801561062f57600080fd5b506103dc61063e3660046132a4565b611473565b34801561064f57600080fd5b506103dc61065e366004613390565b6114c8565b34801561066f57600080fd5b506103dc61067e3660046131c4565b611584565b34801561068f57600080fd5b5061044461069e3660046131c4565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156106c857600080fd5b506104af60075481565b3480156106de57600080fd5b506005546106f2906001600160a01b031681565b6040516001600160a01b03909116815260200161041b565b34801561071657600080fd5b506104af60175481565b34801561072c57600080fd5b506104af60165481565b34801561074257600080fd5b506103dc6107513660046132a4565b611622565b34801561076257600080fd5b506104af60115481565b34801561077857600080fd5b506104af600e5481565b34801561078e57600080fd5b506104af60105481565b3480156107a457600080fd5b50600a5461044490640100000000900460ff1681565b3480156107c657600080fd5b506104af60135481565b3480156107dc57600080fd5b506104af6107eb3660046131c4565b611677565b3480156107fc57600080fd5b506103dc6116d5565b34801561081157600080fd5b506003546106f2906001600160a01b031681565b34801561083157600080fd5b506104af60155481565b34801561084757600080fd5b506103dc6108563660046131c4565b611749565b34801561086757600080fd5b506103dc6108763660046132f4565b611866565b34801561088757600080fd5b506104af600d5481565b34801561089d57600080fd5b506104446108ac3660046131c4565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156108d557600080fd5b506104af60085481565b3480156108eb57600080fd5b506000546001600160a01b03166106f2565b34801561090957600080fd5b506004546106f2906001600160a01b031681565b34801561092957600080fd5b506103dc6109383660046132f4565b6118a8565b34801561094957600080fd5b5060408051808201909152600a8152695741474d4947414d455360b01b602082015261040e565b34801561097c57600080fd5b5061044461098b3660046131fe565b6118ea565b34801561099c57600080fd5b50601a546106f2906001600160a01b031681565b3480156109bc57600080fd5b506104446109cb3660046131fe565b611939565b3480156109dc57600080fd5b506103dc6109eb3660046131c4565b611946565b3480156109fc57600080fd5b506103dc610a0b3660046132f4565b611a68565b348015610a1c57600080fd5b506104af60095481565b348015610a3257600080fd5b506103dc610a413660046132d9565b611aaa565b348015610a5257600080fd5b506104af60185481565b348015610a6857600080fd5b50600a546104449062010000900460ff1681565b348015610a8857600080fd5b506104af60125481565b348015610a9e57600080fd5b50600c546104449060ff1681565b348015610ab857600080fd5b506104af610ac736600461322a565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b348015610afe57600080fd5b506103dc610b0d3660046132d9565b611afe565b348015610b1e57600080fd5b506104af600b5481565b348015610b3457600080fd5b506103dc610b433660046131c4565b611b48565b348015610b5457600080fd5b506019546106f2906001600160a01b031681565b348015610b7457600080fd5b506104af600f5481565b348015610b8a57600080fd5b506103dc610b993660046131fe565b611c32565b6000546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610bc8906134a6565b60405180910390fd5b6019546001600160a01b0382811691161415610c3b5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610bc8565b6019546040516001600160a01b03918216918316907fc4382ee892d64a85fffb798adefd9dd8fcdeb2b1ababe74b46cdae7fe88da4e090600090a3601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ca5338484611e1d565b5060015b92915050565b6000546001600160a01b03163314610cd95760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b038116610d445760405162461bcd60e51b8152600401610bc890613464565b6004546001600160a01b0383811691161415610db15760405162461bcd60e51b815260206004820152602660248201527f546865204465762077616c6c657420697320616c72656164792074686973206160448201526564647265737360d01b6064820152608401610bc8565b6004546040516001600160a01b03918216918416907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a350600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1c848484611f51565b610e6e8433610e6985604051806060016040528060288152602001613613602891396001600160a01b038a166000908152601d602090815260408083203384529091529020549190612421565b611e1d565b5060019392505050565b6000600654821115610edf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bc8565b6000610ee9612458565b9050610ef58382611d66565b9392505050565b6000546001600160a01b03163314610f265760405162461bcd60e51b8152600401610bc8906134a6565b6000610f3e82610f3885818989611d07565b90611d07565b9050806103e814610f9c5760405162461bcd60e51b815260206004820152602260248201527f546f74616c206d75737420626520657175616c20746f20313030302028313030604482015261252960f01b6064820152608401610bc8565b50601593909355601691909155601855601755565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff166110425760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bc8565b60005b60215481101561116157816001600160a01b03166021828154811061106c5761106c6135e7565b6000918252602090912001546001600160a01b0316141561114f576021805461109790600190613589565b815481106110a7576110a76135e7565b600091825260209091200154602180546001600160a01b0390921691839081106110d3576110d36135e7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601c8252604080822082905591805220805460ff191690556021805480611129576111296135d1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611159816135a0565b915050611045565b5050565b336000818152601d602090815260408083206001600160a01b03871684529091528120549091610ca5918590610e699086611d07565b600260015414156111ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b6002600155338061124b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bc8565b6002546001600160a01b03828116911614156112b35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610bc8565b60006112be82611677565b90508281101561131b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bc8565b600061132f611328612458565b859061247b565b6001600160a01b0384166000908152601b60205260409020549091506113559082611dc1565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff16156113bd576001600160a01b0383166000908152601c60205260409020546113a39085611dc1565b6001600160a01b0384166000908152601c60205260409020555b6113c88385836124fa565b5050600180555050565b60006c1bc49558fd67ce0b69c00000008311156114315760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bc8565b6000826114545760006114458560006125da565b50929550610ca9945050505050565b50601454600061146485836125da565b50919550610ca9945050505050565b6000546001600160a01b0316331461149d5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114f25760405162461bcd60e51b8152600401610bc8906134a6565b61150481610f38848187818b8b611d07565b60148190556064101561156d5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20466565732063616e6e6f7420626520677265617465722074686160448201526a6e2031302520283130302960a81b6064820152608401610bc8565b600f94909455601092909255601155601255601355565b6000546001600160a01b031633146115ae5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff16156116165760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420696e636c756465640000000000000000006044820152606401610bc8565b61161f81612650565b50565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038116600090815260208052604081205460ff16156116b357506001600160a01b03166000908152601c602052604090205490565b6001600160a01b0382166000908152601b6020526040902054610ca990610e78565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401610bc8906134a6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b03811661179a5760405162461bcd60e51b8152600401610bc890613464565b6005546001600160a01b03838116911614156118085760405162461bcd60e51b815260206004820152602760248201527f546865205465616d2077616c6c657420697320616c72656164792074686973206044820152666164647265737360c81b6064820152608401610bc8565b6005546040516001600160a01b03918216918416907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309590600090a350600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610bc8906134a6565b6118a281670de0b6b3a764000061356a565b60085550565b6000546001600160a01b031633146118d25760405162461bcd60e51b8152600401610bc8906134a6565b6118e481670de0b6b3a764000061356a565b60095550565b6000610ca53384610e698560405180606001604052806025815260200161363b60259139336000908152601d602090815260408083206001600160a01b038d1684529091529020549190612421565b6000610ca5338484611f51565b6000546001600160a01b031633146119705760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b0381166119975760405162461bcd60e51b8152600401610bc890613464565b6003546001600160a01b0383811691161415611a0a5760405162461bcd60e51b815260206004820152602c60248201527f546865204d61726b6574696e672077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610bc8565b6003546040516001600160a01b03918216918416907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a925760405162461bcd60e51b8152600401610bc8906134a6565b611aa481670de0b6b3a764000061356a565b600b5550565b6000546001600160a01b03163314611ad45760405162461bcd60e51b8152600401610bc8906134a6565b600c805460ff191682151590811790915560ff161561161f57611af842603c613530565b600e5550565b6000546001600160a01b03163314611b285760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b03163314611b725760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116611bd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c5c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015270746f2061207a65726f206164647265737360781b6064820152608401610bc8565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d02573d6000803e3d6000fd5b505050565b600080611d148385613530565b905083811015610ef55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc8565b6000808211611db75760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bc8565b610ef58284613548565b600082821115611e135760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bc8565b610ef58284613589565b6001600160a01b038316611e875760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610bc8565b6001600160a01b038216611eef5760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b6001600160a01b038381166000818152601d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611fb55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bc8565b6001600160a01b0382166120175760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bc8565b6002546001600160a01b03848116911614156120835760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865206275726e206164604482015264647265737360d81b6064820152608401610bc8565b600081116120e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc8565b600a54610100900460ff166121625760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610bc8565b6001600160a01b0383166000908152601e602052604090205460ff161580156121a457506001600160a01b0382166000908152601e602052604090205460ff16155b6121e65760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610bc8565b6019546001600160a01b0384811691161480159061221d57506001600160a01b0382166000908152601f602052604090205460ff16155b801561224257506001600160a01b0383166000908152601f602052604090205460ff16155b156122b5576008548111156122b55760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865204d6178206044820152722a3930b739b0b1ba34b7b71020b6b7bab73a1760691b6064820152608401610bc8565b60006009541180156122e057506001600160a01b0382166000908152601f602052604090205460ff16155b801561230557506001600160a01b0383166000908152601f602052604090205460ff16155b801561231f5750601a546001600160a01b03838116911614155b156123a557600061232f83611677565b60095490915061233f8383613530565b11156123a35760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610bc8565b505b600a5460ff8082169162010000900416156123be575060005b6001600160a01b0384166000908152601f602052604090205460ff16806123fd57506001600160a01b0383166000908152601f602052604090205460ff165b15612406575060005b61240f8361270f565b61241b848484846127ac565b50505050565b600081848411156124455760405162461bcd60e51b8152600401610bc8919061340f565b506124508385613589565b949350505050565b6000806000612465612825565b90925090506124748282611d66565b9250505090565b60008261248a57506000610ca9565b6000612496838561356a565b9050826124a38583613548565b14610ef55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bc8565b6002546001600160a01b03166000908152601b602052604090205461251f9082611d07565b600280546001600160a01b039081166000908152601b602090815260408083209590955592549091168152908052205460ff1615612598576002546001600160a01b03166000908152601c602052604090205461257c9083611d07565b6002546001600160a01b03166000908152601c60205260409020555b6002546040518381526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f44565b600080808080806125f76103e86125f18a8a61247b565b90611d66565b905060006126058983611dc1565b90506000612611612458565b9050600061261f8b8361247b565b9050600061262d858461247b565b9050600061263b8383611dc1565b929d929c9b5093995091975095505050505050565b6001600160a01b0381166000908152601b6020526040902054156126aa576001600160a01b0381166000908152601b602052604090205461269090610e78565b6001600160a01b0382166000908152601c60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b600a5462010000900460ff1661161f57600061272a30611677565b600b54600a54919250821015906301000000900460ff1615801561274b5750805b80156127615750600a54640100000000900460ff165b801561277a5750601a546001600160a01b038481169116145b15611d0257600a805463ff0000001916630100000017905561279a6129da565b600a805463ff00000019169055505050565b601454600c5460ff1680156127c35750600e544211155b6127cd57806127d1565b600d545b601a549091506001600160a01b038681169116148015906128005750601a546001600160a01b03858116911614155b15612809575060005b81612812575060005b61281e85858584612b5f565b5050505050565b60065460009081906c1bc49558fd67ce0b69c0000000825b60215481101561298c5782601b60006021848154811061285f5761285f6135e7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128ca575081601c6000602184815481106128a3576128a36135e7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128ea575050600654936c1bc49558fd67ce0b69c00000009350915050565b612930601b600060218481548110612904576129046135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611dc1565b9250612978601c60006021848154811061294c5761294c6135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611dc1565b915080612984816135a0565b91505061283d565b508015806129b257506006546129af906c1bc49558fd67ce0b69c0000000611d66565b82105b156129d1575050600654926c1bc49558fd67ce0b69c000000092509050565b90939092509050565b60026001541415612a2d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b60026001819055601854600091612a449190611d66565b90506000612a616103e86125f184612a5b30611677565b9061247b565b90506000612a7882612a7230611677565b90611dc1565b905047612a8482612bec565b6000612a904783611dc1565b90506000612aaf6103e86125f16015548561247b90919063ffffffff16565b90506000612ace6103e86125f16016548661247b90919063ffffffff16565b90506000612aed6103e86125f16017548761247b90919063ffffffff16565b90506000612b016103e86125f1878c61247b565b600354909150612b1a906001600160a01b031685612d8e565b600454612b30906001600160a01b031684612d8e565b600554612b46906001600160a01b031683612d8e565b612b508882612df6565b50506001805550505050505050565b6000806000806000612b7187876125da565b94509450945094509450612b89898987878787612f29565b612b9487828861304f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd991815260200190565b60405180910390a3505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2157612c216135e7565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c7557600080fd5b505afa158015612c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cad91906131e1565b81600181518110612cc057612cc06135e7565b6001600160a01b039283166020918202929092010152601954612ce69130911684611e1d565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d1f9085906000908690309042906004016134f4565b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d829291906134db565b60405180910390a15050565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207472616e73666572207468652045544820746f2061207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b601954612e0e9030906001600160a01b031684611e1d565b601954600090819081906001600160a01b031663f305d7198530888580612e3d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612ea057600080fd5b505af1158015612eb4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed99190613330565b604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b6001600160a01b0386166000908152601b6020526040902054612f4c9085611dc1565b6001600160a01b038088166000908152601b60205260408082209390935590871681522054612f7b9084611d07565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152908052205460ff1615612fea576001600160a01b0386166000908152601c6020526040902054612fd09083611dc1565b6001600160a01b0387166000908152601c60205260409020555b6001600160a01b038516600090815260208052604090205460ff1615613047576001600160a01b0385166000908152601c602052604090205461302d9082611d07565b6001600160a01b0386166000908152601c60205260409020555b505050505050565b6000811180156130685750600a5462010000900460ff16155b15611d025761307a8383600f5461309f565b6000613091600f5483611dc190919063ffffffff16565b905061241b848483306130e9565b60006130b16103e86125f1868561247b565b905060006130bf828561247b565b6006549091506130cf9082611dc1565b6006556007546130df9083611d07565b6007555050505050565b60006130fb6103e86125f1878661247b565b90506000613109828661247b565b6001600160a01b0384166000908152601b602052604090205490915061312f9082611d07565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff1615613197576001600160a01b0383166000908152601c602052604090205461317d9083611d07565b6001600160a01b0384166000908152601c60205260409020555b6007546131a49083611d07565b600755505050505050565b803580151581146131bf57600080fd5b919050565b6000602082840312156131d657600080fd5b8135610ef5816135fd565b6000602082840312156131f357600080fd5b8151610ef5816135fd565b6000806040838503121561321157600080fd5b823561321c816135fd565b946020939093013593505050565b6000806040838503121561323d57600080fd5b8235613248816135fd565b91506020830135613258816135fd565b809150509250929050565b60008060006060848603121561327857600080fd5b8335613283816135fd565b92506020840135613293816135fd565b929592945050506040919091013590565b600080604083850312156132b757600080fd5b82356132c2816135fd565b91506132d0602084016131af565b90509250929050565b6000602082840312156132eb57600080fd5b610ef5826131af565b60006020828403121561330657600080fd5b5035919050565b6000806040838503121561332057600080fd5b823591506132d0602084016131af565b60008060006060848603121561334557600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561337457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156133a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b838110156134045781516001600160a01b0316875295820195908201906001016133df565b509495945050505050565b600060208083528351808285015260005b8181101561343c57858101830151858201604001528201613420565b8181111561344e576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f416464726573732063616e6e6f7420626520746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061245060408301846133cb565b85815284602082015260a06040820152600061351360a08301866133cb565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613543576135436135bb565b500190565b60008261356557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613584576135846135bb565b500290565b60008282101561359b5761359b6135bb565b500390565b60006000198214156135b4576135b46135bb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461161f57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b25dde902c6f17b42cf9ebc0e494374ddffbb2c3600b189d655898949a62b3bb64736f6c63430008060033

Verified Source Code Partial Match

Compiler: v0.8.6+commit.11564f7e EVM: berlin Optimization: Yes (200 runs)
WAGMI.sol 915 lines
/**
 * SPDX-License-Identifier: MIT
 */ 
 
// WAGMI GAMES - WE ARE ALL GOING TO MAKE IT - https://www.wagmigame.io/

pragma solidity ^0.8.6;

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }


    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }


    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

 
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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) {this; return msg.data;}
}

library Address {
    function isContract(address account) internal view returns (bool) { 
        uint256 size; assembly { size := extcodesize(account) } return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");(bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
        
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
        
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) { return returndata; } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {revert(errorMessage);}
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IPancakeV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IPancakeV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract WAGMI is IERC20Metadata, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;
    
    address internal deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    address public marketingWallet = 0x10b33D3CbcB6f674fc626bfd83a701D2422352E2;
    address public devWallet = 0x8Da67EF3CA0D9a2e28EB32DDd323295A64d20AD3;
    address public teamWallet = 0xf96cb8E903AE8AABf92c5668871e5ACE37316c64;
    
    string constant _name = "WAGMI GAMES";
    string constant _symbol = "WAGMIGAMES";
    uint8 constant _decimals = 18;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant _totalSupply = 2_200_000_000_000 * (10**18);
    uint256 internal _reflectedSupply = (MAX - (MAX % _totalSupply));
    
    uint256 public collectedFeeTotal;
  
    uint256 public maxTxAmount = _totalSupply / 1000; // 0.1% of the total supply
    uint256 public maxWalletBalance = _totalSupply / 50; // 2% of the total supply
    
    bool public takeFeeEnabled = true;
    bool public tradingIsEnabled = true;
    bool public isInPresale = false;
    
    bool private swapping;
    bool public swapEnabled = true;
    uint256 public swapTokensAtAmount = 100_000_000 * (10**18);

    bool public antiBotEnabled = false;
    uint256 public antiBotFee = 990; // 99%
    uint256 public _startTimeForSwap;
    
    uint256 private constant FEES_DIVISOR = 10**3;
    
    uint256 public rfiFee = 10; // 1%
    uint256 public marketingFee = 30; // 3%
    uint256 public devFee = 20; // 2%
    uint256 public teamFee = 25; // 2.5%
    uint256 public lpFee = 15; // 1.5%
    uint256 private totalFee;
    
    // Total = 100% (1000)
    uint256 public marketingPortionOfSwap = 500; // 50%
    uint256 public devPortionOfSwap = 200; // 20%
    uint256 public teamPortionOfSwap = 150; // 15%
    uint256 public lpPortionOfSwap = 150; // 15%
    
    IPancakeV2Router public router;
    address public pair;
    
    
    mapping (address => uint256) internal _reflectedBalances;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;

    mapping(address => bool) public _isBlacklisted;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _isExcludedFromRewards;
    address[] private _excluded;
    
    event UpdatePancakeswapRouter(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    
    event MarketingWalletUpdated(address indexed newMarketingWallet, address indexed oldMarketingWallet);
    event DevWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet);
    event TeamWalletUpdated(address indexed newTeamWallet, address indexed oldTeamWallet);
    
    event LiquidityAdded(uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity);
    
    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier zeroAddressCheck(address _theAddress) {
        require(_theAddress != address(0), "Address cannot be the zero address");
        _;
    }
    
    constructor () {
        _reflectedBalances[owner()] = _reflectedSupply;
        
        IPancakeV2Router _newPancakeRouter = IPancakeV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IPancakeV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        router = _newPancakeRouter;

        // set fees
        totalFee = rfiFee.add(marketingFee).add(devFee).add(teamFee).add(lpFee);
        
        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        // exclude the owner and this contract from rewards
        _exclude(owner());
        _exclude(address(this));
        
        // exclude the pair address from rewards - we don't want to redistribute
        _exclude(pair);
        _exclude(deadAddress);
        
        _approve(owner(), address(router), ~uint256(0));
        
        emit Transfer(address(0), owner(), _totalSupply);
    }
    
    receive() external payable { }
    
    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view override returns (uint256){
        if (_isExcludedFromRewards[account]) return _balances[account];
        return tokenFromReflection(_reflectedBalances[account]);
        }
        
    function transfer(address recipient, uint256 amount) external override returns (bool){
        _transfer(_msgSender(), recipient, amount);
        return true;
        }
        
    function allowance(address owner, address spender) external view override returns (uint256){
        return _allowances[owner][spender];
        }
    
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
        }
        
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
        }
        
    function burn(uint256 amount) external nonReentrant {

        address sender = _msgSender();
        require(sender != address(0), "ERC20: burn from the zero address");
        require(sender != address(deadAddress), "ERC20: burn from the burn address");

        uint256 balance = balanceOf(sender);
        require(balance >= amount, "ERC20: burn amount exceeds balance");

        uint256 reflectedAmount = amount.mul(_getCurrentRate());

        // remove the amount from the sender's balance first
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
        if (_isExcludedFromRewards[sender])
            _balances[sender] = _balances[sender].sub(amount);

        _burnTokens( sender, amount, reflectedAmount );
    }
    
    /**
     * @dev "Soft" burns the specified amount of tokens by sending them 
     * to the burn address
     */
    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

        /**
         * @dev Do not reduce _totalSupply and/or _reflectedSupply. (soft) burning by sending
         * tokens to the burn address (which should be excluded from rewards) is sufficient
         * in RFI
         */ 
        _reflectedBalances[deadAddress] = _reflectedBalances[deadAddress].add(rBurn);
        if (_isExcludedFromRewards[deadAddress])
            _balances[deadAddress] = _balances[deadAddress].add(tBurn);

        /**
         * @dev Emit the event so that the burn address balance is updated (on bscscan)
         */
        emit Transfer(sender, deadAddress, tBurn);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BaseRfiToken: approve from the zero address");
        require(spender != address(0), "BaseRfiToken: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    
     /**
     * @dev Calculates and returns the reflected amount for the given amount with or without 
     * the transfer fees (deductTransferFee true/false)
     */
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _totalSupply, "Amount must be less than supply");
        uint256 feesSum;
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount,0);
            return rAmount;
        } else {
            feesSum = totalFee;
            (,uint256 rTransferAmount,,,) = _getValues(tAmount, feesSum);
            return rTransferAmount;
        }
    }

    /**
     * @dev Calculates and returns the amount of tokens corresponding to the given reflected amount.
     */
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
        uint256 currentRate = _getCurrentRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromRewards[account], "Account is not included");
        _exclude(account);
    }
    
    function _exclude(address account) private {
        if(_reflectedBalances[account] > 0) {
            _balances[account] = tokenFromReflection(_reflectedBalances[account]);
        }
        _isExcludedFromRewards[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromRewards[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balances[account] = 0;
                _isExcludedFromRewards[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function setExcludedFromFee(address account, bool value) external onlyOwner { 
        _isExcludedFromFee[account] = value; 
    }

    function _getValues(uint256 tAmount, uint256 feesSum) internal view returns (uint256, uint256, uint256, uint256, uint256) {
        
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);
        uint256 currentRate = _getCurrentRate();
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTotalFees = tTotalFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTotalFees);
        
        return (rAmount, rTransferAmount, tAmount, tTransferAmount, currentRate);
    }
    
    function _getCurrentRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _reflectedSupply;
        uint256 tSupply = _totalSupply;

        /**
         * The code below removes balances of addresses excluded from rewards from
         * rSupply and tSupply, which effectively increases the % of transaction fees
         * delivered to non-excluded holders
         */    
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectedBalances[_excluded[i]] > rSupply || _balances[_excluded[i]] > tSupply)
            return (_reflectedSupply, _totalSupply);
            rSupply = rSupply.sub(_reflectedBalances[_excluded[i]]);
            tSupply = tSupply.sub(_balances[_excluded[i]]);
        }
        if (tSupply == 0 || rSupply < _reflectedSupply.div(_totalSupply)) return (_reflectedSupply, _totalSupply);
        return (rSupply, tSupply);
    }
    
    
    /**
     * @dev Redistributes the specified amount among the current holders via the reflect.finance
     * algorithm, i.e. by updating the _reflectedSupply (_rSupply) which ultimately adjusts the
     * current rate used by `tokenFromReflection` and, in turn, the value returns from `balanceOf`. 
     * 
     */
    function _redistribute(uint256 amount, uint256 currentRate, uint256 fee) private {
        uint256 tFee = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rFee = tFee.mul(currentRate);

        _reflectedSupply = _reflectedSupply.sub(rFee);
        
        collectedFeeTotal = collectedFeeTotal.add(tFee);
    }
    
    function _burn(uint256 amount, uint256 currentRate, uint256 fee) private {
        uint256 tBurn = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rBurn = tBurn.mul(currentRate);

        _burnTokens(address(this), tBurn, rBurn);
        
        collectedFeeTotal = collectedFeeTotal.add(tBurn);
    }
    
     function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcludedFromRewards[account];
    }
    
    function isExcludedFromFee(address account) public view returns(bool) { 
        return _isExcludedFromFee[account]; 
    }
    

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled  = _enabled;
    }
    
    function updateSwapTokensAt(uint256 _swaptokens) external onlyOwner {
        swapTokensAtAmount = _swaptokens * (10**18);
    }
    
    function updateWalletMax(uint256 _walletMax) external onlyOwner {
        maxWalletBalance = _walletMax * (10**18);
    }
    
    function updateTransactionMax(uint256 _txMax) external onlyOwner {
        maxTxAmount = _txMax * (10**18);
    }

    function updateFees(uint256 _rfi, uint256 _marketing, uint256 _dev, uint256 _team, uint256 _lp) external onlyOwner {
       totalFee = _rfi.add(_marketing).add(_dev).add(_team).add(_lp); 
       require(totalFee <= 100, "Total Fees cannot be greater than 10% (100)");

       rfiFee = _rfi;
       marketingFee = _marketing;
       devFee = _dev;
       teamFee = _team;
       lpFee = _lp;
    }

   
    function updateMarketingWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != marketingWallet, "The Marketing wallet is already this address");
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        
        marketingWallet = newWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != devWallet, "The Dev wallet is already this address");
        emit DevWalletUpdated(newWallet, devWallet);
        
        devWallet = newWallet;
    }
    
    function updateTeamWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != teamWallet, "The Team wallet is already this address");
        emit TeamWalletUpdated(newWallet, teamWallet);
        
        teamWallet = newWallet;
    }
    
    function updatePortionsOfSwap(uint256 marketingPortion, uint256  devPortion, uint256 lpPortion, uint256 teamPortion) 
    external onlyOwner {
        
        uint256 totalPortion = marketingPortion.add(devPortion).add(lpPortion).add(teamPortion);
        require(totalPortion == 1000, "Total must be equal to 1000 (100%)");
        
        marketingPortionOfSwap = marketingPortion;
        devPortionOfSwap = devPortion;
        lpPortionOfSwap = lpPortion;
        teamPortionOfSwap = teamPortion;
    }
    
    function updateTradingIsEnabled(bool tradingStatus) external onlyOwner() {
        tradingIsEnabled = tradingStatus;
    }
    
    function updateRouterAddress(address newAddress) external onlyOwner {
        require(newAddress != address(router), "The router already has that address");
        emit UpdatePancakeswapRouter(newAddress, address(router));
        
        router = IPancakeV2Router(newAddress);   
    }

    function toggleAntiBot(bool toggleStatus) external onlyOwner() {
        antiBotEnabled = toggleStatus;
        if(antiBotEnabled){
            _startTimeForSwap = block.timestamp + 60;    
        }    
    }
    
    function _takeFee(uint256 amount, uint256 currentRate, uint256 fee, address recipient) private {
        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rAmount = tAmount.mul(currentRate);

        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rAmount);
        if(_isExcludedFromRewards[recipient])
            _balances[recipient] = _balances[recipient].add(tAmount);

        collectedFeeTotal = collectedFeeTotal.add(tAmount);
    }
    
    function _transferTokens(address sender, address recipient, uint256 amount, bool takeFee) private {
        
        uint256 sumOfFees = totalFee;

        // antibot enabled
        sumOfFees = antiBotEnabled && block.timestamp <= _startTimeForSwap ? antiBotFee : sumOfFees;

        // transfer between wallets
        if(sender != pair && recipient != pair) {
            sumOfFees = 0;
        }
        
        if ( !takeFee ){ sumOfFees = 0; }
        
        processReflectedBal(sender, recipient, amount, sumOfFees);
       
    }
    
    function processReflectedBal (address sender, address recipient, uint256 amount, uint256 sumOfFees) private {
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, sumOfFees);
         
        theReflection(sender, recipient, rAmount, rTransferAmount, tAmount, tTransferAmount); 
        
        _takeFees(amount, currentRate, sumOfFees);
        
        emit Transfer(sender, recipient, tTransferAmount);    
    }
    
    function theReflection(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount) private {
            
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(rAmount);
        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rTransferAmount);
        
        /**
         * Update the true/nominal balances for excluded accounts
         */        
        if (_isExcludedFromRewards[sender]) { _balances[sender] = _balances[sender].sub(tAmount); }
        if (_isExcludedFromRewards[recipient] ) { _balances[recipient] = _balances[recipient].add(tTransferAmount); }
    }
    
    
    function _takeFees(uint256 amount, uint256 currentRate, uint256 sumOfFees) private {
        if ( sumOfFees > 0 && !isInPresale ){
            _redistribute( amount, currentRate, rfiFee );  // redistribute to holders
            
            uint256 otherFees = sumOfFees.sub(rfiFee);
            _takeFee( amount, currentRate, otherFees, address(this));

        }
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "Token: transfer from the zero address");
        require(recipient != address(0), "Token: transfer to the zero address");
        require(sender != address(deadAddress), "Token: transfer from the burn address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        require(tradingIsEnabled, "This account cannot send tokens until trading is enabled");

        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");
        
        if (
            sender != address(router) && //router -> pair is removing liquidity which shouldn't have max
            !_isExcludedFromFee[recipient] && //no max for those excluded from fees
            !_isExcludedFromFee[sender] 
        ) {
            require(amount <= maxTxAmount, "Transfer amount exceeds the Max Transaction Amount.");
            
        }
        
        if ( maxWalletBalance > 0 && !_isExcludedFromFee[recipient] && !_isExcludedFromFee[sender] && recipient != address(pair) ) {
                uint256 recipientBalance = balanceOf(recipient);
                require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
            }
            
         // indicates whether or not fee should be deducted from the transfer
        bool _isTakeFee = takeFeeEnabled;
        if ( isInPresale ){ _isTakeFee = false; }
        
         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { 
            _isTakeFee = false; 
        }
        
        _beforeTokenTransfer(recipient);
        _transferTokens(sender, recipient, amount, _isTakeFee);
        
    }
    
    function _beforeTokenTransfer(address recipient) private {
            
        if ( !isInPresale ){
            uint256 contractTokenBalance = balanceOf(address(this));
            // swap
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;
            
            if (!swapping && canSwap && swapEnabled && recipient == pair) {
                swapping = true;
                
                swapBack();
                
                swapping = false;
            }
            
        }
    }
    
    function swapBack() private nonReentrant {
        uint256 splitLiquidityPortion = lpPortionOfSwap.div(2);
        uint256 amountToLiquify = balanceOf(address(this)).mul(splitLiquidityPortion).div(FEES_DIVISOR);
        uint256 amountToSwap = balanceOf(address(this)).sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;
        
        swapTokensForETH(amountToSwap);

        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        
        uint256 amountBNBMarketing = amountBNB.mul(marketingPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBDev = amountBNB.mul(devPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBTeam = amountBNB.mul(teamPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBLiquidity = amountBNB.mul(splitLiquidityPortion).div(FEES_DIVISOR);
        
          //Send to addresses
        transferToAddress(payable(marketingWallet), amountBNBMarketing);
        transferToAddress(payable(devWallet), amountBNBDev);
        transferToAddress(payable(teamWallet), amountBNBTeam);
        
        // add liquidity
        _addLiquidity(amountToLiquify, amountBNBLiquidity);
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        (uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );

        emit LiquidityAdded(tokenAmountSent, ethAmountSent, liquidity);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function transferToAddress(address payable recipient, uint256 amount) private {
        require(recipient != address(0), "Cannot transfer the ETH to a zero address");
        recipient.transfer(amount);
    }
    
    function TransferETH(address payable recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Cannot withdraw the ETH balance to a zero address");
        recipient.transfer(amount);
    }
    
}

Read Contract

_isBlacklisted 0x1cdd3be3 → bool
_startTimeForSwap 0x690c22ca → uint256
allowance 0xdd62ed3e → uint256
antiBotEnabled 0xd8c6404b → bool
antiBotFee 0x872f5969 → uint256
balanceOf 0x70a08231 → uint256
collectedFeeTotal 0x589d89dc → uint256
decimals 0x313ce567 → uint8
devFee 0x6827e764 → uint256
devPortionOfSwap 0x61a4036e → uint256
devWallet 0x8ea5220f → address
isExcludedFromFee 0x5342acb4 → bool
isExcludedFromReward 0x88f82020 → bool
isInPresale 0xd4cdeb3c → bool
lpFee 0x704ce43e → uint256
lpPortionOfSwap 0xcbf7e888 → uint256
marketingFee 0x6b67c4df → uint256
marketingPortionOfSwap 0x79c4903c → uint256
marketingWallet 0x75f0a874 → address
maxTxAmount 0x8c0b5e22 → uint256
maxWalletBalance 0xbbde77c1 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
reflectionFromToken 0x4549b039 → uint256
rfiFee 0xf8a194fc → uint256
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
takeFeeEnabled 0x450dde46 → bool
teamFee 0xd7c94efd → uint256
teamPortionOfSwap 0x5a565c39 → uint256
teamWallet 0x59927044 → address
tokenFromReflection 0x2d838119 → uint256
totalSupply 0x18160ddd → uint256
tradingIsEnabled 0x09c58fcd → bool

Write Contract 25 functions

These functions modify contract state and require a wallet transaction to execute.

TransferETH 0xfd69c215
address recipient
uint256 amount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
blacklistAddress 0x455a4396
address account
bool value
burn 0x42966c68
uint256 amount
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromReward 0x52390c02
address account
includeInReward 0x3685d419
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setExcludedFromFee 0x6612e66f
address account
bool value
setSwapEnabled 0xe01af92c
bool _enabled
toggleAntiBot 0xbbf1af95
bool toggleStatus
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateDevWallet 0x1816467f
address newWallet
updateFees 0x457ffca2
uint256 _rfi
uint256 _marketing
uint256 _dev
uint256 _team
uint256 _lp
updateMarketingWallet 0xaacebbe3
address newWallet
updatePortionsOfSwap 0x361ff9bf
uint256 marketingPortion
uint256 devPortion
uint256 lpPortion
uint256 teamPortion
updateRouterAddress 0x00e6be7b
address newAddress
updateSwapTokensAt 0xb225d4b7
uint256 _swaptokens
updateTeamWallet 0x7cb332bb
address newWallet
updateTradingIsEnabled 0x1264c9c4
bool tradingStatus
updateTransactionMax 0x7d8dbe24
uint256 _txMax
updateWalletMax 0x91053d94
uint256 _walletMax

Recent Transactions

No transactions found for this address