ETH Price: $2,640.30 (+1.29%)

Token

Wombats (Wombats)
 

Overview

Max Total Supply

1,000 Wombats

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
fuckyoshi.eth
Balance
0 Wombats

Value
$0.00
0x22f34cfa134aa94beffdfb122295af1e146e0bf1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Wombats

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Wombats.sol
// https://www.wombats.money/
// https://twitter.com/1000WOMBATS
// https://github.com/eWOMBATS/wombats

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

library LibERC20 {
    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function emitTransfer(address _from, address _to, uint _amount) internal {
        emit Transfer(_from, _to, _amount);
    }

    function emitApproval(
        address _owner,
        address _spender,
        uint _value
    ) internal {
        emit Approval(_owner, _spender, _value);
    }
}

library LibERC721 {
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint indexed _tokenId
    );
    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint indexed _tokenId
    );
    event ApprovalForAll(
        address indexed _owner,
        address indexed _operator,
        bool _approved
    );

    function emitTransfer(address _from, address _to, uint _tokenId) internal {
        emit Transfer(_from, _to, _tokenId);
    }

    function emitApproval(
        address _owner,
        address _approve,
        uint _tokenId
    ) internal {
        emit Approval(_owner, _approve, _tokenId);
    }

    function emitApprovalForAll(
        address _owner,
        address _operator,
        bool _approved
    ) internal {
        emit ApprovalForAll(_owner, _operator, _approved);
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface IERC721 is IERC165 {
    function balanceOf(address account) external view returns (uint256);

    function ownerOf(uint256 _tokenId) external view returns (address);

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory data
    ) external payable;

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    function setApprovalForAll(address _operator, bool _approved) external;

    function getApproved(uint256 _tokenId) external view returns (address);

    function isApprovedForAll(
        address _owner,
        address _operator
    ) external view returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface IERC404 is IERC20, IERC721 {
    function balanceOf(
        address account
    ) external view override(IERC20, IERC721) returns (uint256);

    function approve(
        address spender,
        uint256 value
    ) external override(IERC20, IERC721) returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override(IERC20, IERC721) returns (bool);
}

interface IERC721TokenReceiver {
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes memory _data
    ) external returns (bytes4);
}

