ETH Price: $2,508.04 (+0.25%)

Contract

0x4889F721f80C5E9fadE6Ea9B85835D405D79a4f4
 

Overview

ETH Balance

120 wei

Eth Value

Less Than $0.01 (@ $2,508.04/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve205760862024-08-21 9:25:2372 days ago1724232323IN
Mafi.Network: MAFI Token
0 ETH0.000047421.54031906
Approve205760842024-08-21 9:24:5972 days ago1724232299IN
Mafi.Network: MAFI Token
0 ETH0.000047441.54089921
Approve198370952024-05-10 3:57:11176 days ago1715313431IN
Mafi.Network: MAFI Token
0 ETH0.000114893.73116592
Approve170113372023-04-09 14:29:35572 days ago1681050575IN
Mafi.Network: MAFI Token
0 ETH0.0006278520.39032577
Approve168137732023-03-12 18:37:23600 days ago1678646243IN
Mafi.Network: MAFI Token
0 ETH0.0010870935.30445942
Approve143830812022-03-14 6:17:13964 days ago1647238633IN
Mafi.Network: MAFI Token
0 ETH0.0014975245.66735688
Approve143830642022-03-14 6:10:48964 days ago1647238248IN
Mafi.Network: MAFI Token
0 ETH0.0005472617.77307782
Approve142402642022-02-20 2:32:36986 days ago1645324356IN
Mafi.Network: MAFI Token
0 ETH0.0021759470.66584579
Approve137165512021-11-30 19:07:231067 days ago1638299243IN
Mafi.Network: MAFI Token
0 ETH0.01677201316
Approve137072252021-11-29 7:14:181069 days ago1638170058IN
Mafi.Network: MAFI Token
0 ETH0.0050458695.06861349
Approve135837952021-11-09 18:37:431088 days ago1636483063IN
Mafi.Network: MAFI Token
0 ETH0.00547404165
Approve135837912021-11-09 18:36:401088 days ago1636483000IN
Mafi.Network: MAFI Token
0 ETH0.00875754165
Approve128177932021-07-13 8:45:261207 days ago1626165926IN
Mafi.Network: MAFI Token
0 ETH0.0012207423
Approve123761732021-05-05 19:37:261276 days ago1620243446IN
Mafi.Network: MAFI Token
0 ETH0.0013178864
Approve119412032021-02-27 19:25:231343 days ago1614453923IN
Mafi.Network: MAFI Token
0 ETH0.0027928297
Approve119175742021-02-24 3:55:591347 days ago1614138959IN
Mafi.Network: MAFI Token
0 ETH0.00551486114
Approve118522102021-02-14 2:53:411357 days ago1613271221IN
Mafi.Network: MAFI Token
0 ETH0.0044989693
Approve116808072021-01-18 18:17:271383 days ago1610993847IN
Mafi.Network: MAFI Token
0 ETH0.0034830772
Approve116626712021-01-15 23:17:321386 days ago1610752652IN
Mafi.Network: MAFI Token
0 ETH0.0023220448
Approve116019942021-01-06 15:55:061395 days ago1609948506IN
Mafi.Network: MAFI Token
0 ETH0.00667588138
Approve115403072020-12-28 4:52:081405 days ago1609131128IN
Mafi.Network: MAFI Token
0 ETH0.0008636148
Approve115310282020-12-26 18:45:201406 days ago1609008320IN
Mafi.Network: MAFI Token
0 ETH0.0027090556
Approve115310262020-12-26 18:44:591406 days ago1609008299IN
Mafi.Network: MAFI Token
0 ETH0.0027090556
Approve115309872020-12-26 18:33:521406 days ago1609007632IN
Mafi.Network: MAFI Token
0 ETH0.0027090556
Approve114940262020-12-21 2:40:121412 days ago1608518412IN
Mafi.Network: MAFI Token
0 ETH0.0039184581
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
139583342022-01-07 12:27:111029 days ago1641558431
Mafi.Network: MAFI Token
 Contract Creation0 ETH
137276082021-12-02 13:30:331065 days ago1638451833
Mafi.Network: MAFI Token
 Contract Creation0 ETH
137165732021-11-30 19:12:551067 days ago1638299575
Mafi.Network: MAFI Token
 Contract Creation0 ETH
136824592021-11-25 8:38:211072 days ago1637829501
Mafi.Network: MAFI Token
 Contract Creation0 ETH
136824592021-11-25 8:38:211072 days ago1637829501
Mafi.Network: MAFI Token
 Contract Creation0 ETH
135541782021-11-05 3:23:261093 days ago1636082606
Mafi.Network: MAFI Token
 Contract Creation0 ETH
135510652021-11-04 15:38:311093 days ago1636040311
Mafi.Network: MAFI Token
 Contract Creation0 ETH
111993382020-11-05 20:17:481457 days ago1604607468
Mafi.Network: MAFI Token
 Contract Creation0 ETH
110351692020-10-11 16:02:531482 days ago1602432173
Mafi.Network: MAFI Token
 Contract Creation0 ETH
110197612020-10-09 6:49:071485 days ago1602226147
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109697152020-10-01 10:47:431492 days ago1601549263
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109633702020-09-30 11:04:181493 days ago1601463858
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109535042020-09-28 21:55:561495 days ago1601330156
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109517012020-09-28 15:18:161495 days ago1601306296
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109486892020-09-28 3:39:491496 days ago1601264389
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109463692020-09-27 19:06:201496 days ago1601233580
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109462732020-09-27 18:44:081496 days ago1601232248
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109460692020-09-27 17:57:001496 days ago1601229420
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109289442020-09-25 1:50:301499 days ago1600998630
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109272222020-09-24 19:27:501499 days ago1600975670
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109230782020-09-24 4:18:141500 days ago1600921094
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109214782020-09-23 22:22:381500 days ago1600899758
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109214572020-09-23 22:18:201500 days ago1600899500
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109213822020-09-23 21:58:581500 days ago1600898338
Mafi.Network: MAFI Token
 Contract Creation0 ETH
109161022020-09-23 2:29:481501 days ago1600828188
Mafi.Network: MAFI Token
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Mafia

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-06
*/

pragma solidity ^0.5.10;


library Farm {
    using Farm for Farm.Family;

    struct Family {
        uint256[] entries;
        mapping(address => uint256) index;
    }

    function initialize(Family storage _family) internal {
        require(_family.entries.length == 0, "already initialized");
        _family.entries.push(0);
    }

    function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
        /* solium-disable-next-line */
        assembly {
            _entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
        }
    }

    function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
        /* solium-disable-next-line */
        assembly {
            let entry := not(_entry)
            _addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff)
            _value := shr(160, entry)
        }
    }

    function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
        /* solium-disable-next-line */
        assembly {
            _addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }

    function top(Family storage _family) internal view returns (address, uint256) {
        if (_family.entries.length < 2) {
            return (address(0), 0);
        }
        return decode(_family.entries[1]);
    }

    function has(Family storage _family, address _addr) internal view returns (bool) {
        return _family.index[_addr] != 0;
    }

    function size(Family storage _family) internal view returns (uint256) {
        return _family.entries.length - 1;
    }

    function entry(Family storage _family, uint256 _i) internal view returns (address, uint256) {
        return decode(_family.entries[_i + 1]);
    }

    function popTop(Family storage _family) internal returns (address _addr, uint256 _value) {
        uint256 familyLength = _family.entries.length;
        require(familyLength > 1, "The family does not exists");

        (_addr, _value) = decode(_family.entries[1]);
        _family.index[_addr] = 0;

        if (familyLength == 2) {
            _family.entries.length = 1;
        } else {
            uint256 val = _family.entries[familyLength - 1];
            _family.entries[1] = val;
            _family.entries.length = familyLength - 1;
            uint256 ind = 1;
            ind = _family.bubbleDown(ind, val);
            _family.index[decodeAddress(val)] = ind;
        }
    }

    function insert(Family storage _family, address _addr, uint256 _value) internal {
        require(_family.index[_addr] == 0, "The entry already exists");
        uint256 encoded = encode(_addr, _value);
        _family.entries.push(encoded);
        uint256 currentIndex = _family.entries.length - 1;
        currentIndex = _family.bubbleUp(currentIndex, encoded);
        _family.index[_addr] = currentIndex;
    }

    function update(Family storage _family, address _addr, uint256 _value) internal {
        uint256 ind = _family.index[_addr];
        require(ind != 0, "The entry does not exists");

        uint256 can = encode(_addr, _value);
        uint256 val = _family.entries[ind];
        uint256 newInd;

        if (can < val) {
            newInd = _family.bubbleDown(ind, can);
        } else if (can > val) {
            newInd = _family.bubbleUp(ind, can);
        } else {
            return;
        }
        _family.entries[newInd] = can;
        if (newInd != ind) {
            _family.index[_addr] = newInd;
        }
    }

    function bubbleUp(Family storage _family, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        ind = _ind;
        if (ind != 1) {
            uint256 fam = _family.entries[ind / 2];
            while (fam < _val) {
                (_family.entries[ind / 2], _family.entries[ind]) = (_val, fam);
                _family.index[decodeAddress(fam)] = ind;
                ind = ind / 2;
                if (ind == 1) {
                    break;
                }
                fam = _family.entries[ind / 2];
            }
        }
    }

    function bubbleDown(Family storage _family, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        ind = _ind;
        uint256 lenght = _family.entries.length;
        uint256 target = lenght - 1;

        while (ind * 2 < lenght) {
            uint256 j = ind * 2;
            uint256 leftMobster = _family.entries[j];
            uint256 mobsterValue;

            if (target > j) {
                uint256 rightMobster = _family.entries[j + 1];
                if (leftMobster < rightMobster) {
                    mobsterValue = rightMobster;
                    j = j + 1;
                } else {
                    mobsterValue = leftMobster;
                }
            } else {
                mobsterValue = leftMobster;
            }
            if (_val > mobsterValue) {
                break;
            }
            (_family.entries[ind], _family.entries[j]) = (mobsterValue, _val);
            _family.index[decodeAddress(mobsterValue)] = ind;
            ind = j;
        }
    }
}


