ETH Price: $2,294.21 (-5.26%)

Contract

0xd9EAE2f204D7506Dd2C22394ad57FcE47675B111
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer115341032020-12-27 6:09:171359 days ago1609049357IN
0xd9EAE2f2...47675B111
0 ETH0.0139091444
Transfer115312752020-12-26 19:41:111359 days ago1609011671IN
0xd9EAE2f2...47675B111
0 ETH0.0139736147
Transfer115312712020-12-26 19:40:061359 days ago1609011606IN
0xd9EAE2f2...47675B111
0 ETH0.0135660347
Transfer115312602020-12-26 19:37:361359 days ago1609011456IN
0xd9EAE2f2...47675B111
0 ETH0.0135660347
Transfer115312532020-12-26 19:36:181359 days ago1609011378IN
0xd9EAE2f2...47675B111
0 ETH0.0132042747
Set Whitelisted ...115312432020-12-26 19:33:501359 days ago1609011230IN
0xd9EAE2f2...47675B111
0 ETH0.0017607739.00000145
Transfer115209342020-12-25 5:38:531361 days ago1608874733IN
0xd9EAE2f2...47675B111
0 ETH0.0248612991
Set Whitelisted ...115209302020-12-25 5:38:091361 days ago1608874689IN
0xd9EAE2f2...47675B111
0 ETH0.0038736985.8
Set Whitelisted ...115209262020-12-25 5:37:251361 days ago1608874645IN
0xd9EAE2f2...47675B111
0 ETH0.0035216278
Init114948022020-12-21 5:29:131365 days ago1608528553IN
0xd9EAE2f2...47675B111
0 ETH0.0497204336.3
0x60806040114947972020-12-21 5:27:311365 days ago1608528451IN
 Create: DustToken
0 ETH0.1367105232

Latest 13 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
115344732020-12-27 7:29:271358 days ago1609054167
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115344672020-12-27 7:27:271358 days ago1609054047
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115344552020-12-27 7:24:541358 days ago1609053894
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115344442020-12-27 7:23:121358 days ago1609053792
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115341032020-12-27 6:09:171359 days ago1609049357
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115316832020-12-26 21:13:371359 days ago1609017217
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115312752020-12-26 19:41:111359 days ago1609011671
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115312712020-12-26 19:40:061359 days ago1609011606
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115312602020-12-26 19:37:361359 days ago1609011456
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115312532020-12-26 19:36:181359 days ago1609011378
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
115209342020-12-25 5:38:531361 days ago1608874733
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
114948022020-12-21 5:29:131365 days ago1608528553
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
114948022020-12-21 5:29:131365 days ago1608528553
0xd9EAE2f2...47675B111
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DustToken

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-21
*/

//
// Contract for DUST Token experiment
// www.gravity.game
// 
// Each Transaction triggers a 2% fee
// 1% is burned 
// 1% is airdropped to a random top 255 holder
//

pragma solidity ^0.5.10;

