ETH Price: $3,461.84 (+2.18%)
Gas: 8 Gwei

Token

The Happy Chemical Club (THC)
 

Overview

Max Total Supply

162 THC

Holders

68

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cubancameraman.eth
Balance
1 THC
0x366377b1963c815ace6d1e6f52c1c705ef953a5e
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:
TheHappyChemicalClub

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 11 : TheHappyChemicalClub.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./packages/Bundle.sol";

/**
 * @title The Happy Chemical Club
 */
contract TheHappyChemicalClub is Bundle {
    receive() external payable {}
    fallback() external payable {}

    event Withdraw(address operator, address receiver, uint256 value);

    mapping(address => uint256) private _mintLimit;

    uint256 private _limit;
    uint256 private _price;
    uint256 private _freeTokensLimit;

    bool private _locked;
    bool private _mintPause;

    constructor(uint256 _freeTokens) {
        _limit = 5;
        _price = 10000000000000000;
        _locked = false;
        _mintPause = true;
        _freeTokensLimit = _freeTokens;
    }

    modifier gate() {
        require(_locked == false, "TheHappyChemicalClub: reentrancy denied");
        _locked = true;
        _;
        _locked = false;
    }

    function mintPrice(uint256 _quantity) public view returns (uint256) {
        if (_currentTokenId() < _freeTokensLimit) {
            return 0;
        } else {
            return (_price * _quantity);
        }
    }

    function setPrice(uint256 _value) public ownership {
        _price = _value;
    }

    function unpause() public ownership {
        _mintPause = false;
    }

    function pause() public ownership {
        _mintPause = true;
    }

    function paused() public view returns (bool) {
        return _mintPause;
    }

    function setRevealURI(string memory _cid, bool _isExtension) public ownership {
        _setRevealURI(_cid, _isExtension);
    }

    function checkURI(uint256 _tokenId) public view returns (string memory) {
        return _checkURI(_tokenId);
    }

    function reveal() public ownership {
        _reveal();
    }

    function setMintLimit(uint256 _amount) public ownership {
        _limit = _amount;
    }

    function mintLimit() public view returns (uint256) {
        if (_currentTokenId() < _freeTokensLimit) {
            return 1;
        } else {
            return _limit;
        }
    }

    function mint(uint256 _quantity) public payable gate {
        require(msg.value >= mintPrice(_quantity), "TheHappyChemicalClub: not enough funds provided");
        require(_quantity + totalSupply() <= 4200, "TheHappyChemicalClub: maximum tokens minted");
        require(_quantity <= mintLimit(), "TheHappyChemicalClub: tokens exceed mint limit");
        require(_quantity + _mintLimit[msg.sender] <= mintLimit(), "TheHappyChemicalClub: tokens exceed mint limit");
        require(_mintPause != true, "TheHappyChemicalClub: minting is paused");
        _mintLimit[msg.sender] += _quantity;
        for (uint256 i=0; i < _quantity; i++) {
            _mint(msg.sender);
        }
    }

    function airdropBatch(address[] memory _to) public ownership {
        require(_to.length + totalSupply() <= 4200, "TheHappyChemicalClub: maximum tokens minted");
        for (uint256 i = 0; i < _to.length; i++) {
            _mint(_to[i]);
        }
    }

    function airdrop(address _to, uint256 _quantity) public ownership {
        require(_quantity + totalSupply() <= 4200, "TheHappyChemicalClub: maximum tokens minted");
        for (uint256 i=0; i < _quantity; i++) {
            _mint(_to);
        }
    }

    function withdraw(address _account) public ownership {
        uint256 balance = address(this).balance;
        (bool success, ) = payable(_account).call{value: address(this).balance}("");
        require(success, "TheHappyChemicalClub: ether transfer failed");

        emit Withdraw(msg.sender, _account, balance);
    }
}

File 2 of 11 : Bundle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../erc/165/ERC165.sol";
import "./Package_ERC173.sol";
import "./Package_ERC721Metadata.sol";

/**
 * @dev Supports interface bundle
 */
contract Bundle is Package_ERC721Metadata, Package_ERC173, ERC165 {
    constructor() Package_ERC721Metadata("The Happy Chemical Club", "THC", "bafybeif42ii3tgqjjou6ozzs6zc6kdj6ihybijvvnzznpzda7i5aulhjgy/prereveal.json") Package_ERC173(msg.sender) {}

    function supportsInterface(bytes4 interfaceId) public pure override(ERC165) returns (bool) {
        return
            interfaceId == type(ERC165).interfaceId ||
            interfaceId == type(ERC173).interfaceId ||
            interfaceId == type(ERC721).interfaceId ||
            interfaceId == type(ERC721Metadata).interfaceId ||
            interfaceId == type(ERC721Receiver).interfaceId;
    }
}

File 3 of 11 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC165 standard
 */
interface ERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 4 of 11 : Package_ERC173.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../erc/173/ERC173.sol";

/**
 * @dev Implementation of the ERC173
 */
contract Package_ERC173 is ERC173 {
    address private _owner;

    modifier ownership() {
        require(owner() == msg.sender, "ERC173: caller is not the owner");
        _;
    }

    constructor(address owner_) {
        _transferOwnership(owner_);
    }


    function owner() public view override returns (address) {
        return _owner;
    }

    function transferOwnership(address _newOwner) public override ownership {
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner) internal {
        address previousOwner = _owner;
        _owner = _newOwner;
    
        emit OwnershipTransferred(previousOwner, _newOwner);
    }
}

File 5 of 11 : Package_ERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Package_ERC721.sol";
import "../erc/721/extensions/ERC721Metadata.sol";
import "../library/utils.sol";

/**
 * @dev Implementation of ERC721Metadata
 */
