ETH Price: $2,291.85 (+1.22%)

Contract

0xD76c75B9cBbeAB4109456Fda9f2DA73297b795dB
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer127634342021-07-04 21:21:191161 days ago1625433679IN
0xD76c75B9...297b795dB
0 ETH0.002009586
Transfer100345842020-05-09 21:59:141582 days ago1589061554IN
0xD76c75B9...297b795dB
0 ETH0.000585664.4
Transfer95082962020-02-18 16:51:551663 days ago1582044715IN
0xD76c75B9...297b795dB
0 ETH0.000473752
Approve93869542020-01-31 1:03:531682 days ago1580432633IN
0xD76c75B9...297b795dB
0 ETH0.00006741.4
Transfer93842352020-01-30 15:07:021682 days ago1580396822IN
0xD76c75B9...297b795dB
0 ETH0.001166815
Transfer93841962020-01-30 14:56:451682 days ago1580396205IN
0xD76c75B9...297b795dB
0 ETH0.00035
Approve90960522019-12-12 19:34:391731 days ago1576179279IN
0xD76c75B9...297b795dB
0 ETH0.000200664.15
Approve90923412019-12-12 4:01:211732 days ago1576123281IN
0xD76c75B9...297b795dB
0 ETH0.000297376.15
Transfer88912602019-11-07 17:13:281766 days ago1573146808IN
0xD76c75B9...297b795dB
0 ETH0.000659861.5
Transfer88487282019-10-31 21:13:561773 days ago1572556436IN
0xD76c75B9...297b795dB
0 ETH0.000227631
Transfer87521482019-10-16 12:23:401788 days ago1571228620IN
0xD76c75B9...297b795dB
0 ETH0.000413761.8
Transfer87521312019-10-16 12:19:011788 days ago1571228341IN
0xD76c75B9...297b795dB
0 ETH0.001241285.4
Transfer87300082019-10-13 0:45:121792 days ago1570927512IN
0xD76c75B9...297b795dB
0 ETH0.000111641.86080588
Transfer87119512019-10-10 4:33:131795 days ago1570681993IN
0xD76c75B9...297b795dB
0 ETH0.0047603222.5
Transfer86552712019-10-01 7:54:521803 days ago1569916492IN
0xD76c75B9...297b795dB
0 ETH0.001083572
Transfer83667262019-08-17 7:55:491848 days ago1566028549IN
0xD76c75B9...297b795dB
0 ETH0.002446916
Transfer83542782019-08-15 9:16:361850 days ago1565860596IN
0xD76c75B9...297b795dB
0 ETH0.000093024
Transfer83346502019-08-12 8:23:451853 days ago1565598225IN
0xD76c75B9...297b795dB
0 ETH0.001575525
Approve83194202019-08-09 23:53:021856 days ago1565394782IN
0xD76c75B9...297b795dB
0 ETH0.000181313.6
Transfer83031002019-08-07 10:51:211858 days ago1565175081IN
0xD76c75B9...297b795dB
0 ETH0.000428871.6
Transfer83030762019-08-07 10:47:071858 days ago1565174827IN
0xD76c75B9...297b795dB
0 ETH0.000479041.6
Approve82988522019-08-06 19:05:001859 days ago1565118300IN
0xD76c75B9...297b795dB
0 ETH0.000251825
Transfer82916962019-08-05 16:22:301860 days ago1565022150IN
0xD76c75B9...297b795dB
0 ETH0.002724255
Transfer82914932019-08-05 15:40:431860 days ago1565019643IN
0xD76c75B9...297b795dB
0 ETH0.003341747.9
Approve82904472019-08-05 11:44:271860 days ago1565005467IN
0xD76c75B9...297b795dB
0 ETH0.0005791911.5
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
127634342021-07-04 21:21:191161 days ago1625433679
0xD76c75B9...297b795dB
 Contract Creation0 ETH
95082962020-02-18 16:51:551663 days ago1582044715
0xD76c75B9...297b795dB
 Contract Creation0 ETH
93842352020-01-30 15:07:021682 days ago1580396822
0xD76c75B9...297b795dB
 Contract Creation0 ETH
88912602019-11-07 17:13:281766 days ago1573146808
0xD76c75B9...297b795dB
 Contract Creation0 ETH
88487282019-10-31 21:13:561773 days ago1572556436
0xD76c75B9...297b795dB
 Contract Creation0 ETH
87119512019-10-10 4:33:131795 days ago1570681993
0xD76c75B9...297b795dB
 Contract Creation0 ETH
86552712019-10-01 7:54:521803 days ago1569916492
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83667262019-08-17 7:55:491848 days ago1566028549
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83286992019-08-11 10:18:281854 days ago1565518708
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83286992019-08-11 10:18:281854 days ago1565518708
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83286992019-08-11 10:18:281854 days ago1565518708
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83286992019-08-11 10:18:281854 days ago1565518708
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83284822019-08-11 9:29:041854 days ago1565515744
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83031002019-08-07 10:51:211858 days ago1565175081
0xD76c75B9...297b795dB
 Contract Creation0 ETH
83030762019-08-07 10:47:071858 days ago1565174827
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82916962019-08-05 16:22:301860 days ago1565022150
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82903242019-08-05 11:16:121860 days ago1565003772
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82901832019-08-05 10:43:061860 days ago1565001786
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82901772019-08-05 10:42:011860 days ago1565001721
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82901692019-08-05 10:39:391860 days ago1565001579
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82901232019-08-05 10:30:431860 days ago1565001043
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82901062019-08-05 10:27:031860 days ago1565000823
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82900692019-08-05 10:17:121860 days ago1565000232
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82900692019-08-05 10:17:121860 days ago1565000232
0xD76c75B9...297b795dB
 Contract Creation0 ETH
82900682019-08-05 10:17:031860 days ago1565000223
0xD76c75B9...297b795dB
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShuffleToken

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-21
*/

// File: contracts/commons/Ownable.sol

pragma solidity ^0.5.10;


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

// File: contracts/commons/AddressMinHeap.sol

pragma solidity ^0.5.10;

/*
    @author Agustin Aguilar <[email protected]>
*/


library AddressMinHeap {
    using AddressMinHeap for AddressMinHeap.Heap;

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

    function initialize(Heap storage _heap) internal {
        require(_heap.entries.length == 0, "already initialized");
        _heap.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(Heap storage _heap) internal view returns(address, uint256) {
        if (_heap.entries.length < 2) {
            return (address(0), 0);
        }

        return decode(_heap.entries[1]);
    }

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

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

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

    // RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap
    function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) {
        // Ensure the heap exists
        uint256 heapLength = _heap.entries.length;
        require(heapLength > 1, "The heap does not exists");

        // take the root value of the heap
        (_addr, _value) = decode(_heap.entries[1]);
        _heap.index[_addr] = 0;

        if (heapLength == 2) {
            _heap.entries.length = 1;
        } else {
            // Takes the last element of the array and put it at the root
            uint256 val = _heap.entries[heapLength - 1];
            _heap.entries[1] = val;

            // Delete the last element from the array
            _heap.entries.length = heapLength - 1;

            // Start at the top
            uint256 ind = 1;

            // Bubble down
            ind = _heap.bubbleDown(ind, val);

            // Update index
            _heap.index[decodeAddress(val)] = ind;
        }
    }

    // Inserts adds in a value to our heap.
    function insert(Heap storage _heap, address _addr, uint256 _value) internal {
        require(_heap.index[_addr] == 0, "The entry already exists");

        // Add the value to the end of our array
        uint256 encoded = encode(_addr, _value);
        _heap.entries.push(encoded);

        // Start at the end of the array
        uint256 currentIndex = _heap.entries.length - 1;

        // Bubble Up
        currentIndex = _heap.bubbleUp(currentIndex, encoded);

        // Update index
        _heap.index[_addr] = currentIndex;
    }

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

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

        if (can < val) {
            // Bubble down
            newInd = _heap.bubbleDown(ind, can);
        } else if (can > val) {
            // Bubble up
            newInd = _heap.bubbleUp(ind, can);
        } else {
            // no changes needed
            return;
        }

        // Update entry
        _heap.entries[newInd] = can;

        // Update index
        if (newInd != ind) {
            _heap.index[_addr] = newInd;
        }
    }

    function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble up
        ind = _ind;
        if (ind != 1) {
            uint256 parent = _heap.entries[ind / 2];
            while (parent < _val) {
                // If the parent value is lower than our current value, we swap them
                (_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent);

                // Update moved Index
                _heap.index[decodeAddress(parent)] = ind;

                // change our current Index to go up to the parent
                ind = ind / 2;
                if (ind == 1) {
                    break;
                }

                // Update parent
                parent = _heap.entries[ind / 2];
            }
        }
    }

    function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble down
        ind = _ind;

        uint256 lenght = _heap.entries.length;
        uint256 target = lenght - 1;

        while (ind * 2 < lenght) {
            // get the current index of the children
            uint256 j = ind * 2;

            // left child value
            uint256 leftChild = _heap.entries[j];

            // Store the value of the child
            uint256 childValue;

            if (target > j) {
                // The parent has two childs 👨‍👧‍👦

                // Load right child value
                uint256 rightChild = _heap.entries[j + 1];

                // Compare the left and right child.
                // if the rightChild is greater, then point j to it's index
                // and save the value
                if (leftChild < rightChild) {
                    childValue = rightChild;
                    j = j + 1;
                } else {
                    // The left child is greater
                    childValue = leftChild;
                }
            } else {
                // The parent has a single child 👨‍👦
                childValue = leftChild;
            }

            // Check if the child has a lower value
            if (_val > childValue) {
                break;
            }

            // else swap the value
            (_heap.entries[ind], _heap.entries[j]) = (childValue, _val);

            // Update moved Index
            _heap.index[decodeAddress(childValue)] = ind;

            // and let's keep going down the heap
            ind = j;
        }
    }
}

