ETH Price: $2,486.34 (-1.92%)

Feathered Frens (FF)
 

Overview

TokenID

451

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
FeatheredFrens

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

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

pragma solidity ^0.8.0;

import "./Package.sol";

/**
 * @title Feathered Frens
 */
contract FeatheredFrens is Package {
    receive() external payable {}
    fallback() external payable {}

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

    mapping(address => bool) private _whitelist;
    mapping(address => uint256) _mintLimit;

    uint256 private _limit;

    bool private _mintPaused;
    bool private _freeForAllPaused;
    bool private _locked;

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

    constructor(address _contractOwner, bytes32 _merkleRoot) Package("Feathered Frens", "FF") {
        _transferOwnership(_contractOwner);
        _mintPaused = true;
        _freeForAllPaused = true;
        _locked == false;
        setMintLimit(10);
        setMerkleRoot(_merkleRoot);
    }

    function mintPause(bool _bool) public ownership {
        _mintPaused = _bool;
    }

    function mintPauseStatus() public view returns (bool) {
        return _mintPaused;
    }

    function freeForAllPause(bool _bool) public ownership {
        _freeForAllPaused = _bool;
    }

    function freeForAllPauseStatus() public view returns (bool) {
        return _freeForAllPaused;
    }

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

    function mintLimit() public view returns (uint256) {
        return _limit;
    }

    function setMerkleRoot(bytes32 _merkleRoot) public ownership {
        _setMerkleRoot(_merkleRoot);
    }

    function totalMinted(address _account) public view returns (uint256) {
        return _mintLimit[_account];
    }

    function freeForAll(address _to, uint256 _quantity) public gate {
        require(_quantity + totalSupply() <= 5555, "FF: maximum tokens minted");
        require(_quantity <= mintLimit(), "FF: 10 tokens allowed to mint");
        require(_quantity + _mintLimit[_to] <= mintLimit(), "FF: 10 tokens allowed to mint");
        require(_freeForAllPaused != true, "FF: minting is paused");
        _mintLimit[_to] += _quantity;
        for (uint256 i=0; i < _quantity; i++) {
            _mint(_to);
        }
    }

    function mint(address _to, bytes32[] calldata _merkleProof, uint256 _quantity) public gate {
        require(_quantity + totalSupply() <= 5555, "FF: maximum tokens minted");
        require(_quantity <= mintLimit(), "FF: 10 tokens allowed to mint");
        require(_quantity + _mintLimit[_to] <= mintLimit(), "FF: 10 tokens allowed to mint");
        require(_mintPaused != true, "FF: minting is paused");
        _mintLimit[_to] += _quantity;
        for (uint256 i=0; i < _quantity; i++) {
            _whitelistMint(_to, _merkleProof, merkleRoot());
        }
    }

    function airdropBatch(address[] memory _to) public ownership {
        require(_to.length + totalSupply() <= 5555, "FF: 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() <= 5555, "FF: 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, "FF: ether transfer failed");

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

File 2 of 8 : Package.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC/721/ERC721.sol";
import "./ERC/721/extensions/ERC721Metadata.sol";
import "./ERC/721/receiver/ERC721Receiver.sol";
import "./ERC/173/ERC173.sol";
import "./ERC/165/ERC165.sol";
import "./library/utils.sol";

/**
 * @dev Feathered Frens package
 */
contract Package is ERC721, ERC721Metadata, ERC173, ERC165 {
    mapping(uint256 => address) private _tokenOwner;
    mapping(address => uint256) private _ownerBalance;
    mapping(uint256 => address) private _tokenApproval;
    mapping(address => mapping(address => bool)) private _operatorApproval;

    bool private _reveal = false;
    bool private _baseSet = false;
    bool private _baseLock = false;
    bool _jsonExtension = false;

    string private _name;
    string private _symbol;
    string private _extendedBaseUri;

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

    address private _ownership;

    bytes32 private root;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    function owner() public view override returns (address) {
        return _ownership;
    }
    
    function _setMerkleRoot(bytes32 _root) internal {
        root = _root;
    }
    
    function merkleRoot() internal view returns (bytes32) {
        return root;
    }

    function _whitelistMint(address _to, bytes32[] calldata _merkleProof, bytes32 _merkleRoot) internal {
        bytes32 leaf = keccak256(abi.encodePacked(_to));
        require(utils.verify(_merkleProof, _merkleRoot, leaf), "FF: invalid merkle proof.");
        require(_currentId < 5555, "ERC721: maximum tokens minted");
        require(_to != address(0), "ERC721: cannot mint to zero address");

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

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

    function _mint(address _to) internal {
        require(_currentId < 5555, "ERC721: maximum tokens minted");
        require(_to != address(0), "ERC721: cannot mint to zero address");

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

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

    function reveal() public ownership {
        require(_baseLock == true, "FF: reveal base not locked");
        _reveal = true;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_tokenId != 0, "FF: token ID out of range");
        require(_currentId >= _tokenId, "FF: token ID out of range");
        if (_reveal == true) {
            if (_jsonExtension == true) {
                return string(abi.encodePacked(_ipfs(), _extendedBaseUri, "/", utils.toString(_tokenId), ".json"));
            } else {
                return string(abi.encodePacked(_ipfs(), _extendedBaseUri, "/", utils.toString(_tokenId)));
            }
        } else {
            return string(abi.encodePacked(_ipfs(), "bafybeidvzxfejqzlftewxphrrqvee3r6sxf7mf6etdajcoawpz4sf5hve4/prereveal.json"));
        }
    }

    function checkURI(uint256 _tokenId) public view returns (string memory) {
        require(_baseSet == true, "FF: CID has not been set");
        require(_baseLock == false, "FF: URI has been set");
        if (_jsonExtension == true) {
            return string(abi.encodePacked(_ipfs(), _extendedBaseUri, "/", utils.toString(_tokenId), ".json"));
        } else {
            return string(abi.encodePacked(_ipfs(), _extendedBaseUri, "/", utils.toString(_tokenId)));
        }
    }

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

    function revealBaseLocked() public view returns (bool) {
        return _baseLock;
    }

    function lockRevealBase(bool _lockStatus) public ownership {
        require(_reveal == false, "FF: reveal has already occured");
        require(_baseSet == true, "FF: reveal base not set");
        _baseLock = _lockStatus;
    }

    function setRevealBase(string memory _cid, bool _isExtension) public ownership {
        require(_baseLock == false, "FF: already revealed");
        _extendedBaseUri = _cid;
        _jsonExtension = _isExtension;
        _baseSet = true;
    }

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

    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 8 : ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the 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 4 of 8 : ERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC721Metadata
 */
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 5 of 8 : ERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the 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 8 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard
 */
interface ERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 8 : 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);
    }

    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"freeForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"freeForAllPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeForAllPauseStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"_lockStatus","type":"bool"}],"name":"lockRevealBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"mintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPauseStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealBaseLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_cid","type":"string"},{"internalType":"bool","name":"_isExtension","type":"bool"}],"name":"setRevealBase","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":[{"internalType":"address","name":"_account","type":"address"}],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_account","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff0219169083151502179055506000600460026101000a81548160ff0219169083151502179055506000600460036101000a81548160ff021916908315150217905550600060085560006009553480156200008757600080fd5b5060405162004f6e38038062004f6e8339818101604052810190620000ad9190620004c8565b6040518060400160405280600f81526020017f466561746865726564204672656e7300000000000000000000000000000000008152506040518060400160405280600281526020017f4646000000000000000000000000000000000000000000000000000000000000815250816005908051906020019062000131929190620003ea565b5080600690805190602001906200014a929190620003ea565b5050506200015e82620001d260201b60201c565b6001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff02191690831515021790555060001515600f60029054906101000a90505050620001b9600a6200029860201b60201c565b620001ca816200032260201b60201c565b505062000655565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16620002bf620003b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030f906200054b565b60405180910390fd5b80600e8190555050565b3373ffffffffffffffffffffffffffffffffffffffff1662000349620003b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000399906200054b565b60405180910390fd5b620003b381620003e060201b60201c565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600b8190555050565b828054620003f890620005bc565b90600052602060002090601f0160209004810192826200041c576000855562000468565b82601f106200043757805160ff191683800117855562000468565b8280016001018555821562000468579182015b82811115620004675782518255916020019190600101906200044a565b5b5090506200047791906200047b565b5090565b5b80821115620004965760008160009055506001016200047c565b5090565b600081519050620004ab8162000621565b92915050565b600081519050620004c2816200063b565b92915050565b60008060408385031215620004dc57600080fd5b6000620004ec858286016200049a565b9250506020620004ff85828601620004b1565b9150509250929050565b600062000518601f836200056d565b91507f4552433137333a2063616c6c6572206973206e6f7420746865206f776e6572006000830152602082019050919050565b60006020820190508181036000830152620005668162000509565b9050919050565b600082825260208201905092915050565b60006200058b826200059c565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620005d557607f821691505b60208210811415620005ec57620005eb620005f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200062c816200057e565b81146200063857600080fd5b50565b620006468162000592565b81146200065257600080fd5b50565b61490980620006656000396000f3fe6080604052600436106101fc5760003560e01c806395d89b411161010d578063b2542e28116100a0578063d77636c41161006f578063d77636c414610732578063e41fcd771461075b578063e904125614610784578063e985e9c5146107af578063f2fde38b146107ec57610203565b8063b2542e281461067a578063b88d4fde146106a3578063c87b56dd146106cc578063cf6b67361461070957610203565b8063a2dd9d87116100dc578063a2dd9d87146105d4578063a475b5dd146105fd578063a868843514610614578063b0392f0b1461065157610203565b806395d89b411461052c578063996517cf146105575780639e6a1d7d14610582578063a22cb465146105ab57610203565b806351cff8d91161019057806366ed0af21161015f57806366ed0af21461044957806370a08231146104725780637cb64759146104af5780638ba4cc3c146104d85780638da5cb5b1461050157610203565b806351cff8d91461038d5780635febc8c1146103b65780636352211e146103e157806363a62f6a1461041e57610203565b8063095ea7b3116101cc578063095ea7b3146102e757806318160ddd1461031057806323b872dd1461033b57806342842e0e1461036457610203565b80623d47901461020557806301ffc9a71461024257806306fdde031461027f578063081812fc146102aa57610203565b3661020357005b005b34801561021157600080fd5b5061022c6004803603810190610227919061328e565b610815565b604051610239919061433d565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190613534565b61085e565b6040516102769190614040565b60405180910390f35b34801561028b57600080fd5b50610294610a68565b6040516102a1919061405b565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906135da565b610afa565b6040516102de9190613fa2565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613465565b610b37565b005b34801561031c57600080fd5b50610325610c52565b604051610332919061433d565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d91906132f3565b610c5c565b005b34801561037057600080fd5b5061038b600480360381019061038691906132f3565b610c6c565b005b34801561039957600080fd5b506103b460048036038101906103af919061328e565b610c8c565b005b3480156103c257600080fd5b506103cb610df2565b6040516103d89190614040565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906135da565b610e09565b6040516104159190613fa2565b60405180910390f35b34801561042a57600080fd5b50610433610e45565b6040516104409190614040565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613586565b610e5c565b005b34801561047e57600080fd5b506104996004803603810190610494919061328e565b610f77565b6040516104a6919061433d565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061350b565b610fc0565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190613465565b611041565b005b34801561050d57600080fd5b50610516611139565b6040516105239190613fa2565b60405180910390f35b34801561053857600080fd5b50610541611163565b60405161054e919061405b565b60405180910390f35b34801561056357600080fd5b5061056c6111f5565b604051610579919061433d565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906135da565b6111ff565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613429565b61127e565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906133bd565b6113ea565b005b34801561060957600080fd5b50610612611690565b005b34801561062057600080fd5b5061063b600480360381019061063691906135da565b611778565b604051610648919061405b565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613465565b6118b9565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134a1565b611b53565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613342565b611c8c565b005b3480156106d857600080fd5b506106f360048036038101906106ee91906135da565b611ca9565b604051610700919061405b565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b91906134e2565b611e11565b005b34801561073e57600080fd5b50610759600480360381019061075491906134e2565b611ea3565b005b34801561076757600080fd5b50610782600480360381019061077d91906134e2565b611fe1565b005b34801561079057600080fd5b50610799612073565b6040516107a69190614040565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d191906132b7565b61208a565b6040516107e39190614040565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061328e565b61211e565b005b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092957507f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099157507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6157507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060058054610a77906145f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906145f3565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba157600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600954905090565b610c6783838361219f565b505050565b610c8783838360405180602001604052806000815250611c8c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cab611139565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf89061411d565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff1647604051610d2c90613f8d565b60006040518083038185875af1925050503d8060008114610d69576040519150601f19603f3d011682016040523d82523d6000602084013e610d6e565b606091505b5050905080610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906141dd565b60405180910390fd5b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338484604051610de593929190613fbd565b60405180910390a1505050565b6000600f60019054906101000a900460ff16905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460029054906101000a900460ff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16610e7b611139565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061411d565b60405180910390fd5b60001515600460029054906101000a900460ff16151514610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061417d565b60405180910390fd5b8160079080519060200190610f3d929190612fbd565b5080600460036101000a81548160ff0219169083151502179055506001600460016101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610fdf611139565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c9061411d565b60405180910390fd5b61103e816125d6565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611060611139565b73ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061411d565b60405180910390fd5b6115b36110c1610c52565b826110cc9190614478565b111561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061419d565b60405180910390fd5b60005b8181101561113457611121836125e0565b808061112c90614625565b915050611110565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054611172906145f3565b80601f016020809104026020016040519081016040528092919081815260200182805461119e906145f3565b80156111eb5780601f106111c0576101008083540402835291602001916111eb565b820191906000526020600020905b8154815290600101906020018083116111ce57829003601f168201915b5050505050905090565b6000600e54905090565b3373ffffffffffffffffffffffffffffffffffffffff1661121e611139565b73ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b9061411d565b60405180910390fd5b80600e8190555050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061425d565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113de9190614040565b60405180910390a35050565b60001515600f60029054906101000a900460ff16151514611440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611437906140dd565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506115b3611466610c52565b826114719190614478565b11156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a99061419d565b60405180910390fd5b6114ba6111f5565b8111156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f39061407d565b60405180910390fd5b6115046111f5565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261154f9190614478565b1115611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115879061407d565b60405180910390fd5b60011515600f60009054906101000a900460ff16151514156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906140fd565b60405180910390fd5b80600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116369190614478565b9250508190555060005b8181101561166e5761165b8585856116566127d4565b6127de565b808061166690614625565b915050611640565b506000600f60026101000a81548160ff02191690831515021790555050505050565b3373ffffffffffffffffffffffffffffffffffffffff166116af611139565b73ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc9061411d565b60405180910390fd5b60011515600460029054906101000a900460ff1615151461175b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611752906142bd565b60405180910390fd5b6001600460006101000a81548160ff021916908315150217905550565b606060011515600460019054906101000a900460ff161515146117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c7906141bd565b60405180910390fd5b60001515600460029054906101000a900460ff16151514611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d9061421d565b60405180910390fd5b60011515600460039054906101000a900460ff161515141561187d5761184a612a8c565b600761185584612ac9565b60405160200161186793929190613f24565b60405160208183030381529060405290506118b4565b611885612a8c565b600761189084612ac9565b6040516020016118a293929190613ee8565b60405160208183030381529060405290505b919050565b60001515600f60029054906101000a900460ff1615151461190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906140dd565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506115b3611935610c52565b826119409190614478565b1115611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061419d565b60405180910390fd5b6119896111f5565b8111156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061407d565b60405180910390fd5b6119d36111f5565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611a1e9190614478565b1115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a569061407d565b60405180910390fd5b60011515600f60019054906101000a900460ff1615151415611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906140fd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b059190614478565b9250508190555060005b81811015611b3357611b20836125e0565b8080611b2b90614625565b915050611b0f565b506000600f60026101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611b72611139565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061411d565b60405180910390fd5b6115b3611bd3610c52565b8251611bdf9190614478565b1115611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061419d565b60405180910390fd5b60005b8151811015611c8857611c75828281518110611c68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516125e0565b8080611c8090614625565b915050611c23565b5050565b611c9784848461219f565b611ca384848484612c76565b50505050565b60606000821415611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce69061423d565b60405180910390fd5b816008541015611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b9061423d565b60405180910390fd5b60011515600460009054906101000a900460ff1615151415611de25760011515600460039054906101000a900460ff1615151415611da757611d74612a8c565b6007611d7f84612ac9565b604051602001611d9193929190613f24565b6040516020818303038152906040529050611e0c565b611daf612a8c565b6007611dba84612ac9565b604051602001611dcc93929190613ee8565b6040516020818303038152906040529050611e0c565b611dea612a8c565b604051602001611dfa9190613f6b565b60405160208183030381529060405290505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16611e30611139565b73ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d9061411d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611ec2611139565b73ffffffffffffffffffffffffffffffffffffffff1614611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f9061411d565b60405180910390fd5b60001515600460009054906101000a900460ff16151514611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f659061429d565b60405180910390fd5b60011515600460019054906101000a900460ff16151514611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb906142dd565b60405180910390fd5b80600460026101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16612000611139565b73ffffffffffffffffffffffffffffffffffffffff1614612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d9061411d565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000600f60009054906101000a900460ff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1661213d611139565b73ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a9061411d565b60405180910390fd5b61219c81612e2e565b50565b8273ffffffffffffffffffffffffffffffffffffffff166121bf82610e09565b73ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140bd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806122df57503373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612377575060011515600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad906142fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d9061427d565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247591906144ff565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256f9190614478565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80600b8190555050565b6115b360085410612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d9061431d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d9061413d565b60405180910390fd5b6001600860008282546126a99190614478565b925050819055506001600960008282546126c39190614478565b9250508190555080600080600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461276c9190614478565b925050819055506008548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b6000600b54905090565b6000846040516020016127f19190613ecd565b604051602081830303815290604052805190602001209050612855848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508383612ef4565b612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b9061415d565b60405180910390fd5b6115b3600854106128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d19061431d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129419061413d565b60405180910390fd5b60016008600082825461295d9190614478565b925050819055506001600960008282546129779190614478565b9250508190555084600080600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a209190614478565b925050819055506008548573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b60606000821415612b11576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c71565b600082905060005b60008214612b43578080612b2c90614625565b915050600a82612b3c91906144ce565b9150612b19565b60008167ffffffffffffffff811115612b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bb75781602001600182028036833780820191505090505b5090505b60008514612c6a57600182612bd091906144ff565b9150600a85612bdf9190614692565b6030612beb9190614478565b60f81b818381518110612c27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c6391906144ce565b9450612bbb565b8093505050505b919050565b6000833b90506000811115612e27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612cc49493929190613ff4565b602060405180830381600087803b158015612cde57600080fd5b505af1925050508015612d0f57506040513d601f19601f82011682018060405250810190612d0c919061355d565b60015b612d9e57612d1b6147aa565b80612d265750612d63565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a919061405b565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d959061409d565b60405180910390fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c906141fd565b60405180910390fd5b505b5050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612f018584612f0b565b1490509392505050565b60008082905060005b8451811015612f9b576000858281518110612f58577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612f7a57612f738382612fa6565b9250612f87565b612f848184612fa6565b92505b508080612f9390614625565b915050612f14565b508091505092915050565b600082600052816020526040600020905092915050565b828054612fc9906145f3565b90600052602060002090601f016020900481019282612feb5760008555613032565b82601f1061300457805160ff1916838001178555613032565b82800160010185558215613032579182015b82811115613031578251825591602001919060010190613016565b5b50905061303f9190613043565b5090565b5b8082111561305c576000816000905550600101613044565b5090565b600061307361306e84614389565b614358565b9050808382526020820190508285602086028201111561309257600080fd5b60005b858110156130c257816130a88882613148565b845260208401935060208301925050600181019050613095565b5050509392505050565b60006130df6130da846143b5565b614358565b9050828152602081018484840111156130f757600080fd5b6131028482856145b1565b509392505050565b600061311d613118846143e5565b614358565b90508281526020810184848401111561313557600080fd5b6131408482856145b1565b509392505050565b60008135905061315781614860565b92915050565b600082601f83011261316e57600080fd5b813561317e848260208601613060565b91505092915050565b60008083601f84011261319957600080fd5b8235905067ffffffffffffffff8111156131b257600080fd5b6020830191508360208202830111156131ca57600080fd5b9250929050565b6000813590506131e081614877565b92915050565b6000813590506131f58161488e565b92915050565b60008135905061320a816148a5565b92915050565b60008151905061321f816148a5565b92915050565b600082601f83011261323657600080fd5b81356132468482602086016130cc565b91505092915050565b600082601f83011261326057600080fd5b813561327084826020860161310a565b91505092915050565b600081359050613288816148bc565b92915050565b6000602082840312156132a057600080fd5b60006132ae84828501613148565b91505092915050565b600080604083850312156132ca57600080fd5b60006132d885828601613148565b92505060206132e985828601613148565b9150509250929050565b60008060006060848603121561330857600080fd5b600061331686828701613148565b935050602061332786828701613148565b925050604061333886828701613279565b9150509250925092565b6000806000806080858703121561335857600080fd5b600061336687828801613148565b945050602061337787828801613148565b935050604061338887828801613279565b925050606085013567ffffffffffffffff8111156133a557600080fd5b6133b187828801613225565b91505092959194509250565b600080600080606085870312156133d357600080fd5b60006133e187828801613148565b945050602085013567ffffffffffffffff8111156133fe57600080fd5b61340a87828801613187565b9350935050604061341d87828801613279565b91505092959194509250565b6000806040838503121561343c57600080fd5b600061344a85828601613148565b925050602061345b858286016131d1565b9150509250929050565b6000806040838503121561347857600080fd5b600061348685828601613148565b925050602061349785828601613279565b9150509250929050565b6000602082840312156134b357600080fd5b600082013567ffffffffffffffff8111156134cd57600080fd5b6134d98482850161315d565b91505092915050565b6000602082840312156134f457600080fd5b6000613502848285016131d1565b91505092915050565b60006020828403121561351d57600080fd5b600061352b848285016131e6565b91505092915050565b60006020828403121561354657600080fd5b6000613554848285016131fb565b91505092915050565b60006020828403121561356f57600080fd5b600061357d84828501613210565b91505092915050565b6000806040838503121561359957600080fd5b600083013567ffffffffffffffff8111156135b357600080fd5b6135bf8582860161324f565b92505060206135d0858286016131d1565b9150509250929050565b6000602082840312156135ec57600080fd5b60006135fa84828501613279565b91505092915050565b61360c81614533565b82525050565b61362361361e82614533565b61466e565b82525050565b61363281614545565b82525050565b60006136438261442a565b61364d8185614440565b935061365d8185602086016145c0565b6136668161477f565b840191505092915050565b600061367c82614435565b613686818561445c565b93506136968185602086016145c0565b61369f8161477f565b840191505092915050565b60006136b582614435565b6136bf818561446d565b93506136cf8185602086016145c0565b80840191505092915050565b600081546136e8816145f3565b6136f2818661446d565b9450600182166000811461370d576001811461371e57613751565b60ff19831686528186019350613751565b61372785614415565b60005b838110156137495781548189015260018201915060208101905061372a565b838801955050505b50505092915050565b6000613767601d8361445c565b91507f46463a20313020746f6b656e7320616c6c6f77656420746f206d696e740000006000830152602082019050919050565b60006137a760328361445c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061380d602a8361445c565b91507f4552433732313a2066726f6d2061646472657373206973206e6f74206f776e6560008301527f72206f6620746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061387360158361445c565b91507f46463a207265656e7472616e63792064656e69656400000000000000000000006000830152602082019050919050565b60006138b360158361445c565b91507f46463a206d696e74696e672069732070617573656400000000000000000000006000830152602082019050919050565b60006138f3604a8361446d565b91507f6261667962656964767a7866656a717a6c66746577787068727271766565337260008301527f36737866376d6636657464616a636f6177707a34736635687665342f7072657260208301527f657665616c2e6a736f6e000000000000000000000000000000000000000000006040830152604a82019050919050565b600061397f601f8361445c565b91507f4552433137333a2063616c6c6572206973206e6f7420746865206f776e6572006000830152602082019050919050565b60006139bf60238361445c565b91507f4552433732313a2063616e6e6f74206d696e7420746f207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a2560198361445c565b91507f46463a20696e76616c6964206d65726b6c652070726f6f662e000000000000006000830152602082019050919050565b6000613a6560148361445c565b91507f46463a20616c72656164792072657665616c65640000000000000000000000006000830152602082019050919050565b6000613aa560198361445c565b91507f46463a206d6178696d756d20746f6b656e73206d696e746564000000000000006000830152602082019050919050565b6000613ae560188361445c565b91507f46463a2043494420686173206e6f74206265656e2073657400000000000000006000830152602082019050919050565b6000613b2560198361445c565b91507f46463a206574686572207472616e73666572206661696c6564000000000000006000830152602082019050919050565b6000613b6560268361445c565b91507f4552433732313a2045524337323152656365697665722072656a65637465642060008301527f746f6b656e7300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bcb60148361445c565b91507f46463a2055524920686173206265656e207365740000000000000000000000006000830152602082019050919050565b6000613c0b60058361446d565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000613c4b60198361445c565b91507f46463a20746f6b656e204944206f7574206f662072616e6765000000000000006000830152602082019050919050565b6000613c8b60208361445c565b91507f4552433732313a2063616e6e6f7420617070726f766520746865206f776e65726000830152602082019050919050565b6000613ccb602b8361445c565b91507f4552433732313a2063616e6e6f74207472616e7366657220746f20746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d31601e8361445c565b91507f46463a2072657665616c2068617320616c7265616479206f63637572656400006000830152602082019050919050565b6000613d71601a8361445c565b91507f46463a2072657665616c2062617365206e6f74206c6f636b65640000000000006000830152602082019050919050565b6000613db1600083614451565b9150600082019050919050565b6000613dcb60178361445c565b91507f46463a2072657665616c2062617365206e6f74207365740000000000000000006000830152602082019050919050565b6000613e0b601d8361445c565b91507f4552433732313a20756e617574686f72697a6564207472616e736665720000006000830152602082019050919050565b6000613e4b601d8361445c565b91507f4552433732313a206d6178696d756d20746f6b656e73206d696e7465640000006000830152602082019050919050565b6000613e8b60018361446d565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613ec7816145a7565b82525050565b6000613ed98284613612565b60148201915081905092915050565b6000613ef482866136aa565b9150613f0082856136db565b9150613f0b82613e7e565b9150613f1782846136aa565b9150819050949350505050565b6000613f3082866136aa565b9150613f3c82856136db565b9150613f4782613e7e565b9150613f5382846136aa565b9150613f5e82613bfe565b9150819050949350505050565b6000613f7782846136aa565b9150613f82826138e6565b915081905092915050565b6000613f9882613da4565b9150819050919050565b6000602082019050613fb76000830184613603565b92915050565b6000606082019050613fd26000830186613603565b613fdf6020830185613603565b613fec6040830184613ebe565b949350505050565b60006080820190506140096000830187613603565b6140166020830186613603565b6140236040830185613ebe565b81810360608301526140358184613638565b905095945050505050565b60006020820190506140556000830184613629565b92915050565b600060208201905081810360008301526140758184613671565b905092915050565b600060208201905081810360008301526140968161375a565b9050919050565b600060208201905081810360008301526140b68161379a565b9050919050565b600060208201905081810360008301526140d681613800565b9050919050565b600060208201905081810360008301526140f681613866565b9050919050565b60006020820190508181036000830152614116816138a6565b9050919050565b6000602082019050818103600083015261413681613972565b9050919050565b60006020820190508181036000830152614156816139b2565b9050919050565b6000602082019050818103600083015261417681613a18565b9050919050565b6000602082019050818103600083015261419681613a58565b9050919050565b600060208201905081810360008301526141b681613a98565b9050919050565b600060208201905081810360008301526141d681613ad8565b9050919050565b600060208201905081810360008301526141f681613b18565b9050919050565b6000602082019050818103600083015261421681613b58565b9050919050565b6000602082019050818103600083015261423681613bbe565b9050919050565b6000602082019050818103600083015261425681613c3e565b9050919050565b6000602082019050818103600083015261427681613c7e565b9050919050565b6000602082019050818103600083015261429681613cbe565b9050919050565b600060208201905081810360008301526142b681613d24565b9050919050565b600060208201905081810360008301526142d681613d64565b9050919050565b600060208201905081810360008301526142f681613dbe565b9050919050565b6000602082019050818103600083015261431681613dfe565b9050919050565b6000602082019050818103600083015261433681613e3e565b9050919050565b60006020820190506143526000830184613ebe565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561437f5761437e614750565b5b8060405250919050565b600067ffffffffffffffff8211156143a4576143a3614750565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d0576143cf614750565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614400576143ff614750565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614483826145a7565b915061448e836145a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c3576144c26146c3565b5b828201905092915050565b60006144d9826145a7565b91506144e4836145a7565b9250826144f4576144f36146f2565b5b828204905092915050565b600061450a826145a7565b9150614515836145a7565b925082821015614528576145276146c3565b5b828203905092915050565b600061453e82614587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145de5780820151818401526020810190506145c3565b838111156145ed576000848401525b50505050565b6000600282049050600182168061460b57607f821691505b6020821081141561461f5761461e614721565b5b50919050565b6000614630826145a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614663576146626146c3565b5b600182019050919050565b600061467982614680565b9050919050565b600061468b82614790565b9050919050565b600061469d826145a7565b91506146a8836145a7565b9250826146b8576146b76146f2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156147ba5761485d565b60046000803e6147cb60005161479d565b6308c379a081146147dc575061485d565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156148085750505061485d565b808201805167ffffffffffffffff81111561482757505050505061485d565b8060208301013d85018111156148425750505050505061485d565b61484b8261477f565b60208401016040528296505050505050505b90565b61486981614533565b811461487457600080fd5b50565b61488081614545565b811461488b57600080fd5b50565b61489781614551565b81146148a257600080fd5b50565b6148ae8161455b565b81146148b957600080fd5b50565b6148c5816145a7565b81146148d057600080fd5b5056fea26469706673582212207c6dde5549ae86b242121d9cd3479770adccd005a9708a9392f65870cb67d11564736f6c634300080000330000000000000000000000001ca3242f4065b0e75278feba3fb304f73d19f7b17389adee2a47b157dfee50442490ffcf11853ac3ad1b81621d455481aa25c5a9