contract Package_ERC721Metadata is Package_ERC721, ERC721Metadata {
    mapping(uint256 => string) private _tokenCid;
    mapping(uint256 => bool) private _overrideCid;

    string private _metadata;
    string private _contractName;
    string private _contractSymbol;
    string private _fallbackCid;

    bool private _isRevealed;
    bool private _setURI;
    bool private _jsonExtension;

    constructor(string memory name_, string memory symbol_, string memory fallbackCid_) {
        _contractName = name_;
        _contractSymbol = symbol_;
        _fallbackCid = fallbackCid_;
        _isRevealed = false;
        _setURI = false;
    }

    function name() public view override returns (string memory) {
        return _contractName;
    }

    function symbol() public view override returns (string memory) {
        return _contractSymbol;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        if (_tokenId == 0 || _tokenId > _currentTokenId()) {
            return "Token ID out of range";
        } else if (_overrideCid[_tokenId] == true) {
            return string(abi.encodePacked(_ipfs(), _tokenCid[_tokenId]));
        } else {
            if (_isRevealed == true) {
                return _revealURI(_tokenId);
            } else {
                return string(abi.encodePacked(_ipfs(), _fallbackCid));
            }
        }
    }

    function _revealURI(uint256 _tokenId) internal view returns (string memory) {
        if (_jsonExtension == true) {
            return string(abi.encodePacked(_ipfs(), _metadata, "/", utils.toString(_tokenId), ".json"));
        } else {
            return string(abi.encodePacked(_ipfs(), _metadata, "/", utils.toString(_tokenId)));
        }
    }

    function _ipfs() internal pure returns (string memory) {
        return "ipfs://";
    }

    function _overrideTokenURI(uint256 _tokenId, string memory _cid) internal {
        _tokenCid[_tokenId] = _cid;
        _overrideCid[_tokenId] = true;
    }

    function _setRevealURI(string memory _cid, bool _isExtension) internal {
        require(_isRevealed == false, "ERC721: reveal has already occured");
        _metadata = _cid;
        _jsonExtension = _isExtension;
        _setURI = true;
    }

    function _checkURI(uint256 _tokenId) internal view returns (string memory) {
        if (_tokenId == 0 || _tokenId > _currentTokenId()) {
            return "Token ID out of range";
        } else if (_revealed() == true) {
            return "Tokens have been revealed";
        } else {
            return _revealURI(_tokenId);
        }
    }

    function _reveal() internal {
        require(_setURI == true, "ERC721: reveal URI not set");

        _isRevealed = true;
    }

    function _revealed() internal view returns (bool) {
        return _isRevealed;
    }
}

File 6 of 11 : ERC173.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev ERC173 standard
 */
interface ERC173 {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function owner() view external returns (address);

    function transferOwnership(address _newOwner) external;
}

File 7 of 11 : Package_ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../erc/721/ERC721.sol";
import "../erc/721/receiver/ERC721Receiver.sol";
import "../library/utils.sol";

/**
 * @dev Implementation of ERC721
 */
