Address Contract Partially Verified
Address
0xf1Ecb4735ceC79709Af1fc6Dc2321039f618Ab2f
Balance
0 ETH
Nonce
2
Code Size
23525 bytes
Creator
0xB62055bd...35E9 at tx 0x4d533c12...3890cd
Indexed Transactions
0
Contract Bytecode
23525 bytes
0x6080604052600436106106ed5760003560e01c80637ecebe0011610385578063bff5daca116101dc578063d8e8b15a1161010d578063ef78d4fd116100ab578063f82f235f1161007a578063f82f235f146116bc578063f8b45b05146116ec578063f9077d6c14611701578063fb5588281461171757600080fd5b8063ef78d4fd14611609578063f1127ed81461161e578063f2fde38b14611668578063f7c618c11461168857600080fd5b8063e4ae7f3a116100e7578063e4ae7f3a14611583578063e5c35120146115a3578063e5d41c6b146115c3578063e5e31b13146115d957600080fd5b8063d8e8b15a1461150f578063d954028814611543578063dd62ed3e1461156357600080fd5b8063cc1776d31161017a578063d2fcc00111610154578063d2fcc00114611499578063d3f6ab1c146114b9578063d505accf146114d9578063d54ad2a1146114f957600080fd5b8063cc1776d314611424578063d017f48314611463578063d2890a011461148357600080fd5b8063c3f70b52116101b6578063c3f70b52146113b0578063c8e77996146113c5578063c9263860146113e5578063cae367291461140557600080fd5b8063bff5daca14611366578063c1f737541461137b578063c3cda5201461139057600080fd5b80639ab24eb0116102b6578063a9059cbb11610254578063ad2bb1b31161022e578063ad2bb1b3146112f0578063afcf2fc414611310578063affdcb5514611330578063b609995e1461134657600080fd5b8063a9059cbb1461127c578063ab5a18871461129c578063abd5d00e146112bc57600080fd5b8063a5d0186211610290578063a5d018621461120d578063a5ece94114611222578063a69197b514611242578063a8f11eb91461126257600080fd5b80639ab24eb0146111b75780639e6c2959146111d7578063a457c2d7146111ed57600080fd5b80638da5cb5b1161032357806391ddadf4116102fd57806391ddadf41461113c57806392aee1521461116857806395d89b411461118857806398a0dd091461119d57600080fd5b80638da5cb5b146110de5780638e539e8c146110fc578063906e9dd01461111c57600080fd5b80638188f71c1161035f5780638188f71c1461106c57806384b0196e1461108157806386a22eff146110a957806386a35f25146110c957600080fd5b80637ecebe0014610fed5780637fd9fdf71461100d5780638124f7ac1461102d57600080fd5b806342966c68116105445780636059a44c116104755780636fcfff45116104135780637571336a116103e25780637571336a14610f6157806376ab813614610f8157806379cc679014610fb55780637e486de314610fd557600080fd5b80636fcfff4514610ead578063706ab67714610ee257806370a0823114610f16578063715018a614610f4c57600080fd5b8063659a8d031161044f578063659a8d0314610e1a5780636612e66f14610e345780636d893c0714610e545780636dd3d39f14610e7457600080fd5b80636059a44c14610dac57806361963f0d14610de5578063620ade9714610dfa57600080fd5b80634f7041a5116104e257806358ebb822116104bc57806358ebb82214610d365780635c19a95c14610d4c5780635d0044ca14610d6c5780635eebea2014610d8c57600080fd5b80634f7041a514610c5b5780635342acb414610ccd578063587cde1e14610cfd57600080fd5b806349bd5a5e1161051e57806349bd5a5e14610bdc5780634bf5d7e914610c105780634e14ec4b14610c255780634ee09f7514610c4557600080fd5b806342966c6814610b7c57806347ee039414610b9c57806348a4647314610bbc57600080fd5b806323b872dd1161061e5780633644e515116105bc5780633a98ef39116105965780633a98ef3914610ae45780633af32abf14610afa5780633f90916a14610b335780633fc8cef314610b4857600080fd5b80633644e51514610a8f5780633950935114610aa45780633a46b1a814610ac457600080fd5b80632f5e8d2a116105f85780632f5e8d2a146109fb5780632ffc162814610a1b578063313ce56714610a3b57806334f4f6b514610a7957600080fd5b806323b872dd146109a557806326cac2c8146109c55780632f3156e6146109e557600080fd5b806314d18a3b1161068b578063186d9d8811610665578063186d9d881461091657806318d9ceae146109365780631d74f4e61461096f57806322b0daec1461098f57600080fd5b806314d18a3b146108625780631694505e146108b557806318160ddd1461090157600080fd5b8063095ea7b3116106c7578063095ea7b3146107d25780630c9be46d146108025780630f3a9f6514610822578063111e03761461084257600080fd5b806301bf6648146107675780630604b2751461078757806306fdde03146107b057600080fd5b3661076257336001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16146107605760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b2b73232b960911b60448201526064015b60405180910390fd5b005b600080fd5b34801561077357600080fd5b50610760610782366004615608565b611743565b34801561079357600080fd5b5061079d602f5481565b6040519081526020015b60405180910390f35b3480156107bc57600080fd5b506107c5611757565b6040516107a79190615669565b3480156107de57600080fd5b506107f26107ed36600461567c565b6117e9565b60405190151581526020016107a7565b34801561080e57600080fd5b5061076061081d366004615608565b611803565b34801561082e57600080fd5b5061076061083d3660046156a6565b61182d565b34801561084e57600080fd5b5061076061085d366004615608565b61183a565b34801561086e57600080fd5b5061088261087d366004615608565b61184b565b6040516107a791908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156108c157600080fd5b506108e97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016107a7565b34801561090d57600080fd5b5060025461079d565b34801561092257600080fd5b50610760610931366004615608565b6118da565b34801561094257600080fd5b506107f2610951366004615608565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561097b57600080fd5b5061076061098a3660046156cd565b611903565b34801561099b57600080fd5b5061079d60165481565b3480156109b157600080fd5b506107f26109c03660046156ea565b611925565b3480156109d157600080fd5b506108e96109e03660046156a6565b6119b5565b3480156109f157600080fd5b5061079d60175481565b348015610a0757600080fd5b50610760610a16366004615608565b6119df565b348015610a2757600080fd5b50610760610a363660046156cd565b611a09565b348015610a4757600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000121681526020016107a7565b348015610a8557600080fd5b5061079d60305481565b348015610a9b57600080fd5b5061079d611a24565b348015610ab057600080fd5b506107f2610abf36600461567c565b611a33565b348015610ad057600080fd5b5061079d610adf36600461567c565b611a55565b348015610af057600080fd5b5061079d601b5481565b348015610b0657600080fd5b506107f2610b15366004615608565b6001600160a01b031660009081526013602052604090205460ff1690565b348015610b3f57600080fd5b5061079d611ada565b348015610b5457600080fd5b506108e97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610b8857600080fd5b50610760610b973660046156a6565b611b17565b348015610ba857600080fd5b50610760610bb7366004615608565b611b21565b348015610bc857600080fd5b50610760610bd73660046156a6565b611b32565b348015610be857600080fd5b506108e97f0000000000000000000000009c459bf82976f25f217a96aee2eba10791d73b9d81565b348015610c1c57600080fd5b506107c5611b3f565b348015610c3157600080fd5b50610760610c403660046156cd565b611bd7565b348015610c5157600080fd5b5061079d601d5481565b348015610c6757600080fd5b50602754610c9a906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016107a7565b348015610cd957600080fd5b506107f2610ce8366004615608565b602b6020526000908152604090205460ff1681565b348015610d0957600080fd5b506108e9610d18366004615608565b6001600160a01b039081166000908152600960205260409020541690565b348015610d4257600080fd5b5061079d602e5481565b348015610d5857600080fd5b50610760610d67366004615608565b611bf2565b348015610d7857600080fd5b50610760610d873660046156a6565b611bfc565b348015610d9857600080fd5b5061079d610da7366004615608565b611c09565b348015610db857600080fd5b506107f2610dc7366004615608565b6001600160a01b031660009081526015602052604090205460ff1690565b348015610df157600080fd5b50610760611c4e565b348015610e0657600080fd5b506025546108e9906001600160a01b031681565b348015610e2657600080fd5b506031546107f29060ff1681565b348015610e4057600080fd5b50610760610e4f366004615726565b6120e7565b348015610e6057600080fd5b50610760610e6f366004615774565b61211a565b348015610e8057600080fd5b506107f2610e8f366004615608565b6001600160a01b03166000908152600e602052604090205460ff1690565b348015610eb957600080fd5b50610ecd610ec8366004615608565b612215565b60405163ffffffff90911681526020016107a7565b348015610eee57600080fd5b506107f27f000000000000000000000000000000000000000000000000000000000000000081565b348015610f2257600080fd5b5061079d610f31366004615608565b6001600160a01b031660009081526020819052604090205490565b348015610f5857600080fd5b50610760612237565b348015610f6d57600080fd5b50610760610f7c366004615726565b61224b565b348015610f8d57600080fd5b506108e97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610fc157600080fd5b50610760610fd036600461567c565b61227b565b348015610fe157600080fd5b5060145460ff166107f2565b348015610ff957600080fd5b5061079d611008366004615608565b612303565b34801561101957600080fd5b5061079d611028366004615608565b612321565b34801561103957600080fd5b50602654610c9a906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b34801561107857600080fd5b50601f5461079d565b34801561108d57600080fd5b50611096612365565b6040516107a797969594939291906157c8565b3480156110b557600080fd5b506107606110c4366004615726565b6123ee565b3480156110d557600080fd5b5061079d60c881565b3480156110ea57600080fd5b50600c546001600160a01b03166108e9565b34801561110857600080fd5b5061079d6111173660046156a6565b612497565b34801561112857600080fd5b50610760611137366004615608565b6124fe565b34801561114857600080fd5b50611151612528565b60405165ffffffffffff90911681526020016107a7565b34801561117457600080fd5b506107606111833660046156a6565b612533565b34801561119457600080fd5b506107c5612601565b3480156111a957600080fd5b506029546107f29060ff1681565b3480156111c357600080fd5b5061079d6111d2366004615608565b612610565b3480156111e357600080fd5b5061079d6103e881565b3480156111f957600080fd5b506107f261120836600461567c565b612692565b34801561121957600080fd5b50610760612718565b34801561122e57600080fd5b506024546108e9906001600160a01b031681565b34801561124e57600080fd5b5061076061125d366004615774565b612727565b34801561126e57600080fd5b506019546107f29060ff1681565b34801561128857600080fd5b506107f261129736600461567c565b61281d565b3480156112a857600080fd5b506107606112b73660046156a6565b612833565b3480156112c857600080fd5b506108e97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156112fc57600080fd5b5061076061130b366004615608565b612840565b34801561131c57600080fd5b506023546108e9906001600160a01b031681565b34801561133c57600080fd5b5061079d60185481565b34801561135257600080fd5b50610760611361366004615608565b61286c565b34801561137257600080fd5b50610760612959565b34801561138757600080fd5b50610760612968565b34801561139c57600080fd5b506107606113ab36600461586f565b61297c565b3480156113bc57600080fd5b5060105461079d565b3480156113d157600080fd5b506107606113e0366004615608565b612ab2565b3480156113f157600080fd5b506107606114003660046156a6565b612afc565b34801561141157600080fd5b506029546107f290610100900460ff1681565b34801561143057600080fd5b50602854610c9a906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b34801561146f57600080fd5b5061076061147e366004615608565b612b09565b34801561148f57600080fd5b5061079d601a5481565b3480156114a557600080fd5b506107606114b4366004615726565b612d3b565b3480156114c557600080fd5b506107606114d43660046156a6565b612d6b565b3480156114e557600080fd5b506107606114f43660046158c7565b612d78565b34801561150557600080fd5b5061079d601c5481565b34801561151b57600080fd5b506108e97f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b781565b34801561154f57600080fd5b5061076061155e3660046156a6565b612edc565b34801561156f57600080fd5b5061079d61157e366004615931565b612eed565b34801561158f57600080fd5b5061076061159e366004615774565b612f18565b3480156115af57600080fd5b506107606115be3660046156cd565b61300f565b3480156115cf57600080fd5b5061079d602a5481565b3480156115e557600080fd5b506107f26115f4366004615608565b602c6020526000908152604090205460ff1681565b34801561161557600080fd5b50600f5461079d565b34801561162a57600080fd5b5061163e611639366004615964565b61302a565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016107a7565b34801561167457600080fd5b50610760611683366004615608565b6130ae565b34801561169457600080fd5b506108e97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156116c857600080fd5b506107f26116d7366004615608565b60226020526000908152604090205460ff1681565b3480156116f857600080fd5b50600d5461079d565b34801561170d57600080fd5b5061079d602d5481565b34801561172357600080fd5b5061079d611732366004615608565b602080526000908152604090205481565b61174b61313c565b61175481613196565b50565b60606003805461176690615999565b80601f016020809104026020016040519081016040528092919081815260200182805461179290615999565b80156117df5780601f106117b4576101008083540402835291602001916117df565b820191906000526020600020905b8154815290600101906020018083116117c257829003601f168201915b5050505050905090565b6000336117f78185856131df565b60019150505b92915050565b61180b61313c565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b61183561313c565b600f55565b61184261313c565b61175481613303565b6118766040518060800160405280600081526020016000815260200160008152602001600081525090565b6000601e6000846001600160a01b03166001600160a01b03168152602001908152602001600020905060405180608001604052808260000154815260200182600101548152602001826002015481526020016118d185611c09565b90529392505050565b6118e261313c565b6001600160a01b03166000908152601560205260409020805460ff19169055565b61190b61313c565b602980549115156101000261ff0019909216919091179055565b60006119318433612eed565b82111561198a5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610757565b61199584848461339b565b6119ab8433846119a58833612eed565b036131df565b5060019392505050565b601f81815481106119c557600080fd5b6000918252602090912001546001600160a01b0316905081565b6119e761313c565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b611a1161313c565b6029805460ff1916911515919091179055565b6000611a2e61376d565b905090565b6000336117f7818585611a468383612eed565b611a5091906159e3565b6131df565b6000611a5f612528565b65ffffffffffff168210611ab15760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610757565b6001600160a01b0383166000908152600a60205260409020611ad39083613898565b9392505050565b6000611a2e601d54611b116a0c097ce7bc90715b34b9f160241b611b0b601b54601a5461398190919063ffffffff16565b9061398d565b90613130565b6117543382613999565b611b2961313c565b611754816139b1565b611b3a61313c565b602a55565b606043611b4a612528565b65ffffffffffff1614611b9f5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610757565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b611bdf61313c565b6019805460ff1916911515919091179055565b61175433826139fd565b611c0461313c565b600d55565b6001600160a01b0381166000908152601e602052604081206001810154601a548254611ad39291611b11916a0c097ce7bc90715b34b9f160241b91611b0b9190613981565b603154610100900460ff1615611c6057565b6031805461ff001916610100179055602a54602d54118015611c8c57506023546001600160a01b031615155b15611d4f5760315460ff1615611d2c577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031603611d1357602d54602354611d0e91906001600160a01b0316613a76565b611d49565b602d54602354611d0e91906001600160a01b0316613b92565b602354602d54611d499130916001600160a01b0390911690613c80565b6000602d555b602a54602e541115611e195760315460ff1615611df6577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031603611ddd57602e54602454611dd891906001600160a01b0316613a76565b611e13565b602e54602454611dd891906001600160a01b0316613b92565b602454602e54611e139130916001600160a01b0390911690613c80565b6000602e555b602a54603054118015611e4a57507f0000000000000000000000000000000000000000000000000000000000000000155b15612072577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031603611ed5576030544790611eb79030613a76565b6000611ec382476159f6565b9050611ece81613e35565b5050612068565b611f016030547f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b7613b92565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b7811660048301526000917f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2909116906370a0823190602401602060405180830381865afa158015611f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb09190615a09565b6040516317d5759960e31b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281166004830152306024830152604482018390529192507f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b79091169063beabacc890606401600060405180830381600087803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b5050505061206681613e35565b505b60006030556120a9565b7f0000000000000000000000000000000000000000000000000000000000000000156120a9576120a3603054613e35565b60006030555b602a54602f541180156120c657506025546001600160a01b031615155b156120da576120d6602f54613ee5565b602f555b6031805461ff0019169055565b6120ef61313c565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b61212261313c565b60c881836121308688615a22565b61213a9190615a22565b6121449190615a22565b6001600160401b031611156121935760405162461bcd60e51b81526020600482015260156024820152740a8e4c2dce6cccae440e8c2f040e8dede40d0d2ced605b1b6044820152606401610757565b604080516080810182526001600160401b0395861680825294861660208201819052938616918101829052919094166060909101819052602680546001600160801b031916909317600160401b909202919091176001600160801b0316600160801b9093026001600160c01b031692909217600160c01b909202919091179055565b6001600160a01b0381166000908152600a60205260408120546117fd9061414c565b61223f61313c565b61224960006141b5565b565b61225361313c565b6001600160a01b0382166000908152601260205260409020805460ff19168215151790555050565b60006122878333612eed565b9050818110156122e75760405162461bcd60e51b815260206004820152602560248201527f45524332304275726e61626c653a20496e73756666696369656e7420616c6c6f60448201526477616e636560d81b6064820152608401610757565b6122f483338484036131df565b6122fe8383613999565b505050565b6001600160a01b0381166000908152600760205260408120546117fd565b6001600160a01b0381166000908152601160209081526040808320600f54845290915281208161234f614207565b8152602001908152602001600020549050919050565b6000606080828080836123997f53656d70697465726e616c00000000000000000000000000000000000000000b6005614227565b6123c47f31000000000000000000000000000000000000000000000000000000000000016006614227565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6123f661313c565b7f0000000000000000000000009c459bf82976f25f217a96aee2eba10791d73b9d6001600160a01b0316826001600160a01b03160361246c5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba1031b430b733b2903830b4b960711b6044820152606401610757565b6001600160a01b03919091166000908152602c60205260409020805460ff1916911515919091179055565b60006124a1612528565b65ffffffffffff1682106124f35760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610757565b6117fd600b83613898565b61250661313c565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6000611a2e436142d2565b805a1080612549575060315462010000900460ff165b156125515750565b6031805462ff00001916620100001790556000805a6021549091506001905b84841080156125805750601f5482105b156125ec576125b5601f828154811061259b5761259b615a49565b6000918252602090912001546001600160a01b0316612b09565b6125ca6125c35a8590613130565b8590613124565b93505a92506125d881614339565b9050816125e481615a5f565b925050612570565b60215550506031805462ff0000191690555050565b60606004805461176690615999565b6001600160a01b0381166000908152600a6020526040812054801561267f576001600160a01b0383166000908152600a602052604090208054600019830190811061265d5761265d615a49565b60009182526020909120015464010000000090046001600160e01b0316612682565b60005b6001600160e01b03169392505050565b600033816126a08286612eed565b9050838110156127005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610757565b61270d82868684036131df565b506001949350505050565b61272061313c565b6001601655565b61272f61313c565b60c8818361273d8688615a22565b6127479190615a22565b6127519190615a22565b6001600160401b0316111561279b5760405162461bcd60e51b815260206004820152601060248201526f084eaf240e8c2f040e8dede40d0d2ced60831b6044820152606401610757565b604080516080810182526001600160401b0395861680825294861660208201819052938616918101829052919094166060909101819052602780546001600160801b031916909317600160401b909202919091176001600160801b0316600160801b9093026001600160c01b031692909217600160c01b909202919091179055565b600061282a33848461339b565b50600192915050565b61283b61313c565b601055565b61284861313c565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b61287461313c565b6001600160a01b03811660009081526022602052604090205460ff166128e85760405162461bcd60e51b8152602060048201526024808201527f484f444c526577617264734469737472696275746f723a206e6f74206578636c6044820152631d59195960e21b6064820152608401610757565b6129108161290b836001600160a01b031660009081526020819052604090205490565b61435b565b6001600160a01b038116600081815260226020526040808220805460ff19169055517f9ccbe1146da67d2d78acc466156a4860eecd4209be8b75a9370e8bf3e949ed1f9190a250565b61296161313c565b6000601655565b61297061313c565b6014805460ff19169055565b834211156129cc5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610757565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090612a4690612a3e9060a0016040516020818303038152906040528051906020012061460a565b858585614637565b9050612a518161465f565b8614612a9f5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610757565b612aa981886139fd565b50505050505050565b612aba61313c565b6001600160a01b0381166000908152601160209081526040808320600f548452909152812081612ae8614207565b815260208101919091526040016000205550565b612b0461313c565b601755565b6001600160a01b0381166000908152601e602052604081206001810154601a548254929392612b519291611b11916a0c097ce7bc90715b34b9f160241b91611b0b9190613981565b905060008111612b6057505050565b6001820154601d54612b7191613130565b601d55601a548254612b96916a0c097ce7bc90715b34b9f160241b91611b0b91613981565b60018301819055601d54612ba991613124565b601d5560007f000000000000000000000000000000000000000000000000000000000000000115612c3b576040516001600160a01b038516908390600081818185875af1925050503d8060008114612c1d576040519150601f19603f3d011682016040523d82523d6000602084013e612c22565b606091505b50508091505080612c3657612c3682613e35565b612cd4565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2169063a9059cbb906044016020604051808303816000875af1158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190615a78565b50600190505b8015612d355760405182906001600160a01b038616907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a90600090a36002830154612d1f9083613124565b6002840155601c54612d319083613124565b601c555b50505050565b612d4361313c565b6001600160a01b0382166000908152600e60205260409020805460ff19168215151790555050565b612d7361313c565b601855565b83421115612dc85760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610757565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888612df78c61465f565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000612e528261460a565b90506000612e6282878787614637565b9050896001600160a01b0316816001600160a01b031614612ec55760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610757565b612ed08a8a8a6131df565b50505050505050505050565b612ee461313c565b61175481613e35565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612f2061313c565b60c88183612f2e8688615a22565b612f389190615a22565b612f429190615a22565b6001600160401b03161115612f8d5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610757565b604080516080810182526001600160401b0395861680825294861660208201819052938616918101829052919094166060909101819052602880546001600160801b031916909317600160401b909202919091176001600160801b0316600160801b9093026001600160c01b031692909217600160c01b909202919091179055565b61301761313c565b6031805460ff1916911515919091179055565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020805463ffffffff841690811061306e5761306e615a49565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6130b661313c565b6001600160a01b03811661311b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b611754816141b5565b6000611ad382846159e3565b6000611ad382846159f6565b600c546001600160a01b031633146122495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610757565b6001600160a01b038116600081815260136020526040808220805460ff19169055517f9354cd337eebad48c93d70f7321b188732c3061fa5c48fe32b8e6f9480c52fcc9190a250565b6001600160a01b0383166132415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610757565b6001600160a01b0382166132a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610757565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03811660009081526022602052604090205460ff16156133275750565b600061333282611c09565b905061333f82600061435b565b801561334e5761334e81613e35565b6001600160a01b038216600081815260226020526040808220805460ff19166001179055517f743dcd4a012534912a3350f3ed8937d3b4f0771c62892ed15e4373dc2c5f584a9190a25050565b6001600160a01b0383163014806133ba57506001600160a01b03821630145b156133ca576122fe838383613c80565b7f0000000000000000000000009c459bf82976f25f217a96aee2eba10791d73b9d6001600160a01b0316836001600160a01b0316141580156134135750602954610100900460ff165b1561342057613420611c4e565b60295460ff1615806134395750603154610100900460ff165b8061345c57506001600160a01b0383166000908152602b602052604090205460ff165b8061347f57506001600160a01b0382166000908152602b602052604090205460ff165b80613488575080155b15613498576122fe838383613c80565b6040805160808101825260008082526020820181905291810182905260608101919091526001600160a01b0384166000908152602c6020526040812054819060ff1615801561350057506001600160a01b0385166000908152602c602052604090205460ff16155b1561355357604080516080810182526026546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201529250613631565b6001600160a01b0386166000908152602c602052604090205460ff16801561359457506001600160a01b0385166000908152602c602052604090205460ff16155b156135e757604080516080810182526027546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201529250613631565b604080516080810182526028546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015292505b505060608101516040820151602083015183510101016103e86001600160401b038216840204801561366857613668863083613c80565b61367c868661367784886159f6565b613c80565b816001600160401b031660000361369557505050505050565b82516001600160401b0380841691168202816136b3576136b3615a95565b04602d60008282540192505081905550816001600160401b031683602001516001600160401b03168202816136ea576136ea615a95565b04602f60008282540192505081905550816001600160401b031683604001516001600160401b031682028161372157613721615a95565b04602e60008282540192505081905550816001600160401b031683606001516001600160401b031682028161375857613758615a95565b60308054929091049091019055505050505050565b6000306001600160a01b037f000000000000000000000000f1ecb4735cec79709af1fc6dc2321039f618ab2f161480156137c657507f000000000000000000000000000000000000000000000000000000000000000146145b156137f057507f55fabe524c60eb02c82211218006170405af601809825ddf673237e5163844b790565b611a2e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527fce3f21959bffbecc950686a1dfb4397f4fd19e7b39e48e36a6e1157bcc5e41bc918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8154600090818160058111156138f25760006138b384614687565b6138bd90856159f6565b600088815260209020909150869082015463ffffffff1611156138e2578091506138f0565b6138ed8160016159e3565b92505b505b8082101561393f576000613906838361476f565b600088815260209020909150869082015463ffffffff16111561392b57809150613939565b6139368160016159e3565b92505b506138f2565b801561396b576000868152602090208101600019015464010000000090046001600160e01b031661396e565b60005b6001600160e01b03169695505050505050565b6000611ad38284615aab565b6000611ad38284615ac2565b6139a3828261478a565b612d35600b613130836148cf565b6001600160a01b038116600081815260136020526040808220805460ff19166001179055517f8a3be376fdc726be3f3cee8e59ba5698a268a9b59f69cdabcf06d2ec2c90658f9190a250565b6001600160a01b038281166000818152600960208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4612d35828483614a44565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613aab57613aab615a49565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110613aff57613aff615a49565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790613b64908690600090869088904290600401615ae4565b600060405180830381600087803b158015613b7e57600080fd5b505af1158015612aa9573d6000803e3d6000fd5b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613bc757613bc7615a49565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110613c1b57613c1b615a49565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d90911690635c11d79590613b64908690600090869088904290600401615ae4565b6001600160a01b038316613ce45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610757565b6001600160a01b038216613d465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610757565b613d51838383614b81565b6001600160a01b03831660009081526020819052604090205481811015613dc95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610757565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612d35848484614b97565b601b54600003613e5257603254613e4c9082613124565b60325550565b613eb0613e7e601b54611b0b6a0c097ce7bc90715b34b9f160241b60325461398190919063ffffffff16565b601b54613eaa90613ea190611b0b866a0c097ce7bc90715b34b9f160241b613981565b601a5490613124565b90613124565b601a556000603281905560405182917ff8fad42e780bfa5459be3fe691e8ba1aec70342250112139c5771c3fd155f31291a250565b600080613ef3600284615ac2565b90506000613f0182856159f6565b905060007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031603613f9d5747613f698430613a76565b6000613f7582476159f6565b90506000613f838583614be1565b505090508085613f9391906159f6565b9350505050614144565b613fc7837f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b7613b92565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b7811660048301526000917f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2909116906370a0823190602401602060405180830381865afa158015614052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140769190615a09565b6040516317d5759960e31b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281166004830152306024830152604482018390529192507f000000000000000000000000399422259322518ce88c88ac7f115d038b73d1b79091169063beabacc890606401600060405180830381600087803b15801561410b57600080fd5b505af115801561411f573d6000803e3d6000fd5b50505050600061412f8483614ca7565b50509050808461413f91906159f6565b925050505b949350505050565b600063ffffffff8211156141b15760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610757565b5090565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080600f541161421957600161421d565b600f545b611a2e9042615ac2565b606060ff83146142415761423a83614d8c565b90506117fd565b81805461424d90615999565b80601f016020809104026020016040519081016040528092919081815260200182805461427990615999565b80156142c65780601f1061429b576101008083540402835291602001916142c6565b820191906000526020600020905b8154815290600101906020018083116142a957829003601f168201915b505050505090506117fd565b600065ffffffffffff8211156141b15760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610757565b60008161434581615a5f565b601f54909350831090506141b157600191505090565b6001600160a01b0382166000908152601e602052604090208054601b54614387918491613eaa91613130565b601b556001810154601d5461439b91613130565b601d55818155601a546143c3906a0c097ce7bc90715b34b9f160241b90611b0b908590613981565b60018201819055601d546143d691613124565b601d558054158015906143fe57506001600160a01b0383166000908152602080526040902054155b1561447957601f80546001808201835560008390527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b0319166001600160a01b038716179055905461445c91906159f6565b6001600160a01b03841660009081526020805260409020556145cf565b805415801561449e57506001600160a01b038316600090815260208052604090205415155b156145cf576001600160a01b0383166000908152602080526040902054601f80546144cb906001906159f6565b815481106144db576144db615a49565b600091825260209091200154601f80546001600160a01b03909216918390811061450757614507615a49565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060206000601f6001601f8054905061454e91906159f6565b8154811061455e5761455e615a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902055601f80548061459457614594615b55565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038616825280526040812055505b60405182906001600160a01b038516907f465bc1e774b3c331b04932a22f9781dbb864defe943d70548ba9b8af6c528b5c90600090a3505050565b60006117fd61461761376d565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061464887878787614dcb565b9150915061465581614e8f565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60008160000361469957506000919050565b600060016146a684614fd9565b901c6001901b905060018184816146bf576146bf615a95565b048201901c905060018184816146d7576146d7615a95565b048201901c905060018184816146ef576146ef615a95565b048201901c9050600181848161470757614707615a95565b048201901c9050600181848161471f5761471f615a95565b048201901c9050600181848161473757614737615a95565b048201901c9050600181848161474f5761474f615a95565b048201901c9050611ad38182858161476957614769615a95565b0461506d565b600061477e6002848418615ac2565b611ad3908484166159e3565b6001600160a01b0382166147ea5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610757565b6147f682600083614b81565b6001600160a01b0382166000908152602081905260409020548181101561486a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610757565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36122fe83600084614b97565b8254600090819081811561491c5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152614931565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061495184868863ffffffff16565b925060008211801561497b5750614966612528565b65ffffffffffff16816000015163ffffffff16145b156149c05761498983615083565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff909216919091179055614a3a565b8660405180604001604052806149e46149d7612528565b65ffffffffffff1661414c565b63ffffffff1681526020016149f886615083565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b816001600160a01b0316836001600160a01b031614158015614a665750600081115b156122fe576001600160a01b03831615614af4576001600160a01b0383166000908152600a602052604081208190614aa190613130856148cf565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051614ae9929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156122fe576001600160a01b0382166000908152600a602052604081208190614b2a90613124856148cf565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051614b72929190918252602082015260400190565b60405180910390a25050505050565b614b8c8383836150ec565b6122fe8383836151f4565b614ba28383836152a2565b614bad83838361536d565b614bb88383836154ae565b614bc1836154b9565b614bca826154b9565b603154610100900460ff166122fe576122fe615529565b60255460405163f305d71960e01b815230600482015260248101849052600060448201819052606482018190526001600160a01b0392831660848301524260a483015291829182917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990869060c40160606040518083038185885af1158015614c75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614c9a9190615b6b565b9250925092509250925092565b60255460405162e8e33760e81b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281166024830152604482018590526064820184905260006084830181905260a4830181905292811660c48301524260e4830152829182917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063e8e3370090610104016060604051808303816000875af1158015614d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9a9190615b6b565b60606000614d9983615560565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614e025750600090506003614e86565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614e56573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614e7f57600060019250925050614e86565b9150600090505b94509492505050565b6000816004811115614ea357614ea3615b99565b03614eab5750565b6001816004811115614ebf57614ebf615b99565b03614f0c5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610757565b6002816004811115614f2057614f20615b99565b03614f6d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610757565b6003816004811115614f8157614f81615b99565b036117545760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610757565b600080608083901c15614fee57608092831c92015b604083901c1561500057604092831c92015b602083901c1561501257602092831c92015b601083901c1561502457601092831c92015b600883901c1561503657600892831c92015b600483901c1561504857600492831c92015b600283901c1561505a57600292831c92015b600183901c156117fd5760010192915050565b600081831061507c5781611ad3565b5090919050565b60006001600160e01b038211156141b15760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610757565b6014548390839060ff16158061510957506001600160a01b038216155b8061511b57506001600160a01b038116155b8061513e57506001600160a01b03821660009081526013602052604090205460ff165b8061516157506001600160a01b03811660009081526013602052604090205460ff165b806151795750600c546001600160a01b038381169116145b806151915750600c546001600160a01b038281169116145b6151ed5760405162461bcd60e51b815260206004820152602760248201527f45524332304c61756e63684d6f64653a204c61756e6368206d6f646520697320604482015266195b98589b195960ca1b6064820152608401610757565b5050505050565b82826016546000148061524457506001600160a01b03821660009081526015602052604090205460ff1615801561524457506001600160a01b03811660009081526015602052604090205460ff16155b6151ed5760405162461bcd60e51b815260206004820152602960248201527f426c6f636b4c6973743a204f6e65206f6620746865206163636f756e747320696044820152681cc8189b1bd8dad95960ba1b6064820152608401610757565b81600d54600014806152bb57506001600160a01b038116155b806152de57506001600160a01b0381166000908152600e602052604090205460ff165b806153035750600d546001600160a01b03821660009081526020819052604090205411155b612d355760405162461bcd60e51b815260206004820152603560248201527f4d617857616c6c65743a2057616c6c65742062616c616e6365206578636565646044820152741cc81d1a19481b585e15d85b1b195d105b5bdd5b9d605a1b6064820152608401610757565b6000615377614207565b9050600060105411801561539357506001600160a01b03841615155b80156153b857506001600160a01b03841660009081526012602052604090205460ff16155b15612d35576001600160a01b0384166000908152601160209081526040808320600f5484528252808320848452909152812080548492906153fa9084906159e3565b90915550506010546001600160a01b0385166000908152601160209081526040808320600f54845282528083208584529091529020541115612d355760405162461bcd60e51b815260206004820152604160248201527f4d61785472616e73616374696f6e3a205472616e7366657220616d6f756e742060448201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e746064820152601760f91b608482015260a401610757565b6122fe838383615588565b6001600160a01b03811660009081526022602052604090205460ff1661175457611754816017546154ff846001600160a01b031660009081526020819052604090205490565b1161550b5760006155ba565b6001600160a01b0383166000908152602081905260409020546155ba565b60195460ff1615612249576122496018545a116155585760645a61554e906050615aab565b6111839190615ac2565b601854612533565b600060ff8216601f8111156117fd57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038381166000908152600960205260408082205485841683529120546122fe92918216911683614a44565b6001600160a01b0382166000908152601e602052604090208054156155e2576155e283612b09565b6122fe838361435b565b80356001600160a01b038116811461560357600080fd5b919050565b60006020828403121561561a57600080fd5b611ad3826155ec565b6000815180845260005b818110156156495760208185018101518683018201520161562d565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611ad36020830184615623565b6000806040838503121561568f57600080fd5b615698836155ec565b946020939093013593505050565b6000602082840312156156b857600080fd5b5035919050565b801515811461175457600080fd5b6000602082840312156156df57600080fd5b8135611ad3816156bf565b6000806000606084860312156156ff57600080fd5b615708846155ec565b9250615716602085016155ec565b9150604084013590509250925092565b6000806040838503121561573957600080fd5b615742836155ec565b91506020830135615752816156bf565b809150509250929050565b80356001600160401b038116811461560357600080fd5b6000806000806080858703121561578a57600080fd5b6157938561575d565b93506157a16020860161575d565b92506157af6040860161575d565b91506157bd6060860161575d565b905092959194509250565b60ff60f81b881681526000602060e0818401526157e860e084018a615623565b83810360408501526157fa818a615623565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561584c57835183529284019291840191600101615830565b50909c9b505050505050505050505050565b803560ff8116811461560357600080fd5b60008060008060008060c0878903121561588857600080fd5b615891876155ec565b955060208701359450604087013593506158ad6060880161585e565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a0312156158e257600080fd5b6158eb886155ec565b96506158f9602089016155ec565b955060408801359450606088013593506159156080890161585e565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561594457600080fd5b61594d836155ec565b915061595b602084016155ec565b90509250929050565b6000806040838503121561597757600080fd5b615980836155ec565b9150602083013563ffffffff8116811461575257600080fd5b600181811c908216806159ad57607f821691505b60208210810361468157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156117fd576117fd6159cd565b818103818111156117fd576117fd6159cd565b600060208284031215615a1b57600080fd5b5051919050565b6001600160401b03818116838216019080821115615a4257615a426159cd565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201615a7157615a716159cd565b5060010190565b600060208284031215615a8a57600080fd5b8151611ad3816156bf565b634e487b7160e01b600052601260045260246000fd5b80820281158282048414176117fd576117fd6159cd565b600082615adf57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615b345784516001600160a01b031683529383019391830191600101615b0f565b50506001600160a01b03969096166060850152505050608001529392505050565b634e487b7160e01b600052603160045260246000fd5b600080600060608486031215615b8057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052602160045260246000fdfea264697066735822122029f10bce8d03806b87270fdacd64fdc5a0c201514539c4a19b2b842932a3be9b64736f6c63430008130033
Verified Source Code Partial Match
Compiler: v0.8.19+commit.7dd6d404
EVM: paris
Optimization: Yes (200 runs)
DividendsTokenCustomAntiBotLaunchBlockBurnVotes.sol 6987 lines
pragma solidity ^0.8.18;
//
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
//
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
//
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
//
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
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;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
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;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
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;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
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);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint 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 (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint 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 (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
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 (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
//
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
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);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
//
abstract contract Ownable is Context {
address _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor(address _ownerAddress) {
_transferOwnership(_ownerAddress);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
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);
}
}
//
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
//
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
//
// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
* Revert on invalid signature.
*/
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
...
// [truncated — 231600 bytes total]
Read Contract
CLOCK_MODE 0x4bf5d7e9 → string
DOMAIN_SEPARATOR 0x3644e515 → bytes32
MAX_TAX 0x86a35f25 → uint256
PERCENT_DENOMINATOR 0x9e6c2959 → uint256
accPerShare 0xd2890a01 → uint256
allShareHolders 0x26cac2c8 → address
allowance 0xdd62ed3e → uint256
autoDistribute 0xa8f11eb9 → bool
autoLiquidityAddress 0x620ade97 → address
autoLiquidityReserves 0x0604b275 → uint256
balanceOf 0x70a08231 → uint256
blockListEnabled 0x22b0daec → uint256
buyTax 0x4f7041a5 → uint64, uint64, uint64, uint64
charityAddress 0xafcf2fc4 → address
charityReserves 0xf9077d6c → uint256
checkpoints 0xf1127ed8 → tuple
clock 0x91ddadf4 → uint48
decimals 0x313ce567 → uint8
delegates 0x587cde1e → address
eip712Domain 0x84b0196e → bytes1, string, string, uint256, address, bytes32, uint256[]
excludedFromRewards 0xf82f235f → bool
getCurrentQuota 0x7fd9fdf7 → uint256
getPastTotalSupply 0x8e539e8c → uint256
getPastVotes 0x3a46b1a8 → uint256
getVotes 0x9ab24eb0 → uint256
holders 0x8188f71c → uint256
indexOfShareHolders 0xfb558828 → uint256
isExcludedFromFee 0x5342acb4 → bool
isExcludedFromMaxTransaction 0x18d9ceae → bool
isExcludedFromMaxWallet 0x6dd3d39f → bool
isInBlockList 0x6059a44c → bool
isInLaunchMode 0x7e486de3 → bool
isPair 0xe5e31b13 → bool
isTaxActive 0x98a0dd09 → bool
isWhitelisted 0x3af32abf → bool
mainLPToken 0xabd5d00e → address
marketingAddress 0xa5ece941 → address
marketingReserves 0x58ebb822 → uint256
maxAutoProcessGas 0xaffdcb55 → uint256
maxTransaction 0xc3f70b52 → uint256
maxWallet 0xf8b45b05 → uint256
minShareForRewards 0x2f3156e6 → uint256
minTokensBeforeSwap 0xe5d41c6b → uint256
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
numCheckpoints 0x6fcfff45 → uint32
owner 0x8da5cb5b → address
pending 0x5eebea20 → uint256
period 0xef78d4fd → uint256
reflectionReserves 0x34f4f6b5 → uint256
rewardToken 0xf7c618c1 → address
sameTokenForRewards 0x706ab677 → bool
sellTax 0xcc1776d3 → uint64, uint64, uint64, uint64
shareHolderInfo 0x14d18a3b → tuple
swapAndLiquifyActive 0xcae36729 → bool
swapTaxes 0x659a8d03 → bool
symbol 0x95d89b41 → string
tempHolder 0xd8e8b15a → address
totalClaimed 0xd54ad2a1 → uint256
totalPending 0x3f90916a → uint256
totalRewardsDebt 0x4ee09f75 → uint256
totalShares 0x3a98ef39 → uint256
totalSupply 0x18160ddd → uint256
transferTax 0x8124f7ac → uint64, uint64, uint64, uint64
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
weth 0x3fc8cef3 → address
wrappedNativeAddress 0x76ab8136 → address
Write Contract 46 functions
These functions modify contract state and require a wallet transaction to execute.
addToWhiteList 0x47ee0394
address account
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
batchProcessClaims 0x92aee152
uint256 gas
blockAddress 0xad2bb1b3
address account
burn 0x42966c68
uint256 amount
burnFrom 0x79cc6790
address account
uint256 amount
claimPending 0xd017f483
address sharholderAddress_
clearPeriodQuota 0xc8e77996
address account
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
delegate 0x5c19a95c
address delegatee
delegateBySig 0xc3cda520
address delegatee
uint256 nonce
uint256 expiry
uint8 v
bytes32 r
bytes32 s
disableBlockList 0xbff5daca
No parameters
disableLaunchMode 0xc1f73754
No parameters
enableBlockList 0xa5d01862
No parameters
excludeFromMaxTransaction 0x7571336a
address account
bool _exclude
excludeFromMaxWallet 0xd2fcc001
address account
bool exclude
excludeFromRewards 0x111e0376
address shareHolderToBeExcluded_
includeInRewards 0xb609995e
address shareHolderToBeIncluded_
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
permit 0xd505accf
address owner
address spender
uint256 value
uint256 deadline
uint8 v
bytes32 r
bytes32 s
processReserves 0x61963f0d
No parameters
removeFromWhiteList 0x01bf6648
address account
renounceOwnership 0x715018a6
No parameters
setAutoDistribute 0x4e14ec4b
bool _autoDistribute
setAutoLiquidityAddress 0x2f5e8d2a
address _autoLiquidityAddress
setBuyTax 0xa69197b5
uint64 _charity
uint64 _autoLiquidity
uint64 _marketing
uint64 _holdersRewards
setCharityAddress 0x0c9be46d
address _charityAddress
setExcludedFromFee 0x6612e66f
address account
bool excluded
setMarketingAddress 0x906e9dd0
address _marketingAddress
setMaxTransaction 0xab5a1887
uint256 _maxTransactionAmount
setMaxWallet 0x5d0044ca
uint256 _maxWalletAmount
setMinSharePerRewards 0xc9263860
uint256 _minSharePerRewards
setMinTokensBeforeSwap 0x48a46473
uint256 _minTokensBeforeSwap
setPair 0x86a22eff
address pair
bool value
setPeriod 0x0f3a9f65
uint256 _periodInSeconds
setProcessingGasLimit 0xd3f6ab1c
uint256 maxAmount_
setSellTax 0xe4ae7f3a
uint64 _charity
uint64 _autoLiquidity
uint64 _marketing
uint64 _holdersRewards
setSwapAndLiquifyActive 0x1d74f4e6
bool _swapAndLiquifyActive
setSwapTaxes 0xe5c35120
bool _swapTaxes
setTaxActive 0x2ffc1628
bool value
setTransferTax 0x6d893c07
uint64 _charity
uint64 _autoLiquidity
uint64 _marketing
uint64 _holdersRewards
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unblockAddress 0x186d9d88
address account
updateGlobalShares 0xd9540288
uint256 amount_
Recent Transactions
No transactions found for this address