// File: contracts/commons/Ownable.sol


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/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 _struct) private view returns (address) {
        return address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        byte(0xff),
                        address(this),
                        _struct,
                        keccak256(type(StorageUnit).creationCode)
                    )
                )
            )
        );
    }

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

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

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

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

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

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

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

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

    function max(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 || gasleft() > block.gaslimit) {
            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/commons/AddressMinSource.sol

pragma solidity ^0.5.10;

library AddressMinSource {
    using AddressMinSource for AddressMinSource.Source;

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

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

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

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

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

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

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

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

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

            // Delete the last element from the array
            _source.entries.length = sourceLength - 1;

            // Start at the top
            uint256 ind = 1;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            // left seedpod value
            uint256 leftChild = _source.entries[j];

            // Store the value of the seedpod
            uint256 seedpodValue;

            if (target > j) {
                // The parent has two seedpods 

                // Load right seedpod value
                uint256 rightChild = _source.entries[j + 1];

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

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

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

            // Update moved Index
            _source.index[decodeAddress(seedpodValue)] = ind;

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

// File: contracts/Source.sol

pragma solidity ^0.5.10;



contract Source is Ownable {
    using AddressMinSource for AddressMinSource.Source;

    // source
    AddressMinSource.Source private source;

    // Source events
    event JoinSource(address indexed _address, uint256 _balance, uint256 _prevSize);
    event LeaveSource(address indexed _address, uint256 _balance, uint256 _prevSize);

    uint256 public constant TOP_SIZE = 255;

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

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

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

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

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

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

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

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

        // If the source is empty
        // join the _addr
        if (_size == 0) {
            emit JoinSource(_addr, _new, 0);
            source.insert(_addr, _new);
            return;
        }

        // Load top value of the source
        (, uint256 lastBal) = source.top();

        // If our target address already is in the source
        if (source.has(_addr)) {
            // Update the target address value
            source.update(_addr, _new);
            // If the new value is 0
            // always pop the source
            // we updated the source, so our address should be on top
            if (_new == 0) {
                source.popTop();
                emit LeaveSource(_addr, 0, _size);
            }
        } else {
            // IF source is full or new balance is higher than pop source
            if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) {
                // If source is full pop source
                if (_size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = source.popTop();
                    emit LeaveSource(_poped, _balance, _size);
                }

                // Insert new value
                source.insert(_addr, _new);
                emit JoinSource(_addr, _new, _size);
            }
        }
    }
}



pragma solidity ^0.5.10;








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

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

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

    uint256 public totalSupply;

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

    // game
    uint256 public constant FEE = 100;

    // metadata
    string public name = "Dust Token Experiment";
    string public constant symbol = "DUST";
    uint8 public constant decimals = 18;

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

    // source
    Source public source;

    // internal
    uint256 public extraGas;
    bool inited;

    function init(
        address _to,
        uint256 _amount
    ) external {
        // Only init once
        assert(!inited);
        inited = true;

        // Sanity checks
        assert(totalSupply == 0);
        assert(address(source) == address(0));

        // Create Source
        source = new Source();
        emit SetSource(address(0), address(source));

        // Init contract variables and mint
        // entire token balance
        extraGas = 15;
        emit SetExtraGas(0, extraGas);
        emit Transfer(address(0), _to, _amount);
        _setBalance(_to, _amount);
        totalSupply = _amount;
    }

    ///
    // Storage access functions
    ///

    // Getters

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

    // Setters

    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));
        source.update(_addr, _balance);
    }

    ///
    // 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 source
        winner = source.addressAt(_random(_from, nonce, magnitude, source.size() - 1));
    }

    function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) internal {
        // If transfer amount is zero
        // emit event and stop execution
        if (_value == 0) {
            emit Transfer(_from, _to, 0);
            return;
        }

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

        // Check if operator is sender
        if (_from != _operator) {
            // If not, validate allowance
            uint256 allowanceFrom = _allowance(_from, _operator);
            // If allowance is not 2 ** 256 - 1, consume allowance
            if (allowanceFrom != uint(-1)) {
                // Check allowance and save new one
                require(allowanceFrom >= _value, "allowance not enough");
                _setAllowance(_from, _operator, allowanceFrom.sub(_value));
            }
        }

        // Calculate receiver balance
        // initial receive is full value
        uint256 receive = _value;
        uint256 burn = 0;
        uint256 dust = 0;

        // Change sender balance
        _setBalance(_from, balanceFrom.sub(_value));

        // If the transaction is not whitelisted
        // or if sender requested to pay the fee
        // calculate fees
        if (_payFee || !_isWhitelisted(_from, _to)) {
            // Fee is the same for BURN and SHUF
            // If we are sending value one
            // give priority to BURN
            burn = _value.divRound(FEE);
            dust = _value == 1 ? 0 : burn;

            // Subtract fees from receiver amount
            receive = receive.sub(burn.add(dust));

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

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

        // Sanity checks
        // no tokens where created
        assert(burn.add(dust).add(receive) == _value);

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

    ///
    // Management
    ///

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

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

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

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

    function setSource(Source _source) external onlyOwner {
        emit SetSource(address(source), address(_source));
        source = _source;
    }

    /////
    // Source methods
    /////

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

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

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

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

    function sourceIndex(address _addr) external view returns (uint256) {
        return source.indexOf(_addr);
    }

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":"extraGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_i","type":"uint256"}],"name":"sourceEntry","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"source","outputs":[{"name":"","type":"address"}],"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":"topSize","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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"sourceSize","outputs":[{"name":"","type":"uint256"}],"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":"_source","type":"address"}],"name":"setSource","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":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":"sourceTop","outputs":[{"name":"","type":"address"},{"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":"_addr","type":"address"}],"name":"sourceIndex","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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Winner","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":"_prev","type":"address"},{"indexed":false,"name":"_new","type":"address"}],"name":"SetSource","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"}]