contract Package_ERC721 is ERC721 {
    mapping(uint256 => address) private _tokenOwner;
    mapping(address => uint256) private _ownerBalance;
    mapping(uint256 => address) private _tokenApproval;
    mapping(address => mapping(address => bool)) private _operatorApproval;

    uint256 private _currentId = 0;
    uint256 private _totalSupply = 0;

    function _mint(address _to) internal {
        require(_to != address(0), "ERC721: cannot mint to the zero address");

        _currentId += 1;
        _totalSupply += 1;
        _tokenOwner[_currentId] = _to;
        _ownerBalance[_to] += 1;

        emit Transfer(address(0), _to, _currentId);
    }

    function _currentTokenId() internal view returns (uint256) {
        return _currentId;
    }

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address _owner) public view override returns (uint256) {
        return _ownerBalance[_owner];
    }

    function ownerOf(uint256 _tokenId) public view override returns (address) {
        return _tokenOwner[_tokenId];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public override {
        safeTransferFrom(_from, _to, _tokenId, "");
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public override {
        _transfer(_from, _to, _tokenId);
        _onERC721Received(_from, _to, _tokenId, _data);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public override {
        _transfer(_from, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) public override {
        require(_tokenOwner[_tokenId] == msg.sender);

        _tokenApproval[_tokenId] = _approved;

        emit Approval(msg.sender, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) public override {
        require(msg.sender != _operator, "ERC721: cannot approve the owner");

        _operatorApproval[msg.sender][_operator] = _approved;
    
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    function getApproved(uint256 _tokenId) public view override returns (address) {
        return _tokenApproval[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) public view override returns (bool) {
        return _operatorApproval[_owner][_operator];
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        require(ownerOf(_tokenId) == _from, "ERC721: from address is not owner of token");
        require(_tokenOwner[_tokenId] == msg.sender || _tokenApproval[_tokenId] == msg.sender || _operatorApproval[_from][msg.sender] == true, "ERC721: unauthorized transfer");
        require(_to != address(0), "ERC721: cannot transfer to the zero address");

        _ownerBalance[_from] -= 1;
        _tokenOwner[_tokenId] = _to;
        _tokenApproval[_tokenId] = address(0);
        _ownerBalance[_to] += 1;

        emit Transfer(_from, _to, _tokenId);
    }

    function _onERC721Received(address _from, address _to, uint256 _tokenId, bytes memory _data) private {
        uint256 size;
        assembly {size := extcodesize(_to)}
        if (size > 0) {
            try ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) returns (bytes4 response) {
                if (response != ERC721Receiver.onERC721Received.selector) {
                    revert("ERC721: ERC721Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC721: transfer to non ERC721Receiver implementer");
            }
        }
    }
}

File 8 of 11 : ERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721Metadata standard
 */
interface ERC721Metadata {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

File 9 of 11 : utils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library utils {
    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(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
}

File 10 of 11 : ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 standard
 */
interface ERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) external view returns (uint256);

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

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external;

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

    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    function approve(address _approved, uint256 _tokenId) external;

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

File 11 of 11 : ERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721Receiver standard
 */
interface ERC721Receiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_freeTokens","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airdropBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_cid","type":"string"},{"internalType":"bool","name":"_isExtension","type":"bool"}],"name":"setRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060045560006005553480156200001b57600080fd5b50604051620041d3380380620041d3833981810160405281019062000041919062000345565b336040518060400160405280601781526020017f546865204861707079204368656d6963616c20436c75620000000000000000008152506040518060400160405280600381526020017f54484300000000000000000000000000000000000000000000000000000000008152506040518060800160405280604a815260200162004189604a91398260099080519060200190620000e09291906200027e565b5081600a9080519060200190620000f99291906200027e565b5080600b9080519060200190620001129291906200027e565b506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055505050506200015d81620001b860201b60201c565b506005600e81905550662386f26fc10000600f819055506000601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055508060108190555050620003fa565b6000600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028c906200037b565b90600052602060002090601f016020900481019282620002b05760008555620002fc565b82601f10620002cb57805160ff1916838001178555620002fc565b82800160010185558215620002fc579182015b82811115620002fb578251825591602001919060010190620002de565b5b5090506200030b91906200030f565b5090565b5b808211156200032a57600081600090555060010162000310565b5090565b6000815190506200033f81620003e0565b92915050565b6000602082840312156200035857600080fd5b600062000368848285016200032e565b91505092915050565b6000819050919050565b600060028204905060018216806200039457607f821691505b60208210811415620003ab57620003aa620003b1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620003eb8162000371565b8114620003f757600080fd5b50565b613d7f806200040a6000396000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063a475b5dd11610095578063c87b56dd11610064578063c87b56dd14610631578063e6a72acf1461066e578063e985e9c5146106ab578063f2fde38b146106e8576101d8565b8063a475b5dd1461058b578063a8688435146105a2578063b2542e28146105df578063b88d4fde14610608576101d8565b8063996517cf116100d1578063996517cf146104f25780639e6a1d7d1461051d578063a0712d6814610546578063a22cb46514610562576101d8565b80638da5cb5b1461047357806391b7f5ed1461049e57806395d89b41146104c7576101d8565b806342842e0e1161016f5780636b3601861161013e5780636b360186146103cd57806370a08231146103f65780638456cb59146104335780638ba4cc3c1461044a576101d8565b806342842e0e1461031357806351cff8d91461033c5780635c975abb146103655780636352211e14610390576101d8565b8063095ea7b3116101ab578063095ea7b31461027f57806318160ddd146102a857806323b872dd146102d35780633f4ba83a146102fc576101d8565b806301ffc9a7146101da57806306fdde0314610217578063081812fc14610242576101d8565b366101d857005b005b3480156101e657600080fd5b5061020160048036038101906101fc9190612b94565b610711565b60405161020e919061356e565b60405180910390f35b34801561022357600080fd5b5061022c61091b565b6040516102399190613589565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190612c3a565b6109ad565b60405161027691906134d0565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190612b17565b6109ea565b005b3480156102b457600080fd5b506102bd610b05565b6040516102ca91906137ab565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612a11565b610b0f565b005b34801561030857600080fd5b50610311610b1f565b005b34801561031f57600080fd5b5061033a60048036038101906103359190612a11565b610bb1565b005b34801561034857600080fd5b50610363600480360381019061035e91906129ac565b610bd1565b005b34801561037157600080fd5b5061037a610d37565b604051610387919061356e565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612c3a565b610d4e565b6040516103c491906134d0565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190612be6565b610d8a565b005b34801561040257600080fd5b5061041d600480360381019061041891906129ac565b610e0d565b60405161042a91906137ab565b60405180910390f35b34801561043f57600080fd5b50610448610e56565b005b34801561045657600080fd5b50610471600480360381019061046c9190612b17565b610ee8565b005b34801561047f57600080fd5b50610488610fe0565b60405161049591906134d0565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612c3a565b61100a565b005b3480156104d357600080fd5b506104dc611089565b6040516104e99190613589565b60405180910390f35b3480156104fe57600080fd5b5061050761111b565b60405161051491906137ab565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612c3a565b611140565b005b610560600480360381019061055b9190612c3a565b6111bf565b005b34801561056e57600080fd5b5061058960048036038101906105849190612adb565b6114a3565b005b34801561059757600080fd5b506105a061160f565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612c3a565b61168e565b6040516105d69190613589565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190612b53565b6116a0565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612a60565b6117d9565b005b34801561063d57600080fd5b5061065860048036038101906106539190612c3a565b6117f6565b6040516106659190613589565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612c3a565b61191c565b6040516106a291906137ab565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906129d5565b61194e565b6040516106df919061356e565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a91906129ac565b6119e2565b005b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107dc57507f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084457507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091457507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606009805461092a90613ab1565b80601f016020809104026020016040519081016040528092919081815260200182805461095690613ab1565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5457600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600554905090565b610b1a838383611a63565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610b3e610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061364b565b60405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b610bcc838383604051806020016040528060008152506117d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bf0610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061364b565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff1647604051610c71906134bb565b60006040518083038185875af1925050503d8060008114610cae576040519150601f19603f3d011682016040523d82523d6000602084013e610cb3565b606091505b5050905080610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061366b565b60405180910390fd5b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338484604051610d2a939291906134eb565b60405180910390a1505050565b6000601160019054906101000a900460ff16905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610da9610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df69061364b565b60405180910390fd5b610e098282611e9a565b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610e75610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061364b565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16610f07610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061364b565b60405180910390fd5b611068610f68610b05565b82610f7391906138e6565b1115610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab9061378b565b60405180910390fd5b60005b81811015610fdb57610fc883611f40565b8080610fd390613ae3565b915050610fb7565b505050565b6000600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16611029610fe0565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110769061364b565b60405180910390fd5b80600f8190555050565b6060600a805461109890613ab1565b80601f01602080910402602001604051908101604052809291908181526020018280546110c490613ab1565b80156111115780601f106110e657610100808354040283529160200191611111565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b5050505050905090565b60006010546111286120ee565b1015611137576001905061113d565b600e5490505b90565b3373ffffffffffffffffffffffffffffffffffffffff1661115f610fe0565b73ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac9061364b565b60405180910390fd5b80600e8190555050565b60001515601160009054906101000a900460ff16151514611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906136cb565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506112398161191c565b34101561127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061372b565b60405180910390fd5b611068611286610b05565b8261129191906138e6565b11156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c99061378b565b60405180910390fd5b6112da61111b565b81111561131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139061362b565b60405180910390fd5b61132461111b565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261136f91906138e6565b11156113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a79061362b565b60405180910390fd5b60011515601160019054906101000a900460ff1615151415611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe9061368b565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145691906138e6565b9250508190555060005b818110156114845761147133611f40565b808061147c90613ae3565b915050611460565b506000601160006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611509906136eb565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611603919061356e565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff1661162e610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b9061364b565b60405180910390fd5b61168c6120f8565b565b60606116998261216b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff166116bf610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061364b565b60405180910390fd5b611068611720610b05565b825161172c91906138e6565b111561176d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117649061378b565b60405180910390fd5b60005b81518110156117d5576117c28282815181106117b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611f40565b80806117cd90613ae3565b915050611770565b5050565b6117e4848484611a63565b6117f084848484612226565b50505050565b6060600082148061180d575061180a6120ee565b82115b1561184f576040518060400160405280601581526020017f546f6b656e204944206f7574206f662072616e676500000000000000000000008152509050611917565b600115156007600084815260200190815260200160002060009054906101000a900460ff16151514156118be576118846123de565b600660008481526020019081526020016000206040516020016118a8929190613414565b6040516020818303038152906040529050611917565b60011515600c60009054906101000a900460ff16151514156118ea576118e38261241b565b9050611917565b6118f26123de565b600b604051602001611905929190613414565b60405160208183030381529060405290505b919050565b60006010546119296120ee565b10156119385760009050611949565b81600f54611946919061396d565b90505b919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611a01610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e9061364b565b60405180910390fd5b611a60816124b0565b50565b8273ffffffffffffffffffffffffffffffffffffffff16611a8382610d4e565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906135eb565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ba357503373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611c3b575060011515600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c719061376b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce19061370b565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906139c7565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e3391906138e6565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60001515600c60009054906101000a900460ff16151514611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee7906135ab565b60405180910390fd5b8160089080519060200190611f0692919061273a565b5080600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061374b565b60405180910390fd5b600160046000828254611fc391906138e6565b92505081905550600160056000828254611fdd91906138e6565b9250508190555080600080600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208691906138e6565b925050819055506004548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b6000600454905090565b60011515600c60019054906101000a900460ff1615151461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061360b565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b60606000821480612182575061217f6120ee565b82115b156121c4576040518060400160405280601581526020017f546f6b656e204944206f7574206f662072616e676500000000000000000000008152509050612221565b600115156121d0612576565b15151415612215576040518060400160405280601981526020017f546f6b656e732068617665206265656e2072657665616c6564000000000000008152509050612221565b61221e8261241b565b90505b919050565b6000833b905060008111156123d7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122749493929190613522565b602060405180830381600087803b15801561228e57600080fd5b505af19250505080156122bf57506040513d601f19601f820116820180604052508101906122bc9190612bbd565b60015b61234e576122cb613c37565b806122d65750612313565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a9190613589565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906135cb565b60405180910390fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906136ab565b60405180910390fd5b505b5050505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b606060011515600c60029054906101000a900460ff1615151415612474576124416123de565b600861244c8461258d565b60405160200161245e93929190613474565b60405160208183030381529060405290506124ab565b61247c6123de565b60086124878461258d565b60405160200161249993929190613438565b60405160208183030381529060405290505b919050565b6000600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c60009054906101000a900460ff16905090565b606060008214156125d5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612735565b600082905060005b600082146126075780806125f090613ae3565b915050600a82612600919061393c565b91506125dd565b60008167ffffffffffffffff811115612649577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561267b5781602001600182028036833780820191505090505b5090505b6000851461272e5760018261269491906139c7565b9150600a856126a39190613b2c565b60306126af91906138e6565b60f81b8183815181106126eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612727919061393c565b945061267f565b8093505050505b919050565b82805461274690613ab1565b90600052602060002090601f01602090048101928261276857600085556127af565b82601f1061278157805160ff19168380011785556127af565b828001600101855582156127af579182015b828111156127ae578251825591602001919060010190612793565b5b5090506127bc91906127c0565b5090565b5b808211156127d95760008160009055506001016127c1565b5090565b60006127f06127eb846137f7565b6137c6565b9050808382526020820190508285602086028201111561280f57600080fd5b60005b8581101561283f578161282588826128c5565b845260208401935060208301925050600181019050612812565b5050509392505050565b600061285c61285784613823565b6137c6565b90508281526020810184848401111561287457600080fd5b61287f848285613a6f565b509392505050565b600061289a61289584613853565b6137c6565b9050828152602081018484840111156128b257600080fd5b6128bd848285613a6f565b509392505050565b6000813590506128d481613ced565b92915050565b600082601f8301126128eb57600080fd5b81356128fb8482602086016127dd565b91505092915050565b60008135905061291381613d04565b92915050565b60008135905061292881613d1b565b92915050565b60008151905061293d81613d1b565b92915050565b600082601f83011261295457600080fd5b8135612964848260208601612849565b91505092915050565b600082601f83011261297e57600080fd5b813561298e848260208601612887565b91505092915050565b6000813590506129a681613d32565b92915050565b6000602082840312156129be57600080fd5b60006129cc848285016128c5565b91505092915050565b600080604083850312156129e857600080fd5b60006129f6858286016128c5565b9250506020612a07858286016128c5565b9150509250929050565b600080600060608486031215612a2657600080fd5b6000612a34868287016128c5565b9350506020612a45868287016128c5565b9250506040612a5686828701612997565b9150509250925092565b60008060008060808587031215612a7657600080fd5b6000612a84878288016128c5565b9450506020612a95878288016128c5565b9350506040612aa687828801612997565b925050606085013567ffffffffffffffff811115612ac357600080fd5b612acf87828801612943565b91505092959194509250565b60008060408385031215612aee57600080fd5b6000612afc858286016128c5565b9250506020612b0d85828601612904565b9150509250929050565b60008060408385031215612b2a57600080fd5b6000612b38858286016128c5565b9250506020612b4985828601612997565b9150509250929050565b600060208284031215612b6557600080fd5b600082013567ffffffffffffffff811115612b7f57600080fd5b612b8b848285016128da565b91505092915050565b600060208284031215612ba657600080fd5b6000612bb484828501612919565b91505092915050565b600060208284031215612bcf57600080fd5b6000612bdd8482850161292e565b91505092915050565b60008060408385031215612bf957600080fd5b600083013567ffffffffffffffff811115612c1357600080fd5b612c1f8582860161296d565b9250506020612c3085828601612904565b9150509250929050565b600060208284031215612c4c57600080fd5b6000612c5a84828501612997565b91505092915050565b612c6c816139fb565b82525050565b612c7b81613a0d565b82525050565b6000612c8c82613898565b612c9681856138ae565b9350612ca6818560208601613a7e565b612caf81613c19565b840191505092915050565b6000612cc5826138a3565b612ccf81856138ca565b9350612cdf818560208601613a7e565b612ce881613c19565b840191505092915050565b6000612cfe826138a3565b612d0881856138db565b9350612d18818560208601613a7e565b80840191505092915050565b60008154612d3181613ab1565b612d3b81866138db565b94506001821660008114612d565760018114612d6757612d9a565b60ff19831686528186019350612d9a565b612d7085613883565b60005b83811015612d9257815481890152600182019150602081019050612d73565b838801955050505b50505092915050565b6000612db06022836138ca565b91507f4552433732313a2072657665616c2068617320616c7265616479206f6363757260008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e166032836138ca565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612e7c602a836138ca565b91507f4552433732313a2066726f6d2061646472657373206973206e6f74206f776e6560008301527f72206f6620746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ee2601a836138ca565b91507f4552433732313a2072657665616c20555249206e6f74207365740000000000006000830152602082019050919050565b6000612f22602e836138ca565b91507f54686548617070794368656d6963616c436c75623a20746f6b656e732065786360008301527f656564206d696e74206c696d69740000000000000000000000000000000000006020830152604082019050919050565b6000612f88601f836138ca565b91507f4552433137333a2063616c6c6572206973206e6f7420746865206f776e6572006000830152602082019050919050565b6000612fc8602b836138ca565b91507f54686548617070794368656d6963616c436c75623a206574686572207472616e60008301527f73666572206661696c65640000000000000000000000000000000000000000006020830152604082019050919050565b600061302e6027836138ca565b91507f54686548617070794368656d6963616c436c75623a206d696e74696e6720697360008301527f20706175736564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130946026836138ca565b91507f4552433732313a2045524337323152656365697665722072656a65637465642060008301527f746f6b656e7300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130fa6027836138ca565b91507f54686548617070794368656d6963616c436c75623a207265656e7472616e637960008301527f2064656e696564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131606005836138db565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006131a06020836138ca565b91507f4552433732313a2063616e6e6f7420617070726f766520746865206f776e65726000830152602082019050919050565b60006131e0602b836138ca565b91507f4552433732313a2063616e6e6f74207472616e7366657220746f20746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613246602f836138ca565b91507f54686548617070794368656d6963616c436c75623a206e6f7420656e6f75676860008301527f2066756e64732070726f766964656400000000000000000000000000000000006020830152604082019050919050565b60006132ac6000836138bf565b9150600082019050919050565b60006132c66027836138ca565b91507f4552433732313a2063616e6e6f74206d696e7420746f20746865207a65726f2060008301527f61646472657373000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061332c601d836138ca565b91507f4552433732313a20756e617574686f72697a6564207472616e736665720000006000830152602082019050919050565b600061336c602b836138ca565b91507f54686548617070794368656d6963616c436c75623a206d6178696d756d20746f60008301527f6b656e73206d696e7465640000000000000000000000000000000000000000006020830152604082019050919050565b60006133d26001836138db565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b61340e81613a65565b82525050565b60006134208285612cf3565b915061342c8284612d24565b91508190509392505050565b60006134448286612cf3565b91506134508285612d24565b915061345b826133c5565b91506134678284612cf3565b9150819050949350505050565b60006134808286612cf3565b915061348c8285612d24565b9150613497826133c5565b91506134a38284612cf3565b91506134ae82613153565b9150819050949350505050565b60006134c68261329f565b9150819050919050565b60006020820190506134e56000830184612c63565b92915050565b60006060820190506135006000830186612c63565b61350d6020830185612c63565b61351a6040830184613405565b949350505050565b60006080820190506135376000830187612c63565b6135446020830186612c63565b6135516040830185613405565b81810360608301526135638184612c81565b905095945050505050565b60006020820190506135836000830184612c72565b92915050565b600060208201905081810360008301526135a38184612cba565b905092915050565b600060208201905081810360008301526135c481612da3565b9050919050565b600060208201905081810360008301526135e481612e09565b9050919050565b6000602082019050818103600083015261360481612e6f565b9050919050565b6000602082019050818103600083015261362481612ed5565b9050919050565b6000602082019050818103600083015261364481612f15565b9050919050565b6000602082019050818103600083015261366481612f7b565b9050919050565b6000602082019050818103600083015261368481612fbb565b9050919050565b600060208201905081810360008301526136a481613021565b9050919050565b600060208201905081810360008301526136c481613087565b9050919050565b600060208201905081810360008301526136e4816130ed565b9050919050565b6000602082019050818103600083015261370481613193565b9050919050565b60006020820190508181036000830152613724816131d3565b9050919050565b6000602082019050818103600083015261374481613239565b9050919050565b60006020820190508181036000830152613764816132b9565b9050919050565b600060208201905081810360008301526137848161331f565b9050919050565b600060208201905081810360008301526137a48161335f565b9050919050565b60006020820190506137c06000830184613405565b92915050565b6000604051905081810181811067ffffffffffffffff821117156137ed576137ec613bea565b5b8060405250919050565b600067ffffffffffffffff82111561381257613811613bea565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561383e5761383d613bea565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561386e5761386d613bea565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138f182613a65565b91506138fc83613a65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393157613930613b5d565b5b828201905092915050565b600061394782613a65565b915061395283613a65565b92508261396257613961613b8c565b5b828204905092915050565b600061397882613a65565b915061398383613a65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139bc576139bb613b5d565b5b828202905092915050565b60006139d282613a65565b91506139dd83613a65565b9250828210156139f0576139ef613b5d565b5b828203905092915050565b6000613a0682613a45565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a9c578082015181840152602081019050613a81565b83811115613aab576000848401525b50505050565b60006002820490506001821680613ac957607f821691505b60208210811415613add57613adc613bbb565b5b50919050565b6000613aee82613a65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2157613b20613b5d565b5b600182019050919050565b6000613b3782613a65565b9150613b4283613a65565b925082613b5257613b51613b8c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613c4757613cea565b60046000803e613c58600051613c2a565b6308c379a08114613c695750613cea565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613c9557505050613cea565b808201805167ffffffffffffffff811115613cb4575050505050613cea565b8060208301013d8501811115613ccf57505050505050613cea565b613cd882613c19565b60208401016040528296505050505050505b90565b613cf6816139fb565b8114613d0157600080fd5b50565b613d0d81613a0d565b8114613d1857600080fd5b50565b613d2481613a19565b8114613d2f57600080fd5b50565b613d3b81613a65565b8114613d4657600080fd5b5056fea2646970667358221220e226b35191bb5272244a0ab944a1d0ac0bc28b2a50b73c23135be40c7a807db064736f6c63430008000033626166796265696634326969337467716a6a6f75366f7a7a73367a63366b646a3669687962696a76766e7a7a6e707a646137693561756c686a67792f70726572657665616c2e6a736f6e0000000000000000000000000000000000000000000000000000000000000208

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063a475b5dd11610095578063c87b56dd11610064578063c87b56dd14610631578063e6a72acf1461066e578063e985e9c5146106ab578063f2fde38b146106e8576101d8565b8063a475b5dd1461058b578063a8688435146105a2578063b2542e28146105df578063b88d4fde14610608576101d8565b8063996517cf116100d1578063996517cf146104f25780639e6a1d7d1461051d578063a0712d6814610546578063a22cb46514610562576101d8565b80638da5cb5b1461047357806391b7f5ed1461049e57806395d89b41146104c7576101d8565b806342842e0e1161016f5780636b3601861161013e5780636b360186146103cd57806370a08231146103f65780638456cb59146104335780638ba4cc3c1461044a576101d8565b806342842e0e1461031357806351cff8d91461033c5780635c975abb146103655780636352211e14610390576101d8565b8063095ea7b3116101ab578063095ea7b31461027f57806318160ddd146102a857806323b872dd146102d35780633f4ba83a146102fc576101d8565b806301ffc9a7146101da57806306fdde0314610217578063081812fc14610242576101d8565b366101d857005b005b3480156101e657600080fd5b5061020160048036038101906101fc9190612b94565b610711565b60405161020e919061356e565b60405180910390f35b34801561022357600080fd5b5061022c61091b565b6040516102399190613589565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190612c3a565b6109ad565b60405161027691906134d0565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190612b17565b6109ea565b005b3480156102b457600080fd5b506102bd610b05565b6040516102ca91906137ab565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612a11565b610b0f565b005b34801561030857600080fd5b50610311610b1f565b005b34801561031f57600080fd5b5061033a60048036038101906103359190612a11565b610bb1565b005b34801561034857600080fd5b50610363600480360381019061035e91906129ac565b610bd1565b005b34801561037157600080fd5b5061037a610d37565b604051610387919061356e565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612c3a565b610d4e565b6040516103c491906134d0565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190612be6565b610d8a565b005b34801561040257600080fd5b5061041d600480360381019061041891906129ac565b610e0d565b60405161042a91906137ab565b60405180910390f35b34801561043f57600080fd5b50610448610e56565b005b34801561045657600080fd5b50610471600480360381019061046c9190612b17565b610ee8565b005b34801561047f57600080fd5b50610488610fe0565b60405161049591906134d0565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612c3a565b61100a565b005b3480156104d357600080fd5b506104dc611089565b6040516104e99190613589565b60405180910390f35b3480156104fe57600080fd5b5061050761111b565b60405161051491906137ab565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612c3a565b611140565b005b610560600480360381019061055b9190612c3a565b6111bf565b005b34801561056e57600080fd5b5061058960048036038101906105849190612adb565b6114a3565b005b34801561059757600080fd5b506105a061160f565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612c3a565b61168e565b6040516105d69190613589565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190612b53565b6116a0565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612a60565b6117d9565b005b34801561063d57600080fd5b5061065860048036038101906106539190612c3a565b6117f6565b6040516106659190613589565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612c3a565b61191c565b6040516106a291906137ab565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906129d5565b61194e565b6040516106df919061356e565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a91906129ac565b6119e2565b005b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107dc57507f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084457507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091457507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606009805461092a90613ab1565b80601f016020809104026020016040519081016040528092919081815260200182805461095690613ab1565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5457600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600554905090565b610b1a838383611a63565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610b3e610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061364b565b60405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b610bcc838383604051806020016040528060008152506117d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bf0610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061364b565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff1647604051610c71906134bb565b60006040518083038185875af1925050503d8060008114610cae576040519150601f19603f3d011682016040523d82523d6000602084013e610cb3565b606091505b5050905080610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061366b565b60405180910390fd5b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338484604051610d2a939291906134eb565b60405180910390a1505050565b6000601160019054906101000a900460ff16905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610da9610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df69061364b565b60405180910390fd5b610e098282611e9a565b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610e75610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061364b565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16610f07610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061364b565b60405180910390fd5b611068610f68610b05565b82610f7391906138e6565b1115610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab9061378b565b60405180910390fd5b60005b81811015610fdb57610fc883611f40565b8080610fd390613ae3565b915050610fb7565b505050565b6000600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16611029610fe0565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110769061364b565b60405180910390fd5b80600f8190555050565b6060600a805461109890613ab1565b80601f01602080910402602001604051908101604052809291908181526020018280546110c490613ab1565b80156111115780601f106110e657610100808354040283529160200191611111565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b5050505050905090565b60006010546111286120ee565b1015611137576001905061113d565b600e5490505b90565b3373ffffffffffffffffffffffffffffffffffffffff1661115f610fe0565b73ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac9061364b565b60405180910390fd5b80600e8190555050565b60001515601160009054906101000a900460ff16151514611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906136cb565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506112398161191c565b34101561127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061372b565b60405180910390fd5b611068611286610b05565b8261129191906138e6565b11156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c99061378b565b60405180910390fd5b6112da61111b565b81111561131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139061362b565b60405180910390fd5b61132461111b565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261136f91906138e6565b11156113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a79061362b565b60405180910390fd5b60011515601160019054906101000a900460ff1615151415611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe9061368b565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145691906138e6565b9250508190555060005b818110156114845761147133611f40565b808061147c90613ae3565b915050611460565b506000601160006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611509906136eb565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611603919061356e565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff1661162e610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b9061364b565b60405180910390fd5b61168c6120f8565b565b60606116998261216b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff166116bf610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061364b565b60405180910390fd5b611068611720610b05565b825161172c91906138e6565b111561176d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117649061378b565b60405180910390fd5b60005b81518110156117d5576117c28282815181106117b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611f40565b80806117cd90613ae3565b915050611770565b5050565b6117e4848484611a63565b6117f084848484612226565b50505050565b6060600082148061180d575061180a6120ee565b82115b1561184f576040518060400160405280601581526020017f546f6b656e204944206f7574206f662072616e676500000000000000000000008152509050611917565b600115156007600084815260200190815260200160002060009054906101000a900460ff16151514156118be576118846123de565b600660008481526020019081526020016000206040516020016118a8929190613414565b6040516020818303038152906040529050611917565b60011515600c60009054906101000a900460ff16151514156118ea576118e38261241b565b9050611917565b6118f26123de565b600b604051602001611905929190613414565b60405160208183030381529060405290505b919050565b60006010546119296120ee565b10156119385760009050611949565b81600f54611946919061396d565b90505b919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611a01610fe0565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e9061364b565b60405180910390fd5b611a60816124b0565b50565b8273ffffffffffffffffffffffffffffffffffffffff16611a8382610d4e565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906135eb565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ba357503373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611c3b575060011515600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c719061376b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce19061370b565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906139c7565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e3391906138e6565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60001515600c60009054906101000a900460ff16151514611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee7906135ab565b60405180910390fd5b8160089080519060200190611f0692919061273a565b5080600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061374b565b60405180910390fd5b600160046000828254611fc391906138e6565b92505081905550600160056000828254611fdd91906138e6565b9250508190555080600080600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208691906138e6565b925050819055506004548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b6000600454905090565b60011515600c60019054906101000a900460ff1615151461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061360b565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b60606000821480612182575061217f6120ee565b82115b156121c4576040518060400160405280601581526020017f546f6b656e204944206f7574206f662072616e676500000000000000000000008152509050612221565b600115156121d0612576565b15151415612215576040518060400160405280601981526020017f546f6b656e732068617665206265656e2072657665616c6564000000000000008152509050612221565b61221e8261241b565b90505b919050565b6000833b905060008111156123d7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122749493929190613522565b602060405180830381600087803b15801561228e57600080fd5b505af19250505080156122bf57506040513d601f19601f820116820180604052508101906122bc9190612bbd565b60015b61234e576122cb613c37565b806122d65750612313565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a9190613589565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906135cb565b60405180910390fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906136ab565b60405180910390fd5b505b5050505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b606060011515600c60029054906101000a900460ff1615151415612474576124416123de565b600861244c8461258d565b60405160200161245e93929190613474565b60405160208183030381529060405290506124ab565b61247c6123de565b60086124878461258d565b60405160200161249993929190613438565b60405160208183030381529060405290505b919050565b6000600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c60009054906101000a900460ff16905090565b606060008214156125d5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612735565b600082905060005b600082146126075780806125f090613ae3565b915050600a82612600919061393c565b91506125dd565b60008167ffffffffffffffff811115612649577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561267b5781602001600182028036833780820191505090505b5090505b6000851461272e5760018261269491906139c7565b9150600a856126a39190613b2c565b60306126af91906138e6565b60f81b8183815181106126eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612727919061393c565b945061267f565b8093505050505b919050565b82805461274690613ab1565b90600052602060002090601f01602090048101928261276857600085556127af565b82601f1061278157805160ff19168380011785556127af565b828001600101855582156127af579182015b828111156127ae578251825591602001919060010190612793565b5b5090506127bc91906127c0565b5090565b5b808211156127d95760008160009055506001016127c1565b5090565b60006127f06127eb846137f7565b6137c6565b9050808382526020820190508285602086028201111561280f57600080fd5b60005b8581101561283f578161282588826128c5565b845260208401935060208301925050600181019050612812565b5050509392505050565b600061285c61285784613823565b6137c6565b90508281526020810184848401111561287457600080fd5b61287f848285613a6f565b509392505050565b600061289a61289584613853565b6137c6565b9050828152602081018484840111156128b257600080fd5b6128bd848285613a6f565b509392505050565b6000813590506128d481613ced565b92915050565b600082601f8301126128eb57600080fd5b81356128fb8482602086016127dd565b91505092915050565b60008135905061291381613d04565b92915050565b60008135905061292881613d1b565b92915050565b60008151905061293d81613d1b565b92915050565b600082601f83011261295457600080fd5b8135612964848260208601612849565b91505092915050565b600082601f83011261297e57600080fd5b813561298e848260208601612887565b91505092915050565b6000813590506129a681613d32565b92915050565b6000602082840312156129be57600080fd5b60006129cc848285016128c5565b91505092915050565b600080604083850312156129e857600080fd5b60006129f6858286016128c5565b9250506020612a07858286016128c5565b9150509250929050565b600080600060608486031215612a2657600080fd5b6000612a34868287016128c5565b9350506020612a45868287016128c5565b9250506040612a5686828701612997565b9150509250925092565b60008060008060808587031215612a7657600080fd5b6000612a84878288016128c5565b9450506020612a95878288016128c5565b9350506040612aa687828801612997565b925050606085013567ffffffffffffffff811115612ac357600080fd5b612acf87828801612943565b91505092959194509250565b60008060408385031215612aee57600080fd5b6000612afc858286016128c5565b9250506020612b0d85828601612904565b9150509250929050565b60008060408385031215612b2a57600080fd5b6000612b38858286016128c5565b9250506020612b4985828601612997565b9150509250929050565b600060208284031215612b6557600080fd5b600082013567ffffffffffffffff811115612b7f57600080fd5b612b8b848285016128da565b91505092915050565b600060208284031215612ba657600080fd5b6000612bb484828501612919565b91505092915050565b600060208284031215612bcf57600080fd5b6000612bdd8482850161292e565b91505092915050565b60008060408385031215612bf957600080fd5b600083013567ffffffffffffffff811115612c1357600080fd5b612c1f8582860161296d565b9250506020612c3085828601612904565b9150509250929050565b600060208284031215612c4c57600080fd5b6000612c5a84828501612997565b91505092915050565b612c6c816139fb565b82525050565b612c7b81613a0d565b82525050565b6000612c8c82613898565b612c9681856138ae565b9350612ca6818560208601613a7e565b612caf81613c19565b840191505092915050565b6000612cc5826138a3565b612ccf81856138ca565b9350612cdf818560208601613a7e565b612ce881613c19565b840191505092915050565b6000612cfe826138a3565b612d0881856138db565b9350612d18818560208601613a7e565b80840191505092915050565b60008154612d3181613ab1565b612d3b81866138db565b94506001821660008114612d565760018114612d6757612d9a565b60ff19831686528186019350612d9a565b612d7085613883565b60005b83811015612d9257815481890152600182019150602081019050612d73565b838801955050505b50505092915050565b6000612db06022836138ca565b91507f4552433732313a2072657665616c2068617320616c7265616479206f6363757260008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e166032836138ca565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612e7c602a836138ca565b91507f4552433732313a2066726f6d2061646472657373206973206e6f74206f776e6560008301527f72206f6620746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ee2601a836138ca565b91507f4552433732313a2072657665616c20555249206e6f74207365740000000000006000830152602082019050919050565b6000612f22602e836138ca565b91507f54686548617070794368656d6963616c436c75623a20746f6b656e732065786360008301527f656564206d696e74206c696d69740000000000000000000000000000000000006020830152604082019050919050565b6000612f88601f836138ca565b91507f4552433137333a2063616c6c6572206973206e6f7420746865206f776e6572006000830152602082019050919050565b6000612fc8602b836138ca565b91507f54686548617070794368656d6963616c436c75623a206574686572207472616e60008301527f73666572206661696c65640000000000000000000000000000000000000000006020830152604082019050919050565b600061302e6027836138ca565b91507f54686548617070794368656d6963616c436c75623a206d696e74696e6720697360008301527f20706175736564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130946026836138ca565b91507f4552433732313a2045524337323152656365697665722072656a65637465642060008301527f746f6b656e7300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130fa6027836138ca565b91507f54686548617070794368656d6963616c436c75623a207265656e7472616e637960008301527f2064656e696564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131606005836138db565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006131a06020836138ca565b91507f4552433732313a2063616e6e6f7420617070726f766520746865206f776e65726000830152602082019050919050565b60006131e0602b836138ca565b91507f4552433732313a2063616e6e6f74207472616e7366657220746f20746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613246602f836138ca565b91507f54686548617070794368656d6963616c436c75623a206e6f7420656e6f75676860008301527f2066756e64732070726f766964656400000000000000000000000000000000006020830152604082019050919050565b60006132ac6000836138bf565b9150600082019050919050565b60006132c66027836138ca565b91507f4552433732313a2063616e6e6f74206d696e7420746f20746865207a65726f2060008301527f61646472657373000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061332c601d836138ca565b91507f4552433732313a20756e617574686f72697a6564207472616e736665720000006000830152602082019050919050565b600061336c602b836138ca565b91507f54686548617070794368656d6963616c436c75623a206d6178696d756d20746f60008301527f6b656e73206d696e7465640000000000000000000000000000000000000000006020830152604082019050919050565b60006133d26001836138db565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b61340e81613a65565b82525050565b60006134208285612cf3565b915061342c8284612d24565b91508190509392505050565b60006134448286612cf3565b91506134508285612d24565b915061345b826133c5565b91506134678284612cf3565b9150819050949350505050565b60006134808286612cf3565b915061348c8285612d24565b9150613497826133c5565b91506134a38284612cf3565b91506134ae82613153565b9150819050949350505050565b60006134c68261329f565b9150819050919050565b60006020820190506134e56000830184612c63565b92915050565b60006060820190506135006000830186612c63565b61350d6020830185612c63565b61351a6040830184613405565b949350505050565b60006080820190506135376000830187612c63565b6135446020830186612c63565b6135516040830185613405565b81810360608301526135638184612c81565b905095945050505050565b60006020820190506135836000830184612c72565b92915050565b600060208201905081810360008301526135a38184612cba565b905092915050565b600060208201905081810360008301526135c481612da3565b9050919050565b600060208201905081810360008301526135e481612e09565b9050919050565b6000602082019050818103600083015261360481612e6f565b9050919050565b6000602082019050818103600083015261362481612ed5565b9050919050565b6000602082019050818103600083015261364481612f15565b9050919050565b6000602082019050818103600083015261366481612f7b565b9050919050565b6000602082019050818103600083015261368481612fbb565b9050919050565b600060208201905081810360008301526136a481613021565b9050919050565b600060208201905081810360008301526136c481613087565b9050919050565b600060208201905081810360008301526136e4816130ed565b9050919050565b6000602082019050818103600083015261370481613193565b9050919050565b60006020820190508181036000830152613724816131d3565b9050919050565b6000602082019050818103600083015261374481613239565b9050919050565b60006020820190508181036000830152613764816132b9565b9050919050565b600060208201905081810360008301526137848161331f565b9050919050565b600060208201905081810360008301526137a48161335f565b9050919050565b60006020820190506137c06000830184613405565b92915050565b6000604051905081810181811067ffffffffffffffff821117156137ed576137ec613bea565b5b8060405250919050565b600067ffffffffffffffff82111561381257613811613bea565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561383e5761383d613bea565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561386e5761386d613bea565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138f182613a65565b91506138fc83613a65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393157613930613b5d565b5b828201905092915050565b600061394782613a65565b915061395283613a65565b92508261396257613961613b8c565b5b828204905092915050565b600061397882613a65565b915061398383613a65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139bc576139bb613b5d565b5b828202905092915050565b60006139d282613a65565b91506139dd83613a65565b9250828210156139f0576139ef613b5d565b5b828203905092915050565b6000613a0682613a45565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a9c578082015181840152602081019050613a81565b83811115613aab576000848401525b50505050565b60006002820490506001821680613ac957607f821691505b60208210811415613add57613adc613bbb565b5b50919050565b6000613aee82613a65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2157613b20613b5d565b5b600182019050919050565b6000613b3782613a65565b9150613b4283613a65565b925082613b5257613b51613b8c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613c4757613cea565b60046000803e613c58600051613c2a565b6308c379a08114613c695750613cea565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613c9557505050613cea565b808201805167ffffffffffffffff811115613cb4575050505050613cea565b8060208301013d8501811115613ccf57505050505050613cea565b613cd882613c19565b60208401016040528296505050505050505b90565b613cf6816139fb565b8114613d0157600080fd5b50565b613d0d81613a0d565b8114613d1857600080fd5b50565b613d2481613a19565b8114613d2f57600080fd5b50565b613d3b81613a65565b8114613d4657600080fd5b5056fea2646970667358221220e226b35191bb5272244a0ab944a1d0ac0bc28b2a50b73c23135be40c7a807db064736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000208

-----Decoded View---------------
Arg [0] : _freeTokens (uint256): 520

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000208


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.