contract Wombats is IERC404 {
    string public baseURI;
    string internal constant _name = "Wombats";
    string internal constant _symbol = "Wombats";

    uint internal constant _decimals = 18;
    uint internal constant _totalIds = 1000;
    uint internal constant _totalSupply = _totalIds * 10 ** _decimals;
    uint internal constant ONE = 10 ** _decimals;
    uint internal constant MAX_ID = ONE + _totalIds;

    uint32 public minted;
    uint32[] private broken;

    address public _owner;
    bool public supportsNFTinterface;

    mapping(address => mapping(address => bool)) private _operatorApprovals;
    mapping(address => mapping(address => uint)) internal _allowance;
    mapping(uint256 tokenId => address) public ownerOf;
    mapping(uint256 => address) private _nftApprovals;
    mapping(address => uint) internal _balanceOf;
    mapping(address => uint32[]) public ownedNFTs;
    mapping(uint32 => uint256) private idToIndex;

    error UnsupportedReceiver();

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

    constructor() {
        minted = uint32(ONE);
        _balanceOf[msg.sender] = _totalSupply;
        _owner = msg.sender;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint) {
        return _balanceOf[account];
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint) {
        return _allowance[owner][spender];
    }

    function setBaseURI(string memory newBaseURI) public onlyOwner {
        baseURI = newBaseURI;
    }

    function changeDev(address newDev) public onlyOwner {
        _owner = newDev;
    }

    function toggelNFTinterface() public onlyOwner {
        supportsNFTinterface = !supportsNFTinterface;
    }

    function approve(
        address spender,
        uint amount
    ) public override returns (bool) {
        if (amount > ONE && amount <= MAX_ID) {
            address owner = ownerOf[amount];
            if (msg.sender != owner && !isApprovedForAll(owner, msg.sender))
                revert("You are not approved");
            _nftApprovals[amount] = spender;
            LibERC721.emitApproval(owner, spender, amount);
            return true;
        }

        _allowance[msg.sender][spender] = amount;
        LibERC20.emitApproval(msg.sender, spender, amount);
        return true;
    }

    function _transfer404(
        address from,
        address to,
        uint amount
    ) internal virtual {
        require(_balanceOf[from] >= amount, "Transfer amount exceeds balance");

        uint256 fromDecimalsPre = _balanceOf[from] % ONE;
        uint256 toDecimalsPre = _balanceOf[to] % ONE;

        _transfer20(from, to, amount);

        uint256 fromDecimalsPost = _balanceOf[from] % ONE;
        uint256 toDecimalsPost = _balanceOf[to] % ONE;

        uint32[] storage ownedNFTsArray = ownedNFTs[from];

        uint32[] storage brokenIDsArray = broken;

        if (fromDecimalsPre < fromDecimalsPost) {
            if (ownedNFTsArray.length > 0) {
                uint32 tokenId = ownedNFTsArray[0];

                brokenIDsArray.push(tokenId);
                _transfer721(from, address(0), tokenId);
            }
        }

        if (toDecimalsPre > toDecimalsPost) {
            if (brokenIDsArray.length > 0) {
                _transfer721(
                    address(0),
                    to,
                    brokenIDsArray[brokenIDsArray.length - 1]
                );
                brokenIDsArray.pop();
            } else {
                _mint(to);
            }
        }

        uint amountInTokens = amount / ONE;
        if (from == _owner) return;

        if (amountInTokens > 0) {
            uint len = ownedNFTsArray.length;
            len = amountInTokens < len ? amountInTokens : len;
            for (uint i = 0; i < len; i++) {
                _transfer721(from, to, ownedNFTsArray[0]);
            }
            amountInTokens -= len;
            len = brokenIDsArray.length;
            len = amountInTokens < len ? amountInTokens : len;
            for (uint i = 0; i < len; i++) {
                _transfer721(
                    address(0),
                    to,
                    brokenIDsArray[brokenIDsArray.length - 1]
                );
                brokenIDsArray.pop();
            }

            _mintBatch(to, amountInTokens - len);
        }
    }

    function _mintBatch(address to, uint256 amount) internal {
        if (amount == 0) return;

        if (amount == 1) {
            _mint(to);
            return;
        }
        uint32 id = minted;
        uint256 ownedLen = ownedNFTs[to].length;
        for (uint i = 0; i < amount; ) {
            unchecked {
                id++;
            }
            ownerOf[id] = to;
            idToIndex[id] = ownedLen;
            ownedNFTs[to].push(id);

            LibERC721.emitTransfer(address(0), to, id);

            unchecked {
                ownedLen++;
                i++;
            }
        }
        unchecked {
            minted += uint32(amount);
        }
    }

    function _mint(address to) internal returns (uint32 tokenId) {
        unchecked {
            minted++;
        }
        tokenId = minted;

        ownerOf[tokenId] = to;
        idToIndex[tokenId] = ownedNFTs[to].length;
        ownedNFTs[to].push(tokenId);

        LibERC721.emitTransfer(address(0), to, tokenId);
    }

    function _updateOwnedNFTs(
        address from,
        address to,
        uint32 tokenId
    ) internal {
        uint256 index = idToIndex[tokenId];
        uint32[] storage nftArray = ownedNFTs[from];
        uint256 len = nftArray.length;
        uint32 lastTokenId = nftArray[len - 1];

        nftArray[index] = lastTokenId;
        nftArray.pop();

        if (len - 1 != 0) {
            idToIndex[lastTokenId] = index;
        }

        ownedNFTs[to].push(tokenId);
        idToIndex[tokenId] = ownedNFTs[to].length - 1;
    }

    function _transfer20(address from, address to, uint256 amount) internal {
        _balanceOf[from] -= amount;
        unchecked {
            _balanceOf[to] += amount;
        }
        LibERC20.emitTransfer(from, to, amount);
    }

    function _transfer721(
        address from,
        address to,
        uint32 tokenId
    ) internal virtual {
        require(from == ownerOf[tokenId], "Different owner");

        delete _nftApprovals[tokenId];
        ownerOf[tokenId] = to;
        _updateOwnedNFTs(from, to, tokenId);
        LibERC721.emitTransfer(from, to, tokenId);
    }

    function transfer(address to, uint amount) public override returns (bool) {
        if (ownerOf[amount] == msg.sender) {
            _transfer721(msg.sender, to, uint32(amount));
            _transfer20(msg.sender, to, ONE);
            return true;
        }
        _transfer404(msg.sender, to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        if (amount > ONE && amount <= MAX_ID) {
            require(
                msg.sender == from ||
                    msg.sender == getApproved(amount) ||
                    isApprovedForAll(from, msg.sender),
                "Not allowed"
            );

            _transfer721(from, to, uint32(amount));
            _transfer20(from, to, ONE);
            return true;
        }

        _spendAllowance(from, msg.sender, amount);
        _transfer404(from, to, amount);
        return true;
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable override {
        require(
            msg.sender == from ||
                msg.sender == getApproved(tokenId) ||
                isApprovedForAll(from, msg.sender),
            "Not allowed"
        );
        _transfer721(from, to, uint32(tokenId));
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(
                msg.sender,
                from,
                tokenId,
                ""
            ) !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public payable override {
        require(
            msg.sender == from ||
                msg.sender == getApproved(tokenId) ||
                isApprovedForAll(from, msg.sender),
            "Not allowed"
        );
        _transfer721(from, to, uint32(tokenId));
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(
                msg.sender,
                from,
                tokenId,
                data
            ) !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint amount
    ) internal virtual {
        require(_allowance[owner][spender] >= amount, "Insufficient allowance");
        _allowance[owner][spender] -= amount;
    }

    function getApproved(
        uint256 tokenId
    ) public view override returns (address) {
        if (ownerOf[tokenId] == address(0)) revert();
        return _nftApprovals[tokenId];
    }

    function setApprovalForAll(
        address operator,
        bool approved
    ) public override {
        _operatorApprovals[msg.sender][operator] = approved;
        LibERC721.emitApprovalForAll(msg.sender, operator, approved);
    }

    function isApprovedForAll(
        address owner,
        address operator
    ) public view override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function tokenURI(uint256 id_) public view virtual returns (string memory) {
        uint256 n = (uint256(keccak256(abi.encodePacked(id_))) % 1000) + 1;
        return string.concat(baseURI, string.concat(toString(n), ".png"));
    }

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(value % 10) + 48);
            value /= 10;
        }
        return string(buffer);
    }

    function withdraw() external onlyOwner {
        payable(_owner).transfer(address(this).balance);
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view override returns (bool) {
        return
            (supportsNFTinterface && interfaceId == 0x80ac58cd) ||
            interfaceId == 0x01ffc9a7 ||
            interfaceId == 0x36372b07;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UnsupportedReceiver","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDev","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownedNFTs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsNFTinterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggelNFTinterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b506012600a6200002191906200026c565b60015f6101000a81548163ffffffff021916908363ffffffff1602179055506012600a6200005091906200026c565b6103e86200005f9190620002bc565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000306565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200017057808604811115620001485762000147620000e6565b5b6001851615620001585780820291505b8081029050620001688562000113565b945062000128565b94509492505050565b5f826200018a57600190506200025c565b8162000199575f90506200025c565b8160018114620001b25760028114620001bd57620001f3565b60019150506200025c565b60ff841115620001d257620001d1620000e6565b5b8360020a915084821115620001ec57620001eb620000e6565b5b506200025c565b5060208310610133831016604e8410600b84101617156200022d5782820a905083811115620002275762000226620000e6565b5b6200025c565b6200023c84848460016200011f565b92509050818404811115620002565762000255620000e6565b5b81810290505b9392505050565b5f819050919050565b5f620002788262000263565b9150620002858362000263565b9250620002b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000179565b905092915050565b5f620002c88262000263565b9150620002d58362000263565b9250828202620002e58162000263565b91508282048414831517620002ff57620002fe620000e6565b5b5092915050565b613b9b80620003145f395ff3fe608060405260043610610180575f3560e01c80636bcef9a6116100d0578063a563833b11610089578063b88d4fde11610063578063b88d4fde14610574578063c87b56dd14610590578063dd62ed3e146105cc578063e985e9c51461060857610180565b8063a563833b146104e4578063a9059cbb1461050e578063b2bdfa7b1461054a57610180565b80636bcef9a6146103ee5780636c0360eb1461040457806370a082311461042e57806388a8c95c1461046a57806395d89b4114610492578063a22cb465146104bc57610180565b806323b872dd1161013d57806342842e0e1161011757806342842e0e146103445780634f02c4201461036057806355f804b31461038a5780636352211e146103b257610180565b806323b872dd146102c8578063313ce567146103045780633ccfd60b1461032e57610180565b806301ffc9a71461018457806306fdde03146101c0578063081812fc146101ea578063095ea7b31461022657806318160ddd146102625780631a72b87d1461028c575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612992565b610644565b6040516101b791906129d7565b60405180910390f35b3480156101cb575f80fd5b506101d46106ed565b6040516101e19190612a7a565b60405180910390f35b3480156101f5575f80fd5b50610210600480360381019061020b9190612acd565b61072a565b60405161021d9190612b37565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612b7a565b6107ca565b60405161025991906129d7565b60405180910390f35b34801561026d575f80fd5b506102766109b4565b6040516102839190612bc7565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612b7a565b6109d5565b6040516102bf9190612bfe565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612c17565b610a19565b6040516102fb91906129d7565b60405180910390f35b34801561030f575f80fd5b50610318610b60565b6040516103259190612bc7565b60405180910390f35b348015610339575f80fd5b50610342610b68565b005b61035e60048036038101906103599190612c17565b610c5e565b005b34801561036b575f80fd5b50610374610e62565b6040516103819190612bfe565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190612d93565b610e77565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612acd565b610f18565b6040516103e59190612b37565b60405180910390f35b3480156103f9575f80fd5b50610402610f48565b005b34801561040f575f80fd5b50610418611003565b6040516104259190612a7a565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612dda565b61108e565b6040516104619190612bc7565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190612dda565b6110d4565b005b34801561049d575f80fd5b506104a66111a6565b6040516104b39190612a7a565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190612e2f565b6111e3565b005b3480156104ef575f80fd5b506104f8611281565b60405161050591906129d7565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190612b7a565b611294565b60405161054191906129d7565b60405180910390f35b348015610555575f80fd5b5061055e61133a565b60405161056b9190612b37565b60405180910390f35b61058e60048036038101906105899190612f0b565b61135f565b005b34801561059b575f80fd5b506105b660048036038101906105b19190612acd565b611566565b6040516105c39190612a7a565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612f8b565b6115fe565b6040516105ff9190612bc7565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190612f8b565b611680565b60405161063b91906129d7565b60405180910390f35b5f600360149054906101000a900460ff16801561068657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b657506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e657506336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600781526020017f576f6d6261747300000000000000000000000000000000000000000000000000815250905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610792575f80fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6012600a6107d99190613125565b8211801561080157506103e86012600a6107f39190613125565b6107fd919061316f565b8211155b15610921575f60065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561087d575061087b8133611680565b155b156108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b4906131ec565b60405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061091781858561170e565b60019150506109ae565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506109a933848461176e565b600190505b92915050565b5f6012600a6109c39190613125565b6103e86109d0919061320a565b905090565b6009602052815f5260405f2081815481106109ee575f80fd5b905f5260205f209060089182820401919006600402915091509054906101000a900463ffffffff1681565b5f6012600a610a289190613125565b82118015610a5057506103e86012600a610a429190613125565b610a4c919061316f565b8211155b15610b3e578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac25750610a938261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ad35750610ad28433611680565b5b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613295565b60405180910390fd5b610b1d8484846117d8565b610b3584846012600a610b309190613125565b61192b565b60019050610b59565b610b498433846119d8565b610b54848484611b26565b600190505b9392505050565b5f6012905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906132fd565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610c5b573d5f803e3d5ffd5b50565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ccb5750610c9c8161072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cdc5750610cdb8333611680565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613295565b60405180910390fd5b610d268383836117d8565b610d3e83836012600a610d399190613125565b61192b565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015610e26575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610dc49392919061334e565b6020604051808303815f875af1158015610de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0491906133aa565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15610e5d576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60015f9054906101000a900463ffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906132fd565b60405180910390fd5b805f9081610f1491906135cf565b5050565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906132fd565b60405180910390fd5b600360149054906101000a900460ff1615600360146101000a81548160ff021916908315150217905550565b5f805461100f90613402565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90613402565b80156110865780601f1061105d57610100808354040283529160200191611086565b820191905f5260205f20905b81548152906001019060200180831161106957829003601f168201915b505050505081565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a906132fd565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600781526020017f576f6d6261747300000000000000000000000000000000000000000000000000815250905090565b8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061127d3383836120aa565b5050565b600360149054906101000a900460ff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611324576113033384846117d8565b61131b33846012600a6113169190613125565b61192b565b60019050611334565b61132f338484611b26565b600190505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113cc575061139d8261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113dd57506113dc8433611680565b5b61141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390613295565b60405180910390fd5b6114278484846117d8565b61143f84846012600a61143a9190613125565b61192b565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14158015611529575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016114c794939291906136e0565b6020604051808303815f875af11580156114e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150791906133aa565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611560576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60605f60016103e88460405160200161157f919061374a565b604051602081830303815290604052805190602001205f1c6115a19190613791565b6115ab919061316f565b90505f6115b782612114565b6040516020016115c79190613821565b6040516020818303038152906040526040516020016115e79291906138c6565b604051602081830303815290604052915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117cb9190612bc7565b60405180910390a3505050565b60065f8263ffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390613933565b60405180910390fd5b60075f8263ffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061191583838361226d565b61192683838363ffffffff166124d4565b505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119779190613951565b925050819055508060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506119d3838383612534565b505050565b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906139ce565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b1a9190613951565b92505081905550505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613a36565b60405180910390fd5b5f6012600a611bb59190613125565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611bfd9190613791565b90505f6012600a611c0e9190613125565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c569190613791565b9050611c6385858561192b565b5f6012600a611c729190613125565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cba9190613791565b90505f6012600a611ccb9190613125565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d139190613791565b90505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6002905083861015611e01575f82805490501115611e00575f825f81548110611d8257611d81613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508181908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550611dfe8a5f836117d8565b505b5b82851115611eb6575f81805490501115611eaa57611e665f898360018580549050611e2c9190613951565b81548110611e3d57611e3c613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b80805480611e7757611e76613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055611eb5565b611eb38861259e565b505b5b5f6012600a611ec59190613125565b88611ed09190613aae565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603611f3257505050505050506120a5565b5f81111561209d575f83805490509050808210611f4f5780611f51565b815b90505f5b81811015611fb157611f9e8c8c875f81548110611f7557611f74613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b8080611fa990613ade565b915050611f55565b508082611fbe9190613951565b915082805490509050808210611fd45780611fd6565b815b90505f5b81811015612085576120335f8c8660018880549050611ff99190613951565b8154811061200a57612009613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b8380548061204457612043613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055808061207d90613ade565b915050611fda565b5061209b8a82846120969190613951565b612741565b505b505050505050505b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210791906129d7565b60405180910390a3505050565b60605f820361215a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612268565b5f8290505f5b5f821461218957808061217290613ade565b915050600a826121829190613aae565b9150612160565b5f8167ffffffffffffffff8111156121a4576121a3612c6f565b5b6040519080825280601f01601f1916602001820160405280156121d65781602001600182028036833780820191505090505b5090505b5f8514612261576001826121ee9190613951565b91506030600a866121ff9190613791565b6122099190613b31565b60f81b81838151811061221f5761221e613a54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561225a9190613aae565b94506121da565b8093505050505b919050565b5f600a5f8363ffffffff1663ffffffff1681526020019081526020015f205490505f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f818054905090505f826001836122e59190613951565b815481106122f6576122f5613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff169050808385815481106123305761232f613a54565b5b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280548061237257612371613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff021916905590555f6001836123ae9190613951565b146123d65783600a5f8363ffffffff1663ffffffff1681526020019081526020015f20819055505b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550600160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124aa9190613951565b600a5f8763ffffffff1663ffffffff1681526020019081526020015f208190555050505050505050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125919190612bc7565b60405180910390a3505050565b5f60015f81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff1602179055505060015f9054906101000a900463ffffffff1690508160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050600a5f8363ffffffff1663ffffffff1681526020019081526020015f208190555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff16021790555061273c5f838363ffffffff166124d4565b919050565b5f81031561292857600181036127605761275a8261259e565b50612928565b5f60015f9054906101000a900463ffffffff1690505f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f5b838110156128ef5782806001019350508460065f8563ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f8563ffffffff1663ffffffff1681526020019081526020015f208190555060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506128da5f868563ffffffff166124d4565b818060010192505080806001019150506127bb565b508260015f8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129718161293d565b811461297b575f80fd5b50565b5f8135905061298c81612968565b92915050565b5f602082840312156129a7576129a6612935565b5b5f6129b48482850161297e565b91505092915050565b5f8115159050919050565b6129d1816129bd565b82525050565b5f6020820190506129ea5f8301846129c8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a27578082015181840152602081019050612a0c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a4c826129f0565b612a5681856129fa565b9350612a66818560208601612a0a565b612a6f81612a32565b840191505092915050565b5f6020820190508181035f830152612a928184612a42565b905092915050565b5f819050919050565b612aac81612a9a565b8114612ab6575f80fd5b50565b5f81359050612ac781612aa3565b92915050565b5f60208284031215612ae257612ae1612935565b5b5f612aef84828501612ab9565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b2182612af8565b9050919050565b612b3181612b17565b82525050565b5f602082019050612b4a5f830184612b28565b92915050565b612b5981612b17565b8114612b63575f80fd5b50565b5f81359050612b7481612b50565b92915050565b5f8060408385031215612b9057612b8f612935565b5b5f612b9d85828601612b66565b9250506020612bae85828601612ab9565b9150509250929050565b612bc181612a9a565b82525050565b5f602082019050612bda5f830184612bb8565b92915050565b5f63ffffffff82169050919050565b612bf881612be0565b82525050565b5f602082019050612c115f830184612bef565b92915050565b5f805f60608486031215612c2e57612c2d612935565b5b5f612c3b86828701612b66565b9350506020612c4c86828701612b66565b9250506040612c5d86828701612ab9565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612ca582612a32565b810181811067ffffffffffffffff82111715612cc457612cc3612c6f565b5b80604052505050565b5f612cd661292c565b9050612ce28282612c9c565b919050565b5f67ffffffffffffffff821115612d0157612d00612c6f565b5b612d0a82612a32565b9050602081019050919050565b828183375f83830152505050565b5f612d37612d3284612ce7565b612ccd565b905082815260208101848484011115612d5357612d52612c6b565b5b612d5e848285612d17565b509392505050565b5f82601f830112612d7a57612d79612c67565b5b8135612d8a848260208601612d25565b91505092915050565b5f60208284031215612da857612da7612935565b5b5f82013567ffffffffffffffff811115612dc557612dc4612939565b5b612dd184828501612d66565b91505092915050565b5f60208284031215612def57612dee612935565b5b5f612dfc84828501612b66565b91505092915050565b612e0e816129bd565b8114612e18575f80fd5b50565b5f81359050612e2981612e05565b92915050565b5f8060408385031215612e4557612e44612935565b5b5f612e5285828601612b66565b9250506020612e6385828601612e1b565b9150509250929050565b5f67ffffffffffffffff821115612e8757612e86612c6f565b5b612e9082612a32565b9050602081019050919050565b5f612eaf612eaa84612e6d565b612ccd565b905082815260208101848484011115612ecb57612eca612c6b565b5b612ed6848285612d17565b509392505050565b5f82601f830112612ef257612ef1612c67565b5b8135612f02848260208601612e9d565b91505092915050565b5f805f8060808587031215612f2357612f22612935565b5b5f612f3087828801612b66565b9450506020612f4187828801612b66565b9350506040612f5287828801612ab9565b925050606085013567ffffffffffffffff811115612f7357612f72612939565b5b612f7f87828801612ede565b91505092959194509250565b5f8060408385031215612fa157612fa0612935565b5b5f612fae85828601612b66565b9250506020612fbf85828601612b66565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561304b5780860481111561302757613026612fc9565b5b60018516156130365780820291505b808102905061304485612ff6565b945061300b565b94509492505050565b5f82613063576001905061311e565b81613070575f905061311e565b81600181146130865760028114613090576130bf565b600191505061311e565b60ff8411156130a2576130a1612fc9565b5b8360020a9150848211156130b9576130b8612fc9565b5b5061311e565b5060208310610133831016604e8410600b84101617156130f45782820a9050838111156130ef576130ee612fc9565b5b61311e565b6131018484846001613002565b9250905081840481111561311857613117612fc9565b5b81810290505b9392505050565b5f61312f82612a9a565b915061313a83612a9a565b92506131677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613054565b905092915050565b5f61317982612a9a565b915061318483612a9a565b925082820190508082111561319c5761319b612fc9565b5b92915050565b7f596f7520617265206e6f7420617070726f7665640000000000000000000000005f82015250565b5f6131d66014836129fa565b91506131e1826131a2565b602082019050919050565b5f6020820190508181035f830152613203816131ca565b9050919050565b5f61321482612a9a565b915061321f83612a9a565b925082820261322d81612a9a565b9150828204841483151761324457613243612fc9565b5b5092915050565b7f4e6f7420616c6c6f7765640000000000000000000000000000000000000000005f82015250565b5f61327f600b836129fa565b915061328a8261324b565b602082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b7f4f6e6c79206f776e657220616c6c6f77656400000000000000000000000000005f82015250565b5f6132e76012836129fa565b91506132f2826132b3565b602082019050919050565b5f6020820190508181035f830152613314816132db565b9050919050565b5f82825260208201905092915050565b50565b5f6133395f8361331b565b91506133448261332b565b5f82019050919050565b5f6080820190506133615f830186612b28565b61336e6020830185612b28565b61337b6040830184612bb8565b818103606083015261338c8161332e565b9050949350505050565b5f815190506133a481612968565b92915050565b5f602082840312156133bf576133be612935565b5b5f6133cc84828501613396565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061341957607f821691505b60208210810361342c5761342b6133d5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261348e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613453565b6134988683613453565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6134d36134ce6134c984612a9a565b6134b0565b612a9a565b9050919050565b5f819050919050565b6134ec836134b9565b6135006134f8826134da565b84845461345f565b825550505050565b5f90565b613514613508565b61351f8184846134e3565b505050565b5b81811015613542576135375f8261350c565b600181019050613525565b5050565b601f8211156135875761355881613432565b61356184613444565b81016020851015613570578190505b61358461357c85613444565b830182613524565b50505b505050565b5f82821c905092915050565b5f6135a75f198460080261358c565b1980831691505092915050565b5f6135bf8383613598565b9150826002028217905092915050565b6135d8826129f0565b67ffffffffffffffff8111156135f1576135f0612c6f565b5b6135fb8254613402565b613606828285613546565b5f60209050601f831160018114613637575f8415613625578287015190505b61362f85826135b4565b865550613696565b601f19841661364586613432565b5f5b8281101561366c57848901518255600182019150602085019450602081019050613647565b868310156136895784890151613685601f891682613598565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f6136b28261369e565b6136bc818561331b565b93506136cc818560208601612a0a565b6136d581612a32565b840191505092915050565b5f6080820190506136f35f830187612b28565b6137006020830186612b28565b61370d6040830185612bb8565b818103606083015261371f81846136a8565b905095945050505050565b5f819050919050565b61374461373f82612a9a565b61372a565b82525050565b5f6137558284613733565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61379b82612a9a565b91506137a683612a9a565b9250826137b6576137b5613764565b5b828206905092915050565b5f81905092915050565b5f6137d5826129f0565b6137df81856137c1565b93506137ef818560208601612a0a565b80840191505092915050565b7f2e706e6700000000000000000000000000000000000000000000000000000000815250565b5f61382c82846137cb565b9150613837826137fb565b60048201915081905092915050565b5f815461385281613402565b61385c81866137c1565b9450600182165f8114613876576001811461388b576138bd565b60ff19831686528115158202860193506138bd565b61389485613432565b5f5b838110156138b557815481890152600182019150602081019050613896565b838801955050505b50505092915050565b5f6138d18285613846565b91506138dd82846137cb565b91508190509392505050565b7f446966666572656e74206f776e657200000000000000000000000000000000005f82015250565b5f61391d600f836129fa565b9150613928826138e9565b602082019050919050565b5f6020820190508181035f83015261394a81613911565b9050919050565b5f61395b82612a9a565b915061396683612a9a565b925082820390508181111561397e5761397d612fc9565b5b92915050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f6139b86016836129fa565b91506139c382613984565b602082019050919050565b5f6020820190508181035f8301526139e5816139ac565b9050919050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e6365005f82015250565b5f613a20601f836129fa565b9150613a2b826139ec565b602082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f613ab882612a9a565b9150613ac383612a9a565b925082613ad357613ad2613764565b5b828204905092915050565b5f613ae882612a9a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b1a57613b19612fc9565b5b600182019050919050565b5f60ff82169050919050565b5f613b3b82613b25565b9150613b4683613b25565b9250828201905060ff811115613b5f57613b5e612fc9565b5b9291505056fea26469706673582212203b8cf26e0b6890f8bf12961a39d071283a9405aa0b360fb691543b7a582652a564736f6c63430008140033

Deployed Bytecode

0x608060405260043610610180575f3560e01c80636bcef9a6116100d0578063a563833b11610089578063b88d4fde11610063578063b88d4fde14610574578063c87b56dd14610590578063dd62ed3e146105cc578063e985e9c51461060857610180565b8063a563833b146104e4578063a9059cbb1461050e578063b2bdfa7b1461054a57610180565b80636bcef9a6146103ee5780636c0360eb1461040457806370a082311461042e57806388a8c95c1461046a57806395d89b4114610492578063a22cb465146104bc57610180565b806323b872dd1161013d57806342842e0e1161011757806342842e0e146103445780634f02c4201461036057806355f804b31461038a5780636352211e146103b257610180565b806323b872dd146102c8578063313ce567146103045780633ccfd60b1461032e57610180565b806301ffc9a71461018457806306fdde03146101c0578063081812fc146101ea578063095ea7b31461022657806318160ddd146102625780631a72b87d1461028c575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612992565b610644565b6040516101b791906129d7565b60405180910390f35b3480156101cb575f80fd5b506101d46106ed565b6040516101e19190612a7a565b60405180910390f35b3480156101f5575f80fd5b50610210600480360381019061020b9190612acd565b61072a565b60405161021d9190612b37565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612b7a565b6107ca565b60405161025991906129d7565b60405180910390f35b34801561026d575f80fd5b506102766109b4565b6040516102839190612bc7565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612b7a565b6109d5565b6040516102bf9190612bfe565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612c17565b610a19565b6040516102fb91906129d7565b60405180910390f35b34801561030f575f80fd5b50610318610b60565b6040516103259190612bc7565b60405180910390f35b348015610339575f80fd5b50610342610b68565b005b61035e60048036038101906103599190612c17565b610c5e565b005b34801561036b575f80fd5b50610374610e62565b6040516103819190612bfe565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190612d93565b610e77565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612acd565b610f18565b6040516103e59190612b37565b60405180910390f35b3480156103f9575f80fd5b50610402610f48565b005b34801561040f575f80fd5b50610418611003565b6040516104259190612a7a565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612dda565b61108e565b6040516104619190612bc7565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190612dda565b6110d4565b005b34801561049d575f80fd5b506104a66111a6565b6040516104b39190612a7a565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190612e2f565b6111e3565b005b3480156104ef575f80fd5b506104f8611281565b60405161050591906129d7565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190612b7a565b611294565b60405161054191906129d7565b60405180910390f35b348015610555575f80fd5b5061055e61133a565b60405161056b9190612b37565b60405180910390f35b61058e60048036038101906105899190612f0b565b61135f565b005b34801561059b575f80fd5b506105b660048036038101906105b19190612acd565b611566565b6040516105c39190612a7a565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612f8b565b6115fe565b6040516105ff9190612bc7565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190612f8b565b611680565b60405161063b91906129d7565b60405180910390f35b5f600360149054906101000a900460ff16801561068657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b657506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e657506336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600781526020017f576f6d6261747300000000000000000000000000000000000000000000000000815250905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610792575f80fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6012600a6107d99190613125565b8211801561080157506103e86012600a6107f39190613125565b6107fd919061316f565b8211155b15610921575f60065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561087d575061087b8133611680565b155b156108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b4906131ec565b60405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061091781858561170e565b60019150506109ae565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506109a933848461176e565b600190505b92915050565b5f6012600a6109c39190613125565b6103e86109d0919061320a565b905090565b6009602052815f5260405f2081815481106109ee575f80fd5b905f5260205f209060089182820401919006600402915091509054906101000a900463ffffffff1681565b5f6012600a610a289190613125565b82118015610a5057506103e86012600a610a429190613125565b610a4c919061316f565b8211155b15610b3e578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac25750610a938261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ad35750610ad28433611680565b5b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613295565b60405180910390fd5b610b1d8484846117d8565b610b3584846012600a610b309190613125565b61192b565b60019050610b59565b610b498433846119d8565b610b54848484611b26565b600190505b9392505050565b5f6012905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906132fd565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610c5b573d5f803e3d5ffd5b50565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ccb5750610c9c8161072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cdc5750610cdb8333611680565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613295565b60405180910390fd5b610d268383836117d8565b610d3e83836012600a610d399190613125565b61192b565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015610e26575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610dc49392919061334e565b6020604051808303815f875af1158015610de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0491906133aa565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15610e5d576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60015f9054906101000a900463ffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906132fd565b60405180910390fd5b805f9081610f1491906135cf565b5050565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906132fd565b60405180910390fd5b600360149054906101000a900460ff1615600360146101000a81548160ff021916908315150217905550565b5f805461100f90613402565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90613402565b80156110865780601f1061105d57610100808354040283529160200191611086565b820191905f5260205f20905b81548152906001019060200180831161106957829003601f168201915b505050505081565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a906132fd565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600781526020017f576f6d6261747300000000000000000000000000000000000000000000000000815250905090565b8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061127d3383836120aa565b5050565b600360149054906101000a900460ff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611324576113033384846117d8565b61131b33846012600a6113169190613125565b61192b565b60019050611334565b61132f338484611b26565b600190505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113cc575061139d8261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113dd57506113dc8433611680565b5b61141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390613295565b60405180910390fd5b6114278484846117d8565b61143f84846012600a61143a9190613125565b61192b565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14158015611529575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016114c794939291906136e0565b6020604051808303815f875af11580156114e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150791906133aa565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611560576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60605f60016103e88460405160200161157f919061374a565b604051602081830303815290604052805190602001205f1c6115a19190613791565b6115ab919061316f565b90505f6115b782612114565b6040516020016115c79190613821565b6040516020818303038152906040526040516020016115e79291906138c6565b604051602081830303815290604052915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117cb9190612bc7565b60405180910390a3505050565b60065f8263ffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390613933565b60405180910390fd5b60075f8263ffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061191583838361226d565b61192683838363ffffffff166124d4565b505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119779190613951565b925050819055508060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506119d3838383612534565b505050565b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906139ce565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b1a9190613951565b92505081905550505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613a36565b60405180910390fd5b5f6012600a611bb59190613125565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611bfd9190613791565b90505f6012600a611c0e9190613125565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c569190613791565b9050611c6385858561192b565b5f6012600a611c729190613125565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cba9190613791565b90505f6012600a611ccb9190613125565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d139190613791565b90505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6002905083861015611e01575f82805490501115611e00575f825f81548110611d8257611d81613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508181908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550611dfe8a5f836117d8565b505b5b82851115611eb6575f81805490501115611eaa57611e665f898360018580549050611e2c9190613951565b81548110611e3d57611e3c613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b80805480611e7757611e76613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055611eb5565b611eb38861259e565b505b5b5f6012600a611ec59190613125565b88611ed09190613aae565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603611f3257505050505050506120a5565b5f81111561209d575f83805490509050808210611f4f5780611f51565b815b90505f5b81811015611fb157611f9e8c8c875f81548110611f7557611f74613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b8080611fa990613ade565b915050611f55565b508082611fbe9190613951565b915082805490509050808210611fd45780611fd6565b815b90505f5b81811015612085576120335f8c8660018880549050611ff99190613951565b8154811061200a57612009613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166117d8565b8380548061204457612043613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055808061207d90613ade565b915050611fda565b5061209b8a82846120969190613951565b612741565b505b505050505050505b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210791906129d7565b60405180910390a3505050565b60605f820361215a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612268565b5f8290505f5b5f821461218957808061217290613ade565b915050600a826121829190613aae565b9150612160565b5f8167ffffffffffffffff8111156121a4576121a3612c6f565b5b6040519080825280601f01601f1916602001820160405280156121d65781602001600182028036833780820191505090505b5090505b5f8514612261576001826121ee9190613951565b91506030600a866121ff9190613791565b6122099190613b31565b60f81b81838151811061221f5761221e613a54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561225a9190613aae565b94506121da565b8093505050505b919050565b5f600a5f8363ffffffff1663ffffffff1681526020019081526020015f205490505f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f818054905090505f826001836122e59190613951565b815481106122f6576122f5613a54565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff169050808385815481106123305761232f613a54565b5b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280548061237257612371613a81565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff021916905590555f6001836123ae9190613951565b146123d65783600a5f8363ffffffff1663ffffffff1681526020019081526020015f20819055505b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550600160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124aa9190613951565b600a5f8763ffffffff1663ffffffff1681526020019081526020015f208190555050505050505050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125919190612bc7565b60405180910390a3505050565b5f60015f81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff1602179055505060015f9054906101000a900463ffffffff1690508160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050600a5f8363ffffffff1663ffffffff1681526020019081526020015f208190555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff16021790555061273c5f838363ffffffff166124d4565b919050565b5f81031561292857600181036127605761275a8261259e565b50612928565b5f60015f9054906101000a900463ffffffff1690505f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f5b838110156128ef5782806001019350508460065f8563ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f8563ffffffff1663ffffffff1681526020019081526020015f208190555060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506128da5f868563ffffffff166124d4565b818060010192505080806001019150506127bb565b508260015f8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129718161293d565b811461297b575f80fd5b50565b5f8135905061298c81612968565b92915050565b5f602082840312156129a7576129a6612935565b5b5f6129b48482850161297e565b91505092915050565b5f8115159050919050565b6129d1816129bd565b82525050565b5f6020820190506129ea5f8301846129c8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a27578082015181840152602081019050612a0c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a4c826129f0565b612a5681856129fa565b9350612a66818560208601612a0a565b612a6f81612a32565b840191505092915050565b5f6020820190508181035f830152612a928184612a42565b905092915050565b5f819050919050565b612aac81612a9a565b8114612ab6575f80fd5b50565b5f81359050612ac781612aa3565b92915050565b5f60208284031215612ae257612ae1612935565b5b5f612aef84828501612ab9565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b2182612af8565b9050919050565b612b3181612b17565b82525050565b5f602082019050612b4a5f830184612b28565b92915050565b612b5981612b17565b8114612b63575f80fd5b50565b5f81359050612b7481612b50565b92915050565b5f8060408385031215612b9057612b8f612935565b5b5f612b9d85828601612b66565b9250506020612bae85828601612ab9565b9150509250929050565b612bc181612a9a565b82525050565b5f602082019050612bda5f830184612bb8565b92915050565b5f63ffffffff82169050919050565b612bf881612be0565b82525050565b5f602082019050612c115f830184612bef565b92915050565b5f805f60608486031215612c2e57612c2d612935565b5b5f612c3b86828701612b66565b9350506020612c4c86828701612b66565b9250506040612c5d86828701612ab9565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612ca582612a32565b810181811067ffffffffffffffff82111715612cc457612cc3612c6f565b5b80604052505050565b5f612cd661292c565b9050612ce28282612c9c565b919050565b5f67ffffffffffffffff821115612d0157612d00612c6f565b5b612d0a82612a32565b9050602081019050919050565b828183375f83830152505050565b5f612d37612d3284612ce7565b612ccd565b905082815260208101848484011115612d5357612d52612c6b565b5b612d5e848285612d17565b509392505050565b5f82601f830112612d7a57612d79612c67565b5b8135612d8a848260208601612d25565b91505092915050565b5f60208284031215612da857612da7612935565b5b5f82013567ffffffffffffffff811115612dc557612dc4612939565b5b612dd184828501612d66565b91505092915050565b5f60208284031215612def57612dee612935565b5b5f612dfc84828501612b66565b91505092915050565b612e0e816129bd565b8114612e18575f80fd5b50565b5f81359050612e2981612e05565b92915050565b5f8060408385031215612e4557612e44612935565b5b5f612e5285828601612b66565b9250506020612e6385828601612e1b565b9150509250929050565b5f67ffffffffffffffff821115612e8757612e86612c6f565b5b612e9082612a32565b9050602081019050919050565b5f612eaf612eaa84612e6d565b612ccd565b905082815260208101848484011115612ecb57612eca612c6b565b5b612ed6848285612d17565b509392505050565b5f82601f830112612ef257612ef1612c67565b5b8135612f02848260208601612e9d565b91505092915050565b5f805f8060808587031215612f2357612f22612935565b5b5f612f3087828801612b66565b9450506020612f4187828801612b66565b9350506040612f5287828801612ab9565b925050606085013567ffffffffffffffff811115612f7357612f72612939565b5b612f7f87828801612ede565b91505092959194509250565b5f8060408385031215612fa157612fa0612935565b5b5f612fae85828601612b66565b9250506020612fbf85828601612b66565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561304b5780860481111561302757613026612fc9565b5b60018516156130365780820291505b808102905061304485612ff6565b945061300b565b94509492505050565b5f82613063576001905061311e565b81613070575f905061311e565b81600181146130865760028114613090576130bf565b600191505061311e565b60ff8411156130a2576130a1612fc9565b5b8360020a9150848211156130b9576130b8612fc9565b5b5061311e565b5060208310610133831016604e8410600b84101617156130f45782820a9050838111156130ef576130ee612fc9565b5b61311e565b6131018484846001613002565b9250905081840481111561311857613117612fc9565b5b81810290505b9392505050565b5f61312f82612a9a565b915061313a83612a9a565b92506131677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613054565b905092915050565b5f61317982612a9a565b915061318483612a9a565b925082820190508082111561319c5761319b612fc9565b5b92915050565b7f596f7520617265206e6f7420617070726f7665640000000000000000000000005f82015250565b5f6131d66014836129fa565b91506131e1826131a2565b602082019050919050565b5f6020820190508181035f830152613203816131ca565b9050919050565b5f61321482612a9a565b915061321f83612a9a565b925082820261322d81612a9a565b9150828204841483151761324457613243612fc9565b5b5092915050565b7f4e6f7420616c6c6f7765640000000000000000000000000000000000000000005f82015250565b5f61327f600b836129fa565b915061328a8261324b565b602082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b7f4f6e6c79206f776e657220616c6c6f77656400000000000000000000000000005f82015250565b5f6132e76012836129fa565b91506132f2826132b3565b602082019050919050565b5f6020820190508181035f830152613314816132db565b9050919050565b5f82825260208201905092915050565b50565b5f6133395f8361331b565b91506133448261332b565b5f82019050919050565b5f6080820190506133615f830186612b28565b61336e6020830185612b28565b61337b6040830184612bb8565b818103606083015261338c8161332e565b9050949350505050565b5f815190506133a481612968565b92915050565b5f602082840312156133bf576133be612935565b5b5f6133cc84828501613396565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061341957607f821691505b60208210810361342c5761342b6133d5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261348e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613453565b6134988683613453565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6134d36134ce6134c984612a9a565b6134b0565b612a9a565b9050919050565b5f819050919050565b6134ec836134b9565b6135006134f8826134da565b84845461345f565b825550505050565b5f90565b613514613508565b61351f8184846134e3565b505050565b5b81811015613542576135375f8261350c565b600181019050613525565b5050565b601f8211156135875761355881613432565b61356184613444565b81016020851015613570578190505b61358461357c85613444565b830182613524565b50505b505050565b5f82821c905092915050565b5f6135a75f198460080261358c565b1980831691505092915050565b5f6135bf8383613598565b9150826002028217905092915050565b6135d8826129f0565b67ffffffffffffffff8111156135f1576135f0612c6f565b5b6135fb8254613402565b613606828285613546565b5f60209050601f831160018114613637575f8415613625578287015190505b61362f85826135b4565b865550613696565b601f19841661364586613432565b5f5b8281101561366c57848901518255600182019150602085019450602081019050613647565b868310156136895784890151613685601f891682613598565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f6136b28261369e565b6136bc818561331b565b93506136cc818560208601612a0a565b6136d581612a32565b840191505092915050565b5f6080820190506136f35f830187612b28565b6137006020830186612b28565b61370d6040830185612bb8565b818103606083015261371f81846136a8565b905095945050505050565b5f819050919050565b61374461373f82612a9a565b61372a565b82525050565b5f6137558284613733565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61379b82612a9a565b91506137a683612a9a565b9250826137b6576137b5613764565b5b828206905092915050565b5f81905092915050565b5f6137d5826129f0565b6137df81856137c1565b93506137ef818560208601612a0a565b80840191505092915050565b7f2e706e6700000000000000000000000000000000000000000000000000000000815250565b5f61382c82846137cb565b9150613837826137fb565b60048201915081905092915050565b5f815461385281613402565b61385c81866137c1565b9450600182165f8114613876576001811461388b576138bd565b60ff19831686528115158202860193506138bd565b61389485613432565b5f5b838110156138b557815481890152600182019150602081019050613896565b838801955050505b50505092915050565b5f6138d18285613846565b91506138dd82846137cb565b91508190509392505050565b7f446966666572656e74206f776e657200000000000000000000000000000000005f82015250565b5f61391d600f836129fa565b9150613928826138e9565b602082019050919050565b5f6020820190508181035f83015261394a81613911565b9050919050565b5f61395b82612a9a565b915061396683612a9a565b925082820390508181111561397e5761397d612fc9565b5b92915050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f6139b86016836129fa565b91506139c382613984565b602082019050919050565b5f6020820190508181035f8301526139e5816139ac565b9050919050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e6365005f82015250565b5f613a20601f836129fa565b9150613a2b826139ec565b602082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f613ab882612a9a565b9150613ac383612a9a565b925082613ad357613ad2613764565b5b828204905092915050565b5f613ae882612a9a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b1a57613b19612fc9565b5b600182019050919050565b5f60ff82169050919050565b5f613b3b82613b25565b9150613b4683613b25565b9250828201905060ff811115613b5f57613b5e612fc9565b5b9291505056fea26469706673582212203b8cf26e0b6890f8bf12961a39d071283a9405aa0b360fb691543b7a582652a564736f6c63430008140033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.