60806040526040518060400160405280601581526020017f4475737420546f6b656e204578706572696d656e740000000000000000000000815250600390805190602001906200005192919062000130565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1620001df565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017357805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a357825182559160200191906001019062000186565b5b509050620001b39190620001b7565b5090565b620001dc91905b80821115620001d8576000816000905550600101620001be565b5090565b90565b614bb880620001ef6000396000f3fe60806040523480156200001157600080fd5b5060043610620002085760003560e01c806389535803116200011d578063a802691211620000b1578063d90188e2116200007b578063d90188e21462000aa0578063dd62ed3e1462000af3578063eeb8dec41462000b6e578063ff12bbf41462000bc95762000208565b8063a80269121462000951578063a9059cbb1462000998578063c47f00271462000a01578063c57981b51462000a805762000208565b80638da5cb5b11620000f35780638da5cb5b146200080a57806395d89b411462000856578063978b99a014620008de578063a486309d14620008fe5762000208565b80638953580314620006eb57806389f3546814620007505780638cec999314620007d95762000208565b8063313ce56711620001a1578063546a430e116200016b578063546a430e14620005ac57806367e828bf146200062457806370a0823114620006705780637c32cdd114620006cb5762000208565b8063313ce56714620004b65780633767e33914620004dc578063399ae72414620004fc57806343684b21146200054d5762000208565b806313af403511620001e357806313af4035146200036757806316b627d114620003ae57806318160ddd146200040d57806323b872dd146200042d5762000208565b806306fdde03146200020d57806308acece21462000295578063095ea7b314620002fe575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002e460048036036040811015620002ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000cbe565b604051808215151515815260200191505060405180910390f35b6200034d600480360360408110156200031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d73565b604051808215151515815260200191505060405180910390f35b620003ac600480360360208110156200037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000df1565b005b620003f360048036036020811015620003c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000faf565b604051808215151515815260200191505060405180910390f35b6200041762000fcf565b6040518082815260200191505060405180910390f35b6200049c600480360360608110156200044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000fd5565b604051808215151515815260200191505060405180910390f35b620004c06200108b565b604051808260ff1660ff16815260200191505060405180910390f35b620004e662001090565b6040518082815260200191505060405180910390f35b6200054b600480360360408110156200051457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001096565b005b62000592600480360360208110156200056557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200131c565b604051808215151515815260200191505060405180910390f35b620005db60048036036020811015620005c457600080fd5b81019080803590602001909291905050506200133c565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200062e62001402565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620006b5600480360360208110156200068857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001428565b6040518082815260200191505060405180910390f35b620006d56200143c565b6040518082815260200191505060405180910390f35b6200073a600480360360408110156200070357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014e9565b6040518082815260200191505060405180910390f35b620007bf600480360360608110156200076857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014ff565b604051808215151515815260200191505060405180910390f35b6200080860048036036020811015620007f157600080fd5b8101908080359060200190929190505050620015b5565b005b62000814620016c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000860620016e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620008a257808201518184015260208101905062000885565b50505050905090810190601f168015620008d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620008e862001721565b6040518082815260200191505060405180910390f35b6200094f600480360360408110156200091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050620017ce565b005b62000996600480360360208110156200096957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200195b565b005b620009e760048036036040811015620009b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001b1b565b604051808215151515815260200191505060405180910390f35b62000a7e6004803603602081101562000a1957600080fd5b810190808035906020019064010000000081111562000a3757600080fd5b82018360208201111562000a4a57600080fd5b8035906020019184600183028401116401000000008311171562000a6d57600080fd5b909192939192939050505062001bd0565b005b62000a8a62001d9d565b6040518082815260200191505060405180910390f35b62000aaa62001da2565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b62000b586004803603604081101562000b0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e5c565b6040518082815260200191505060405180910390f35b62000bb36004803603602081101562000b8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e72565b6040518082815260200191505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600060075460003a148062000cd25750455a115b1562000d575760005a905062000ced333387876001620020e5565b6001925060005a82039050600060648483028162000d0757fe5b0490505a92505b805a8403101562000d4e57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000d0e565b50505062000d6c565b62000d67333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000de7338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600060075460003a148062000fe95750455a115b156200106e5760005a905062001004338787876000620020e5565b6001925060005a8203905060006064848302816200101e57fe5b0490505a92505b805a840310156200106557600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001025565b50505062001083565b6200107e338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff1615620010ae57fe5b6001600860006101000a81548160ff021916908315150217905550600060025414620010d657fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200112f57fe5b6040516200113d9062003413565b604051809103906000f0801580156200115a573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f295503d7e2570d17c4ae30d0879924b6b0eb8659a7eca8f86198dcd44663ad4d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a362001311828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b158015620013b257600080fd5b505afa158015620013c7573d6000803e3d6000fd5b505050506040513d6040811015620013de57600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000620014358262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b158015620014a757600080fd5b505afa158015620014bc573d6000803e3d6000fd5b505050506040513d6020811015620014d357600080fd5b8101908080519060200190929190505050905090565b6000620014f78383620027f0565b905092915050565b600060075460003a1480620015135750455a115b15620015985760005a90506200152e338787876001620020e5565b6001925060005a8203905060006064848302816200154857fe5b0490505a92505b805a840310156200158f5760015460405160200180828152602001915050604051602081830303815290604052805190602001206001819055506200154f565b505050620015ad565b620015a8338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f445553540000000000000000000000000000000000000000000000000000000081525081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200178c57600080fd5b505afa158015620017a1573d6000803e3d6000fd5b505050506040513d6020811015620017b857600080fd5b8101908080519060200190929190505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f295503d7e2570d17c4ae30d0879924b6b0eb8659a7eca8f86198dcd44663ad4d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060075460003a148062001b2f5750455a115b1562001bb45760005a905062001b4a333387876000620020e5565b6001925060005a82039050600060648483028162001b6457fe5b0490505a92505b805a8403101562001bab57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001b6b565b50505062001bc9565b62001bc4333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001d495780601f1062001d1d5761010080835404028352916020019162001d49565b820191906000526020600020905b81548152906001019060200180831162001d2b57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001d9892919062003421565b505050565b606481565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b15801562001e0d57600080fd5b505afa15801562001e22573d6000803e3d6000fd5b505050506040513d604081101562001e3957600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b600062001e6a83836200286a565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562001f1457600080fd5b505afa15801562001f29573d6000803e3d6000fd5b505050506040513d602081101562001f4057600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960648762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60ff81565b600060ff905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167fec5aa5de7fdf1e1cb972120948b9653ac872061edec45f1325c48b60e63d5cf0836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f8cc0b109d574e6c99e6c00c4dd23fc0f618f0325bce74324f8c74af77da2fb9d600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d575060ff82108061079c57508281105b5b156108815760ff8210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f8cc0b109d574e6c99e6c00c4dd23fc0f618f0325bce74324f8c74af77da2fb9d8286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167fec5aa5de7fdf1e1cb972120948b9653ac872061edec45f1325c48b60e63d5cf08484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686520656e74727920646f6573206e6f74206578697374730000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520736f7572636520646f6573206e6f742065786973747300000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a72305820eeedaf5bde2e45b9faddcc167445fc6acca93882862acab1fd0dbed5cc4b40ba64736f6c634300050a0032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a72305820457cdce026c705375a0a15782dd82bf7b6e6baac3f950c2a8775ca0c002bd7a364736f6c634300050a0032a265627a7a7230582025653a0982f89934e733a3580f0cd30bc990059482f099e7ff27d2cc8b6b74e464736f6c634300050a0032