// File: contracts/commons/StorageUnit.sol

pragma solidity ^0.5.10;


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

// File: contracts/utils/IsContract.sol

pragma solidity ^0.5.10;


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

// File: contracts/utils/DistributedStorage.sol

pragma solidity ^0.5.10;




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

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

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

// File: contracts/utils/SafeMath.sol

pragma solidity ^0.5.10;


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

// File: contracts/utils/Math.sol

pragma solidity ^0.5.10;


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

// File: contracts/utils/GasPump.sol

pragma solidity ^0.5.10;


contract GasPump {
    bytes32 private stub;

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

// File: contracts/interfaces/IERC20.sol

pragma solidity ^0.5.10;


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

// File: contracts/ShuffleToken.sol

pragma solidity ^0.5.10;









contract ShuffleToken is Ownable, GasPump, IERC20 {
    using AddressMinHeap for AddressMinHeap.Heap;
    using DistributedStorage for bytes32;
    using SafeMath for uint256;

    // Shuffle events
    event Winner(address indexed _addr, uint256 _value);

    // Heap events
    event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
    event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize);

    // Managment events
    event SetName(string _prev, string _new);
    event SetExtraGas(uint256 _prev, uint256 _new);
    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);

    uint256 public totalSupply;

    bytes32 private constant BALANCE_KEY = keccak256("balance");
    bytes32 private constant NONCE_KEY = keccak256("nonce");

    // game
    uint256 public constant FEE = 100;
    uint256 public constant TOP_SIZE = 512;

    // heap
    AddressMinHeap.Heap private heap;

    // metadata
    string public name = "shuffle.monster token 🃏";
    string public constant symbol = "Shuf";
    uint8 public constant decimals = 18;

    // fee whitelist
    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;

    // internal
    uint256 public extraGas;

    constructor(
        address _to,
        uint256 _amount
    ) public {
        heap.initialize();
        extraGas = 15;
        emit SetExtraGas(0, extraGas);
        emit Transfer(address(0), _to, _amount);
        _setBalance(_to, _amount);
        totalSupply = _amount;
    }

    ///
    // Storage access functions
    ///

    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));
        _computeHeap(_addr, _balance);
    }

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

    ///
    // Internal methods
    ///

    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) {
        // Get order of magnitude of the tx
        uint256 magnitude = Math.orderOfMagnitude(_value);
        // Pull nonce for a given order of magnitude
        uint256 nonce = _nonce(_from, magnitude);
        _setNonce(_from, magnitude, nonce + 1);
        // pick entry from heap
        (winner,) = heap.entry(_random(_from, nonce, magnitude, heap.size() - 1));
    }

    function _transferFrom(address _operator, address _from, address _to, uint256 _value) 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;

        if (!_isWhitelisted(_from, _to)) {
            uint256 burn = _value.divRound(FEE);
            uint256 shuf = _value == 1 ? 0 : burn;
            receive = receive.sub(burn.add(shuf));

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

            // Burn tokens
            totalSupply = totalSupply.sub(burn);
            emit Transfer(_from, address(0), burn);

            // Shuffle tokens
            // Pick winner pseudo-randomly
            address winner = _pickWinner(_from, _value);
            // Transfer balance to winner
            _setBalance(winner, _balanceOf(winner).add(shuf));
            emit Winner(winner, shuf);
            emit Transfer(_from, winner, shuf);
        }

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

    function _computeHeap(address _addr, uint256 _new) internal {
        uint256 size = heap.size();
        if (size == 0) {
            emit JoinHeap(_addr, _new, 0);
            heap.insert(_addr, _new);
            return;
        }

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

        if (heap.has(_addr)) {
            heap.update(_addr, _new);
            if (_new == 0) {
                heap.popTop();
                emit LeaveHeap(_addr, 0, size);
            }
        } else {
            // IF heap is full or new bal is better than pop heap
            if (_new != 0 && (size < TOP_SIZE || lastBal < _new)) {
                // If heap is full pop heap
                if (size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = heap.popTop();
                    emit LeaveHeap(_poped, _balance, size);
                }

                // Insert new value
                heap.insert(_addr, _new);
                emit JoinHeap(_addr, _new, size);
            }
        }
    }

    ///
    // Managment
    ///

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

    /////
    // Heap methods
    /////

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

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

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

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

    /////
    // ERC20
    /////

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

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

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_i","type":"uint256"}],"name":"heapEntry","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistTo","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOP_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapTop","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"heapIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"JoinHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"LeaveHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"string"},{"indexed":false,"name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"}]