interface IERC20 {
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    function approve(address _spender, uint256 _value) external returns (bool success);
    function balanceOf(address _owner) external view returns (uint256 balance);
}


contract GasPump {
    bytes32 private stub;

    modifier requestGas(uint256 _factor) {
        if (tx.gasprice == 0 || gasleft() > block.gaslimit) {
            uint256 startgas = gasleft();
            _;
            uint256 delta = startgas - gasleft();
            uint256 target = (delta * _factor) / 100;
            startgas = gasleft();
            while (startgas - gasleft() < target) {
                stub = keccak256(abi.encodePacked(stub));
            }
        } else {
            _;
        }
    }
}


library Math {
    function orderOfMagnitude(uint256 input) internal pure returns (uint256){
        uint256 counter = uint(-1);
        uint256 temp = input;

        do {
            temp /= 10;
            counter++;
        } while (temp != 0);

        return counter;
    }

    function min(uint256 _a, uint256 _b) internal pure returns (uint256) {
        if (_a < _b) {
            return _a;
        } else {
            return _b;
        }
    }

    function max(uint256 _a, uint256 _b) internal pure returns (uint256) {
        if (_a > _b) {
            return _a;
        } else {
            return _b;
        }
    }
}


library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256) {
        uint256 z = x + y;
        require(z >= x, "Add overflow");
        return z;
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256) {
        require(x >= y, "Sub underflow");
        return x - y;
    }

    function mult(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return 0;
        }

        uint256 z = x * y;
        require(z / x == y, "Mult overflow");
        return z;
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        return x / y;
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}


library IsContract {
    function isContract(address _addr) internal view returns (bool) {
        bytes32 codehash;
        /* solium-disable-next-line */
        assembly {codehash := extcodehash(_addr)}
        return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
    }
}


contract StorageUnit {
    address private owner;
    mapping(bytes32 => bytes32) private store;

    constructor() public {
        owner = msg.sender;
    }

    function write(bytes32 _key, bytes32 _value) external {
        /* solium-disable-next-line */
        require(msg.sender == owner);
        store[_key] = _value;
    }

    function read(bytes32 _key) external view returns (bytes32) {
        return store[_key];
    }
}


library DistributedStorage {
    function contractSlot(bytes32 _struct) private view returns (address) {
        return address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        byte(0xff),
                        address(this),
                        _struct,
                        keccak256(type(StorageUnit).creationCode)
                    )
                )
            )
        );
    }

    function deploy(bytes32 _struct) private {
        bytes memory slotcode = type(StorageUnit).creationCode;
        /* solium-disable-next-line */
        assembly{pop(create2(0, add(slotcode, 0x20), mload(slotcode), _struct))}
    }

    function write(
        bytes32 _struct,
        bytes32 _key,
        bytes32 _value
    ) internal {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            deploy(_struct);
        }

        /* solium-disable-next-line */
        (bool success,) = address(store).call(
            abi.encodeWithSelector(
                store.write.selector,
                _key,
                _value
            )
        );

        require(success, "error writing storage");
    }

    function read(
        bytes32 _struct,
        bytes32 _key
    ) internal view returns (bytes32) {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            return bytes32(0);
        }

        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(store).staticcall(
            abi.encodeWithSelector(
                store.read.selector,
                _key
            )
        );

        require(success, "error reading storage");
        return abi.decode(data, (bytes32));
    }
}


contract Ownable {
    address public owner;

    event TransferOwnership(address _from, address _to);

    constructor() public {
        owner = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    function setOwner(address _owner) external onlyOwner {
        emit TransferOwnership(owner, _owner);
        owner = _owner;
    }
}


contract Family is Ownable {
    using Farm for Farm.Family;

    Farm.Family private family;

    event JoinFamily(address indexed _address, uint256 _balance, uint256 _prevSize);
    event LeaveFamily(address indexed _address, uint256 _balance, uint256 _prevSize);

    uint256 public constant TOP_SIZE = 100;

    constructor() public {
        family.initialize();
    }

    function topSize() external pure returns (uint256) {
        return TOP_SIZE;
    }

    function addressAt(uint256 _i) external view returns (address addr) {
        (addr,) = family.entry(_i);
    }

    function indexOf(address _addr) external view returns (uint256) {
        return family.index[_addr];
    }

    function entry(uint256 _i) external view returns (address, uint256) {
        return family.entry(_i);
    }

    function top() external view returns (address, uint256) {
        return family.top();
    }

    function size() external view returns (uint256) {
        return family.size();
    }

    function update(address _addr, uint256 _new) external onlyOwner {
        uint256 _size = family.size();

        if (_size == 0) {
            emit JoinFamily(_addr, _new, 0);
            family.insert(_addr, _new);
            return;
        }

        (, uint256 lastBal) = family.top();

        if (family.has(_addr)) {
            family.update(_addr, _new);
            if (_new == 0) {
                family.popTop();
                emit LeaveFamily(_addr, 0, _size);
            }
        } else {
            if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) {
                if (_size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = family.popTop();
                    emit LeaveFamily(_poped, _balance, _size);
                }
                family.insert(_addr, _new);
                emit JoinFamily(_addr, _new, _size);
            }
        }
    }
}