Deployed Bytecode

0x60806040523480156200001157600080fd5b5060043610620002085760003560e01c806389535803116200011d578063a802691211620000b1578063d90188e2116200007b578063d90188e21462000aa0578063dd62ed3e1462000af3578063eeb8dec41462000b6e578063ff12bbf41462000bc95762000208565b8063a80269121462000951578063a9059cbb1462000998578063c47f00271462000a01578063c57981b51462000a805762000208565b80638da5cb5b11620000f35780638da5cb5b146200080a57806395d89b411462000856578063978b99a014620008de578063a486309d14620008fe5762000208565b80638953580314620006eb57806389f3546814620007505780638cec999314620007d95762000208565b8063313ce56711620001a1578063546a430e116200016b578063546a430e14620005ac57806367e828bf146200062457806370a0823114620006705780637c32cdd114620006cb5762000208565b8063313ce56714620004b65780633767e33914620004dc578063399ae72414620004fc57806343684b21146200054d5762000208565b806313af403511620001e357806313af4035146200036757806316b627d114620003ae57806318160ddd146200040d57806323b872dd146200042d5762000208565b806306fdde03146200020d57806308acece21462000295578063095ea7b314620002fe575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002e460048036036040811015620002ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000cbe565b604051808215151515815260200191505060405180910390f35b6200034d600480360360408110156200031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d73565b604051808215151515815260200191505060405180910390f35b620003ac600480360360208110156200037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000df1565b005b620003f360048036036020811015620003c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000faf565b604051808215151515815260200191505060405180910390f35b6200041762000fcf565b6040518082815260200191505060405180910390f35b6200049c600480360360608110156200044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000fd5565b604051808215151515815260200191505060405180910390f35b620004c06200108b565b604051808260ff1660ff16815260200191505060405180910390f35b620004e662001090565b6040518082815260200191505060405180910390f35b6200054b600480360360408110156200051457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001096565b005b62000592600480360360208110156200056557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200131c565b604051808215151515815260200191505060405180910390f35b620005db60048036036020811015620005c457600080fd5b81019080803590602001909291905050506200133c565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200062e62001402565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620006b5600480360360208110156200068857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001428565b6040518082815260200191505060405180910390f35b620006d56200143c565b6040518082815260200191505060405180910390f35b6200073a600480360360408110156200070357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014e9565b6040518082815260200191505060405180910390f35b620007bf600480360360608110156200076857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014ff565b604051808215151515815260200191505060405180910390f35b6200080860048036036020811015620007f157600080fd5b8101908080359060200190929190505050620015b5565b005b62000814620016c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000860620016e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620008a257808201518184015260208101905062000885565b50505050905090810190601f168015620008d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620008e862001721565b6040518082815260200191505060405180910390f35b6200094f600480360360408110156200091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050620017ce565b005b62000996600480360360208110156200096957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200195b565b005b620009e760048036036040811015620009b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001b1b565b604051808215151515815260200191505060405180910390f35b62000a7e6004803603602081101562000a1957600080fd5b810190808035906020019064010000000081111562000a3757600080fd5b82018360208201111562000a4a57600080fd5b8035906020019184600183028401116401000000008311171562000a6d57600080fd5b909192939192939050505062001bd0565b005b62000a8a62001d9d565b6040518082815260200191505060405180910390f35b62000aaa62001da2565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b62000b586004803603604081101562000b0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e5c565b6040518082815260200191505060405180910390f35b62000bb36004803603602081101562000b8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e72565b6040518082815260200191505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600060075460003a148062000cd25750455a115b1562000d575760005a905062000ced333387876001620020e5565b6001925060005a82039050600060648483028162000d0757fe5b0490505a92505b805a8403101562000d4e57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000d0e565b50505062000d6c565b62000d67333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000de7338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600060075460003a148062000fe95750455a115b156200106e5760005a905062001004338787876000620020e5565b6001925060005a8203905060006064848302816200101e57fe5b0490505a92505b805a840310156200106557600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001025565b50505062001083565b6200107e338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff1615620010ae57fe5b6001600860006101000a81548160ff021916908315150217905550600060025414620010d657fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200112f57fe5b6040516200113d9062003413565b604051809103906000f0801580156200115a573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f295503d7e2570d17c4ae30d0879924b6b0eb8659a7eca8f86198dcd44663ad4d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a362001311828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b158015620013b257600080fd5b505afa158015620013c7573d6000803e3d6000fd5b505050506040513d6040811015620013de57600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000620014358262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b158015620014a757600080fd5b505afa158015620014bc573d6000803e3d6000fd5b505050506040513d6020811015620014d357600080fd5b8101908080519060200190929190505050905090565b6000620014f78383620027f0565b905092915050565b600060075460003a1480620015135750455a115b15620015985760005a90506200152e338787876001620020e5565b6001925060005a8203905060006064848302816200154857fe5b0490505a92505b805a840310156200158f5760015460405160200180828152602001915050604051602081830303815290604052805190602001206001819055506200154f565b505050620015ad565b620015a8338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f445553540000000000000000000000000000000000000000000000000000000081525081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200178c57600080fd5b505afa158015620017a1573d6000803e3d6000fd5b505050506040513d6020811015620017b857600080fd5b8101908080519060200190929190505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f295503d7e2570d17c4ae30d0879924b6b0eb8659a7eca8f86198dcd44663ad4d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060075460003a148062001b2f5750455a115b1562001bb45760005a905062001b4a333387876000620020e5565b6001925060005a82039050600060648483028162001b6457fe5b0490505a92505b805a8403101562001bab57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001b6b565b50505062001bc9565b62001bc4333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001d495780601f1062001d1d5761010080835404028352916020019162001d49565b820191906000526020600020905b81548152906001019060200180831162001d2b57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001d9892919062003421565b505050565b606481565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b15801562001e0d57600080fd5b505afa15801562001e22573d6000803e3d6000fd5b505050506040513d604081101562001e3957600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b600062001e6a83836200286a565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562001f1457600080fd5b505afa15801562001f29573d6000803e3d6000fd5b505050506040513d602081101562001f4057600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960648762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60ff81565b600060ff905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167fec5aa5de7fdf1e1cb972120948b9653ac872061edec45f1325c48b60e63d5cf0836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f8cc0b109d574e6c99e6c00c4dd23fc0f618f0325bce74324f8c74af77da2fb9d600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d575060ff82108061079c57508281105b5b156108815760ff8210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f8cc0b109d574e6c99e6c00c4dd23fc0f618f0325bce74324f8c74af77da2fb9d8286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167fec5aa5de7fdf1e1cb972120948b9653ac872061edec45f1325c48b60e63d5cf08484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686520656e74727920646f6573206e6f74206578697374730000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520736f7572636520646f6573206e6f742065786973747300000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a72305820eeedaf5bde2e45b9faddcc167445fc6acca93882862acab1fd0dbed5cc4b40ba64736f6c634300050a0032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a72305820457cdce026c705375a0a15782dd82bf7b6e6baac3f950c2a8775ca0c002bd7a364736f6c634300050a0032a265627a7a7230582025653a0982f89934e733a3580f0cd30bc990059482f099e7ff27d2cc8b6b74e464736f6c634300050a0032