Deployed Bytecode

0x6080604052600436106101fc5760003560e01c806395d89b411161010d578063b2542e28116100a0578063d77636c41161006f578063d77636c414610732578063e41fcd771461075b578063e904125614610784578063e985e9c5146107af578063f2fde38b146107ec57610203565b8063b2542e281461067a578063b88d4fde146106a3578063c87b56dd146106cc578063cf6b67361461070957610203565b8063a2dd9d87116100dc578063a2dd9d87146105d4578063a475b5dd146105fd578063a868843514610614578063b0392f0b1461065157610203565b806395d89b411461052c578063996517cf146105575780639e6a1d7d14610582578063a22cb465146105ab57610203565b806351cff8d91161019057806366ed0af21161015f57806366ed0af21461044957806370a08231146104725780637cb64759146104af5780638ba4cc3c146104d85780638da5cb5b1461050157610203565b806351cff8d91461038d5780635febc8c1146103b65780636352211e146103e157806363a62f6a1461041e57610203565b8063095ea7b3116101cc578063095ea7b3146102e757806318160ddd1461031057806323b872dd1461033b57806342842e0e1461036457610203565b80623d47901461020557806301ffc9a71461024257806306fdde031461027f578063081812fc146102aa57610203565b3661020357005b005b34801561021157600080fd5b5061022c6004803603810190610227919061328e565b610815565b604051610239919061433d565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190613534565b61085e565b6040516102769190614040565b60405180910390f35b34801561028b57600080fd5b50610294610a68565b6040516102a1919061405b565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906135da565b610afa565b6040516102de9190613fa2565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613465565b610b37565b005b34801561031c57600080fd5b50610325610c52565b604051610332919061433d565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d91906132f3565b610c5c565b005b34801561037057600080fd5b5061038b600480360381019061038691906132f3565b610c6c565b005b34801561039957600080fd5b506103b460048036038101906103af919061328e565b610c8c565b005b3480156103c257600080fd5b506103cb610df2565b6040516103d89190614040565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906135da565b610e09565b6040516104159190613fa2565b60405180910390f35b34801561042a57600080fd5b50610433610e45565b6040516104409190614040565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613586565b610e5c565b005b34801561047e57600080fd5b506104996004803603810190610494919061328e565b610f77565b6040516104a6919061433d565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061350b565b610fc0565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190613465565b611041565b005b34801561050d57600080fd5b50610516611139565b6040516105239190613fa2565b60405180910390f35b34801561053857600080fd5b50610541611163565b60405161054e919061405b565b60405180910390f35b34801561056357600080fd5b5061056c6111f5565b604051610579919061433d565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906135da565b6111ff565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613429565b61127e565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906133bd565b6113ea565b005b34801561060957600080fd5b50610612611690565b005b34801561062057600080fd5b5061063b600480360381019061063691906135da565b611778565b604051610648919061405b565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613465565b6118b9565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134a1565b611b53565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613342565b611c8c565b005b3480156106d857600080fd5b506106f360048036038101906106ee91906135da565b611ca9565b604051610700919061405b565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b91906134e2565b611e11565b005b34801561073e57600080fd5b50610759600480360381019061075491906134e2565b611ea3565b005b34801561076757600080fd5b50610782600480360381019061077d91906134e2565b611fe1565b005b34801561079057600080fd5b50610799612073565b6040516107a69190614040565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d191906132b7565b61208a565b6040516107e39190614040565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061328e565b61211e565b005b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092957507f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099157507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6157507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060058054610a77906145f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906145f3565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba157600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600954905090565b610c6783838361219f565b505050565b610c8783838360405180602001604052806000815250611c8c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cab611139565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf89061411d565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff1647604051610d2c90613f8d565b60006040518083038185875af1925050503d8060008114610d69576040519150601f19603f3d011682016040523d82523d6000602084013e610d6e565b606091505b5050905080610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906141dd565b60405180910390fd5b7f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338484604051610de593929190613fbd565b60405180910390a1505050565b6000600f60019054906101000a900460ff16905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460029054906101000a900460ff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16610e7b611139565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061411d565b60405180910390fd5b60001515600460029054906101000a900460ff16151514610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061417d565b60405180910390fd5b8160079080519060200190610f3d929190612fbd565b5080600460036101000a81548160ff0219169083151502179055506001600460016101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610fdf611139565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c9061411d565b60405180910390fd5b61103e816125d6565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611060611139565b73ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061411d565b60405180910390fd5b6115b36110c1610c52565b826110cc9190614478565b111561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061419d565b60405180910390fd5b60005b8181101561113457611121836125e0565b808061112c90614625565b915050611110565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054611172906145f3565b80601f016020809104026020016040519081016040528092919081815260200182805461119e906145f3565b80156111eb5780601f106111c0576101008083540402835291602001916111eb565b820191906000526020600020905b8154815290600101906020018083116111ce57829003601f168201915b5050505050905090565b6000600e54905090565b3373ffffffffffffffffffffffffffffffffffffffff1661121e611139565b73ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b9061411d565b60405180910390fd5b80600e8190555050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061425d565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113de9190614040565b60405180910390a35050565b60001515600f60029054906101000a900460ff16151514611440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611437906140dd565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506115b3611466610c52565b826114719190614478565b11156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a99061419d565b60405180910390fd5b6114ba6111f5565b8111156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f39061407d565b60405180910390fd5b6115046111f5565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261154f9190614478565b1115611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115879061407d565b60405180910390fd5b60011515600f60009054906101000a900460ff16151514156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906140fd565b60405180910390fd5b80600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116369190614478565b9250508190555060005b8181101561166e5761165b8585856116566127d4565b6127de565b808061166690614625565b915050611640565b506000600f60026101000a81548160ff02191690831515021790555050505050565b3373ffffffffffffffffffffffffffffffffffffffff166116af611139565b73ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc9061411d565b60405180910390fd5b60011515600460029054906101000a900460ff1615151461175b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611752906142bd565b60405180910390fd5b6001600460006101000a81548160ff021916908315150217905550565b606060011515600460019054906101000a900460ff161515146117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c7906141bd565b60405180910390fd5b60001515600460029054906101000a900460ff16151514611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d9061421d565b60405180910390fd5b60011515600460039054906101000a900460ff161515141561187d5761184a612a8c565b600761185584612ac9565b60405160200161186793929190613f24565b60405160208183030381529060405290506118b4565b611885612a8c565b600761189084612ac9565b6040516020016118a293929190613ee8565b60405160208183030381529060405290505b919050565b60001515600f60029054906101000a900460ff1615151461190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906140dd565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506115b3611935610c52565b826119409190614478565b1115611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061419d565b60405180910390fd5b6119896111f5565b8111156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061407d565b60405180910390fd5b6119d36111f5565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611a1e9190614478565b1115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a569061407d565b60405180910390fd5b60011515600f60019054906101000a900460ff1615151415611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906140fd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b059190614478565b9250508190555060005b81811015611b3357611b20836125e0565b8080611b2b90614625565b915050611b0f565b506000600f60026101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611b72611139565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061411d565b60405180910390fd5b6115b3611bd3610c52565b8251611bdf9190614478565b1115611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061419d565b60405180910390fd5b60005b8151811015611c8857611c75828281518110611c68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516125e0565b8080611c8090614625565b915050611c23565b5050565b611c9784848461219f565b611ca384848484612c76565b50505050565b60606000821415611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce69061423d565b60405180910390fd5b816008541015611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b9061423d565b60405180910390fd5b60011515600460009054906101000a900460ff1615151415611de25760011515600460039054906101000a900460ff1615151415611da757611d74612a8c565b6007611d7f84612ac9565b604051602001611d9193929190613f24565b6040516020818303038152906040529050611e0c565b611daf612a8c565b6007611dba84612ac9565b604051602001611dcc93929190613ee8565b6040516020818303038152906040529050611e0c565b611dea612a8c565b604051602001611dfa9190613f6b565b60405160208183030381529060405290505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16611e30611139565b73ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d9061411d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611ec2611139565b73ffffffffffffffffffffffffffffffffffffffff1614611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f9061411d565b60405180910390fd5b60001515600460009054906101000a900460ff16151514611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f659061429d565b60405180910390fd5b60011515600460019054906101000a900460ff16151514611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb906142dd565b60405180910390fd5b80600460026101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16612000611139565b73ffffffffffffffffffffffffffffffffffffffff1614612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d9061411d565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000600f60009054906101000a900460ff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1661213d611139565b73ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a9061411d565b60405180910390fd5b61219c81612e2e565b50565b8273ffffffffffffffffffffffffffffffffffffffff166121bf82610e09565b73ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140bd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806122df57503373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612377575060011515600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad906142fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d9061427d565b60405180910390fd5b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247591906144ff565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256f9190614478565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80600b8190555050565b6115b360085410612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d9061431d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d9061413d565b60405180910390fd5b6001600860008282546126a99190614478565b925050819055506001600960008282546126c39190614478565b9250508190555080600080600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461276c9190614478565b925050819055506008548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b6000600b54905090565b6000846040516020016127f19190613ecd565b604051602081830303815290604052805190602001209050612855848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508383612ef4565b612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b9061415d565b60405180910390fd5b6115b3600854106128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d19061431d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129419061413d565b60405180910390fd5b60016008600082825461295d9190614478565b925050819055506001600960008282546129779190614478565b9250508190555084600080600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a209190614478565b925050819055506008548573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b60606000821415612b11576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c71565b600082905060005b60008214612b43578080612b2c90614625565b915050600a82612b3c91906144ce565b9150612b19565b60008167ffffffffffffffff811115612b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bb75781602001600182028036833780820191505090505b5090505b60008514612c6a57600182612bd091906144ff565b9150600a85612bdf9190614692565b6030612beb9190614478565b60f81b818381518110612c27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c6391906144ce565b9450612bbb565b8093505050505b919050565b6000833b90506000811115612e27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612cc49493929190613ff4565b602060405180830381600087803b158015612cde57600080fd5b505af1925050508015612d0f57506040513d601f19601f82011682018060405250810190612d0c919061355d565b60015b612d9e57612d1b6147aa565b80612d265750612d63565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a919061405b565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d959061409d565b60405180910390fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c906141fd565b60405180910390fd5b505b5050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612f018584612f0b565b1490509392505050565b60008082905060005b8451811015612f9b576000858281518110612f58577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612f7a57612f738382612fa6565b9250612f87565b612f848184612fa6565b92505b508080612f9390614625565b915050612f14565b508091505092915050565b600082600052816020526040600020905092915050565b828054612fc9906145f3565b90600052602060002090601f016020900481019282612feb5760008555613032565b82601f1061300457805160ff1916838001178555613032565b82800160010185558215613032579182015b82811115613031578251825591602001919060010190613016565b5b50905061303f9190613043565b5090565b5b8082111561305c576000816000905550600101613044565b5090565b600061307361306e84614389565b614358565b9050808382526020820190508285602086028201111561309257600080fd5b60005b858110156130c257816130a88882613148565b845260208401935060208301925050600181019050613095565b5050509392505050565b60006130df6130da846143b5565b614358565b9050828152602081018484840111156130f757600080fd5b6131028482856145b1565b509392505050565b600061311d613118846143e5565b614358565b90508281526020810184848401111561313557600080fd5b6131408482856145b1565b509392505050565b60008135905061315781614860565b92915050565b600082601f83011261316e57600080fd5b813561317e848260208601613060565b91505092915050565b60008083601f84011261319957600080fd5b8235905067ffffffffffffffff8111156131b257600080fd5b6020830191508360208202830111156131ca57600080fd5b9250929050565b6000813590506131e081614877565b92915050565b6000813590506131f58161488e565b92915050565b60008135905061320a816148a5565b92915050565b60008151905061321f816148a5565b92915050565b600082601f83011261323657600080fd5b81356132468482602086016130cc565b91505092915050565b600082601f83011261326057600080fd5b813561327084826020860161310a565b91505092915050565b600081359050613288816148bc565b92915050565b6000602082840312156132a057600080fd5b60006132ae84828501613148565b91505092915050565b600080604083850312156132ca57600080fd5b60006132d885828601613148565b92505060206132e985828601613148565b9150509250929050565b60008060006060848603121561330857600080fd5b600061331686828701613148565b935050602061332786828701613148565b925050604061333886828701613279565b9150509250925092565b6000806000806080858703121561335857600080fd5b600061336687828801613148565b945050602061337787828801613148565b935050604061338887828801613279565b925050606085013567ffffffffffffffff8111156133a557600080fd5b6133b187828801613225565b91505092959194509250565b600080600080606085870312156133d357600080fd5b60006133e187828801613148565b945050602085013567ffffffffffffffff8111156133fe57600080fd5b61340a87828801613187565b9350935050604061341d87828801613279565b91505092959194509250565b6000806040838503121561343c57600080fd5b600061344a85828601613148565b925050602061345b858286016131d1565b9150509250929050565b6000806040838503121561347857600080fd5b600061348685828601613148565b925050602061349785828601613279565b9150509250929050565b6000602082840312156134b357600080fd5b600082013567ffffffffffffffff8111156134cd57600080fd5b6134d98482850161315d565b91505092915050565b6000602082840312156134f457600080fd5b6000613502848285016131d1565b91505092915050565b60006020828403121561351d57600080fd5b600061352b848285016131e6565b91505092915050565b60006020828403121561354657600080fd5b6000613554848285016131fb565b91505092915050565b60006020828403121561356f57600080fd5b600061357d84828501613210565b91505092915050565b6000806040838503121561359957600080fd5b600083013567ffffffffffffffff8111156135b357600080fd5b6135bf8582860161324f565b92505060206135d0858286016131d1565b9150509250929050565b6000602082840312156135ec57600080fd5b60006135fa84828501613279565b91505092915050565b61360c81614533565b82525050565b61362361361e82614533565b61466e565b82525050565b61363281614545565b82525050565b60006136438261442a565b61364d8185614440565b935061365d8185602086016145c0565b6136668161477f565b840191505092915050565b600061367c82614435565b613686818561445c565b93506136968185602086016145c0565b61369f8161477f565b840191505092915050565b60006136b582614435565b6136bf818561446d565b93506136cf8185602086016145c0565b80840191505092915050565b600081546136e8816145f3565b6136f2818661446d565b9450600182166000811461370d576001811461371e57613751565b60ff19831686528186019350613751565b61372785614415565b60005b838110156137495781548189015260018201915060208101905061372a565b838801955050505b50505092915050565b6000613767601d8361445c565b91507f46463a20313020746f6b656e7320616c6c6f77656420746f206d696e740000006000830152602082019050919050565b60006137a760328361445c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061380d602a8361445c565b91507f4552433732313a2066726f6d2061646472657373206973206e6f74206f776e6560008301527f72206f6620746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061387360158361445c565b91507f46463a207265656e7472616e63792064656e69656400000000000000000000006000830152602082019050919050565b60006138b360158361445c565b91507f46463a206d696e74696e672069732070617573656400000000000000000000006000830152602082019050919050565b60006138f3604a8361446d565b91507f6261667962656964767a7866656a717a6c66746577787068727271766565337260008301527f36737866376d6636657464616a636f6177707a34736635687665342f7072657260208301527f657665616c2e6a736f6e000000000000000000000000000000000000000000006040830152604a82019050919050565b600061397f601f8361445c565b91507f4552433137333a2063616c6c6572206973206e6f7420746865206f776e6572006000830152602082019050919050565b60006139bf60238361445c565b91507f4552433732313a2063616e6e6f74206d696e7420746f207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a2560198361445c565b91507f46463a20696e76616c6964206d65726b6c652070726f6f662e000000000000006000830152602082019050919050565b6000613a6560148361445c565b91507f46463a20616c72656164792072657665616c65640000000000000000000000006000830152602082019050919050565b6000613aa560198361445c565b91507f46463a206d6178696d756d20746f6b656e73206d696e746564000000000000006000830152602082019050919050565b6000613ae560188361445c565b91507f46463a2043494420686173206e6f74206265656e2073657400000000000000006000830152602082019050919050565b6000613b2560198361445c565b91507f46463a206574686572207472616e73666572206661696c6564000000000000006000830152602082019050919050565b6000613b6560268361445c565b91507f4552433732313a2045524337323152656365697665722072656a65637465642060008301527f746f6b656e7300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bcb60148361445c565b91507f46463a2055524920686173206265656e207365740000000000000000000000006000830152602082019050919050565b6000613c0b60058361446d565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000613c4b60198361445c565b91507f46463a20746f6b656e204944206f7574206f662072616e6765000000000000006000830152602082019050919050565b6000613c8b60208361445c565b91507f4552433732313a2063616e6e6f7420617070726f766520746865206f776e65726000830152602082019050919050565b6000613ccb602b8361445c565b91507f4552433732313a2063616e6e6f74207472616e7366657220746f20746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d31601e8361445c565b91507f46463a2072657665616c2068617320616c7265616479206f63637572656400006000830152602082019050919050565b6000613d71601a8361445c565b91507f46463a2072657665616c2062617365206e6f74206c6f636b65640000000000006000830152602082019050919050565b6000613db1600083614451565b9150600082019050919050565b6000613dcb60178361445c565b91507f46463a2072657665616c2062617365206e6f74207365740000000000000000006000830152602082019050919050565b6000613e0b601d8361445c565b91507f4552433732313a20756e617574686f72697a6564207472616e736665720000006000830152602082019050919050565b6000613e4b601d8361445c565b91507f4552433732313a206d6178696d756d20746f6b656e73206d696e7465640000006000830152602082019050919050565b6000613e8b60018361446d565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613ec7816145a7565b82525050565b6000613ed98284613612565b60148201915081905092915050565b6000613ef482866136aa565b9150613f0082856136db565b9150613f0b82613e7e565b9150613f1782846136aa565b9150819050949350505050565b6000613f3082866136aa565b9150613f3c82856136db565b9150613f4782613e7e565b9150613f5382846136aa565b9150613f5e82613bfe565b9150819050949350505050565b6000613f7782846136aa565b9150613f82826138e6565b915081905092915050565b6000613f9882613da4565b9150819050919050565b6000602082019050613fb76000830184613603565b92915050565b6000606082019050613fd26000830186613603565b613fdf6020830185613603565b613fec6040830184613ebe565b949350505050565b60006080820190506140096000830187613603565b6140166020830186613603565b6140236040830185613ebe565b81810360608301526140358184613638565b905095945050505050565b60006020820190506140556000830184613629565b92915050565b600060208201905081810360008301526140758184613671565b905092915050565b600060208201905081810360008301526140968161375a565b9050919050565b600060208201905081810360008301526140b68161379a565b9050919050565b600060208201905081810360008301526140d681613800565b9050919050565b600060208201905081810360008301526140f681613866565b9050919050565b60006020820190508181036000830152614116816138a6565b9050919050565b6000602082019050818103600083015261413681613972565b9050919050565b60006020820190508181036000830152614156816139b2565b9050919050565b6000602082019050818103600083015261417681613a18565b9050919050565b6000602082019050818103600083015261419681613a58565b9050919050565b600060208201905081810360008301526141b681613a98565b9050919050565b600060208201905081810360008301526141d681613ad8565b9050919050565b600060208201905081810360008301526141f681613b18565b9050919050565b6000602082019050818103600083015261421681613b58565b9050919050565b6000602082019050818103600083015261423681613bbe565b9050919050565b6000602082019050818103600083015261425681613c3e565b9050919050565b6000602082019050818103600083015261427681613c7e565b9050919050565b6000602082019050818103600083015261429681613cbe565b9050919050565b600060208201905081810360008301526142b681613d24565b9050919050565b600060208201905081810360008301526142d681613d64565b9050919050565b600060208201905081810360008301526142f681613dbe565b9050919050565b6000602082019050818103600083015261431681613dfe565b9050919050565b6000602082019050818103600083015261433681613e3e565b9050919050565b60006020820190506143526000830184613ebe565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561437f5761437e614750565b5b8060405250919050565b600067ffffffffffffffff8211156143a4576143a3614750565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d0576143cf614750565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614400576143ff614750565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614483826145a7565b915061448e836145a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c3576144c26146c3565b5b828201905092915050565b60006144d9826145a7565b91506144e4836145a7565b9250826144f4576144f36146f2565b5b828204905092915050565b600061450a826145a7565b9150614515836145a7565b925082821015614528576145276146c3565b5b828203905092915050565b600061453e82614587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145de5780820151818401526020810190506145c3565b838111156145ed576000848401525b50505050565b6000600282049050600182168061460b57607f821691505b6020821081141561461f5761461e614721565b5b50919050565b6000614630826145a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614663576146626146c3565b5b600182019050919050565b600061467982614680565b9050919050565b600061468b82614790565b9050919050565b600061469d826145a7565b91506146a8836145a7565b9250826146b8576146b76146f2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156147ba5761485d565b60046000803e6147cb60005161479d565b6308c379a081146147dc575061485d565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156148085750505061485d565b808201805167ffffffffffffffff81111561482757505050505061485d565b8060208301013d85018111156148425750505050505061485d565b61484b8261477f565b60208401016040528296505050505050505b90565b61486981614533565b811461487457600080fd5b50565b61488081614545565b811461488b57600080fd5b50565b61489781614551565b81146148a257600080fd5b50565b6148ae8161455b565b81146148b957600080fd5b50565b6148c5816145a7565b81146148d057600080fd5b5056fea26469706673582212207c6dde5549ae86b242121d9cd3479770adccd005a9708a9392f65870cb67d11564736f6c63430008000033

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

0000000000000000000000001ca3242f4065b0e75278feba3fb304f73d19f7b17389adee2a47b157dfee50442490ffcf11853ac3ad1b81621d455481aa25c5a9

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x1CA3242f4065B0E75278FEba3fb304f73D19f7b1
Arg [1] : _merkleRoot (bytes32): 0x7389adee2a47b157dfee50442490ffcf11853ac3ad1b81621d455481aa25c5a9

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ca3242f4065b0e75278feba3fb304f73d19f7b1
Arg [1] : 7389adee2a47b157dfee50442490ffcf11853ac3ad1b81621d455481aa25c5a9


Loading...
Loading
Loading...
Loading
[ 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.