60c0604052601a60808190527f73687566666c652e6d6f6e7374657220746f6b656e20f09f838f00000000000060a090815262000040916005919062000e12565b503480156200004e57600080fd5b506040516200318838038062003188833981810160405260408110156200007457600080fd5b508051602091820151600080546001600160a01b03191633908117825560408051928352948201528351929391927f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c929181900390910190a1620000e460036200018760201b62001f531760201c565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36200017d82826001600160e01b036200020b16565b6002555062000ee7565b805415620001f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080517f62616c616e636500000000000000000000000000000000000000000000000000815290519081900360070190206200026c908262000257856001600160e01b036200028516565b6200029160201b62001102179092919060201c565b6200028182826001600160e01b036200044c16565b5050565b6001600160a01b031690565b6000620002a7846001600160e01b036200065016565b9050620002bf81620006f560201b6200162a1760201c565b620002d857620002d8846001600160e01b036200073016565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b03167fe2e52ec100000000000000000000000000000000000000000000000000000000178152915181516000936001600160a01b0386169392918291908083835b602083106200036b5780518252601f1990920191602091820191016200034a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620003cf576040519150601f19603f3d011682016040523d82523d6000602084013e620003d4565b606091505b50509050806200044557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6572726f722077726974696e672073746f726167650000000000000000000000604482015290519081900360640190fd5b5050505050565b60006200046560036200076960201b620010d91760201c565b905080620004c357604080518381526000602082015281516001600160a01b0386169260008051602062003148833981519152928290030190a2620004bc838360036200077160201b62001939179092919060201c565b5062000281565b6000620004dc60036200087260201b62000fd11760201c565b915050620004fa846003620008c460201b62001a041790919060201c565b1562000576576200051d84846003620008e560201b62001a25179092919060201c565b8262000570576200053a600362000a5060201b62001b4c1760201c565b505060408051600081526020810184905281516001600160a01b0387169260008051602062003168833981519152928290030190a25b6200064a565b82158015906200059157506102008210806200059157508281105b156200064a576102008210620005fa57600080620005bb600362000a5060201b62001b4c1760201c565b91509150816001600160a01b0316600080516020620031688339815191528286604051808381526020018281526020019250505060405180910390a250505b62000617848460036200077160201b62001939179092919060201c565b604080518481526020810184905281516001600160a01b0387169260008051602062003148833981519152928290030190a25b50505050565b600060ff60f81b3083604051806020016200066b9062000e97565b818103601f199081018352601f90910116604081815282516020938401207fff00000000000000000000000000000000000000000000000000000000000000969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906200072957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b606060405180602001620007449062000e97565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b546000190190565b6001600160a01b038216600090815260018401602052604090205415620007f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006200081083836001600160e01b0362000bc816565b845460018101865560008681526020908190209091018290558554919250600019909101906200084f9086908390859062000bdc811b62001ca017901c565b6001600160a01b0390941660009081526001909501602052505060409092205550565b80546000908190600211156200088e57506000905080620008bf565b620008ba83600001600181548110620008a357fe5b906000526020600020015462000cc660201b60201c565b915091505b915091565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b0382166000908152600184016020526040902054806200096d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b60006200098484846001600160e01b0362000bc816565b905060008560000183815481106200099857fe5b90600052602060002001549050600081831015620009d457620009cc84848962000cdb60201b62001d6e179092919060201c565b905062000a03565b81831115620009f957620009cc84848962000bdc60201b62001ca0179092919060201c565b5050505062000a4b565b8287600001828154811062000a1457fe5b60009182526020909120015580841462000a46576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b805460009081906001811162000ac757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b62000adc84600001600181548110620008a357fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141562000b1b57600162000b14858262000ea5565b5062000bc2565b600084600001600183038154811062000b3057fe5b90600052602060002001549050808560000160018154811062000b4f57fe5b600091825260209091200155600019820162000b6c868262000ea5565b50600162000b8886828462000cdb602090811b62001d6e17901c565b90508060018701600062000ba5856001600160e01b0362000e0516565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146200072957600084600283048154811062000bf857fe5b906000526020600020015490505b8281101562000cbe57828186600285048154811062000c2157fe5b90600052602060002001600088600001868154811062000c3d57fe5b600091825260208220019390935550919091558290600187019062000c6b846001600160e01b0362000e0516565b6001600160a01b03168152602081019190915260400160002055600282049150816001141562000c9b5762000cbe565b84600283048154811062000cab57fe5b9060005260206000200154905062000c06565b509392505050565b196001600160a01b0381169160a09190911c90565b8254829060001981015b8183600202101562000dfc578554600284029060009088908390811062000d0857fe5b9060005260206000200154905060008284111562000d6557600089600001846001018154811062000d3557fe5b906000526020600020015490508083101562000d5a5780915083600101935062000d5e565b8291505b5062000d68565b50805b8087111562000d7a5750505062000dfc565b80878a600001888154811062000d8c57fe5b9060005260206000200160008c600001878154811062000da857fe5b60009182526020822001939093555091909155869060018b019062000dd6846001600160e01b0362000e0516565b6001600160a01b031681526020810191909152604001600020555090935062000ce59050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e5557805160ff191683800117855562000e85565b8280016001018555821562000e85579182015b8281111562000e8557825182559160200191906001019062000e68565b5062000e9392915062000ec7565b5090565b610125806200302383390190565b81548183558181111562000a4b5760008381526020902062000a4b9181019083015b62000ee491905b8082111562000e93576000815560010162000ece565b90565b61212c8062000ef76000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063a9059cbb11610097578063c57981b511610071578063c57981b5146104fa578063dd62ed3e14610502578063fa7e8dc714610530578063ff12bbf41461053857610173565b8063a9059cbb14610438578063b00cf04914610464578063c47f00271461048a57610173565b806370a082311461036f57806389535803146103955780638cec9993146103c15780638da5cb5b146103de57806395d89b4114610402578063a486309d1461040a57610173565b806323b872dd1161013057806323b872dd146102dd578063313ce5671461031357806331fb7127146103315780633767e3391461033957806343684b21146103415780634849f5c81461036757610173565b806306fdde031461017857806308eaae4d146101f5578063095ea7b31461023557806313af40351461027557806316b627d11461029d57806318160ddd146102c3575b600080fd5b610180610566565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ba5781810151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102126004803603602081101561020b57600080fd5b50356105f4565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102616004803603604081101561024b57600080fd5b506001600160a01b038135169060200135610612565b604080519115158252519081900360200190f35b61029b6004803603602081101561028b57600080fd5b50356001600160a01b031661066b565b005b610261600480360360208110156102b357600080fd5b50356001600160a01b0316610721565b6102cb610736565b60408051918252519081900360200190f35b610261600480360360608110156102f357600080fd5b506001600160a01b0381358116916020810135909116906040013561073c565b61031b6107c7565b6040805160ff9092168252519081900360200190f35b6102cb6107cc565b6102cb6107d2565b6102616004803603602081101561035757600080fd5b50356001600160a01b03166107d8565b6102126107ed565b6102cb6004803603602081101561038557600080fd5b50356001600160a01b0316610802565b6102cb600480360360408110156103ab57600080fd5b506001600160a01b03813516906020013561080d565b61029b600480360360208110156103d757600080fd5b5035610820565b6103e66108ae565b604080516001600160a01b039092168252519081900360200190f35b6101806108bd565b61029b6004803603604081101561042057600080fd5b506001600160a01b03813516906020013515156108dd565b6102616004803603604081101561044e57600080fd5b506001600160a01b038135169060200135610999565b6102cb6004803603602081101561047a57600080fd5b50356001600160a01b0316610a23565b61029b600480360360208110156104a057600080fd5b8101906020810181356401000000008111156104bb57600080fd5b8201836020820111156104cd57600080fd5b803590602001918460018302840111640100000000831117156104ef57600080fd5b509092509050610a3e565b6102cb610b79565b6102cb6004803603604081101561051857600080fd5b506001600160a01b0381358116916020013516610b7e565b6102cb610b8a565b61029b6004803603604081101561054e57600080fd5b506001600160a01b0381351690602001351515610b9c565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081565b60008061060860038463ffffffff610c5816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3610661338484610c8b565b5060015b92915050565b6000546001600160a01b031633146106b7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156107ae5760005a905061075b33878787610ceb565b6001925060005a820390506064838202045a92505b805a840310156107a657600180546040805160208082019390935281518082038401815290820190915280519101209055610770565b5050506107bf565b6107ba33868686610ceb565b600191505b509392505050565b601281565b61020081565b60085481565b60066020526000908152604090205460ff1681565b6000806107fa6003610fd1565b915091509091565b600061066582610ffe565b60006108198383611036565b9392505050565b6000546001600160a01b0316331461086c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329b43ab360e11b81525081565b6000546001600160a01b03163314610929576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610a0b5760005a90506109b833338787610ceb565b6001925060005a820390506064838202045a92505b805a84031015610a03576001805460408051602080820193909352815180820384018152908201909152805191012090556109cd565b505050610a1c565b610a1733338686610ceb565b600191505b5092915050565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610a8a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610b325780601f10610b0757610100808354040283529160200191610b32565b820191906000526020600020905b815481529060010190602001808311610b1557829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610b7460058383611e8e565b505050565b606481565b6000610819838361107b565b6000610b9660036110d9565b90505b90565b6000546001600160a01b03163314610be8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080610c80846000018460010181548110610c7057fe5b90600052602060002001546110e1565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610b749082610cde866110f6565b919063ffffffff61110216565b80610d2f57816001600160a01b0316836001600160a01b03166000805160206120d883398151915260006040518082815260200191505060405180910390a3610fcb565b6000610d3a84610ffe565b905081811015610d86576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b846001600160a01b0316846001600160a01b031614610e1e576000610dab858761107b565b90506000198114610e1c5782811015610e02576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610e1c8587610e17848763ffffffff61125916565b610c8b565b505b81610e2985856112a6565b610f7e576000610e4084606463ffffffff6112e916565b9050600084600114610e525781610e55565b60005b9050610e77610e6a838363ffffffff61135216565b849063ffffffff61125916565b9250610e9287610e8d868863ffffffff61125916565b61139b565b600254610ea5908363ffffffff61125916565b6002556040805183815290516000916001600160a01b038a16916000805160206120d88339815191529181900360200190a36000610ee388876113d3565b9050610f0281610e8d84610ef685610ffe565b9063ffffffff61135216565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316886001600160a01b03166000805160206120d8833981519152846040518082815260200191505060405180910390a35050505b610f8f84610e8d83610ef688610ffe565b836001600160a01b0316856001600160a01b03166000805160206120d8833981519152836040518082815260200191505060405180910390a350505b50505050565b8054600090819060021115610feb5750600090508061060d565b61060883600001600181548110610c7057fe5b604080516662616c616e636560c81b815290519081900360070190206000906106659061102a846110f6565b9063ffffffff61143016565b6000610819826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061102a856110f6565b600061081982604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061102a856110f6565b546000190190565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b600061110d8461159f565b90506111188161162a565b6111255761112584611661565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061119d5780518252601f19909201916020918201910161117e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b5050905080611252576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b5050505050565b6000818310156112a0576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806108195750506001600160a01b031660009081526007602052604090205460ff16919050565b60008161132b576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848161133657fe5b04905082848161134257fe5b0615610819576001019392505050565b600082820183811015610819576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b604080516662616c616e636560c81b815290519081900360070190206113c59082610cde856110f6565b6113cf8282611698565b5050565b6000806113df83611878565b905060006113ed8583611036565b90506113fd858383600101611896565b611426611418868385600161141260036110d9565b036118dd565b60039063ffffffff610c5816565b5095945050505050565b60008061143c8461159f565b90506114478161162a565b611455575060009050610665565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106114ca5780518252601f1990920191602091820191016114ab565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461152a576040519150601f19603f3d011682016040523d82523d6000602084013e61152f565b606091505b50915091508161157e576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561159357600080fd5b50519695505050505050565b600060ff60f81b3083604051806020016115b890611f0c565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159061081957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60606040518060200161167390611f0c565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b60006116a460036110d9565b90508061170657604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a26117006003848463ffffffff61193916565b506113cf565b60006117126003610fd1565b9150611727905060038563ffffffff611a0416565b156117995761173e6003858563ffffffff611a2516565b826117945761174d6003611b4c565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b610fcb565b82158015906117b257506102008210806117b257508281105b15610fcb57610200821061181d576000806117cd6003611b4c565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b61182f6003858563ffffffff61193916565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a250505050565b6000600019825b60019190910190600a90048061187f575092915050565b610b74826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b610cde866110f6565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818161192e57fe5b069695505050505050565b6001600160a01b0382166000908152600184016020526040902054156119a6576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006119b28383611c8c565b8454600181018655600086815260209020018190558454909150600019016119e185828463ffffffff611ca016565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611a92576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611a9e8484611c8c565b90506000856000018381548110611ab157fe5b90600052602060002001549050600081831015611ae057611ad987858563ffffffff611d6e16565b9050611b02565b81831115611af957611ad987858563ffffffff611ca016565b50505050610b74565b82876000018281548110611b1257fe5b600091825260209091200155808414611b43576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611ba8576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611bbb84600001600181548110610c7057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611bf6576001611bf08582611f19565b50611c86565b6000846000016001830381548110611c0a57fe5b906000526020600020015490508085600001600181548110611c2857fe5b6000918252602090912001556000198201611c438682611f19565b506001611c5786828463ffffffff611d6e16565b905080866001016000611c6985611e81565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b8160018114610819576000846002830481548110611cba57fe5b906000526020600020015490505b828110156107bf578281866002850481548110611ce157fe5b906000526020600020016000886000018681548110611cfc57fe5b6000918252602082200193909355509190915582906001870190611d1f84611e81565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611d4d576107bf565b846002830481548110611d5c57fe5b90600052602060002001549050611cc8565b8254829060001981015b81836002021015611e785785546002840290600090889083908110611d9957fe5b90600052602060002001549050600082841115611df1576000896000018460010181548110611dc457fe5b9060005260206000200154905080831015611de757809150836001019350611deb565b8291505b50611df4565b50805b80871115611e0457505050611e78565b80878a6000018881548110611e1557fe5b9060005260206000200160008c6000018781548110611e3057fe5b60009182526020822001939093555091909155869060018b0190611e5384611e81565b6001600160a01b0316815260208101919091526040016000205550909350611d789050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ecf5782800160ff19823516178555611efc565b82800160010185558215611efc579182015b82811115611efc578235825591602001919060010190611ee1565b50611f08929150611f39565b5090565b61012580611fb383390190565b815481835581811115610b7457600083815260209020610b749181019083015b610b9991905b80821115611f085760008155600101611f3f565b805415611f9d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a723058200b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f264736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7230582079b1fef37d08548c46965586994b4d21435797de3dfa540d157b39f4def9886164736f6c634300050a0032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a723058200b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f264736f6c634300050a0032b7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff9361072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e70000000000000000000000002c54036c505b762b6ca2873dfcfecb632f83fe2700000000000000000000000000000000000000000000d5e5af7b8e5a0ca57eb5

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063a9059cbb11610097578063c57981b511610071578063c57981b5146104fa578063dd62ed3e14610502578063fa7e8dc714610530578063ff12bbf41461053857610173565b8063a9059cbb14610438578063b00cf04914610464578063c47f00271461048a57610173565b806370a082311461036f57806389535803146103955780638cec9993146103c15780638da5cb5b146103de57806395d89b4114610402578063a486309d1461040a57610173565b806323b872dd1161013057806323b872dd146102dd578063313ce5671461031357806331fb7127146103315780633767e3391461033957806343684b21146103415780634849f5c81461036757610173565b806306fdde031461017857806308eaae4d146101f5578063095ea7b31461023557806313af40351461027557806316b627d11461029d57806318160ddd146102c3575b600080fd5b610180610566565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ba5781810151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102126004803603602081101561020b57600080fd5b50356105f4565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102616004803603604081101561024b57600080fd5b506001600160a01b038135169060200135610612565b604080519115158252519081900360200190f35b61029b6004803603602081101561028b57600080fd5b50356001600160a01b031661066b565b005b610261600480360360208110156102b357600080fd5b50356001600160a01b0316610721565b6102cb610736565b60408051918252519081900360200190f35b610261600480360360608110156102f357600080fd5b506001600160a01b0381358116916020810135909116906040013561073c565b61031b6107c7565b6040805160ff9092168252519081900360200190f35b6102cb6107cc565b6102cb6107d2565b6102616004803603602081101561035757600080fd5b50356001600160a01b03166107d8565b6102126107ed565b6102cb6004803603602081101561038557600080fd5b50356001600160a01b0316610802565b6102cb600480360360408110156103ab57600080fd5b506001600160a01b03813516906020013561080d565b61029b600480360360208110156103d757600080fd5b5035610820565b6103e66108ae565b604080516001600160a01b039092168252519081900360200190f35b6101806108bd565b61029b6004803603604081101561042057600080fd5b506001600160a01b03813516906020013515156108dd565b6102616004803603604081101561044e57600080fd5b506001600160a01b038135169060200135610999565b6102cb6004803603602081101561047a57600080fd5b50356001600160a01b0316610a23565b61029b600480360360208110156104a057600080fd5b8101906020810181356401000000008111156104bb57600080fd5b8201836020820111156104cd57600080fd5b803590602001918460018302840111640100000000831117156104ef57600080fd5b509092509050610a3e565b6102cb610b79565b6102cb6004803603604081101561051857600080fd5b506001600160a01b0381358116916020013516610b7e565b6102cb610b8a565b61029b6004803603604081101561054e57600080fd5b506001600160a01b0381351690602001351515610b9c565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081565b60008061060860038463ffffffff610c5816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3610661338484610c8b565b5060015b92915050565b6000546001600160a01b031633146106b7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156107ae5760005a905061075b33878787610ceb565b6001925060005a820390506064838202045a92505b805a840310156107a657600180546040805160208082019390935281518082038401815290820190915280519101209055610770565b5050506107bf565b6107ba33868686610ceb565b600191505b509392505050565b601281565b61020081565b60085481565b60066020526000908152604090205460ff1681565b6000806107fa6003610fd1565b915091509091565b600061066582610ffe565b60006108198383611036565b9392505050565b6000546001600160a01b0316331461086c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329b43ab360e11b81525081565b6000546001600160a01b03163314610929576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610a0b5760005a90506109b833338787610ceb565b6001925060005a820390506064838202045a92505b805a84031015610a03576001805460408051602080820193909352815180820384018152908201909152805191012090556109cd565b505050610a1c565b610a1733338686610ceb565b600191505b5092915050565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610a8a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610b325780601f10610b0757610100808354040283529160200191610b32565b820191906000526020600020905b815481529060010190602001808311610b1557829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610b7460058383611e8e565b505050565b606481565b6000610819838361107b565b6000610b9660036110d9565b90505b90565b6000546001600160a01b03163314610be8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080610c80846000018460010181548110610c7057fe5b90600052602060002001546110e1565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610b749082610cde866110f6565b919063ffffffff61110216565b80610d2f57816001600160a01b0316836001600160a01b03166000805160206120d883398151915260006040518082815260200191505060405180910390a3610fcb565b6000610d3a84610ffe565b905081811015610d86576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b846001600160a01b0316846001600160a01b031614610e1e576000610dab858761107b565b90506000198114610e1c5782811015610e02576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610e1c8587610e17848763ffffffff61125916565b610c8b565b505b81610e2985856112a6565b610f7e576000610e4084606463ffffffff6112e916565b9050600084600114610e525781610e55565b60005b9050610e77610e6a838363ffffffff61135216565b849063ffffffff61125916565b9250610e9287610e8d868863ffffffff61125916565b61139b565b600254610ea5908363ffffffff61125916565b6002556040805183815290516000916001600160a01b038a16916000805160206120d88339815191529181900360200190a36000610ee388876113d3565b9050610f0281610e8d84610ef685610ffe565b9063ffffffff61135216565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316886001600160a01b03166000805160206120d8833981519152846040518082815260200191505060405180910390a35050505b610f8f84610e8d83610ef688610ffe565b836001600160a01b0316856001600160a01b03166000805160206120d8833981519152836040518082815260200191505060405180910390a350505b50505050565b8054600090819060021115610feb5750600090508061060d565b61060883600001600181548110610c7057fe5b604080516662616c616e636560c81b815290519081900360070190206000906106659061102a846110f6565b9063ffffffff61143016565b6000610819826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061102a856110f6565b600061081982604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061102a856110f6565b546000190190565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b600061110d8461159f565b90506111188161162a565b6111255761112584611661565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061119d5780518252601f19909201916020918201910161117e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b5050905080611252576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b5050505050565b6000818310156112a0576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806108195750506001600160a01b031660009081526007602052604090205460ff16919050565b60008161132b576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848161133657fe5b04905082848161134257fe5b0615610819576001019392505050565b600082820183811015610819576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b604080516662616c616e636560c81b815290519081900360070190206113c59082610cde856110f6565b6113cf8282611698565b5050565b6000806113df83611878565b905060006113ed8583611036565b90506113fd858383600101611896565b611426611418868385600161141260036110d9565b036118dd565b60039063ffffffff610c5816565b5095945050505050565b60008061143c8461159f565b90506114478161162a565b611455575060009050610665565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106114ca5780518252601f1990920191602091820191016114ab565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461152a576040519150601f19603f3d011682016040523d82523d6000602084013e61152f565b606091505b50915091508161157e576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561159357600080fd5b50519695505050505050565b600060ff60f81b3083604051806020016115b890611f0c565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159061081957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60606040518060200161167390611f0c565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b60006116a460036110d9565b90508061170657604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a26117006003848463ffffffff61193916565b506113cf565b60006117126003610fd1565b9150611727905060038563ffffffff611a0416565b156117995761173e6003858563ffffffff611a2516565b826117945761174d6003611b4c565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b610fcb565b82158015906117b257506102008210806117b257508281105b15610fcb57610200821061181d576000806117cd6003611b4c565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b61182f6003858563ffffffff61193916565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a250505050565b6000600019825b60019190910190600a90048061187f575092915050565b610b74826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b610cde866110f6565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818161192e57fe5b069695505050505050565b6001600160a01b0382166000908152600184016020526040902054156119a6576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006119b28383611c8c565b8454600181018655600086815260209020018190558454909150600019016119e185828463ffffffff611ca016565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611a92576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611a9e8484611c8c565b90506000856000018381548110611ab157fe5b90600052602060002001549050600081831015611ae057611ad987858563ffffffff611d6e16565b9050611b02565b81831115611af957611ad987858563ffffffff611ca016565b50505050610b74565b82876000018281548110611b1257fe5b600091825260209091200155808414611b43576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611ba8576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611bbb84600001600181548110610c7057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611bf6576001611bf08582611f19565b50611c86565b6000846000016001830381548110611c0a57fe5b906000526020600020015490508085600001600181548110611c2857fe5b6000918252602090912001556000198201611c438682611f19565b506001611c5786828463ffffffff611d6e16565b905080866001016000611c6985611e81565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b8160018114610819576000846002830481548110611cba57fe5b906000526020600020015490505b828110156107bf578281866002850481548110611ce157fe5b906000526020600020016000886000018681548110611cfc57fe5b6000918252602082200193909355509190915582906001870190611d1f84611e81565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611d4d576107bf565b846002830481548110611d5c57fe5b90600052602060002001549050611cc8565b8254829060001981015b81836002021015611e785785546002840290600090889083908110611d9957fe5b90600052602060002001549050600082841115611df1576000896000018460010181548110611dc457fe5b9060005260206000200154905080831015611de757809150836001019350611deb565b8291505b50611df4565b50805b80871115611e0457505050611e78565b80878a6000018881548110611e1557fe5b9060005260206000200160008c6000018781548110611e3057fe5b60009182526020822001939093555091909155869060018b0190611e5384611e81565b6001600160a01b0316815260208101919091526040016000205550909350611d789050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ecf5782800160ff19823516178555611efc565b82800160010185558215611efc579182015b82811115611efc578235825591602001919060010190611ee1565b50611f08929150611f39565b5090565b61012580611fb383390190565b815481835581811115610b7457600083815260209020610b749181019083015b610b9991905b80821115611f085760008155600101611f3f565b805415611f9d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a723058200b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f264736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7230582079b1fef37d08548c46965586994b4d21435797de3dfa540d157b39f4def9886164736f6c634300050a0032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002c54036c505b762b6ca2873dfcfecb632f83fe2700000000000000000000000000000000000000000000d5e5af7b8e5a0ca57eb5

