Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xaF8942831F3A096f708b8b31F191B8958Cf176c5
Balance 0 ETH
Nonce 1
Code Size 23886 bytes
Last Active
Indexed Transactions 1 (24,318,80824,318,808)
Gas Used (indexed) 46,986
External Etherscan · Sourcify

Contract Bytecode

23886 bytes
0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c18bc1951161010d578063e7ad9fcd116100a0578063f63743421161006f578063f637434214610e8d578063f8b45b0514610eb8578063fb002c9714610ee3578063fd72e22a14610f0e576103ce565b8063e7ad9fcd14610de5578063e884f26014610e0e578063f11a24d314610e39578063f2fde38b14610e64576103ce565b8063d85ba063116100dc578063d85ba06314610d15578063dd62ed3e14610d40578063e2f4560514610d7d578063e596219514610da8576103ce565b8063c18bc19514610c59578063c876d0b914610c82578063c8c8ebe414610cad578063d257b34f14610cd8576103ce565b8063a0d82dc511610185578063b62496f511610154578063b62496f514610b9d578063bbc0c74214610bda578063c024666814610c05578063c0f17acd14610c2e576103ce565b8063a0d82dc514610acf578063a457c2d714610afa578063a9059cbb14610b37578063ae303d0714610b74576103ce565b80639a7a23d6116101c15780639a7a23d614610a255780639bd9bf5f14610a4e5780639c3b4fdc14610a795780639fccce3214610aa4576103ce565b80638da5cb5b1461097b5780638ea5220f146109a6578063924de9b7146109d157806395d89b41146109fa576103ce565b80634a62bb65116102e25780636aebf6271161027557806373dd858c1161024457806373dd858c146108d5578063751039fc146108fe5780637571336a1461092957806382aa7c6814610952576103ce565b80636aebf6271461082d5780636ddd17131461085657806370a0823114610881578063715018a6146108be576103ce565b8063534c0906116102b1578063534c0906146107835780635a139dd4146107ae57806364cd83dd146107d95780636a486a8e14610802576103ce565b80634a62bb65146106c55780634ec39ba9146106f05780634f77f6c01461071b5780634fbee19314610746576103ce565b806323b872dd1161035a578063312394a011610329578063312394a014610607578063313ce56714610632578063395093511461065d57806349bd5a5e1461069a576103ce565b806323b872dd1461054b57806324afaf8d1461058857806327c8f835146105b35780632e6ed7ef146105de576103ce565b806318160ddd1161039657806318160ddd146104a35780631816467f146104ce5780631a8145bb146104f7578063203e727e14610522576103ce565b806306fdde03146103d3578063095ea7b3146103fe57806310d5de531461043b5780631694505e14610478576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f39565b6040516103f59190614773565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614833565b610fcb565b604051610432919061488e565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906148a9565b610fe9565b60405161046f919061488e565b60405180910390f35b34801561048457600080fd5b5061048d611009565b60405161049a9190614935565b60405180910390f35b3480156104af57600080fd5b506104b861102d565b6040516104c5919061495f565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906148a9565b611037565b005b34801561050357600080fd5b5061050c611173565b604051610519919061495f565b60405180910390f35b34801561052e57600080fd5b506105496004803603810190610544919061497a565b611179565b005b34801561055757600080fd5b50610572600480360381019061056d91906149a7565b611288565b60405161057f919061488e565b60405180910390f35b34801561059457600080fd5b5061059d611380565b6040516105aa9190614a09565b60405180910390f35b3480156105bf57600080fd5b506105c86113a6565b6040516105d59190614a09565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190614a24565b6113ac565b005b34801561061357600080fd5b5061061c61148a565b604051610629919061495f565b60405180910390f35b34801561063e57600080fd5b50610647611490565b6040516106549190614aa7565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190614833565b611499565b604051610691919061488e565b60405180910390f35b3480156106a657600080fd5b506106af611545565b6040516106bc9190614a09565b60405180910390f35b3480156106d157600080fd5b506106da611569565b6040516106e7919061488e565b60405180910390f35b3480156106fc57600080fd5b5061070561157c565b6040516107129190614a09565b60405180910390f35b34801561072757600080fd5b506107306115a2565b60405161073d919061495f565b60405180910390f35b34801561075257600080fd5b5061076d600480360381019061076891906148a9565b6115a8565b60405161077a919061488e565b60405180910390f35b34801561078f57600080fd5b506107986115fe565b6040516107a59190614a09565b60405180910390f35b3480156107ba57600080fd5b506107c3611624565b6040516107d0919061495f565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906148a9565b61162a565b005b34801561080e57600080fd5b50610817611766565b604051610824919061495f565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906148a9565b61176c565b005b34801561086257600080fd5b5061086b6118a8565b604051610878919061488e565b60405180910390f35b34801561088d57600080fd5b506108a860048036038101906108a391906148a9565b6118bb565b6040516108b5919061495f565b60405180910390f35b3480156108ca57600080fd5b506108d3611903565b005b3480156108e157600080fd5b506108fc60048036038101906108f791906148a9565b61198b565b005b34801561090a57600080fd5b50610913611ac7565b604051610920919061488e565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614aee565b611b67565b005b34801561095e57600080fd5b506109796004803603810190610974919061497a565b611c3e565b005b34801561098757600080fd5b50610990611d51565b60405161099d9190614a09565b60405180910390f35b3480156109b257600080fd5b506109bb611d7b565b6040516109c89190614a09565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190614b2e565b611da1565b005b348015610a0657600080fd5b50610a0f611e3a565b604051610a1c9190614773565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190614aee565b611ecc565b005b348015610a5a57600080fd5b50610a63611fe5565b604051610a70919061495f565b60405180910390f35b348015610a8557600080fd5b50610a8e611feb565b604051610a9b919061495f565b60405180910390f35b348015610ab057600080fd5b50610ab9611ff1565b604051610ac6919061495f565b60405180910390f35b348015610adb57600080fd5b50610ae4611ff7565b604051610af1919061495f565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614833565b611ffd565b604051610b2e919061488e565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614833565b6120e8565b604051610b6b919061488e565b60405180910390f35b348015610b8057600080fd5b50610b9b6004803603810190610b969190614bc0565b612106565b005b348015610ba957600080fd5b50610bc46004803603810190610bbf91906148a9565b612315565b604051610bd1919061488e565b60405180910390f35b348015610be657600080fd5b50610bef612335565b604051610bfc919061488e565b60405180910390f35b348015610c1157600080fd5b50610c2c6004803603810190610c279190614aee565b612348565b005b348015610c3a57600080fd5b50610c4361246d565b604051610c50919061495f565b60405180910390f35b348015610c6557600080fd5b50610c806004803603810190610c7b919061497a565b612473565b005b348015610c8e57600080fd5b50610c97612582565b604051610ca4919061488e565b60405180910390f35b348015610cb957600080fd5b50610cc2612595565b604051610ccf919061495f565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa919061497a565b61259b565b604051610d0c919061488e565b60405180910390f35b348015610d2157600080fd5b50610d2a6126f0565b604051610d37919061495f565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614c20565b6126f6565b604051610d74919061495f565b60405180910390f35b348015610d8957600080fd5b50610d9261277d565b604051610d9f919061495f565b60405180910390f35b348015610db457600080fd5b50610dcf6004803603810190610dca91906148a9565b612783565b604051610ddc919061488e565b60405180910390f35b348015610df157600080fd5b50610e0c6004803603810190610e079190614a24565b6127a3565b005b348015610e1a57600080fd5b50610e23612881565b604051610e30919061488e565b60405180910390f35b348015610e4557600080fd5b50610e4e612921565b604051610e5b919061495f565b60405180910390f35b348015610e7057600080fd5b50610e8b6004803603810190610e8691906148a9565b612927565b005b348015610e9957600080fd5b50610ea2612a1f565b604051610eaf919061495f565b60405180910390f35b348015610ec457600080fd5b50610ecd612a25565b604051610eda919061495f565b60405180910390f35b348015610eef57600080fd5b50610ef8612a2b565b604051610f05919061495f565b60405180910390f35b348015610f1a57600080fd5b50610f23612a31565b604051610f309190614a09565b60405180910390f35b606060038054610f4890614c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7490614c8f565b8015610fc15780601f10610f9657610100808354040283529160200191610fc1565b820191906000526020600020905b815481529060010190602001808311610fa457829003601f168201915b5050505050905090565b6000610fdf610fd8612a57565b8484612a5f565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61103f612a57565b73ffffffffffffffffffffffffffffffffffffffff1661105d611d51565b73ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614d0d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f5481565b611181612a57565b73ffffffffffffffffffffffffffffffffffffffff1661119f611d51565b73ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90614d0d565b60405180910390fd5b670de0b6b3a76400006103e8600161120b61102d565b6112159190614d5c565b61121f9190614de5565b6112299190614de5565b81101561126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290614e88565b60405180910390fd5b670de0b6b3a76400008161127f9190614d5c565b600b8190555050565b6000611295848484612c2a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e0612a57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614f1a565b60405180910390fd5b6113748561136c612a57565b858403612a5f565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6113b4612a57565b73ffffffffffffffffffffffffffffffffffffffff166113d2611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614d0d565b60405180910390fd5b8360158190555082601681905550816017819055508060188190555060185460175460165460155461145a9190614f3a565b6114649190614f3a565b61146e9190614f3a565b6014819055506063601454111561148457600080fd5b50505050565b601a5481565b60006012905090565b600061153b6114a6612a57565b8484600160006114b4612a57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115369190614f3a565b612a5f565b6001905092915050565b7f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c481565b600e60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611632612a57565b73ffffffffffffffffffffffffffffffffffffffff16611650611d51565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90614d0d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fceaa6f1f2115d0f5eb9934026e3a197b010d8bc98f70fe27bbfb441d6fe4a69c60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b611774612a57565b73ffffffffffffffffffffffffffffffffffffffff16611792611d51565b73ffffffffffffffffffffffffffffffffffffffff16146117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90614d0d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61190b612a57565b73ffffffffffffffffffffffffffffffffffffffff16611929611d51565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614d0d565b60405180910390fd5b6119896000613bac565b565b611993612a57565b73ffffffffffffffffffffffffffffffffffffffff166119b1611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90614d0d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611ad1612a57565b73ffffffffffffffffffffffffffffffffffffffff16611aef611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90614d0d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611b6f612a57565b73ffffffffffffffffffffffffffffffffffffffff16611b8d611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90614d0d565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c46612a57565b73ffffffffffffffffffffffffffffffffffffffff16611c64611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614d0d565b60405180910390fd5b600e60019054906101000a900460ff1615611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614fdc565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff0219169083151502179055508060128190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611da9612a57565b73ffffffffffffffffffffffffffffffffffffffff16611dc7611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490614d0d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611e4990614c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7590614c8f565b8015611ec25780601f10611e9757610100808354040283529160200191611ec2565b820191906000526020600020905b815481529060010190602001808311611ea557829003601f168201915b5050505050905090565b611ed4612a57565b73ffffffffffffffffffffffffffffffffffffffff16611ef2611d51565b73ffffffffffffffffffffffffffffffffffffffff1614611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614d0d565b60405180910390fd5b7f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce9061506e565b60405180910390fd5b611fe18282613c72565b5050565b601e5481565b60175481565b60205481565b601c5481565b6000806001600061200c612a57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090615100565b60405180910390fd5b6120dd6120d4612a57565b85858403612a5f565b600191505092915050565b60006120fc6120f5612a57565b8484612c2a565b6001905092915050565b61210e612a57565b73ffffffffffffffffffffffffffffffffffffffff1661212c611d51565b73ffffffffffffffffffffffffffffffffffffffff1614612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614d0d565b60405180910390fd5b60005b8383905081101561230f5760008484838181106121a5576121a4615120565b5b90506020020160208101906121ba91906148a9565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156122465750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561229e57507f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156122fb5782601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806123079061514f565b915050612185565b50505050565b60246020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612350612a57565b73ffffffffffffffffffffffffffffffffffffffff1661236e611d51565b73ffffffffffffffffffffffffffffffffffffffff16146123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614d0d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612461919061488e565b60405180910390a25050565b60155481565b61247b612a57565b73ffffffffffffffffffffffffffffffffffffffff16612499611d51565b73ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e690614d0d565b60405180910390fd5b670de0b6b3a76400006103e8600561250561102d565b61250f9190614d5c565b6125199190614de5565b6125239190614de5565b811015612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c9061520a565b60405180910390fd5b670de0b6b3a7640000816125799190614d5c565b600d8190555050565b601060009054906101000a900460ff1681565b600b5481565b60006125a5612a57565b73ffffffffffffffffffffffffffffffffffffffff166125c3611d51565b73ffffffffffffffffffffffffffffffffffffffff1614612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090614d0d565b60405180910390fd5b620186a0600161262761102d565b6126319190614d5c565b61263b9190614de5565b82101561267d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126749061529c565b60405180910390fd5b6103e8600561268a61102d565b6126949190614d5c565b61269e9190614de5565b8211156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d79061532e565b60405180910390fd5b81600c8190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b60136020528060005260406000206000915054906101000a900460ff1681565b6127ab612a57565b73ffffffffffffffffffffffffffffffffffffffff166127c9611d51565b73ffffffffffffffffffffffffffffffffffffffff161461281f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281690614d0d565b60405180910390fd5b83601a8190555082601b8190555081601c8190555080601d81905550601d54601c54601b54601a546128519190614f3a565b61285b9190614f3a565b6128659190614f3a565b6019819055506063601954111561287b57600080fd5b50505050565b600061288b612a57565b73ffffffffffffffffffffffffffffffffffffffff166128a9611d51565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614d0d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60165481565b61292f612a57565b73ffffffffffffffffffffffffffffffffffffffff1661294d611d51565b73ffffffffffffffffffffffffffffffffffffffff16146129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614d0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a906153c0565b60405180910390fd5b612a1c81613bac565b50565b601b5481565b600d5481565b60215481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac690615452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b36906154e4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c1d919061495f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190615576565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0190615608565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e90615674565b60405180910390fd5b6000811415612db157612dac83836000613d13565b613ba7565b600e60009054906101000a900460ff161561366957612dce611d51565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e3c5750612e0c611d51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e755750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eaf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec85750600660149054906101000a900460ff16155b1561366857600e60019054906101000a900460ff16612fc257602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f825750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb8906156e0565b60405180910390fd5b5b601254601154612fd29190614f3a565b431115801561302c57507f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156130865750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130be57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561311657507f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131b7576001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b601060009054906101000a900460ff161561337f576131d4611d51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561325b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132b357507f0000000000000000000000008dc4b56ef4a2a1272f7e652bbdd3b6c3a84667c473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561337e5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333090615798565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134225750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c957600b5481111561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134639061582a565b60405180910390fd5b600d54613478836118bb565b826134839190614f3a565b11156134c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bb90615896565b60405180910390fd5b613667565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561356c5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135bb57600b548111156135b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ad90615928565b60405180910390fd5b613666565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661366557600d54613618836118bb565b826136239190614f3a565b1115613664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365b90615896565b60405180910390fd5b5b5b5b5b5b6000613674306118bb565b90506000600c5482101590508080156136995750600e60029054906101000a900460ff165b80156136b25750600660149054906101000a900460ff16155b80156137085750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561375e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137b45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f8576001600660146101000a81548160ff0219169083151502179055506137dc613f94565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138ae5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b857600090505b60008115613b9757602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561391b57506000601954115b15613a1b57613948606461393a6019548861435590919063ffffffff16565b61436b90919063ffffffff16565b9050601954601b548261395b9190614d5c565b6139659190614de5565b601f60008282546139769190614f3a565b92505081905550601954601c548261398e9190614d5c565b6139989190614de5565b602060008282546139a99190614f3a565b92505081905550601954601a54826139c19190614d5c565b6139cb9190614de5565b601e60008282546139dc9190614f3a565b92505081905550601954601d54826139f49190614d5c565b6139fe9190614de5565b60216000828254613a0f9190614f3a565b92505081905550613b73565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a7657506000601454115b15613b7257613aa36064613a956014548861435590919063ffffffff16565b61436b90919063ffffffff16565b905060145460165482613ab69190614d5c565b613ac09190614de5565b601f6000828254613ad19190614f3a565b9250508190555060145460175482613ae99190614d5c565b613af39190614de5565b60206000828254613b049190614f3a565b9250508190555060145460155482613b1c9190614d5c565b613b269190614de5565b601e6000828254613b379190614f3a565b9250508190555060145460185482613b4f9190614d5c565b613b599190614de5565b60216000828254613b6a9190614f3a565b925050819055505b5b6000811115613b8857613b87873083613d13565b5b8085613b949190615948565b94505b613ba2878787613d13565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d7a90615576565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dea90615608565b60405180910390fd5b613dfe838383614381565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7b906159ee565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f179190614f3a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f7b919061495f565b60405180910390a3613f8e848484614386565b50505050565b6000613f9f306118bb565b90506000602154602054601e54601f54613fb99190614f3a565b613fc39190614f3a565b613fcd9190614f3a565b9050600080831480613fdf5750600082145b15613fec57505050614353565b6014600c54613ffb9190614d5c565b831115614014576014600c546140119190614d5c565b92505b6000600283601f54866140279190614d5c565b6140319190614de5565b61403b9190614de5565b90506000614052828661438b90919063ffffffff16565b90506000479050614062826143a1565b6000614077824761438b90919063ffffffff16565b905060006140a287614094601e548561435590919063ffffffff16565b61436b90919063ffffffff16565b905060006140cd886140bf6020548661435590919063ffffffff16565b61436b90919063ffffffff16565b905060006140f8896140ea6021548761435590919063ffffffff16565b61436b90919063ffffffff16565b905060008183858761410a9190615948565b6141149190615948565b61411e9190615948565b90506000601f819055506000601e8190555060006020819055506000602181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161418690615a3f565b60006040518083038185875af1925050503d80600081146141c3576040519150601f19603f3d011682016040523d82523d6000602084013e6141c8565b606091505b5050809950506000881180156141de5750600081115b1561422b576141ed88826145de565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601f5460405161422293929190615a54565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161427190615a3f565b60006040518083038185875af1925050503d80600081146142ae576040519150601f19603f3d011682016040523d82523d6000602084013e6142b3565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516142ff90615a3f565b60006040518083038185875af1925050503d806000811461433c576040519150601f19603f3d011682016040523d82523d6000602084013e614341565b606091505b50508099505050505050505050505050505b565b600081836143639190614d5c565b905092915050565b600081836143799190614de5565b905092915050565b505050565b505050565b600081836143999190615948565b905092915050565b6000600267ffffffffffffffff8111156143be576143bd615a8b565b5b6040519080825280602002602001820160405280156143ec5781602001602082028036833780820191505090505b509050308160008151811061440457614403615120565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190615acf565b816001815181106144e1576144e0615120565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614546307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a5f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145a8959493929190615bf5565b600060405180830381600087803b1580156145c257600080fd5b505af11580156145d6573d6000803e3d6000fd5b505050505050565b614609307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a5f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161469096959493929190615c4f565b60606040518083038185885af11580156146ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146d39190615cc5565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147145780820151818401526020810190506146f9565b83811115614723576000848401525b50505050565b6000601f19601f8301169050919050565b6000614745826146da565b61474f81856146e5565b935061475f8185602086016146f6565b61476881614729565b840191505092915050565b6000602082019050818103600083015261478d818461473a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147ca8261479f565b9050919050565b6147da816147bf565b81146147e557600080fd5b50565b6000813590506147f7816147d1565b92915050565b6000819050919050565b614810816147fd565b811461481b57600080fd5b50565b60008135905061482d81614807565b92915050565b6000806040838503121561484a57614849614795565b5b6000614858858286016147e8565b92505060206148698582860161481e565b9150509250929050565b60008115159050919050565b61488881614873565b82525050565b60006020820190506148a3600083018461487f565b92915050565b6000602082840312156148bf576148be614795565b5b60006148cd848285016147e8565b91505092915050565b6000819050919050565b60006148fb6148f66148f18461479f565b6148d6565b61479f565b9050919050565b600061490d826148e0565b9050919050565b600061491f82614902565b9050919050565b61492f81614914565b82525050565b600060208201905061494a6000830184614926565b92915050565b614959816147fd565b82525050565b60006020820190506149746000830184614950565b92915050565b6000602082840312156149905761498f614795565b5b600061499e8482850161481e565b91505092915050565b6000806000606084860312156149c0576149bf614795565b5b60006149ce868287016147e8565b93505060206149df868287016147e8565b92505060406149f08682870161481e565b9150509250925092565b614a03816147bf565b82525050565b6000602082019050614a1e60008301846149fa565b92915050565b60008060008060808587031215614a3e57614a3d614795565b5b6000614a4c8782880161481e565b9450506020614a5d8782880161481e565b9350506040614a6e8782880161481e565b9250506060614a7f8782880161481e565b91505092959194509250565b600060ff82169050919050565b614aa181614a8b565b82525050565b6000602082019050614abc6000830184614a98565b92915050565b614acb81614873565b8114614ad657600080fd5b50565b600081359050614ae881614ac2565b92915050565b60008060408385031215614b0557614b04614795565b5b6000614b13858286016147e8565b9250506020614b2485828601614ad9565b9150509250929050565b600060208284031215614b4457614b43614795565b5b6000614b5284828501614ad9565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b8057614b7f614b5b565b5b8235905067ffffffffffffffff811115614b9d57614b9c614b60565b5b602083019150836020820283011115614bb957614bb8614b65565b5b9250929050565b600080600060408486031215614bd957614bd8614795565b5b600084013567ffffffffffffffff811115614bf757614bf661479a565b5b614c0386828701614b6a565b93509350506020614c1686828701614ad9565b9150509250925092565b60008060408385031215614c3757614c36614795565b5b6000614c45858286016147e8565b9250506020614c56858286016147e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ca757607f821691505b60208210811415614cbb57614cba614c60565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cf76020836146e5565b9150614d0282614cc1565b602082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d67826147fd565b9150614d72836147fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dab57614daa614d2d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614df0826147fd565b9150614dfb836147fd565b925082614e0b57614e0a614db6565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e72602f836146e5565b9150614e7d82614e16565b604082019050919050565b60006020820190508181036000830152614ea181614e65565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f046028836146e5565b9150614f0f82614ea8565b604082019050919050565b60006020820190508181036000830152614f3381614ef7565b9050919050565b6000614f45826147fd565b9150614f50836147fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8557614f84614d2d565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614fc6600e836146e5565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006150586039836146e5565b915061506382614ffc565b604082019050919050565b600060208201905081810360008301526150878161504b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150ea6025836146e5565b91506150f58261508e565b604082019050919050565b60006020820190508181036000830152615119816150dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061515a826147fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561518d5761518c614d2d565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151f46024836146e5565b91506151ff82615198565b604082019050919050565b60006020820190508181036000830152615223816151e7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006152866035836146e5565b91506152918261522a565b604082019050919050565b600060208201905081810360008301526152b581615279565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006153186034836146e5565b9150615323826152bc565b604082019050919050565b600060208201905081810360008301526153478161530b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153aa6026836146e5565b91506153b58261534e565b604082019050919050565b600060208201905081810360008301526153d98161539d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061543c6024836146e5565b9150615447826153e0565b604082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ce6022836146e5565b91506154d982615472565b604082019050919050565b600060208201905081810360008301526154fd816154c1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155606025836146e5565b915061556b82615504565b604082019050919050565b6000602082019050818103600083015261558f81615553565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155f26023836146e5565b91506155fd82615596565b604082019050919050565b60006020820190508181036000830152615621816155e5565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061565e600e836146e5565b915061566982615628565b602082019050919050565b6000602082019050818103600083015261568d81615651565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156ca6016836146e5565b91506156d582615694565b602082019050919050565b600060208201905081810360008301526156f9816156bd565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006157826049836146e5565b915061578d82615700565b606082019050919050565b600060208201905081810360008301526157b181615775565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158146035836146e5565b915061581f826157b8565b604082019050919050565b6000602082019050818103600083015261584381615807565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006158806013836146e5565b915061588b8261584a565b602082019050919050565b600060208201905081810360008301526158af81615873565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159126036836146e5565b915061591d826158b6565b604082019050919050565b6000602082019050818103600083015261594181615905565b9050919050565b6000615953826147fd565b915061595e836147fd565b92508282101561597157615970614d2d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159d86026836146e5565b91506159e38261597c565b604082019050919050565b60006020820190508181036000830152615a07816159cb565b9050919050565b600081905092915050565b50565b6000615a29600083615a0e565b9150615a3482615a19565b600082019050919050565b6000615a4a82615a1c565b9150819050919050565b6000606082019050615a696000830186614950565b615a766020830185614950565b615a836040830184614950565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615ac9816147d1565b92915050565b600060208284031215615ae557615ae4614795565b5b6000615af384828501615aba565b91505092915050565b6000819050919050565b6000615b21615b1c615b1784615afc565b6148d6565b6147fd565b9050919050565b615b3181615b06565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b6c816147bf565b82525050565b6000615b7e8383615b63565b60208301905092915050565b6000602082019050919050565b6000615ba282615b37565b615bac8185615b42565b9350615bb783615b53565b8060005b83811015615be8578151615bcf8882615b72565b9750615bda83615b8a565b925050600181019050615bbb565b5085935050505092915050565b600060a082019050615c0a6000830188614950565b615c176020830187615b28565b8181036040830152615c298186615b97565b9050615c3860608301856149fa565b615c456080830184614950565b9695505050505050565b600060c082019050615c6460008301896149fa565b615c716020830188614950565b615c7e6040830187615b28565b615c8b6060830186615b28565b615c9860808301856149fa565b615ca560a0830184614950565b979650505050505050565b600081519050615cbf81614807565b92915050565b600080600060608486031215615cde57615cdd614795565b5b6000615cec86828701615cb0565b9350506020615cfd86828701615cb0565b9250506040615d0e86828701615cb0565b915050925092509256fea26469706673582212208075fe1387720cd84513621fa7a44c097657f8297ab44ca0395d6a4af9b063c664736f6c634300080a0033