contract Mafia is Ownable, GasPump, IERC20 {
    using DistributedStorage for bytes32;
    using SafeMath for uint256;

    event Winner(address indexed _addr, uint256 _value);
    event SetName(string _prev, string _new);
    event SetExtraGas(uint256 _prev, uint256 _new);
    event SetFamily(address _prev, address _new);
    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);

    uint256 public totalSupply;
    bytes32 private constant BALANCE_KEY = keccak256("balance");
    uint256 public constant FEE = 100;

    string public name = "Mafia.Network";
    string public constant symbol = "MAFI";
    uint8 public constant decimals = 18;
    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;

    Family public family;
    uint256 public extraGas;
    bool inited;

    function init(
        address _to,
        uint256 _amount
    ) external {
        assert(!inited);
        inited = true;
        assert(totalSupply == 0);
        assert(address(family) == address(0));
        family = new Family();
        emit SetFamily(address(0), address(family));
        extraGas = 15;
        emit SetExtraGas(0, extraGas);
        emit Transfer(address(0), _to, _amount);
        _setBalance(_to, _amount);
        totalSupply = _amount;
    }


    function _toKey(address a) internal pure returns (bytes32) {
        return bytes32(uint256(a));
    }

    function _balanceOf(address _addr) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(BALANCE_KEY));
    }

    function _allowance(address _addr, address _spender) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
    }

    function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
    }

    function _setAllowance(address _addr, address _spender, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
    }

    function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
    }

    function _setBalance(address _addr, uint256 _balance) internal {
        _toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
        family.update(_addr, _balance);
    }

    function _isWhitelisted(address _from, address _to) internal view returns (bool) {
        return whitelistFrom[_from]||whitelistTo[_to];
    }

    function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
        uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
        return rand % (_max + 1);
    }

    function _pickWinner(address _from, uint256 _value) internal returns (address winner) {
        uint256 magnitude = Math.orderOfMagnitude(_value);
        uint256 nonce = _nonce(_from, magnitude);
        _setNonce(_from, magnitude, nonce + 1);
        winner = family.addressAt(_random(_from, nonce, magnitude, family.size() - 1));
    }

    function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) internal {
        if (_value == 0) {
            emit Transfer(_from, _to, 0);
            return;
        }

        uint256 balanceFrom = _balanceOf(_from);
        require(balanceFrom >= _value, "balance not enough");

        if (_from != _operator) {
            uint256 allowanceFrom = _allowance(_from, _operator);
            if (allowanceFrom != uint(-1)) {
                require(allowanceFrom >= _value, "allowance not enough");
                _setAllowance(_from, _operator, allowanceFrom.sub(_value));
            }
        }

        uint256 receive = _value;
        uint256 burn = 0;
        uint256 mafi = 0;

        _setBalance(_from, balanceFrom.sub(_value));

        if (_payFee || !_isWhitelisted(_from, _to)) {
            burn = _value.divRound(FEE);
            mafi = _value == 1 ? 0 : burn;
            receive = receive.sub(burn.add(mafi));
            totalSupply = totalSupply.sub(burn);
            emit Transfer(_from, address(0), burn);

            address winner = _pickWinner(_from, _value);
            _setBalance(winner, _balanceOf(winner).add(mafi));
            emit Winner(winner, mafi);
            emit Transfer(_from, winner, mafi);
        }

        assert(burn.add(mafi).add(receive) == _value);

        _setBalance(_to, _balanceOf(_to).add(receive));
        emit Transfer(_from, _to, receive);
    }

    function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner {
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
    }

    function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner {
        emit WhitelistFrom(_addr, _whitelisted);
        whitelistFrom[_addr] = _whitelisted;
    }

    function setName(string calldata _name) external onlyOwner {
        emit SetName(name, _name);
        name = _name;
    }

    function setExtraGas(uint256 _gas) external onlyOwner {
        emit SetExtraGas(extraGas, _gas);
        extraGas = _gas;
    }

    function setFamily(Family _family) external onlyOwner {
        emit SetFamily(address(family), address(_family));
        family = _family;
    }

    function topSize() external view returns (uint256) {
        return family.topSize();
    }

    function familySize() external view returns (uint256) {
        return family.size();
    }

    function familyEntry(uint256 _i) external view returns (address, uint256) {
        return family.entry(_i);
    }

    function familyTop() external view returns (address, uint256) {
        return family.top();
    }

    function familyIndex(address _addr) external view returns (uint256) {
        return family.indexOf(_addr);
    }

    function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
        return _nonce(_addr, _cat);
    }

    function balanceOf(address _addr) external view returns (uint256) {
        return _balanceOf(_addr);
    }

    function allowance(address _addr, address _spender) external view returns (uint256) {
        return _allowance(_addr, _spender);
    }

    function approve(address _spender, uint256 _value) external returns (bool) {
        emit Approval(msg.sender, _spender, _value);
        _setAllowance(msg.sender, _spender, _value);
        return true;
    }

    function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, false);
        return true;
    }

    function transferWithFee(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, true);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, _from, _to, _value, false);
        return true;
    }

    function transferFromWithFee(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, _from, _to, _value, true);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_prev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_prev","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"SetFamily","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_prev","type":"string"},{"indexed":false,"internalType":"string","name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"family","outputs":[{"internalType":"contract Family","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"familyEntry","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"familyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"familySize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"familyTop","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Family","name":"_family","type":"address"}],"name":"setFamily","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"topSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]

60c0604052600d60808190526c4d616669612e4e6574776f726b60981b60a090815262000030916003919062000086565b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a16200012b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000c957805160ff1916838001178555620000f9565b82800160010185558215620000f9579182015b82811115620000f9578251825591602001919060010190620000dc565b50620001079291506200010b565b5090565b6200012891905b8082111562000107576000815560010162000112565b90565b612e1e806200013b6000396000f3fe60806040523480156200001157600080fd5b5060043610620002085760003560e01c80637c32cdd1116200011d578063a486309d11620000b1578063d83d170c116200007b578063d83d170c1462000696578063dd62ed3e14620006a0578063df60c84d14620006d1578063ff12bbf414620006db5762000208565b8063a486309d14620005b6578063a9059cbb14620005e7578063c47f00271462000616578063c57981b5146200068c5762000208565b806389f3546811620000f357806389f3546814620005495780638cec999314620005825780638da5cb5b14620005a257806395d89b4114620005ac5762000208565b80637c32cdd114620004cd578063826f0df014620004d757806389535803146200051a5762000208565b8063313ce56711620001a15780633b089391116200016b5780633b089391146200042c57806343684b21146200045557806370a08231146200047e57806376e75a0e14620004a75762000208565b8063313ce56714620003aa578063333d36ec14620003ca5780633767e33914620003f3578063399ae72414620003fd5762000208565b806313af403511620001e357806313af4035146200030157806316b627d1146200032c57806318160ddd146200035557806323b872dd14620003715762000208565b806306fdde03146200020d57806308acece2146200028f578063095ea7b314620002d2575b600080fd5b620002176200070c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200025357818101518382015260200162000239565b50505050905090810190601f168015620002815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002be60048036036040811015620002a757600080fd5b506001600160a01b0381351690602001356200079e565b604080519115158252519081900360200190f35b620002be60048036036040811015620002ea57600080fd5b506001600160a01b0381351690602001356200083f565b6200032a600480360360208110156200031957600080fd5b50356001600160a01b03166200089a565b005b620002be600480360360208110156200034457600080fd5b50356001600160a01b031662000951565b6200035f62000966565b60408051918252519081900360200190f35b620002be600480360360608110156200038957600080fd5b506001600160a01b038135811691602081013590911690604001356200096c565b620003b462000a0e565b6040805160ff9092168252519081900360200190f35b6200035f60048036036020811015620003e257600080fd5b50356001600160a01b031662000a13565b6200035f62000a99565b6200032a600480360360408110156200041557600080fd5b506001600160a01b03813516906020013562000a9f565b6200032a600480360360208110156200044457600080fd5b50356001600160a01b031662000be6565b620002be600480360360208110156200046d57600080fd5b50356001600160a01b031662000c9d565b6200035f600480360360208110156200049657600080fd5b50356001600160a01b031662000cb2565b620004b162000cbf565b604080516001600160a01b039092168252519081900360200190f35b6200035f62000cce565b620004f760048036036020811015620004ef57600080fd5b503562000d48565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6200035f600480360360408110156200053257600080fd5b506001600160a01b03813516906020013562000dd4565b620002be600480360360608110156200056157600080fd5b506001600160a01b0381358116916020810135909116906040013562000de9565b6200032a600480360360208110156200059a57600080fd5b503562000e28565b620004b162000eb7565b6200021762000ec6565b6200032a60048036036040811015620005ce57600080fd5b506001600160a01b038135169060200135151562000ee6565b620002be60048036036040811015620005ff57600080fd5b506001600160a01b03813516906020013562000fa3565b6200032a600480360360208110156200062e57600080fd5b8101906020810181356401000000008111156200064a57600080fd5b8201836020820111156200065d57600080fd5b803590602001918460018302840111640100000000831117156200068057600080fd5b50909250905062000fe2565b6200035f62001124565b6200035f62001129565b6200035f60048036036040811015620006b857600080fd5b506001600160a01b03813581169160200135166200116f565b620004f76200117d565b6200032a60048036036040811015620006f357600080fd5b506001600160a01b038135169060200135151562001201565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620007965780601f106200076a5761010080835404028352916020019162000796565b820191906000526020600020905b8154815290600101906020018083116200077857829003601f168201915b505050505081565b60006007543a60001480620007b25750455a115b15620008235760005a9050620007cd333387876001620012be565b6001925060005a820390506064838202045a92505b805a840310156200081a57600180546040805160208082019390935281518082038401815290820190915280519101209055620007e2565b50505062000838565b62000833333386866001620012be565b600191505b5092915050565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a362000890338484620015fe565b5060015b92915050565b6000546001600160a01b03163314620008e7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60056020526000908152604090205460ff1681565b60025481565b60006007543a60001480620009805750455a115b15620009f15760005a90506200099b338787876000620012be565b6001925060005a820390506064838202045a92505b805a84031015620009e857600180546040805160208082019390935281518082038401815290820190915280519101209055620009b0565b50505062000a06565b62000a01338686866000620012be565b600191505b509392505050565b601281565b6006546040805163fd6aad2560e01b81526001600160a01b0384811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b15801562000a6557600080fd5b505afa15801562000a7a573d6000803e3d6000fd5b505050506040513d602081101562000a9157600080fd5b505192915050565b60075481565b60085460ff161562000aad57fe5b6008805460ff191660011790556002541562000ac557fe5b6006546001600160a01b03161562000ad957fe5b60405162000ae79062001f03565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f41668058a8e5b22194d07f3b7439ab60e6223d4085a60ac2537e8785aeb440fe929181900390910190a1600f60078190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602062002dca8339815191529181900360200190a362000be0828262001662565b60025550565b6000546001600160a01b0316331462000c33576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600654604080516001600160a01b039283168152918316602083015280517f41668058a8e5b22194d07f3b7439ab60e6223d4085a60ac2537e8785aeb440fe9281900390910190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b60046020526000908152604090205460ff1681565b6000620008948262001702565b6006546001600160a01b031681565b60065460408051637c32cdd160e01b815290516000926001600160a01b031691637c32cdd1916004808301926020929190829003018186803b15801562000d1457600080fd5b505afa15801562000d29573d6000803e3d6000fd5b505050506040513d602081101562000d4057600080fd5b505190505b90565b6006546040805163e2095c0760e01b815260048101849052815160009384936001600160a01b039091169263e2095c079260248083019392829003018186803b15801562000d9557600080fd5b505afa15801562000daa573d6000803e3d6000fd5b505050506040513d604081101562000dc157600080fd5b5080516020909101519092509050915091565b600062000de283836200173e565b9392505050565b60006007543a6000148062000dfd5750455a115b1562000e185760005a90506200099b338787876001620012be565b62000a01338686866001620012be565b6000546001600160a01b0316331462000e75576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600754604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600755565b6000546001600160a01b031681565b604051806040016040528060048152602001634d41464960e01b81525081565b6000546001600160a01b0316331462000f33576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006007543a6000148062000fb75750455a115b1562000fd25760005a9050620007cd333387876000620012be565b62000833333386866000620012be565b6000546001600160a01b031633146200102f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260038054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015620010db5780601f10620010af57610100808354040283529160200191620010db565b820191906000526020600020905b815481529060010190602001808311620010bd57829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a16200111f6003838362001f11565b505050565b606481565b6006546040805163949d225d60e01b815290516000926001600160a01b03169163949d225d916004808301926020929190829003018186803b15801562000d1457600080fd5b600062000de2838362001786565b60065460408051637f36e6dd60e11b8152815160009384936001600160a01b039091169263fe6dcdba9260048083019392829003018186803b158015620011c357600080fd5b505afa158015620011d8573d6000803e3d6000fd5b505050506040513d6040811015620011ef57600080fd5b50805160209091015190925090509091565b6000546001600160a01b031633146200124e576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b816200130557826001600160a01b0316846001600160a01b031660008051602062002dca83398151915260006040518082815260200191505060405180910390a3620015f7565b6000620013128562001702565b9050828110156200135f576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b0316146200140057600062001387868862001786565b90506000198114620013fe5783811015620013e0576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b620013fe8688620013f8848863ffffffff620017e716565b620015fe565b505b8260008062001421886200141b868663ffffffff620017e716565b62001662565b848062001437575062001435888862001835565b155b1562001583576200145086606463ffffffff6200187916565b91508560011462001462578162001465565b60005b90506200148b6200147d838363ffffffff620018e616565b849063ffffffff620017e716565b600254909350620014a3908363ffffffff620017e716565b6002556040805183815290516000916001600160a01b038b169160008051602062002dca8339815191529181900360200190a36000620014e4898862001930565b905062001508816200141b84620014fb8562001702565b9063ffffffff620018e616565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602062002dca833981519152846040518082815260200191505060405180910390a3505b856200159b84620014fb858563ffffffff620018e616565b14620015a357fe5b620015b8876200141b85620014fb8b62001702565b866001600160a01b0316886001600160a01b031660008051602062002dca833981519152856040518082815260200191505060405180910390a3505050505b5050505050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d90920190925280519101206200111f9082620016548662001a5c565b919063ffffffff62001a6816565b604080516662616c616e636560c81b815290519081900360070190206200168f9082620016548562001a5c565b6006546040805163516c1daf60e11b81526001600160a01b038581166004830152602482018590529151919092169163a2d83b5e91604480830192600092919082900301818387803b158015620016e557600080fd5b505af1158015620016fa573d6000803e3d6000fd5b505050505050565b604080516662616c616e636560c81b815290519081900360070190206000906200089490620017318462001a5c565b9063ffffffff62001bc416565b600062000de2826040516020018080646e6f6e636560d81b81525060050182815260200191505060405160208183030381529060405280519060200120620017318562001a5c565b600062000de282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120620017318562001a5c565b6000818310156200182f576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526004602052604081205460ff168062000de25750506001600160a01b031660009081526005602052604090205460ff16919050565b600081620018bc576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481620018c857fe5b049050828481620018d557fe5b061562000de2576001019392505050565b60008282018381101562000de2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b6000806200193e8362001d3f565b905060006200194e85836200173e565b90506200196085838360010162001d5e565b6006546040805163949d225d60e01b815290516001600160a01b0390921691630af2b3e591620019f091899186918891600191889163949d225d916004808301926020929190829003018186803b158015620019bb57600080fd5b505afa158015620019d0573d6000803e3d6000fd5b505050506040513d6020811015620019e757600080fd5b50510362001da8565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562001a2557600080fd5b505afa15801562001a3a573d6000803e3d6000fd5b505050506040513d602081101562001a5157600080fd5b505195945050505050565b6001600160a01b031690565b600062001a758462001e05565b905062001a828162001e92565b62001a925762001a928462001eca565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831062001b0c5780518252601f19909201916020918201910162001aeb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001b70576040519150601f19603f3d011682016040523d82523d6000602084013e62001b75565b606091505b5050905080620015f7576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b60008062001bd28462001e05565b905062001bdf8162001e92565b62001bef57506000905062000894565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831062001c665780518252601f19909201916020918201910162001c45565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811462001cc8576040519150601f19603f3d011682016040523d82523d6000602084013e62001ccd565b606091505b50915091508162001d1d576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101562001d3357600080fd5b50519695505050505050565b6000600019825b60019190910190600a90048062001d46575092915050565b6200111f826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b620016548662001a5c565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818162001dfa57fe5b069695505050505050565b600060ff60f81b30836040518060200162001e209062001f96565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159062000de257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60606040518060200162001ede9062001f96565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b610ce38062001fc283390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001f545782800160ff1982351617855562001f84565b8280016001018555821562001f84579182015b8281111562001f8457823582559160200191906001019062001f67565b5062001f9292915062001fa4565b5090565b6101258062002ca583390190565b62000d4591905b8082111562001f92576000815560010162001fab56fe608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1610074600161007960201b610b5e1760201c565b6100e2565b8054156100cd576040805162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b610bf2806100f16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d1461012e578063a2d83b5e14610136578063e2095c0714610162578063fd6aad25146101a2578063fe6dcdba146101c85761009e565b80630af2b3e5146100a357806313af4035146100dc57806331fb7127146101045780637c32cdd11461011e5780638da5cb5b14610126575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d0565b604080516001600160a01b039092168252519081900360200190f35b610102600480360360208110156100f257600080fd5b50356001600160a01b03166101ea565b005b61010c6102a0565b60408051918252519081900360200190f35b61010c6102a5565b6100c06102ab565b61010c6102ba565b6101026004803603604081101561014c57600080fd5b506001600160a01b0381351690602001356102cb565b61017f6004803603602081101561017857600080fd5b50356104f7565b604080516001600160a01b03909316835260208301919091528051918290030190f35b61010c600480360360208110156101b857600080fd5b50356001600160a01b0316610515565b61017f610530565b60006101e360018363ffffffff61054516565b5092915050565b6000546001600160a01b03163314610236576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b606481565b60645b90565b6000546001600160a01b031681565b60006102c66001610578565b905090565b6000546001600160a01b03163314610317576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60006103236001610578565b90508061038557604080518381526000602082015281516001600160a01b038616927f6525dcd4da5a2d32ad150a8dd0b3146308b330056548f3abba8c1853823665d7928290030190a261037f6001848463ffffffff61058016565b506104f3565b6000610391600161064b565b91506103a6905060018563ffffffff61067816565b15610418576103bd6001858563ffffffff61069916565b82610413576103cc60016107c1565b505060408051600081526020810184905281516001600160a01b038716927fada2bfe81770ef9fedf7e9e292cc1cee7aceb76b0986e261172e29b565866dd9928290030190a25b6104f0565b82158015906104305750606482108061043057508281105b156104f0576064821061049a5760008061044a60016107c1565b91509150816001600160a01b03167fada2bfe81770ef9fedf7e9e292cc1cee7aceb76b0986e261172e29b565866dd98286604051808381526020018281526020019250505060405180910390a250505b6104ac6001858563ffffffff61058016565b604080518481526020810184905281516001600160a01b038716927f6525dcd4da5a2d32ad150a8dd0b3146308b330056548f3abba8c1853823665d7928290030190a25b50505b5050565b60008061050b60018463ffffffff61054516565b915091505b915091565b6001600160a01b031660009081526002602052604090205490565b60008061053d600161064b565b915091509091565b60008061056d84600001846001018154811061055d57fe5b9060005260206000200154610901565b915091509250929050565b546000190190565b6001600160a01b0382166000908152600184016020526040902054156105ed576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006105f98383610916565b84546001810186556000868152602090200181905584549091506000190161062885828463ffffffff61092a16565b6001600160a01b0390941660009081526001909501602052505060409092205550565b805460009081906002111561066557506000905080610510565b61050b8360000160018154811061055d57fe5b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480610706576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b60006107128484610916565b9050600085600001838154811061072557fe5b906000526020600020015490506000818310156107545761074d87858563ffffffff610a0116565b9050610776565b8183111561076d5761074d87858563ffffffff61092a16565b505050506107bc565b8287600001828154811061078657fe5b6000918252602090912001558084146107b7576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b805460009081906001811161081d576040805162461bcd60e51b815260206004820152601a60248201527f5468652066616d696c7920646f6573206e6f7420657869737473000000000000604482015290519081900360640190fd5b6108308460000160018154811061055d57fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141561086b5760016108658582610b21565b506108fb565b600084600001600183038154811061087f57fe5b90600052602060002001549050808560000160018154811061089d57fe5b60009182526020909120015560001982016108b88682610b21565b5060016108cc86828463ffffffff610a0116565b9050808660010160006108de85610b14565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b196001600160a01b0381169160a09190911c90565b60a01b6001600160a01b0391909116171990565b81600181146109fa57600084600283048154811061094457fe5b906000526020600020015490505b828110156109f857828186600285048154811061096b57fe5b90600052602060002001600088600001868154811061098657fe5b60009182526020822001939093555091909155829060018701906109a984610b14565b6001600160a01b0316815260208101919091526040016000205560028204915081600114156109d7576109f8565b8460028304815481106109e657fe5b90600052602060002001549050610952565b505b9392505050565b8254829060001981015b81836002021015610b0b5785546002840290600090889083908110610a2c57fe5b90600052602060002001549050600082841115610a84576000896000018460010181548110610a5757fe5b9060005260206000200154905080831015610a7a57809150836001019350610a7e565b8291505b50610a87565b50805b80871115610a9757505050610b0b565b80878a6000018881548110610aa857fe5b9060005260206000200160008c6000018781548110610ac357fe5b60009182526020822001939093555091909155869060018b0190610ae684610b14565b6001600160a01b0316815260208101919091526040016000205550909350610a0b9050565b50509392505050565b196001600160a01b031690565b8154818355818111156107bc576000838152602090206107bc9181019083016102a891905b80821115610b5a5760008155600101610b46565b5090565b805415610ba8576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fea265627a7a723158202f447f348f0067e69bc9fb1e510ff506d9aa39afb94fa1a045daca25ef524e4f64736f6c63430005110032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7231582043d112d569a7e013a2f78a72336c2a640ebcba1e7ec3bfe028741a659a39953064736f6c63430005110032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a723158207c81328a162f91c1fa78e9b9baa45e3eb5f308bdb3bcc18fa1c72cc54a06347764736f6c63430005110032

Deployed Bytecode

0x60806040523480156200001157600080fd5b5060043610620002085760003560e01c80637c32cdd1116200011d578063a486309d11620000b1578063d83d170c116200007b578063d83d170c1462000696578063dd62ed3e14620006a0578063df60c84d14620006d1578063ff12bbf414620006db5762000208565b8063a486309d14620005b6578063a9059cbb14620005e7578063c47f00271462000616578063c57981b5146200068c5762000208565b806389f3546811620000f357806389f3546814620005495780638cec999314620005825780638da5cb5b14620005a257806395d89b4114620005ac5762000208565b80637c32cdd114620004cd578063826f0df014620004d757806389535803146200051a5762000208565b8063313ce56711620001a15780633b089391116200016b5780633b089391146200042c57806343684b21146200045557806370a08231146200047e57806376e75a0e14620004a75762000208565b8063313ce56714620003aa578063333d36ec14620003ca5780633767e33914620003f3578063399ae72414620003fd5762000208565b806313af403511620001e357806313af4035146200030157806316b627d1146200032c57806318160ddd146200035557806323b872dd14620003715762000208565b806306fdde03146200020d57806308acece2146200028f578063095ea7b314620002d2575b600080fd5b620002176200070c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200025357818101518382015260200162000239565b50505050905090810190601f168015620002815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002be60048036036040811015620002a757600080fd5b506001600160a01b0381351690602001356200079e565b604080519115158252519081900360200190f35b620002be60048036036040811015620002ea57600080fd5b506001600160a01b0381351690602001356200083f565b6200032a600480360360208110156200031957600080fd5b50356001600160a01b03166200089a565b005b620002be600480360360208110156200034457600080fd5b50356001600160a01b031662000951565b6200035f62000966565b60408051918252519081900360200190f35b620002be600480360360608110156200038957600080fd5b506001600160a01b038135811691602081013590911690604001356200096c565b620003b462000a0e565b6040805160ff9092168252519081900360200190f35b6200035f60048036036020811015620003e257600080fd5b50356001600160a01b031662000a13565b6200035f62000a99565b6200032a600480360360408110156200041557600080fd5b506001600160a01b03813516906020013562000a9f565b6200032a600480360360208110156200044457600080fd5b50356001600160a01b031662000be6565b620002be600480360360208110156200046d57600080fd5b50356001600160a01b031662000c9d565b6200035f600480360360208110156200049657600080fd5b50356001600160a01b031662000cb2565b620004b162000cbf565b604080516001600160a01b039092168252519081900360200190f35b6200035f62000cce565b620004f760048036036020811015620004ef57600080fd5b503562000d48565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6200035f600480360360408110156200053257600080fd5b506001600160a01b03813516906020013562000dd4565b620002be600480360360608110156200056157600080fd5b506001600160a01b0381358116916020810135909116906040013562000de9565b6200032a600480360360208110156200059a57600080fd5b503562000e28565b620004b162000eb7565b6200021762000ec6565b6200032a60048036036040811015620005ce57600080fd5b506001600160a01b038135169060200135151562000ee6565b620002be60048036036040811015620005ff57600080fd5b506001600160a01b03813516906020013562000fa3565b6200032a600480360360208110156200062e57600080fd5b8101906020810181356401000000008111156200064a57600080fd5b8201836020820111156200065d57600080fd5b803590602001918460018302840111640100000000831117156200068057600080fd5b50909250905062000fe2565b6200035f62001124565b6200035f62001129565b6200035f60048036036040811015620006b857600080fd5b506001600160a01b03813581169160200135166200116f565b620004f76200117d565b6200032a60048036036040811015620006f357600080fd5b506001600160a01b038135169060200135151562001201565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620007965780601f106200076a5761010080835404028352916020019162000796565b820191906000526020600020905b8154815290600101906020018083116200077857829003601f168201915b505050505081565b60006007543a60001480620007b25750455a115b15620008235760005a9050620007cd333387876001620012be565b6001925060005a820390506064838202045a92505b805a840310156200081a57600180546040805160208082019390935281518082038401815290820190915280519101209055620007e2565b50505062000838565b62000833333386866001620012be565b600191505b5092915050565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a362000890338484620015fe565b5060015b92915050565b6000546001600160a01b03163314620008e7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60056020526000908152604090205460ff1681565b60025481565b60006007543a60001480620009805750455a115b15620009f15760005a90506200099b338787876000620012be565b6001925060005a820390506064838202045a92505b805a84031015620009e857600180546040805160208082019390935281518082038401815290820190915280519101209055620009b0565b50505062000a06565b62000a01338686866000620012be565b600191505b509392505050565b601281565b6006546040805163fd6aad2560e01b81526001600160a01b0384811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b15801562000a6557600080fd5b505afa15801562000a7a573d6000803e3d6000fd5b505050506040513d602081101562000a9157600080fd5b505192915050565b60075481565b60085460ff161562000aad57fe5b6008805460ff191660011790556002541562000ac557fe5b6006546001600160a01b03161562000ad957fe5b60405162000ae79062001f03565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f41668058a8e5b22194d07f3b7439ab60e6223d4085a60ac2537e8785aeb440fe929181900390910190a1600f60078190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602062002dca8339815191529181900360200190a362000be0828262001662565b60025550565b6000546001600160a01b0316331462000c33576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600654604080516001600160a01b039283168152918316602083015280517f41668058a8e5b22194d07f3b7439ab60e6223d4085a60ac2537e8785aeb440fe9281900390910190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b60046020526000908152604090205460ff1681565b6000620008948262001702565b6006546001600160a01b031681565b60065460408051637c32cdd160e01b815290516000926001600160a01b031691637c32cdd1916004808301926020929190829003018186803b15801562000d1457600080fd5b505afa15801562000d29573d6000803e3d6000fd5b505050506040513d602081101562000d4057600080fd5b505190505b90565b6006546040805163e2095c0760e01b815260048101849052815160009384936001600160a01b039091169263e2095c079260248083019392829003018186803b15801562000d9557600080fd5b505afa15801562000daa573d6000803e3d6000fd5b505050506040513d604081101562000dc157600080fd5b5080516020909101519092509050915091565b600062000de283836200173e565b9392505050565b60006007543a6000148062000dfd5750455a115b1562000e185760005a90506200099b338787876001620012be565b62000a01338686866001620012be565b6000546001600160a01b0316331462000e75576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600754604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600755565b6000546001600160a01b031681565b604051806040016040528060048152602001634d41464960e01b81525081565b6000546001600160a01b0316331462000f33576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006007543a6000148062000fb75750455a115b1562000fd25760005a9050620007cd333387876000620012be565b62000833333386866000620012be565b6000546001600160a01b031633146200102f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260038054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015620010db5780601f10620010af57610100808354040283529160200191620010db565b820191906000526020600020905b815481529060010190602001808311620010bd57829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a16200111f6003838362001f11565b505050565b606481565b6006546040805163949d225d60e01b815290516000926001600160a01b03169163949d225d916004808301926020929190829003018186803b15801562000d1457600080fd5b600062000de2838362001786565b60065460408051637f36e6dd60e11b8152815160009384936001600160a01b039091169263fe6dcdba9260048083019392829003018186803b158015620011c357600080fd5b505afa158015620011d8573d6000803e3d6000fd5b505050506040513d6040811015620011ef57600080fd5b50805160209091015190925090509091565b6000546001600160a01b031633146200124e576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b816200130557826001600160a01b0316846001600160a01b031660008051602062002dca83398151915260006040518082815260200191505060405180910390a3620015f7565b6000620013128562001702565b9050828110156200135f576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b0316146200140057600062001387868862001786565b90506000198114620013fe5783811015620013e0576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b620013fe8688620013f8848863ffffffff620017e716565b620015fe565b505b8260008062001421886200141b868663ffffffff620017e716565b62001662565b848062001437575062001435888862001835565b155b1562001583576200145086606463ffffffff6200187916565b91508560011462001462578162001465565b60005b90506200148b6200147d838363ffffffff620018e616565b849063ffffffff620017e716565b600254909350620014a3908363ffffffff620017e716565b6002556040805183815290516000916001600160a01b038b169160008051602062002dca8339815191529181900360200190a36000620014e4898862001930565b905062001508816200141b84620014fb8562001702565b9063ffffffff620018e616565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602062002dca833981519152846040518082815260200191505060405180910390a3505b856200159b84620014fb858563ffffffff620018e616565b14620015a357fe5b620015b8876200141b85620014fb8b62001702565b866001600160a01b0316886001600160a01b031660008051602062002dca833981519152856040518082815260200191505060405180910390a3505050505b5050505050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d90920190925280519101206200111f9082620016548662001a5c565b919063ffffffff62001a6816565b604080516662616c616e636560c81b815290519081900360070190206200168f9082620016548562001a5c565b6006546040805163516c1daf60e11b81526001600160a01b038581166004830152602482018590529151919092169163a2d83b5e91604480830192600092919082900301818387803b158015620016e557600080fd5b505af1158015620016fa573d6000803e3d6000fd5b505050505050565b604080516662616c616e636560c81b815290519081900360070190206000906200089490620017318462001a5c565b9063ffffffff62001bc416565b600062000de2826040516020018080646e6f6e636560d81b81525060050182815260200191505060405160208183030381529060405280519060200120620017318562001a5c565b600062000de282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120620017318562001a5c565b6000818310156200182f576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526004602052604081205460ff168062000de25750506001600160a01b031660009081526005602052604090205460ff16919050565b600081620018bc576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481620018c857fe5b049050828481620018d557fe5b061562000de2576001019392505050565b60008282018381101562000de2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b6000806200193e8362001d3f565b905060006200194e85836200173e565b90506200196085838360010162001d5e565b6006546040805163949d225d60e01b815290516001600160a01b0390921691630af2b3e591620019f091899186918891600191889163949d225d916004808301926020929190829003018186803b158015620019bb57600080fd5b505afa158015620019d0573d6000803e3d6000fd5b505050506040513d6020811015620019e757600080fd5b50510362001da8565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562001a2557600080fd5b505afa15801562001a3a573d6000803e3d6000fd5b505050506040513d602081101562001a5157600080fd5b505195945050505050565b6001600160a01b031690565b600062001a758462001e05565b905062001a828162001e92565b62001a925762001a928462001eca565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831062001b0c5780518252601f19909201916020918201910162001aeb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001b70576040519150601f19603f3d011682016040523d82523d6000602084013e62001b75565b606091505b5050905080620015f7576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b60008062001bd28462001e05565b905062001bdf8162001e92565b62001bef57506000905062000894565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831062001c665780518252601f19909201916020918201910162001c45565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811462001cc8576040519150601f19603f3d011682016040523d82523d6000602084013e62001ccd565b606091505b50915091508162001d1d576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101562001d3357600080fd5b50519695505050505050565b6000600019825b60019190910190600a90048062001d46575092915050565b6200111f826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b620016548662001a5c565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818162001dfa57fe5b069695505050505050565b600060ff60f81b30836040518060200162001e209062001f96565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159062000de257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60606040518060200162001ede9062001f96565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b610ce38062001fc283390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001f545782800160ff1982351617855562001f84565b8280016001018555821562001f84579182015b8281111562001f8457823582559160200191906001019062001f67565b5062001f9292915062001fa4565b5090565b6101258062002ca583390190565b62000d4591905b8082111562001f92576000815560010162001fab56fe608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1610074600161007960201b610b5e1760201c565b6100e2565b8054156100cd576040805162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b610bf2806100f16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d1461012e578063a2d83b5e14610136578063e2095c0714610162578063fd6aad25146101a2578063fe6dcdba146101c85761009e565b80630af2b3e5146100a357806313af4035146100dc57806331fb7127146101045780637c32cdd11461011e5780638da5cb5b14610126575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d0565b604080516001600160a01b039092168252519081900360200190f35b610102600480360360208110156100f257600080fd5b50356001600160a01b03166101ea565b005b61010c6102a0565b60408051918252519081900360200190f35b61010c6102a5565b6100c06102ab565b61010c6102ba565b6101026004803603604081101561014c57600080fd5b506001600160a01b0381351690602001356102cb565b61017f6004803603602081101561017857600080fd5b50356104f7565b604080516001600160a01b03909316835260208301919091528051918290030190f35b61010c600480360360208110156101b857600080fd5b50356001600160a01b0316610515565b61017f610530565b60006101e360018363ffffffff61054516565b5092915050565b6000546001600160a01b03163314610236576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b606481565b60645b90565b6000546001600160a01b031681565b60006102c66001610578565b905090565b6000546001600160a01b03163314610317576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60006103236001610578565b90508061038557604080518381526000602082015281516001600160a01b038616927f6525dcd4da5a2d32ad150a8dd0b3146308b330056548f3abba8c1853823665d7928290030190a261037f6001848463ffffffff61058016565b506104f3565b6000610391600161064b565b91506103a6905060018563ffffffff61067816565b15610418576103bd6001858563ffffffff61069916565b82610413576103cc60016107c1565b505060408051600081526020810184905281516001600160a01b038716927fada2bfe81770ef9fedf7e9e292cc1cee7aceb76b0986e261172e29b565866dd9928290030190a25b6104f0565b82158015906104305750606482108061043057508281105b156104f0576064821061049a5760008061044a60016107c1565b91509150816001600160a01b03167fada2bfe81770ef9fedf7e9e292cc1cee7aceb76b0986e261172e29b565866dd98286604051808381526020018281526020019250505060405180910390a250505b6104ac6001858563ffffffff61058016565b604080518481526020810184905281516001600160a01b038716927f6525dcd4da5a2d32ad150a8dd0b3146308b330056548f3abba8c1853823665d7928290030190a25b50505b5050565b60008061050b60018463ffffffff61054516565b915091505b915091565b6001600160a01b031660009081526002602052604090205490565b60008061053d600161064b565b915091509091565b60008061056d84600001846001018154811061055d57fe5b9060005260206000200154610901565b915091509250929050565b546000190190565b6001600160a01b0382166000908152600184016020526040902054156105ed576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006105f98383610916565b84546001810186556000868152602090200181905584549091506000190161062885828463ffffffff61092a16565b6001600160a01b0390941660009081526001909501602052505060409092205550565b805460009081906002111561066557506000905080610510565b61050b8360000160018154811061055d57fe5b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480610706576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b60006107128484610916565b9050600085600001838154811061072557fe5b906000526020600020015490506000818310156107545761074d87858563ffffffff610a0116565b9050610776565b8183111561076d5761074d87858563ffffffff61092a16565b505050506107bc565b8287600001828154811061078657fe5b6000918252602090912001558084146107b7576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b805460009081906001811161081d576040805162461bcd60e51b815260206004820152601a60248201527f5468652066616d696c7920646f6573206e6f7420657869737473000000000000604482015290519081900360640190fd5b6108308460000160018154811061055d57fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141561086b5760016108658582610b21565b506108fb565b600084600001600183038154811061087f57fe5b90600052602060002001549050808560000160018154811061089d57fe5b60009182526020909120015560001982016108b88682610b21565b5060016108cc86828463ffffffff610a0116565b9050808660010160006108de85610b14565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b196001600160a01b0381169160a09190911c90565b60a01b6001600160a01b0391909116171990565b81600181146109fa57600084600283048154811061094457fe5b906000526020600020015490505b828110156109f857828186600285048154811061096b57fe5b90600052602060002001600088600001868154811061098657fe5b60009182526020822001939093555091909155829060018701906109a984610b14565b6001600160a01b0316815260208101919091526040016000205560028204915081600114156109d7576109f8565b8460028304815481106109e657fe5b90600052602060002001549050610952565b505b9392505050565b8254829060001981015b81836002021015610b0b5785546002840290600090889083908110610a2c57fe5b90600052602060002001549050600082841115610a84576000896000018460010181548110610a5757fe5b9060005260206000200154905080831015610a7a57809150836001019350610a7e565b8291505b50610a87565b50805b80871115610a9757505050610b0b565b80878a6000018881548110610aa857fe5b9060005260206000200160008c6000018781548110610ac357fe5b60009182526020822001939093555091909155869060018b0190610ae684610b14565b6001600160a01b0316815260208101919091526040016000205550909350610a0b9050565b50509392505050565b196001600160a01b031690565b8154818355818111156107bc576000838152602090206107bc9181019083016102a891905b80821115610b5a5760008155600101610b46565b5090565b805415610ba8576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fea265627a7a723158202f447f348f0067e69bc9fb1e510ff506d9aa39afb94fa1a045daca25ef524e4f64736f6c63430005110032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7231582043d112d569a7e013a2f78a72336c2a640ebcba1e7ec3bfe028741a659a39953064736f6c63430005110032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a723158207c81328a162f91c1fa78e9b9baa45e3eb5f308bdb3bcc18fa1c72cc54a06347764736f6c63430005110032

Deployed Bytecode Sourcemap

13321:7642:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13321:7642:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13919:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13919:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20334:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20334:196:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19915:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19915:213:0;;;;;;;;:::i;11202:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11202:134:0;-1:-1:-1;;;;;11202:134:0;;:::i;:::-;;14101:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14101:43:0;-1:-1:-1;;;;;14101:43:0;;:::i;13778:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;20538:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20538:204:0;;;;;;;;;;;;;;;;;:::i;14007:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19398:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19398:115:0;-1:-1:-1;;;;;19398:115:0;;:::i;14180:23::-;;;:::i;14230:487::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14230:487:0;;;;;;;;:::i;18807:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18807:149:0;-1:-1:-1;;;;;18807:149:0;;:::i;14049:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14049:45:0;-1:-1:-1;;;;;14049:45:0;;:::i;19653:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19653:109:0;-1:-1:-1;;;;;19653:109:0;;:::i;14153:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;14153:20:0;;;;;;;;;;;;;;18964:93;;;:::i;19166:116::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19166:116:0;;:::i;:::-;;;;-1:-1:-1;;;;;19166:116:0;;;;;;;;;;;;;;;;;;;;;19521:124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19521:124:0;;;;;;;;:::i;20750:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20750:210:0;;;;;;;;;;;;;;;;;:::i;18668:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18668:131:0;;:::i;10888:20::-;;;:::i;13962:38::-;;;:::i;18154:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18154:179:0;;;;;;;;;;:::i;20136:190::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20136:190:0;;;;;;;;:::i;18534:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18534:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18534:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18534:126:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;18534:126:0;;-1:-1:-1;18534:126:0;-1:-1:-1;18534:126:0;:::i;13877:33::-;;;:::i;19065:93::-;;;:::i;19770:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19770:137:0;;;;;;;;;;:::i;19290:100::-;;;:::i;18341:185::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18341:185:0;;;;;;;;;;:::i;13919:36::-;;;;;;;;;;;;;;;-1:-1:-1;;13919:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20334:196::-;20427:4;20408:8;;6052:11;6067:1;6052:16;:46;;;;6084:14;6072:9;:26;6052:46;6048:425;;;6115:16;6134:9;6115:28;;20444:56;20458:10;20470;20482:3;20487:6;20495:4;20444:13;:56::i;:::-;20518:4;20511:11;;6174:13;6201:9;6190:20;;;-1:-1:-1;6262:3:0;6243:15;;;6242:23;6291:9;6280:20;;6315:113;6345:6;6333:9;6322:8;:20;:29;6315:113;;;6406:4;;;6389:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;6389:22:0;;;;;;6379:33;;;;;6372:40;;6315:113;;;6048:425;;;;;;20444:56;20458:10;20470;20482:3;20487:6;20495:4;20444:13;:56::i;:::-;20518:4;20511:11;;6460:1;20334:196;;;;;:::o;19915:213::-;20006:38;;;;;;;;19984:4;;-1:-1:-1;;;;;20006:38:0;;;20015:10;;20006:38;;;;;;;;;;20055:43;20069:10;20081:8;20091:6;20055:13;:43::i;:::-;-1:-1:-1;20116:4:0;19915:213;;;;;:::o;11202:134::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;11289:5;;11271:32;;;-1:-1:-1;;;;;11289:5:0;;;11271:32;;;;;;;;;;;;;;;;;;;;;11314:5;:14;;-1:-1:-1;;;;;;11314:14:0;-1:-1:-1;;;;;11314:14:0;;;;;;;;;;11202:134::o;14101:43::-;;;;;;;;;;;;;;;:::o;13778:26::-;;;;:::o;20538:204::-;20643:4;20624:8;;6052:11;6067:1;6052:16;:46;;;;6084:14;6072:9;:26;6052:46;6048:425;;;6115:16;6134:9;6115:28;;20660:52;20674:10;20686:5;20693:3;20698:6;20706:5;20660:13;:52::i;:::-;20730:4;20723:11;;6174:13;6201:9;6190:20;;;-1:-1:-1;6262:3:0;6243:15;;;6242:23;6291:9;6280:20;;6315:113;6345:6;6333:9;6322:8;:20;:29;6315:113;;;6406:4;;;6389:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;6389:22:0;;;;;;6379:33;;;;;6372:40;;6315:113;;;6048:425;;;;;;20660:52;20674:10;20686:5;20693:3;20698:6;20706:5;20660:13;:52::i;:::-;20730:4;20723:11;;6460:1;20538:204;;;;;;:::o;14007:35::-;14040:2;14007:35;:::o;19398:115::-;19484:6;;:21;;;-1:-1:-1;;;19484:21:0;;-1:-1:-1;;;;;19484:21:0;;;;;;;;;19457:7;;19484:6;;;;;:14;;:21;;;;;;;;;;;;;;;:6;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;19484:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19484:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19484:21:0;;19398:115;-1:-1:-1;;19398:115:0:o;14180:23::-;;;;:::o;14230:487::-;14327:6;;;;14326:7;14319:15;;;;14345:6;:13;;-1:-1:-1;;14345:13:0;14354:4;14345:13;;;14376:11;;:16;14369:24;;;;14419:6;;-1:-1:-1;;;;;14419:6:0;14411:29;14404:37;;;;14461:12;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;14452:6:0;:21;;-1:-1:-1;;;;;;14452:21:0;-1:-1:-1;;;;;14452:21:0;;;;;;;;14489:38;;;-1:-1:-1;14489:38:0;;14519:6;;;;14489:38;;;;;;;;;;;;;;;;;14549:2;14538:8;:13;;;14567:24;;;14579:1;14567:24;;;;;;;;;;;;;;;;;;;;;14607:34;;;;;;;;-1:-1:-1;;;;;14607:34:0;;;14624:1;;-1:-1:-1;;;;;;;;;;;14607:34:0;;;;;;;;14652:25;14664:3;14669:7;14652:11;:25::i;:::-;14688:11;:21;-1:-1:-1;14230:487:0:o;18807:149::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;18895:6;;18877:44;;;-1:-1:-1;;;;;18895:6:0;;;18877:44;;;;;;;;;;;;;;;;;;;;;18932:6;:16;;-1:-1:-1;;;;;;18932:16:0;-1:-1:-1;;;;;18932:16:0;;;;;;;;;;18807:149::o;14049:45::-;;;;;;;;;;;;;;;:::o;19653:109::-;19710:7;19737:17;19748:5;19737:10;:17::i;14153:20::-;;;-1:-1:-1;;;;;14153:20:0;;:::o;18964:93::-;19033:6;;:16;;;-1:-1:-1;;;19033:16:0;;;;19006:7;;-1:-1:-1;;;;;19033:6:0;;:14;;:16;;;;;;;;;;;;;;:6;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;19033:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19033:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19033:16:0;;-1:-1:-1;18964:93:0;;:::o;19166:116::-;19258:6;;:16;;;-1:-1:-1;;;19258:16:0;;;;;;;;;;19222:7;;;;-1:-1:-1;;;;;19258:6:0;;;;:12;;:16;;;;;;;;;;;:6;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;19258:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19258:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19258:16:0;;;;;;;;;-1:-1:-1;19258:16:0;-1:-1:-1;19166:116:0;;;:::o;19521:124::-;19591:7;19618:19;19625:5;19632:4;19618:6;:19::i;:::-;19611:26;19521:124;-1:-1:-1;;;19521:124:0:o;20750:210::-;20862:4;20843:8;;6052:11;6067:1;6052:16;:46;;;;6084:14;6072:9;:26;6052:46;6048:425;;;6115:16;6134:9;6115:28;;20879:51;20893:10;20905:5;20912:3;20917:6;20925:4;20879:13;:51::i;6048:425::-;20879:51;20893:10;20905:5;20912:3;20917:6;20925:4;20879:13;:51::i;18668:131::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;18750:8;;18738:27;;;;;;;;;;;;;;;;;;;;;;;;18776:8;:15;18668:131::o;10888:20::-;;;-1:-1:-1;;;;;10888:20:0;;:::o;13962:38::-;;;;;;;;;;;;;;-1:-1:-1;;;13962:38:0;;;;:::o;18154:179::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;18249:32;;;-1:-1:-1;;;;;18249:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18292:18:0;;;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;18292:33:0;;;;;;;;;;18154:179::o;20136:190::-;20222:4;20203:8;;6052:11;6067:1;6052:16;:46;;;;6084:14;6072:9;:26;6052:46;6048:425;;;6115:16;6134:9;6115:28;;20239:57;20253:10;20265;20277:3;20282:6;20290:5;20239:13;:57::i;6048:425::-;20239:57;20253:10;20265;20277:3;20282:6;20290:5;20239:13;:57::i;18534:126::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;18609:20;;;;;;18617:4;18609:20;;;-1:-1:-1;;18609:20:0;;;;;;;;;;;;;;;;;;;18617:4;;18623:5;;;;18609:20;;;;;;;;;;;18617:4;;18609:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18609:20:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;18609:20:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;18609:20:0;;;;-1:-1:-1;18609:20:0;;-1:-1:-1;;;;;;18609:20:0;18640:12;:4;18647:5;;18640:12;:::i;:::-;;18534:126;;:::o;13877:33::-;13907:3;13877:33;:::o;19065:93::-;19137:6;;:13;;;-1:-1:-1;;;19137:13:0;;;;19110:7;;-1:-1:-1;;;;;19137:6:0;;:11;;:13;;;;;;;;;;;;;;:6;:13;;;5:2:-1;;;;30:1;27;20:12;19770:137:0;19845:7;19872:27;19883:5;19890:8;19872:10;:27::i;19290:100::-;19370:6;;:12;;;-1:-1:-1;;;19370:12:0;;;;19334:7;;;;-1:-1:-1;;;;;19370:6:0;;;;:10;;:12;;;;;;;;;;;:6;:12;;;5:2:-1;;;;30:1;27;20:12;5:2;19370:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19370:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19370:12:0;;;;;;;;;-1:-1:-1;19370:12:0;-1:-1:-1;19290:100:0;;:::o;18341:185::-;11154:5;;-1:-1:-1;;;;;11154:5:0;11140:10;:19;11132:42;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;-1:-1:-1;;;11132:42:0;;;;;;;;;;;;;;;18438:34;;;-1:-1:-1;;;;;18438:34:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18483:20:0;;;;;;;;:13;:20;;;;;:35;;-1:-1:-1;;18483:35:0;;;;;;;;;;18341:185::o;16652:1494::-;16776:11;16772:93;;16825:3;-1:-1:-1;;;;;16809:23:0;16818:5;-1:-1:-1;;;;;16809:23:0;-1:-1:-1;;;;;;;;;;;16830:1:0;16809:23;;;;;;;;;;;;;;;;;;16847:7;;16772:93;16877:19;16899:17;16910:5;16899:10;:17::i;:::-;16877:39;;16950:6;16935:11;:21;;16927:52;;;;;-1:-1:-1;;;16927:52:0;;;;;;;;;;;;-1:-1:-1;;;16927:52:0;;;;;;;;;;;;;;;17005:9;-1:-1:-1;;;;;16996:18:0;:5;-1:-1:-1;;;;;16996:18:0;;16992:316;;17031:21;17055:28;17066:5;17073:9;17055:10;:28::i;:::-;17031:52;;-1:-1:-1;;17102:13:0;:25;17098:199;;17173:6;17156:13;:23;;17148:56;;;;;-1:-1:-1;;;17148:56:0;;;;;;;;;;;;-1:-1:-1;;;17148:56:0;;;;;;;;;;;;;;;17223:58;17237:5;17244:9;17255:25;:13;17273:6;17255:25;:17;:25;:::i;:::-;17223:13;:58::i;:::-;16992:316;;17338:6;17320:15;;17411:43;17423:5;17430:23;:11;17338:6;17430:23;:15;:23;:::i;:::-;17411:11;:43::i;:::-;17471:7;:38;;;;17483:26;17498:5;17505:3;17483:14;:26::i;:::-;17482:27;17471:38;17467:510;;;17533:20;:6;13907:3;17533:20;:15;:20;:::i;:::-;17526:27;;17575:6;17585:1;17575:11;:22;;17593:4;17575:22;;;17589:1;17575:22;17568:29;-1:-1:-1;17622:27:0;17634:14;:4;17568:29;17634:14;:8;:14;:::i;:::-;17622:7;;:27;:11;:27;:::i;:::-;17678:11;;17612:37;;-1:-1:-1;17678:21:0;;17694:4;17678:21;:15;:21;:::i;:::-;17664:11;:35;17719:33;;;;;;;;17743:1;;-1:-1:-1;;;;;17719:33:0;;;-1:-1:-1;;;;;;;;;;;17719:33:0;;;;;;;;17769:14;17786:26;17798:5;17805:6;17786:11;:26::i;:::-;17769:43;;17827:49;17839:6;17847:28;17870:4;17847:18;17858:6;17847:10;:18::i;:::-;:22;:28;:22;:28;:::i;17827:49::-;17896:20;;;;;;;;-1:-1:-1;;;;;17896:20:0;;;;;;;;;;;;;17952:6;-1:-1:-1;;;;;17936:29:0;17945:5;-1:-1:-1;;;;;17936:29:0;-1:-1:-1;;;;;;;;;;;17960:4:0;17936:29;;;;;;;;;;;;;;;;;;17467:510;;18027:6;17996:27;18015:7;17996:14;:4;18005;17996:14;:8;:14;:::i;:27::-;:37;17989:45;;;;18047:46;18059:3;18064:28;18084:7;18064:15;18075:3;18064:10;:15::i;18047:46::-;18125:3;-1:-1:-1;;;;;18109:29:0;18118:5;-1:-1:-1;;;;;18109:29:0;-1:-1:-1;;;;;;;;;;;18130:7:0;18109:29;;;;;;;;;;;;;;;;;;16652:1494;;;;;;;;;;:::o;15360:188::-;15482:39;;;-1:-1:-1;;;15482:39:0;;;;;;;;-1:-1:-1;;;;;;15482:39:0;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;15482:39:0;;;;;;;15472:50;;;;;15452:88;;15532:6;15452:13;15459:5;15452:6;:13::i;:::-;:19;:88;;:19;:88;:::i;15736:174::-;13850:20;;;-1:-1:-1;;;13850:20:0;;;;;;;;;;;;15810:51;;15851:8;15810:13;15817:5;15810:6;:13::i;:51::-;15872:6;;:30;;;-1:-1:-1;;;15872:30:0;;-1:-1:-1;;;;;15872:30:0;;;;;;;;;;;;;;;:6;;;;;:13;;:30;;;;;:6;;:30;;;;;;;:6;;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;15872:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15872:30:0;;;;15736:174;;:::o;14839:133::-;13850:20;;;-1:-1:-1;;;13850:20:0;;;;;;;;;;;;14897:7;;14932:31;;:13;14939:5;14932:6;:13::i;:::-;:18;:31;:18;:31;:::i;15178:174::-;15246:7;15281:62;15336:4;15310:31;;;;;;-1:-1:-1;;;15310:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15310:31:0;;;15300:42;;;;;;15281:13;15288:5;15281:6;:13::i;14980:190::-;15056:7;15091:70;15150:8;15120:39;;;;;;-1:-1:-1;;;15120:39:0;;;;;;-1:-1:-1;;;;;15120:39:0;-1:-1:-1;;;;;15120:39:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15120:39:0;;;15110:50;;;;;;15091:13;15098:5;15091:6;:13::i;7356:141::-;7414:7;7447:1;7442;:6;;7434:32;;;;;-1:-1:-1;;;7434:32:0;;;;;;;;;;;;-1:-1:-1;;;7434:32:0;;;;;;;;;;;;;;;-1:-1:-1;7484:5:0;;;7356:141::o;15918:145::-;-1:-1:-1;;;;;16017:20:0;;15993:4;16017:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16039:16:0;;;;;:11;:16;;;;;;;;;15918:145;-1:-1:-1;15918:145:0:o;7889:232::-;7952:7;7980:6;7972:30;;;;;-1:-1:-1;;;7972:30:0;;;;;;;;;;;;-1:-1:-1;;;7972:30:0;;;;;;;;;;;;;;;8013:9;8029:1;8025;:5;;;;;;8013:17;;8049:1;8045;:5;;;;;;:10;8041:52;;8080:1;8076:5;8112:1;7889:232;-1:-1:-1;;;7889:232:0:o;7184:164::-;7242:7;7274:5;;;7298:6;;;;7290:31;;;;;-1:-1:-1;;;7290:31:0;;;;;;;;;;;;-1:-1:-1;;;7290:31:0;;;;;;;;;;;;;;16301:343;16371:14;16398:17;16418:29;16440:6;16418:21;:29::i;:::-;16398:49;;16458:13;16474:24;16481:5;16488:9;16474:6;:24::i;:::-;16458:40;;16509:38;16519:5;16526:9;16537:5;16545:1;16537:9;16509;:38::i;:::-;16567:6;;16617:13;;;-1:-1:-1;;;16617:13:0;;;;-1:-1:-1;;;;;16567:6:0;;;;:16;;16584:51;;16592:5;;16599;;16606:9;;16567:6;;;;16617:11;;:13;;;;;;;;;;;;;;16567:6;16617:13;;;5:2:-1;;;;30:1;27;20:12;5:2;16617:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16617:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16617:13:0;:17;16584:7;:51::i;:::-;16567:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16567:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16567:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16567:69:0;;16301:343;-1:-1:-1;;;;;16301:343:0:o;14727:104::-;-1:-1:-1;;;;;14812:10:0;;14727:104::o;9669:568::-;9785:17;9817:21;9830:7;9817:12;:21::i;:::-;9785:54;;9855:37;9885:5;9855:21;:37::i;:::-;9850:86;;9909:15;9916:7;9909:6;:15::i;:::-;10040:124;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10040:124:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10006:169:0;;;;9989:12;;-1:-1:-1;;;;;10006:19:0;;;10040:124;10006:169;;;25:18:-1;10006:169:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10006:169:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9988:187:0;;;10196:7;10188:41;;;;;-1:-1:-1;;;10188:41:0;;;;;;;;;;;;-1:-1:-1;;;10188:41:0;;;;;;;;;;;;;;10245:610;10338:7;10358:17;10390:21;10403:7;10390:12;:21::i;:::-;10358:54;;10428:37;10458:5;10428:21;:37::i;:::-;10423:88;;-1:-1:-1;10497:1:0;;-1:-1:-1;10482:17:0;;10423:88;10639:98;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10639:98:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10599:149:0;;;;10564:12;;10578:17;;-1:-1:-1;;;;;10599:25:0;;;10639:98;;10599:149;;;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10599:149:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10563:185:0;;;;10769:7;10761:41;;;;;-1:-1:-1;;;10761:41:0;;;;;;;;;;;;-1:-1:-1;;;10761:41:0;;;;;;;;;;;;;;;10831:4;10820:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10820:27:0;;10245:610;-1:-1:-1;;;;;;10245:610:0:o;6509:270::-;6573:7;-1:-1:-1;;6644:5:0;6662:83;6705:9;;;;;;6688:2;6680:10;;;6662:83;;-1:-1:-1;6764:7:0;6509:270;-1:-1:-1;;6509:270:0:o;15556:172::-;15640:80;15696:4;15670:31;;;;;;-1:-1:-1;;;15670:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15670:31:0;;;15660:42;;;;;;15712:6;15704:15;;15640:13;15647:5;15640:6;:13::i;16071:222::-;16217:31;;;-1:-1:-1;;;;;;16217:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16217:31:0;;;;;;;16207:42;;;;;16164:7;;16283:1;16276:8;;16207:42;16276:8;16268:17;;;;;;16071:222;-1:-1:-1;;;;;;16071:222:0:o;8978:439::-;9039:7;9194:4;9189:10;;9234:4;9266:7;9310:30;;;;;;;;:::i;:::-;21:26:-1;;;-1:-1;;21:26;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;9300:41:0;;41:4:-1;30:16;;;9300:41:0;-1:-1:-1;;;;;;9146:218:0;;;;;;;;;;;;;-1:-1:-1;;;;;;9146:218:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9146:218:0;;;;;;;9114:269;;;;;;8978:439;-1:-1:-1;;8978:439:0:o;8156:321::-;8214:4;8320:18;;8356:22;;;;;:113;;-1:-1:-1;8402:66:0;8382:87;;;8349:120;-1:-1:-1;;8156:321:0:o;9425:236::-;9477:21;9501:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;9501:30:0;9477:54;;9644:7;9633:8;9627:15;9620:4;9610:8;9606:19;9603:1;9595:57;9591:62;9590:64;;:::o;13321:7642::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13321:7642:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13321:7642:0;;;-1:-1:-1;13321:7642:0;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://7c81328a162f91c1fa78e9b9baa45e3eb5f308bdb3bcc18fa1c72cc54a063477

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The Mafia.Network (MAFI) token is meant to be hyper deflationary in nature with its utility and demand increase, the finite supply of 15,000,000 MAFI will decrease.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.