-----Decoded View---------------
Arg [0] : _to (address): 0x2C54036c505B762B6cA2873dfcfEcB632f83fE27
Arg [1] : _amount (uint256): 1010101010101010101010101

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002c54036c505b762b6ca2873dfcfecb632f83fe27
Arg [1] : 00000000000000000000000000000000000000000000d5e5af7b8e5a0ca57eb5


Deployed Bytecode Sourcemap

13538:8639:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13538:8639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:49;;;:::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;14579:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20924:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20924:112:0;;:::i;:::-;;;;-1:-1:-1;;;;;20924:112:0;;;;;;;;;;;;;;;;;;;;;21565:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21565:213:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;410:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;410:134:0;-1:-1:-1;;;;;410:134:0;;:::i;:::-;;14798:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14798:43:0;-1:-1:-1;;;;;14798:43:0;;:::i;14243:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;21977:197;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21977:197:0;;;;;;;;;;;;;;;;;:::i;14680:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14461:38;;;:::i;14867:23::-;;;:::i;14746:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14746:45:0;-1:-1:-1;;;;;14746:45:0;;:::i;21044:96::-;;;:::i;21303:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21303:109:0;-1:-1:-1;;;;;21303:109:0;;:::i;16442:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16442:124:0;;;;;;;;:::i;20643:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20643:131:0;;:::i;96:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;96:20:0;;;;;;;;;;;;;;14635:38;;;:::i;20129:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20129:179:0;;;;;;;;;;:::i;21786:183::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21786:183:0;;;;;;;;:::i;21148:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21148:109:0;-1:-1:-1;;;;;21148:109:0;;:::i;20509:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20509:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20509:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20509: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;20509:126:0;;-1:-1:-1;20509:126:0;-1:-1:-1;20509:126:0;:::i;14421:33::-;;;:::i;21420:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21420:137:0;;;;;;;;;;:::i;20827:89::-;;;:::i;20316:185::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20316:185:0;;;;;;;;;;:::i;14579:49::-;;;;;;;;;;;;;;;-1:-1:-1;;14579:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20924:112::-;20978:7;;21014:14;:4;21025:2;21014:14;:10;:14;:::i;:::-;21007:21;;;;20924:112;;;;:::o;21565:213::-;21656:38;;;;;;;;21634:4;;-1:-1:-1;;;;;21656:38:0;;;21665:10;;21656:38;;;;;;;;;;21705:43;21719:10;21731:8;21741:6;21705:13;:43::i;:::-;-1:-1:-1;21766:4:0;21565:213;;;;;:::o;410:134::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;497:5;;479:32;;;-1:-1:-1;;;;;497:5:0;;;479:32;;;;;;;;;;;;;;;;;;;;;522:5;:14;;-1:-1:-1;;;;;;522:14:0;-1:-1:-1;;;;;522:14:0;;;;;;;;;;410:134::o;14798:43::-;;;;;;;;;;;;;;;:::o;14243:26::-;;;;:::o;21977:197::-;22082:4;22063:8;;12297:11;12312:1;12297:16;12293:424;;;12330:16;12349:9;12330:28;;22099:45;22113:10;22125:5;22132:3;22137:6;22099:13;:45::i;:::-;22162:4;22155:11;;12389:13;12416:9;12405:20;;;-1:-1:-1;12477:3:0;12458:15;;;12457:23;12506:9;12495:20;;12530:142;12560:6;12548:9;12537:8;:20;:29;12530:142;;;12650:4;;;12633:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12633:22:0;;;;;;12623:33;;;;;12616:40;;12530:142;;;12293:424;;;;;;22099:45;22113:10;22125:5;22132:3;22137:6;22099:13;:45::i;:::-;22162:4;22155:11;;12704:1;21977:197;;;;;;:::o;14680:35::-;14713:2;14680:35;:::o;14461:38::-;14496:3;14461:38;:::o;14867:23::-;;;;:::o;14746:45::-;;;;;;;;;;;;;;;:::o;21044:96::-;21086:7;21095;21122:10;:4;:8;:10::i;:::-;21115:17;;;;21044:96;;:::o;21303:109::-;21360:7;21387:17;21398:5;21387:10;:17::i;16442:124::-;16512:7;16539:19;16546:5;16553:4;16539:6;:19::i;:::-;16532:26;16442:124;-1:-1:-1;;;16442:124:0:o;20643:131::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;20725:8;;20713:27;;;;;;;;;;;;;;;;;;;;;;;;20751:8;:15;20643:131::o;96:20::-;;;-1:-1:-1;;;;;96:20:0;;:::o;14635:38::-;;;;;;;;;;;;;;-1:-1:-1;;;14635:38:0;;;;:::o;20129:179::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;20224:32;;;-1:-1:-1;;;;;20224:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20267:18:0;;;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;20267:33:0;;;;;;;;;;20129:179::o;21786:183::-;21872:4;21853:8;;12297:11;12312:1;12297:16;12293:424;;;12330:16;12349:9;12330:28;;21889:50;21903:10;21915;21927:3;21932:6;21889:13;:50::i;:::-;21957:4;21950:11;;12389:13;12416:9;12405:20;;;-1:-1:-1;12477:3:0;12458:15;;;12457:23;12506:9;12495:20;;12530:142;12560:6;12548:9;12537:8;:20;:29;12530:142;;;12650:4;;;12633:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12633:22:0;;;;;;12623:33;;;;;12616:40;;12530:142;;;12293:424;;;;;;21889:50;21903:10;21915;21927:3;21932:6;21889:13;:50::i;:::-;21957:4;21950:11;;12704:1;21786:183;;;;;:::o;21148:109::-;-1:-1:-1;;;;;21232:17:0;21205:7;21232:17;;;:10;:17;;;;;;;21148:109::o;20509:126::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;20584:20;;;;;;20592:4;20584:20;;;-1:-1:-1;;20584:20:0;;;;;;;;;;;;;;;;;;;20592:4;;20598:5;;;;20584:20;;;;;;;;;;;20592:4;;20584:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20584:20:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;20584:20:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;20584:20:0;;;;-1:-1:-1;20584:20:0;;-1:-1:-1;;;;;;20584:20:0;20615:12;:4;20622:5;;20615:12;:::i;:::-;;20509:126;;:::o;14421:33::-;14451:3;14421:33;:::o;21420:137::-;21495:7;21522:27;21533:5;21540:8;21522:10;:27::i;20827:89::-;20870:7;20897:11;:4;:9;:11::i;:::-;20890:18;;20827:89;;:::o;20316:185::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;20413:34;;;-1:-1:-1;;;;;20413:34:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20458:20:0;;;;;;;;:13;:20;;;;;:35;;-1:-1:-1;;20458:35:0;;;;;;;;;;20316:185::o;2370:143::-;2440:7;2449;2476:29;2483:5;:13;;2497:2;2502:1;2497:6;2483:21;;;;;;;;;;;;;;;;2476:6;:29::i;:::-;2469:36;;;;2370:143;;;;;:::o;15885:188::-;16007:39;;;-1:-1:-1;;;16007:39:0;;;;;;;;-1:-1:-1;;;;;;16007:39:0;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;16007:39:0;;;;;;;15997:50;;;;;15977:88;;16057:6;15977:13;15984:5;15977:6;:13::i;:::-;:19;:88;;:19;:88;:::i;17480:1553::-;17590:11;17586:93;;17639:3;-1:-1:-1;;;;;17623:23:0;17632:5;-1:-1:-1;;;;;17623:23:0;-1:-1:-1;;;;;;;;;;;17644:1:0;17623:23;;;;;;;;;;;;;;;;;;17661:7;;17586:93;17691:19;17713:17;17724:5;17713:10;:17::i;:::-;17691:39;;17764:6;17749:11;:21;;17741:52;;;;;-1:-1:-1;;;17741:52:0;;;;;;;;;;;;-1:-1:-1;;;17741:52:0;;;;;;;;;;;;;;;17819:9;-1:-1:-1;;;;;17810:18:0;:5;-1:-1:-1;;;;;17810:18:0;;17806:316;;17845:21;17869:28;17880:5;17887:9;17869:10;:28::i;:::-;17845:52;;-1:-1:-1;;17916:13:0;:25;17912:199;;17987:6;17970:13;:23;;17962:56;;;;;-1:-1:-1;;;17962:56:0;;;;;;;;;;;;-1:-1:-1;;;17962:56:0;;;;;;;;;;;;;;;18037:58;18051:5;18058:9;18069:25;:13;18087:6;18069:25;:17;:25;:::i;:::-;18037:13;:58::i;:::-;17806:316;;18152:6;18176:26;18191:5;18198:3;18176:14;:26::i;:::-;18171:723;;18219:12;18234:20;:6;14451:3;18234:20;:15;:20;:::i;:::-;18219:35;;18269:12;18284:6;18294:1;18284:11;:22;;18302:4;18284:22;;;18298:1;18284:22;18269:37;-1:-1:-1;18331:27:0;18343:14;:4;18269:37;18343:14;:8;:14;:::i;:::-;18331:7;;:27;:11;:27;:::i;:::-;18321:37;-1:-1:-1;18375:43:0;18387:5;18394:23;:11;18410:6;18394:23;:15;:23;:::i;:::-;18375:11;:43::i;:::-;18477:11;;:21;;18493:4;18477:21;:15;:21;:::i;:::-;18463:11;:35;18518:33;;;;;;;;18542:1;;-1:-1:-1;;;;;18518:33:0;;;-1:-1:-1;;;;;;;;;;;18518:33:0;;;;;;;;18643:14;18660:26;18672:5;18679:6;18660:11;:26::i;:::-;18643:43;;18744:49;18756:6;18764:28;18787:4;18764:18;18775:6;18764:10;:18::i;:::-;:22;:28;:22;:28;:::i;18744:49::-;18813:20;;;;;;;;-1:-1:-1;;;;;18813:20:0;;;;;;;;;;;;;18869:6;-1:-1:-1;;;;;18853:29:0;18862:5;-1:-1:-1;;;;;18853:29:0;-1:-1:-1;;;;;;;;;;;18877:4:0;18853:29;;;;;;;;;;;;;;;;;;18171:723;;;;18934:46;18946:3;18951:28;18971:7;18951:15;18962:3;18951:10;:15::i;18934:46::-;19012:3;-1:-1:-1;;;;;18996:29:0;19005:5;-1:-1:-1;;;;;18996:29:0;-1:-1:-1;;;;;;;;;;;19017:7:0;18996:29;;;;;;;;;;;;;;;;;;17480:1553;;;;;;;:::o;1890:214::-;1978:20;;1945:7;;;;2001:1;-1:-1:-1;1974:79:0;;;-1:-1:-1;2035:1:0;;-1:-1:-1;2035:1:0;2019:22;;1974:79;2072:24;2079:5;:13;;2093:1;2079:16;;;;;;;15364:133;14317:20;;;-1:-1:-1;;;14317:20:0;;;;;;;;;;;;15422:7;;15457:31;;:13;15464:5;15457:6;:13::i;:::-;:18;:31;:18;:31;:::i;15703:174::-;15771:7;15806:62;15861:4;15835:31;;;;;;-1:-1:-1;;;15835:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15835:31:0;;;15825:42;;;;;;15806:13;15813:5;15806:6;:13::i;15505:190::-;15581:7;15616:70;15675:8;15645:39;;;;;;-1:-1:-1;;;15645:39:0;;;;;;-1:-1:-1;;;;;15645:39:0;-1:-1:-1;;;;;15645:39:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15645:39:0;;;15635:50;;;;;;15616:13;15623:5;15616:6;:13::i;2246:116::-;2330:20;-1:-1:-1;;2330:24:0;;2246:116::o;1316:319::-;1490:11;-1:-1:-1;;;;;1524:54:0;;;1606:3;1602:15;;;;;1462:166::o;15252:104::-;-1:-1:-1;;;;;15337:10:0;;15252:104::o;9339:569::-;9455:17;9487:21;9500:7;9487:12;:21::i;:::-;9455:54;;9525:37;9555:5;9525:21;:37::i;:::-;9520:86;;9579:15;9586:7;9579:6;:15::i;:::-;9711:124;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9711:124:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9677:169:0;;;;9659:12;;-1:-1:-1;;;;;9677:19:0;;;9711:124;9677:169;;;25:18:-1;9677: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;;;9677: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;;9658:188:0;;;9867:7;9859:41;;;;;-1:-1:-1;;;9859:41:0;;;;;;;;;;;;-1:-1:-1;;;9859:41:0;;;;;;;;;;;;;;;9339:569;;;;;:::o;10800:141::-;10858:7;10891:1;10886;:6;;10878:32;;;;;-1:-1:-1;;;10878:32:0;;;;;;;;;;;;-1:-1:-1;;;10878:32:0;;;;;;;;;;;;;;;-1:-1:-1;10928:5:0;;;10800:141::o;16619:145::-;-1:-1:-1;;;;;16718:20:0;;16694:4;16718:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16740:16:0;;;;;:11;:16;;;;;;;;;16619:145;-1:-1:-1;16619:145:0:o;11333:232::-;11396:7;11424:6;11416:30;;;;;-1:-1:-1;;;11416:30:0;;;;;;;;;;;;-1:-1:-1;;;11416:30:0;;;;;;;;;;;;;;;11457:9;11473:1;11469;:5;;;;;;11457:17;;11493:1;11489;:5;;;;;;:10;11485:52;;11524:1;11520:5;11556:1;11333:232;-1:-1:-1;;;11333:232:0:o;10628:164::-;10686:7;10718:5;;;10742:6;;;;10734:31;;;;;-1:-1:-1;;;10734:31:0;;;;;;;;;;;;-1:-1:-1;;;10734:31:0;;;;;;;;;;;;;;16261:173;14317:20;;;-1:-1:-1;;;14317:20:0;;;;;;;;;;;;16335:51;;16376:8;16335:13;16342:5;16335:6;:13::i;:51::-;16397:29;16410:5;16417:8;16397:12;:29::i;:::-;16261:173;;:::o;17002:470::-;17072:14;17144:17;17164:29;17186:6;17164:21;:29::i;:::-;17144:49;;17258:13;17274:24;17281:5;17288:9;17274:6;:24::i;:::-;17258:40;;17309:38;17319:5;17326:9;17337:5;17345:1;17337:9;17309;:38::i;:::-;17403:61;17414:49;17422:5;17429;17436:9;17461:1;17447:11;:4;:9;:11::i;:::-;:15;17414:7;:49::i;:::-;17403:4;;:61;:10;:61;:::i;:::-;-1:-1:-1;17391:73:0;17002:470;-1:-1:-1;;;;;17002:470:0:o;9916:610::-;10009:7;10029:17;10061:21;10074:7;10061:12;:21::i;:::-;10029:54;;10099:37;10129:5;10099:21;:37::i;:::-;10094:88;;-1:-1:-1;10168:1:0;;-1:-1:-1;10153:17:0;;10094:88;10310:98;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10310:98:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10270:149:0;;;;10235:12;;10249:17;;-1:-1:-1;;;;;10270:25:0;;;10310:98;;10270: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;;;10270: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;;10234:185:0;;;;10440:7;10432:41;;;;;-1:-1:-1;;;10432:41:0;;;;;;;;;;;;-1:-1:-1;;;10432:41:0;;;;;;;;;;;;;;;10502:4;10491:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10491:27:0;;9916:610;-1:-1:-1;;;;;;9916:610:0:o;8658:433::-;8716:7;8871:4;8866:10;;8911:4;8943;8984:30;;;;;;;;:::i;:::-;21:26:-1;;;-1:-1;;21:26;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;8974:41:0;;41:4:-1;30:16;;;8974:41:0;-1:-1:-1;;;;;;8823:215:0;;;;;;;;;;;;;-1:-1:-1;;;;;;8823:215:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8823:215:0;;;;;;;8791:266;;;;;;8658:433;-1:-1:-1;;8658:433:0:o;8209:323::-;8267:4;8374:18;;8411:22;;;;;:113;;-1:-1:-1;8457:66:0;8437:87;;;8404:120;-1:-1:-1;;8209:323:0:o;9099:232::-;9148:21;9172: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;9172:30:0;9148:54;;9316:4;9305:8;9299:15;9292:4;9282:8;9278:19;9275:1;9267:54;9263:59;9261:63;;:::o;19041:1042::-;19112:12;19127:11;:4;:9;:11::i;:::-;19112:26;-1:-1:-1;19153:9:0;19149:131;;19184:24;;;;;;19206:1;19184:24;;;;;;-1:-1:-1;;;;;19184:24:0;;;;;;;;;;;19223;:4;19235:5;19242:4;19223:24;:11;:24;:::i;:::-;19262:7;;;19149:131;19295:15;19314:10;:4;:8;:10::i;:::-;19292:32;-1:-1:-1;19341:15:0;;-1:-1:-1;19341:4:0;19350:5;19341:15;:8;:15;:::i;:::-;19337:739;;;19373:24;:4;19385:5;19392:4;19373:24;:11;:24;:::i;:::-;19416:9;19412:112;;19446:13;:4;:11;:13::i;:::-;-1:-1:-1;;19483:25:0;;;19500:1;19483:25;;;;;;;;;;-1:-1:-1;;;;;19483:25:0;;;;;;;;;;;19412:112;19337:739;;;19627:9;;;;;:48;;;14496:3;19641:4;:15;:33;;;;19670:4;19660:7;:14;19641:33;19623:442;;;14496:3;19745:4;:16;19741:176;;19787:14;19803:16;19823:13;:4;:11;:13::i;:::-;19786:50;;;;19874:6;-1:-1:-1;;;;;19864:33:0;;19882:8;19892:4;19864:33;;;;;;;;;;;;;;;;;;;;;;;;19741:176;;;19974:24;:4;19986:5;19993:4;19974:24;:11;:24;:::i;:::-;20022:27;;;;;;;;;;;;;;-1:-1:-1;;;;;20022:27:0;;;;;;;;;;;19041:1042;;;;:::o;11659:270::-;11723:7;-1:-1:-1;;11794:5:0;11812:83;11855:9;;;;;;11838:2;11830:10;;;11812:83;;-1:-1:-1;11914:7:0;11659:270;-1:-1:-1;;11659:270:0:o;16081:172::-;16165:80;16221:4;16195:31;;;;;;-1:-1:-1;;;16195:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16195:31:0;;;16185:42;;;;;;16237:6;16229:15;;16165:13;16172:5;16165:6;:13::i;16772:222::-;16918:31;;;-1:-1:-1;;;;;;16918:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16918:31:0;;;;;;;16908:42;;;;;16865:7;;16984:1;16977:8;;16908:42;16977:8;16969:17;;;;;;16772:222;-1:-1:-1;;;;;;16772:222:0:o;3658:555::-;-1:-1:-1;;;;;3753:18:0;;;;;;:11;;;:18;;;;;;:23;3745:60;;;;;-1:-1:-1;;;3745:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3868:15;3886:21;3893:5;3900:6;3886;:21::i;:::-;27:10:-1;;39:1;23:18;;45:23;;3918:13:0;:27;;;;;;;;;;4023:20;;3868:39;;-1:-1:-1;;;4023:24:0;4097:37;3918:5;4023:24;3868:39;4097:37;:14;:37;:::i;:::-;-1:-1:-1;;;;;4172:18:0;;;;;;;:11;;;;:18;;-1:-1:-1;;4172:18:0;;;;:33;-1:-1:-1;3658:555:0:o;2112:126::-;-1:-1:-1;;;;;2207:18:0;2183:4;2207:18;;;:11;;;;;:18;;;;;;:23;;;2112:126::o;4221:772::-;-1:-1:-1;;;;;4322:18:0;;4308:11;4322:18;;;:11;;;:18;;;;;;4359:8;4351:46;;;;;-1:-1:-1;;;4351:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4410:11;4424:21;4431:5;4438:6;4424;:21::i;:::-;4410:35;;4456:11;4470:5;:13;;4484:3;4470:18;;;;;;;;;;;;;;;;4456:32;;4499:14;4536:3;4530;:9;4526:285;;;4593:26;:5;4610:3;4615;4593:26;:16;:26;:::i;:::-;4584:35;;4526:285;;;4647:3;4641;:9;4637:174;;;4702:24;:5;4717:3;4722;4702:24;:14;:24;:::i;4637:174::-;4793:7;;;;;;4637:174;4872:3;4848:5;:13;;4862:6;4848:21;;;;;;;;;;;;;;;;;:27;4917:13;;;4913:73;;-1:-1:-1;;;;;4947:18:0;;;;;;:11;;;:18;;;;;:27;;;4913:73;4221:772;;;;;;;:::o;2626:979::-;2777:20;;2679:13;;;;2829:1;2816:14;;2808:51;;;;;-1:-1:-1;;;2808:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2934:24;2941:5;:13;;2955:1;2941:16;;;;;;;2934:24;-1:-1:-1;;;;;2969:18:0;;2990:1;2969:18;;;:11;;;:18;;;;;:22;2916:42;;-1:-1:-1;2916:42:0;-1:-1:-1;3022:1:0;3008:15;;3004:594;;;3063:1;3040:24;:5;3063:1;3040:24;:::i;:::-;;3004:594;;;3172:11;3186:5;:13;;3213:1;3200:10;:14;3186:29;;;;;;;;;;;;;;;;3172:43;;3249:3;3230:5;:13;;3244:1;3230:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;3347:14:0;;3324:37;:5;3347:14;3324:37;:::i;:::-;-1:-1:-1;3425:1:0;3477:26;:5;3425:1;3499:3;3477:26;:16;:26;:::i;:::-;3471:32;;3583:3;3549:5;:11;;:31;3561:18;3575:3;3561:13;:18::i;:::-;-1:-1:-1;;;;;3549:31:0;;;;;;;;;;;;-1:-1:-1;3549:31:0;:37;-1:-1:-1;;3004:594:0;2626:979;;;;:::o;1038:270::-;1276:3;1272:16;-1:-1:-1;;;;;1216:54:0;;;;1213:76;1209:81;;1184:117::o;5001:824::-;5137:4;5163:1;5156:8;;5152:666;;5181:14;5198:5;5218:1;5212:3;:7;5198:22;;;;;;;;;;;;;;;;5181:39;;5235:572;5251:4;5242:6;:13;5235:572;;;5410:4;5416:6;5363:5;5383:1;5377:3;:7;5363:22;;;;;;;;;;;;;;;;5387:5;:13;;5401:3;5387:18;;;;;;;;;;;;;;;;5362:61;;;;-1:-1:-1;5362:61:0;;;;5520:3;;5483:11;;;;5495:21;5509:6;5495:13;:21::i;:::-;-1:-1:-1;;;;;5483:34:0;;;;;;;;;;;;-1:-1:-1;5483:34:0;:40;5624:1;5618:3;:7;5612:13;;5648:3;5655:1;5648:8;5644:62;;;5681:5;;5644:62;5769:5;5789:1;5783:3;:7;5769:22;;;;;;;;;;;;;;;;5760:31;;5235:572;;5833:1738;6007:20;;5973:4;;-1:-1:-1;;6055:10:0;;6078:1486;6095:6;6085:3;6091:1;6085:7;:16;6078:1486;;;6261:16;;6190:1;6184:7;;;6172:9;;6261:5;;6184:7;;6261:16;;;;;;;;;;;;;;6241:36;;6339:18;6387:1;6378:6;:10;6374:764;;;6519:18;6540:5;:13;;6554:1;6558;6554:5;6540:20;;;;;;;;;;;;;;;;6519:41;;6767:10;6755:9;:22;6751:247;;;6815:10;6802:23;;6852:1;6856;6852:5;6848:9;;6751:247;;;6969:9;6956:22;;6751:247;6374:764;;;;-1:-1:-1;7113:9:0;6374:764;7218:10;7211:4;:17;7207:63;;;7249:5;;;;;7207:63;7364:10;7376:4;7323:5;:13;;7337:3;7323:18;;;;;;;;;;;;;;;;7343:5;:13;;7357:1;7343:16;;;;;;;;;;;;;;;;7322:59;;;;-1:-1:-1;7322:59:0;;;;7474:3;;7433:11;;;;7445:25;7459:10;7445:13;:25::i;:::-;-1:-1:-1;;;;;7433:38:0;;;;;;;;;;;;-1:-1:-1;7433:38:0;:44;-1:-1:-1;7551:1:0;;-1:-1:-1;6078:1486:0;;-1:-1:-1;6078:1486:0;;5833:1738;;;;;;;:::o;1643:239::-;1808:11;-1:-1:-1;;;;;1804:60:0;;1780:95::o;13538:8639::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13538:8639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13538:8639:0;;;-1:-1:-1;13538:8639:0;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;873:157;941:20;;:25;933:57;;;;;-1:-1:-1;;;933:57:0;;;;;;;;;;;;-1:-1:-1;;;933:57:0;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;1001:13:0;:21;;;;;;;;873:157::o

Swarm Source

bzzr://0b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.