Deployed Bytecode Sourcemap

16635:9332:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16635:9332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17318:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17318:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25338:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25338:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24919:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24919:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;590:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;590:134:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17532:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17532:43:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17143:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25542:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25542:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17414:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17645:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17695:650;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17695:650:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17480:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17480:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24132:116;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24132:116:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17599:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24657:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24657:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23930:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24487:124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24487:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25754:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25754:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23587:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23587:131:0;;;;;;;;;;;;;;;;;:::i;:::-;;276:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17369:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17369:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24031:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23073:179;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23073:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23726:149;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23726:149:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25140:190;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25140:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23453:126;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23453:126:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23453:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23453: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;23453:126:0;;;;;;;;;;;;:::i;:::-;;17259:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24256:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24774:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24774:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24364:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24364:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23260:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23260:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17318:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25338:196::-;25431:4;25412:8;;5663:1;5648:11;:16;:46;;;;5680:14;5668:9;:26;5648:46;5644:454;;;5711:16;5730:9;5711:28;;25448:56;25462:10;25474;25486:3;25491:6;25499:4;25448:13;:56::i;:::-;25522:4;25515:11;;5770:13;5797:9;5786:8;:20;5770:36;;5821:14;5858:3;5847:7;5839:5;:15;5838:23;;;;;;5821:40;;5887:9;5876:20;;5911:142;5941:6;5929:9;5918:8;:20;:29;5911:142;;;6031:4;;6014:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6014:22:0;;;6004:33;;;;;;5997:4;:40;;;;5911:142;;;5644:454;;;;;;25448:56;25462:10;25474;25486:3;25491:6;25499:4;25448:13;:56::i;:::-;25522:4;25515:11;;5644:454;25338:196;;;;;:::o;24919:213::-;24988:4;25031:8;25010:38;;25019:10;25010:38;;;25041:6;25010:38;;;;;;;;;;;;;;;;;;25059:43;25073:10;25085:8;25095:6;25059:13;:43::i;:::-;25120:4;25113:11;;24919:213;;;;:::o;590:134::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;659:32;677:5;;;;;;;;;;;684:6;659:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;710:6;702:5;;:14;;;;;;;;;;;;;;;;;;590:134;:::o;17532:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;17143:26::-;;;;:::o;25542:204::-;25647:4;25628:8;;5663:1;5648:11;:16;:46;;;;5680:14;5668:9;:26;5648:46;5644:454;;;5711:16;5730:9;5711:28;;25664:52;25678:10;25690:5;25697:3;25702:6;25710:5;25664:13;:52::i;:::-;25734:4;25727:11;;5770:13;5797:9;5786:8;:20;5770:36;;5821:14;5858:3;5847:7;5839:5;:15;5838:23;;;;;;5821:40;;5887:9;5876:20;;5911:142;5941:6;5929:9;5918:8;:20;:29;5911:142;;;6031:4;;6014:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6014:22:0;;;6004:33;;;;;;5997:4;:40;;;;5911:142;;;5644:454;;;;;;25664:52;25678:10;25690:5;25697:3;25702:6;25710:5;25664:13;:52::i;:::-;25734:4;25727:11;;5644:454;25542:204;;;;;;:::o;17414:35::-;17447:2;17414:35;:::o;17645:23::-;;;;:::o;17695:650::-;17819:6;;;;;;;;;;;17818:7;17811:15;;;;17846:4;17837:6;;:13;;;;;;;;;;;;;;;;;;17911:1;17896:11;;:16;17889:24;;;;17958:1;17931:29;;17939:6;;;;;;;;;;;17931:29;;;17924:37;;;;18009:12;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18009:12:0;18000:6;;:21;;;;;;;;;;;;;;;;;;18037:38;18055:1;18067:6;;;;;;;;;;;18037:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18177:2;18166:8;:13;;;;18195:24;18207:1;18210:8;;18195:24;;;;;;;;;;;;;;;;;;;;;;;;18256:3;18235:34;;18252:1;18235:34;;;18261:7;18235:34;;;;;;;;;;;;;;;;;;18280:25;18292:3;18297:7;18280:11;:25::i;:::-;18330:7;18316:11;:21;;;;17695:650;;:::o;17480:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;24132:116::-;24188:7;24197;24224:6;;;;;;;;;;;:12;;;24237:2;24224:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24224:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24224:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24224:16:0;;;;;;;;;;;;;;;;;;;;;;;;;24217:23;;;;24132:116;;;:::o;17599:20::-;;;;;;;;;;;;;:::o;24657:109::-;24714:7;24741:17;24752:5;24741:10;:17::i;:::-;24734:24;;24657:109;;;:::o;23930:93::-;23972:7;23999:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23999:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23999:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23999:16:0;;;;;;;;;;;;;;;;23992:23;;23930:93;:::o;24487:124::-;24557:7;24584:19;24591:5;24598:4;24584:6;:19::i;:::-;24577:26;;24487:124;;;;:::o;25754:210::-;25866:4;25847:8;;5663:1;5648:11;:16;:46;;;;5680:14;5668:9;:26;5648:46;5644:454;;;5711:16;5730:9;5711:28;;25883:51;25897:10;25909:5;25916:3;25921:6;25929:4;25883:13;:51::i;:::-;25952:4;25945:11;;5770:13;5797:9;5786:8;:20;5770:36;;5821:14;5858:3;5847:7;5839:5;:15;5838:23;;;;;;5821:40;;5887:9;5876:20;;5911:142;5941:6;5929:9;5918:8;:20;:29;5911:142;;;6031:4;;6014:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6014:22:0;;;6004:33;;;;;;5997:4;:40;;;;5911:142;;;5644:454;;;;;;25883:51;25897:10;25909:5;25916:3;25921:6;25929:4;25883:13;:51::i;:::-;25952:4;25945:11;;5644:454;25754:210;;;;;;:::o;23587:131::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23657:27;23669:8;;23679:4;23657:27;;;;;;;;;;;;;;;;;;;;;;;;23706:4;23695:8;:15;;;;23587:131;:::o;276:20::-;;;;;;;;;;;;;:::o;17369:38::-;;;;;;;;;;;;;;;;;;;:::o;24031:93::-;24076:7;24103:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24103:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24103:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24103:13:0;;;;;;;;;;;;;;;;24096:20;;24031:93;:::o;23073:179::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23168:32;23180:5;23187:12;23168:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23232:12;23211:11;:18;23223:5;23211:18;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23073:179;;:::o;23726:149::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23796:44;23814:6;;;;;;;;;;;23831:7;23796:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23860:7;23851:6;;:16;;;;;;;;;;;;;;;;;;23726:149;:::o;25140:190::-;25226:4;25207:8;;5663:1;5648:11;:16;:46;;;;5680:14;5668:9;:26;5648:46;5644:454;;;5711:16;5730:9;5711:28;;25243:57;25257:10;25269;25281:3;25286:6;25294:5;25243:13;:57::i;:::-;25318:4;25311:11;;5770:13;5797:9;5786:8;:20;5770:36;;5821:14;5858:3;5847:7;5839:5;:15;5838:23;;;;;;5821:40;;5887:9;5876:20;;5911:142;5941:6;5929:9;5918:8;:20;:29;5911:142;;;6031:4;;6014:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6014:22:0;;;6004:33;;;;;;5997:4;:40;;;;5911:142;;;5644:454;;;;;;25243:57;25257:10;25269;25281:3;25286:6;25294:5;25243:13;:57::i;:::-;25318:4;25311:11;;5644:454;25140:190;;;;;:::o;23453:126::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23528:20;23536:4;23542:5;;23528:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23528:20:0;;;;;;;;;;;;;;;;23566:5;;23559:4;:12;;;;;;;:::i;:::-;;23453:126;;:::o;17259:33::-;17289:3;17259:33;:::o;24256:100::-;24300:7;24309;24336:6;;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24336:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24336:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24336:12:0;;;;;;;;;;;;;;;;;;;;;;;;;24329:19;;;;24256:100;;:::o;24774:137::-;24849:7;24876:27;24887:5;24894:8;24876:10;:27::i;:::-;24869:34;;24774:137;;;;:::o;24364:115::-;24423:7;24450:6;;;;;;;;;;;:14;;;24465:5;24450:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24450:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24450:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24450:21:0;;;;;;;;;;;;;;;;24443:28;;24364:115;;;:::o;23260:185::-;542:5;;;;;;;;;;;528:19;;:10;:19;;;520:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23357:34;23371:5;23378:12;23357:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23425:12;23402:13;:20;23416:5;23402:20;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23260:185;;:::o;20546:2480::-;20761:1;20751:6;:11;20747:93;;;20800:3;20784:23;;20793:5;20784:23;;;20805:1;20784:23;;;;;;;;;;;;;;;;;;20822:7;;20747:93;20884:19;20906:17;20917:5;20906:10;:17::i;:::-;20884:39;;20957:6;20942:11;:21;;20934:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:9;21043:18;;:5;:18;;;21039:480;;21121:21;21145:28;21156:5;21163:9;21145:10;:28::i;:::-;21121:52;;21282:2;21260:13;:25;21256:252;;21384:6;21367:13;:23;;21359:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21434:58;21448:5;21455:9;21466:25;21484:6;21466:13;:17;;:25;;;;:::i;:::-;21434:13;:58::i;:::-;21256:252;21039:480;;21612:15;21630:6;21612:24;;21647:12;21662:1;21647:16;;21674:12;21689:1;21674:16;;21737:43;21749:5;21756:23;21772:6;21756:11;:15;;:23;;;;:::i;:::-;21737:11;:43::i;:::-;21924:7;:38;;;;21936:26;21951:5;21958:3;21936:14;:26::i;:::-;21935:27;21924:38;21920:840;;;22118:20;17289:3;22118:6;:15;;:20;;;;:::i;:::-;22111:27;;22170:1;22160:6;:11;:22;;22178:4;22160:22;;;22174:1;22160:22;22153:29;;22260:27;22272:14;22281:4;22272;:8;;:14;;;;:::i;:::-;22260:7;:11;;:27;;;;:::i;:::-;22250:37;;22346:21;22362:4;22346:11;;:15;;:21;;;;:::i;:::-;22332:11;:35;;;;22411:1;22387:33;;22396:5;22387:33;;;22415:4;22387:33;;;;;;;;;;;;;;;;;;22509:14;22526:26;22538:5;22545:6;22526:11;:26::i;:::-;22509:43;;22610:49;22622:6;22630:28;22653:4;22630:18;22641:6;22630:10;:18::i;:::-;:22;;:28;;;;:::i;:::-;22610:11;:49::i;:::-;22686:6;22679:20;;;22694:4;22679:20;;;;;;;;;;;;;;;;;;22735:6;22719:29;;22728:5;22719:29;;;22743:4;22719:29;;;;;;;;;;;;;;;;;;21920:840;;22872:6;22841:27;22860:7;22841:14;22850:4;22841;:8;;:14;;;;:::i;:::-;:18;;:27;;;;:::i;:::-;:37;22834:45;;;;22927:46;22939:3;22944:28;22964:7;22944:15;22955:3;22944:10;:15::i;:::-;:19;;:28;;;;:::i;:::-;22927:11;:46::i;:::-;23005:3;22989:29;;22998:5;22989:29;;;23010:7;22989:29;;;;;;;;;;;;;;;;;;20546:2480;;;;;;;;;;:::o;19075:188::-;19167:88;19227:8;19197:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19197:39:0;;;19187:50;;;;;;19247:6;19239:15;;19167:13;19174:5;19167:6;:13::i;:::-;:19;;:88;;;;;:::i;:::-;19075:188;;;:::o;19451:174::-;19525:51;17217:20;;;;;;;;;;;;;;;;;;;19566:8;19558:17;;19525:13;19532:5;19525:6;:13::i;:::-;:19;;:51;;;;;:::i;:::-;19587:6;;;;;;;;;;;:13;;;19601:5;19608:8;19587:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19587:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19587:30:0;;;;19451:174;;:::o;18536:133::-;18594:7;18629:31;17217:20;;;;;;;;;;;;;;;;;;;18629:13;18636:5;18629:6;:13::i;:::-;:18;;:31;;;;:::i;:::-;18621:40;;18614:47;;18536:133;;;:::o;18875:174::-;18943:7;18978:62;19033:4;19007:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19007:31:0;;;18997:42;;;;;;18978:13;18985:5;18978:6;:13::i;:::-;:18;;:62;;;;:::i;:::-;18970:71;;18963:78;;18875:174;;;;:::o;18677:190::-;18753:7;18788:70;18847:8;18817:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18817:39:0;;;18807:50;;;;;;18788:13;18795:5;18788:6;:13::i;:::-;:18;;:70;;;;:::i;:::-;18780:79;;18773:86;;18677:190;;;;:::o;3965:141::-;4023:7;4056:1;4051;:6;;4043:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4097:1;4093;:5;4086:12;;3965:141;;;;:::o;19678:145::-;19753:4;19777:13;:20;19791:5;19777:20;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;19799:11;:16;19811:3;19799:16;;;;;;;;;;;;;;;;;;;;;;;;;19777:38;19770:45;;19678:145;;;;:::o;4498:232::-;4561:7;4594:1;4589;:6;;4581:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4622:9;4638:1;4634;:5;;;;;;4622:17;;4663:1;4658;4654;:5;;;;;;:10;4650:52;;4689:1;4685;:5;4681:9;;4650:52;4721:1;4714:8;;;4498:232;;;;:::o;3793:164::-;3851:7;3871:9;3887:1;3883;:5;3871:17;;3912:1;3907;:6;;3899:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:1;3941:8;;;3793:164;;;;:::o;20061:477::-;20131:14;20203:17;20223:29;20245:6;20223:21;:29::i;:::-;20203:49;;20317:13;20333:24;20340:5;20347:9;20333:6;:24::i;:::-;20317:40;;20368:38;20378:5;20385:9;20404:1;20396:5;:9;20368;:38::i;:::-;20461:6;;;;;;;;;;;:16;;;20478:51;20486:5;20493;20500:9;20527:1;20511:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20511:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20511:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20511:13:0;;;;;;;;;;;;;;;;:17;20478:7;:51::i;:::-;20461:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20461:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20461:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20461:69:0;;;;;;;;;;;;;;;;20452:78;;20061:477;;;;;;:::o;18424:104::-;18474:7;18517:1;18509:10;;18501:19;;18494:26;;18424:104;;;:::o;2504:569::-;2620:17;2652:21;2665:7;2652:12;:21::i;:::-;2620:54;;2690:37;2720:5;2690:21;:37::i;:::-;2685:86;;2744:15;2751:7;2744:6;:15::i;:::-;2685:86;2824:12;2850:5;2842:19;;2917:5;:11;;;:20;;;;2956:4;2979:6;2876:124;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2876:124:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2876:124:0;2842:169;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;2842: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;;2823:188:0;;;3032:7;3024:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2504:569;;;;;:::o;3081:610::-;3174:7;3194:17;3226:21;3239:7;3226:12;:21::i;:::-;3194:54;;3264:37;3294:5;3264:21;:37::i;:::-;3259:88;;3333:1;3325:10;;3318:17;;;;;3259:88;3400:12;3414:17;3443:5;3435:25;;3516:5;:10;;;:19;;;;3554:4;3475:98;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3475:98:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;3475:98:0;3435:149;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;3435: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;;3399:185:0;;;;3605:7;3597:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3667:4;3656:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3656:27:0;;;;;;;;;;;;;;;;3649:34;;;;;3081:610;;;;;:::o;4824:270::-;4888:7;4907:15;4930:2;4907:26;;4944:12;4959:5;4944:20;;4977:83;5003:2;4995:10;;;;;;;;;5020:9;;;;;;;5057:1;5049:4;:9;;4977:83;;5079:7;5072:14;;;;4824:270;;;:::o;19271:172::-;19355:80;19411:4;19385:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19385:31:0;;;19375:42;;;;;;19427:6;19419:15;;19355:13;19362:5;19355:6;:13::i;:::-;:19;;:80;;;;;:::i;:::-;19271:172;;;:::o;19831:222::-;19924:7;19944:12;19994:3;19999;20004;19977:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19977:31:0;;;19967:42;;;;;;19959:51;;19944:66;;20043:1;20036:4;:8;20028:4;:17;;;;;;20021:24;;;19831:222;;;;;;:::o;1811:439::-;1872:7;2027:4;2022:10;;2067:4;2099:7;2143: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;2143:30:0;2133:41;;;;;;1979:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1979:218:0;;;1947:269;;;;;;1921:310;;1892:350;;1811:439;;;:::o;1362:323::-;1420:4;1437:16;1539:5;1527:18;1515:30;;1584:1;1576:10;;1564:8;:22;;:113;;;;;1610:66;1602:75;;1590:8;:87;;1564:113;1557:120;;;1362:323;;;:::o;2258:238::-;2310:21;2334: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;2334:30:0;2310:54;;2478:7;2467:8;2461:15;2454:4;2444:8;2440:19;2437:1;2429:57;2425:62;2423:66;;:::o;16635:9332::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://25653a0982f89934e733a3580f0cd30bc990059482f099e7ff27d2cc8b6b74e4

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.