Verified Source Code Full Match

Compiler: v0.8.10+commit.fc410830 EVM: london Optimization: No
nerf.sol 1081 lines
/**



      ___           ___           ___           ___   
     /__/\         /  /\         /  /\         /  /\  
     \  \:\       /  /:/_       /  /::\       /  /:/_ 
      \  \:\     /  /:/ /\     /  /:/\:\     /  /:/ /\
  _____\__\:\   /  /:/ /:/_   /  /:/~/:/    /  /:/ /:/
 /__/::::::::\ /__/:/ /:/ /\ /__/:/ /:/___ /__/:/ /:/ 
 \  \:\~~\~~\/ \  \:\/:/ /:/ \  \:\/:::::/ \  \:\/:/  
  \  \:\  ~~~   \  \::/ /:/   \  \::/~~~~   \  \::/   
   \  \:\        \  \:\/:/     \  \:\        \  \:\   
    \  \:\        \  \::/       \  \:\        \  \:\  
     \__\/         \__\/         \__\/         \__\/  



75 years ago, Polaroid made it possible to see a photograph in minutes.
Now, NeRF can turn 2D photos into a 3D scene in seconds.

NeRFBOT.XYZ

**/



// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    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 override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            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) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

contract nerf is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public routerCA = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D uniswap

    bool private swapping;

    address public mktgWallet;
    address public devWallet;
    address public liqWallet;
    address public operationsWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    uint256 private deadBlocks;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMktgFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMktgFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMktg;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event mktgWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liqWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event operationsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Neural Radiance Field", "NeRF") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerCA); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // launch buy fees
        uint256 _buyMktgFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 2;
        uint256 _buyOperationsFee = 1;
        
        // launch sell fees
        uint256 _sellMktgFee = 5;
        uint256 _sellLiquidityFee = 5;
        uint256 _sellDevFee = 5;
        uint256 _sellOperationsFee = 5;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 20_000 * 1e18; // 2% max txn
        maxWallet = 20_000 * 1e18; // 2% max wallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMktgFee = _buyMktgFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMktgFee + buyLiquidityFee + buyDevFee + buyOperationsFee;

        sellMktgFee = _sellMktgFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMktgFee + sellLiquidityFee + sellDevFee + sellOperationsFee;

        mktgWallet = address(0xF3A3121ceBACF4161f9d042095E27C4584e01618); 
        devWallet = address(0x1BE4c4251f5664f59e4F4999573725ad839fC786); 
        liqWallet = address(0xfC3646e61B3fb651850b52E1B440cDD1e77620F1); 
        operationsWallet = address(0x46c3F285C96D2136439Aa8977Ae3ca2C4b30D772);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
        deadBlocks = _deadBlocks;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _mktgFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMktgFee = _mktgFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMktgFee + buyLiquidityFee + buyDevFee + buyOperationsFee;
        require(buyTotalFees <= 99);
    }

    function updateSellFees(
        uint256 _mktgFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMktgFee = _mktgFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMktgFee + sellLiquidityFee + sellDevFee + sellOperationsFee;
        require(sellTotalFees <= 99); 
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemktgWallet(address newmktgWallet) external onlyOwner {
        emit mktgWalletUpdated(newmktgWallet, mktgWallet);
        mktgWallet = newmktgWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateLiqWallet(address newLiqWallet) external onlyOwner {
        emit liqWalletUpdated(newLiqWallet, liqWallet);
        liqWallet = newLiqWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper blocked");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if(block.number <= launchBlock + deadBlocks && from == address(uniswapV2Pair) &&  
                to != routerCA && to != address(this) && to != address(uniswapV2Pair)){
                    blocked[to] = true;
                    emit BoughtEarly(to);
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMktg += (fees * sellMktgFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMktg += (fees * buyMktgFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    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] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function multiBlock(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != routerCA && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liqWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMktg +
            tokensForDev +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMktg = ethBalance.mul(tokensForMktg).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMktg - ethForDev - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMktg = 0;
        tokensForDev = 0;
        tokensForOperations = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(mktgWallet).call{value: address(this).balance}("");
    }
}

Read Contract

_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
blocked 0xe5962195 → bool
buyDevFee 0x9c3b4fdc → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyMktgFee 0xc0f17acd → uint256
buyOperationsFee 0x5a139dd4 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
devWallet 0x8ea5220f → address
isExcludedFromFees 0x4fbee193 → bool
limitsInEffect 0x4a62bb65 → bool
liqWallet 0x4ec39ba9 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
mktgWallet 0x24afaf8d → address
name 0x06fdde03 → string
operationsWallet 0xfd72e22a → address
owner 0x8da5cb5b → address
routerCA 0x534c0906 → address
sellDevFee 0xa0d82dc5 → uint256
sellLiquidityFee 0xf6374342 → uint256
sellMktgFee 0x312394a0 → uint256
sellOperationsFee 0x4f77f6c0 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForDev 0x9fccce32 → uint256
tokensForLiquidity 0x1a8145bb → uint256
tokensForMktg 0x9bd9bf5f → uint256
tokensForOperations 0xfb002c97 → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
transferDelayEnabled 0xc876d0b9 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 24 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
disableTransferDelay 0xe884f260
No parameters
returns: bool
enableTrading 0x82aa7c68
uint256 _deadBlocks
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
multiBlock 0xae303d07
address[] blockees
bool shouldBlock
removeLimits 0x751039fc
No parameters
returns: bool
renounceOwnership 0x715018a6
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x2e6ed7ef
uint256 _mktgFee
uint256 _liquidityFee
uint256 _devFee
uint256 _operationsFee
updateDevWallet 0x1816467f
address newWallet
updateLiqWallet 0x73dd858c
address newLiqWallet
updateMaxTxnAmount 0x203e727e
uint256 newNum
updateMaxWalletAmount 0xc18bc195
uint256 newNum
updateSellFees 0xe7ad9fcd
uint256 _mktgFee
uint256 _liquidityFee
uint256 _devFee
uint256 _operationsFee
updateSwapEnabled 0x924de9b7
bool enabled
updateSwapTokensAtAmount 0xd257b34f
uint256 newAmount
returns: bool
updatemktgWallet 0x64cd83dd
address newmktgWallet
updateoperationsWallet 0x6aebf627
address newWallet

Top Interactions

AddressTxnsSentReceived
0x6A3c302B...6621 1 1

Recent Transactions

CSV
|
Hash Method Block Age From/To Value Txn Fee Type
0x2dff2d47...638d9f approve 24,318,808 IN 0x6A3c302B...6621 0 ETH 0.000103544686 ETH EIP-1559