ETH Price: $2,492.78 (-1.00%)

Token

BlueWorld (BWRLD)
 

Overview

Max Total Supply

0 BWRLD

Holders

814

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 BWRLD
0x421d9cedf47ea245a1f31a1ddeace7eade7d4947
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:
BlueWorld

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-18
*/

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _setOwner(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721 is IERC165 {
    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 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    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 toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

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

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    mapping(uint256 => string) private _tokenURIs;

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721URIStorage: URI query for nonexistent token"
        );

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721URIStorage: URI set of nonexistent token"
        );
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

interface IAccessControl {
    event RoleAdminChanged(
        bytes32 indexed role,
        bytes32 indexed previousAdminRole,
        bytes32 indexed newAdminRole
    );

    event RoleGranted(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    event RoleRevoked(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    function hasRole(bytes32 role, address account)
        external
        view
        returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IAccessControl).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account)
        public
        view
        override
        returns (bool)
    {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account)
        public
        virtual
        override
        onlyRole(getRoleAdmin(role))
    {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account)
        public
        virtual
        override
        onlyRole(getRoleAdmin(role))
    {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account)
        public
        virtual
        override
    {
        require(
            account == _msgSender(),
            "AccessControl: can only renounce roles for self"
        );

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

contract BlueWorld is ERC721URIStorage, Ownable, AccessControl {
    bytes32 public constant PRE_SALE_ROLE = keccak256("PRE_SALE_ROLE");
    string private contractUri;
    string private baseUri;
    uint8 private platformRoyalty;
    address private proxyRegistryAddress;
    mapping(uint256 => uint256) tokenSalePrices;
    event TokenSold(
        uint256 tokenId,
        address from,
        address to,
        uint256 price,
        uint256 royaltyPaid
    );

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721, AccessControl)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    // Rinkeby proxy for OpenSea: 0xf57b2c51ded3a29e6891aba85459d600256cf317
    // Mainnet proxy for OpenSea: 0xa5409ec958c83c3f309868babaca7c86dcb077c1
    constructor(address _proxyRegistryAddress, address _proxyMinterAddress)
        ERC721("BlueWorld", "BWRLD")
    {
        contractUri = "https://api.blueworld.co/contract";
        baseUri = "https://api.blueworld.co/ipfs/";
        platformRoyalty = 5;
        proxyRegistryAddress = _proxyRegistryAddress;
        _setupRole(PRE_SALE_ROLE, _proxyMinterAddress);
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }

    function contractURI() public view returns (string memory) {
        return contractUri;
    }

    function setContractUri(string memory newUri) public onlyOwner {
        contractUri = newUri;
    }

    function _baseURI() internal view override returns (string memory) {
        return baseUri;
    }

    function setBaseUri(string memory newUri) public onlyOwner {
        baseUri = newUri;
    }

    function platformFee() public view returns (uint8) {
        return platformRoyalty;
    }

    function setPlatformFee(uint8 newFee) public onlyOwner {
        platformRoyalty = newFee;
    }

    function mintCompany(address to, uint256 tokenId) public {
        require(
            hasRole(PRE_SALE_ROLE, msg.sender) ||
                hasRole(DEFAULT_ADMIN_ROLE, msg.sender),
            "Access forbidden"
        );
        require(!_exists(tokenId), "Company has already been minted");
        _mint(to, tokenId);
    }

    function batchMintCompanies(address owner, uint256[] memory tokenIds)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(!_exists(tokenIds[i]), "Company has already been minted");
            _mint(owner, tokenIds[i]);
        }
    }

    function mergeTokens(
        uint256 token1,
        uint256 token2,
        uint256 newToken
    ) public {
        require(
            _exists(token1) && _exists(token2),
            "One of the companies does not exist."
        );
        require(
            ownerOf(token1) == _msgSender() && ownerOf(token2) == _msgSender(),
            "You are not owner of one of the companies"
        );
        require(!_exists(newToken), "Company with new token ID already exists");
        _burn(token1);
        _burn(token2);
        _mint(_msgSender(), newToken);
    }

    function putTokenOnSale(uint256 tokenId, uint256 value) public {
        require(
            ownerOf(tokenId) == _msgSender(),
            "You are not the owner of this company"
        );
        tokenSalePrices[tokenId] = value;
    }

    function getCompanySalePrice(uint256 tokenId)
        public
        view
        returns (uint256)
    {
        require(_exists(tokenId), "Token does not exist");
        require(tokenSalePrices[tokenId] > 0, "Token is not on sale");
        return tokenSalePrices[tokenId];
    }

    function buyTokenFromSale(uint256 tokenId) public payable {
        require(_exists(tokenId), "Token does not exist");
        require(tokenSalePrices[tokenId] > 0, "Token is not on sale");
        require(
            msg.value == tokenSalePrices[tokenId],
            "Please provide sufficient ETH to purchase this company"
        );
        uint256 royalty = ((msg.value * platformRoyalty) / 100);
        payable(owner()).transfer(royalty);
        payable(ownerOf(tokenId)).transfer(msg.value - royalty);
        _transfer(ownerOf(tokenId), _msgSender(), tokenId);
        emit TokenSold(
            tokenId,
            ownerOf(tokenId),
            _msgSender(),
            msg.value,
            royalty
        );
    }

    function removeTokenFromSale(uint256 tokenId) public {
        require(_exists(tokenId), "Token does not exist");
        require(tokenSalePrices[tokenId] > 0, "Token is not on sale");
        require(
            ownerOf(tokenId) == _msgSender(),
            "You are not the owner of this company"
        );
        tokenSalePrices[tokenId] = 0;
    }

    function isApprovedForAll(address _owner, address _operator)
        public
        view
        override
        returns (bool isOperator)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == _operator) {
            return true;
        }
        return isApprovedForAll(_owner, _operator);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override {
        super._beforeTokenTransfer(from, to, tokenId);
        if (tokenSalePrices[tokenId] > 0) {
            tokenSalePrices[tokenId] = 0;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"},{"internalType":"address","name":"_proxyMinterAddress","type":"address"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"royaltyPaid","type":"uint256"}],"name":"TokenSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","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":"address","name":"owner","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchMintCompanies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyTokenFromSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCompanySalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"newToken","type":"uint256"}],"name":"mergeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintCompany","outputs":[],"stateMutability":"nonpayable","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":"platformFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"putTokenOnSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"removeTokenFromSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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"}]

60806040523480156200001157600080fd5b5060405162002f9438038062002f9483398101604081905262000034916200035f565b6040805180820182526009815268109b1d5955dbdc9b1960ba1b6020808301918252835180850190945260058452641095d4931160da1b90840152815191929162000082916000916200029c565b508051620000989060019060208401906200029c565b505050620000b5620000af6200019260201b60201c565b62000196565b60405180606001604052806021815260200162002f73602191398051620000e5916009916020909101906200029c565b5060408051808201909152601e8082527f68747470733a2f2f6170692e626c7565776f726c642e636f2f697066732f000060209092019182526200012c91600a916200029c565b50600b80546001600160a01b038416610100026001600160a81b03199091161760051790556200017d7f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316582620001e8565b6200018a600033620001e8565b5050620003d4565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001f48282620001f8565b5050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16620001f45760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002583390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b828054620002aa9062000397565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b80516001600160a01b03811681146200035a57600080fd5b919050565b600080604083850312156200037357600080fd5b6200037e8362000342565b91506200038e6020840162000342565b90509250929050565b600181811c90821680620003ac57607f821691505b60208210811415620003ce57634e487b7160e01b600052602260045260246000fd5b50919050565b612b8f80620003e46000396000f3fe6080604052600436106102045760003560e01c8063720093e411610118578063b88d4fde116100a0578063e8376eb01161006f578063e8376eb01461060b578063e8a3d4851461061e578063e8cdea1114610633578063e985e9c514610653578063f2fde38b1461067357600080fd5b8063b88d4fde1461058b578063c87b56dd146105ab578063ccb4807b146105cb578063d547741f146105eb57600080fd5b806391d14854116100e757806391d148541461050157806395d89b4114610521578063a0bcfc7f14610536578063a217fddf14610556578063a22cb4651461056b57600080fd5b8063720093e4146104835780637836a925146104a35780638042853f146104c35780638da5cb5b146104e357600080fd5b80632f2ff15d1161019b5780636352211e1161016a5780636352211e146103ee57806365af37981461040e5780636ce3f6871461042e57806370a082311461044e578063715018a61461046e57600080fd5b80632f2ff15d1461035a57806336568abe1461037a57806337754d9a1461039a57806342842e0e146103ce57600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806323b872dd146102da578063248a9ca3146102fa57806326232a2e1461033857600080fd5b806301ffc9a714610209578063068da6571461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046125ec565b610693565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e61025936600461248d565b6106a4565b005b34801561026c57600080fd5b5061027561078c565b604051610235919061280a565b34801561028e57600080fd5b506102a261029d3660046125ae565b61081e565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d5366004612582565b6108a6565b3480156102e657600080fd5b5061025e6102f53660046123cc565b6109b7565b34801561030657600080fd5b5061032a6103153660046125ae565b60009081526008602052604090206001015490565b604051908152602001610235565b34801561034457600080fd5b50600b5460405160ff9091168152602001610235565b34801561036657600080fd5b5061025e6103753660046125c7565b6109e8565b34801561038657600080fd5b5061025e6103953660046125c7565b610a0e565b3480156103a657600080fd5b5061032a7f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316581565b3480156103da57600080fd5b5061025e6103e93660046123cc565b610a8c565b3480156103fa57600080fd5b506102a26104093660046125ae565b610aa7565b34801561041a57600080fd5b5061025e61042936600461268c565b610b1e565b34801561043a57600080fd5b5061032a6104493660046125ae565b610b60565b34801561045a57600080fd5b5061032a610469366004612376565b610bc5565b34801561047a57600080fd5b5061025e610c4c565b34801561048f57600080fd5b5061025e61049e366004612582565b610c82565b3480156104af57600080fd5b5061025e6104be3660046126ae565b610d5c565b3480156104cf57600080fd5b5061025e6104de3660046126da565b610ede565b3480156104ef57600080fd5b506007546001600160a01b03166102a2565b34801561050d57600080fd5b5061022961051c3660046125c7565b610f1e565b34801561052d57600080fd5b50610275610f49565b34801561054257600080fd5b5061025e610551366004612643565b610f58565b34801561056257600080fd5b5061032a600081565b34801561057757600080fd5b5061025e61058636600461254f565b610f95565b34801561059757600080fd5b5061025e6105a636600461240d565b61105a565b3480156105b757600080fd5b506102756105c63660046125ae565b611092565b3480156105d757600080fd5b5061025e6105e6366004612643565b6111fc565b3480156105f757600080fd5b5061025e6106063660046125c7565b611239565b61025e6106193660046125ae565b61125f565b34801561062a57600080fd5b50610275611456565b34801561063f57600080fd5b5061025e61064e3660046125ae565b611465565b34801561065f57600080fd5b5061022961066e366004612393565b6114f6565b34801561067f57600080fd5b5061025e61068e366004612376565b6115a3565b600061069e8261163e565b92915050565b6007546001600160a01b031633146106d75760405162461bcd60e51b81526004016106ce9061289d565b60405180910390fd5b60005b8151811015610787576107058282815181106106f8576106f8612b02565b6020026020010151611663565b156107525760405162461bcd60e51b815260206004820152601f60248201527f436f6d70616e792068617320616c7265616479206265656e206d696e7465640060448201526064016106ce565b6107758383838151811061076857610768612b02565b6020026020010151611680565b8061077f81612aa7565b9150506106da565b505050565b60606000805461079b90612a6c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612a6c565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050505050905090565b600061082982611663565b61088a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ce565b506000908152600460205260409020546001600160a01b031690565b60006108b182610aa7565b9050806001600160a01b0316836001600160a01b0316141561091f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ce565b336001600160a01b038216148061093b575061093b81336114f6565b6109ad5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ce565b61078783836117bf565b6109c1338261182d565b6109dd5760405162461bcd60e51b81526004016106ce90612917565b6107878383836118ef565b600082815260086020526040902060010154610a048133611a9a565b6107878383611afe565b6001600160a01b0381163314610a7e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ce565b610a888282611b84565b5050565b6107878383836040518060200160405280600081525061105a565b6000818152600260205260408120546001600160a01b03168061069e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ce565b33610b2883610aa7565b6001600160a01b031614610b4e5760405162461bcd60e51b81526004016106ce906128d2565b6000918252600c602052604090912055565b6000610b6b82611663565b610b875760405162461bcd60e51b81526004016106ce9061286f565b6000828152600c6020526040902054610bb25760405162461bcd60e51b81526004016106ce90612968565b506000908152600c602052604090205490565b60006001600160a01b038216610c305760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ce565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c765760405162461bcd60e51b81526004016106ce9061289d565b610c806000611beb565b565b610cac7f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316533610f1e565b80610cbd5750610cbd600033610f1e565b610cfc5760405162461bcd60e51b815260206004820152601060248201526f20b1b1b2b9b9903337b93134b23232b760811b60448201526064016106ce565b610d0581611663565b15610d525760405162461bcd60e51b815260206004820152601f60248201527f436f6d70616e792068617320616c7265616479206265656e206d696e7465640060448201526064016106ce565b610a888282611680565b610d6583611663565b8015610d755750610d7582611663565b610dcd5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f662074686520636f6d70616e69657320646f6573206e6f7420657860448201526334b9ba1760e11b60648201526084016106ce565b33610dd784610aa7565b6001600160a01b0316148015610dfd575033610df283610aa7565b6001600160a01b0316145b610e5b5760405162461bcd60e51b815260206004820152602960248201527f596f7520617265206e6f74206f776e6572206f66206f6e65206f662074686520604482015268636f6d70616e69657360b81b60648201526084016106ce565b610e6481611663565b15610ec25760405162461bcd60e51b815260206004820152602860248201527f436f6d70616e792077697468206e657720746f6b656e20494420616c72656164604482015267792065786973747360c01b60648201526084016106ce565b610ecb83611c3d565b610ed482611c3d565b6107873382611680565b6007546001600160a01b03163314610f085760405162461bcd60e51b81526004016106ce9061289d565b600b805460ff191660ff92909216919091179055565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606001805461079b90612a6c565b6007546001600160a01b03163314610f825760405162461bcd60e51b81526004016106ce9061289d565b8051610a8890600a90602084019061224f565b6001600160a01b038216331415610fee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ce565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611064338361182d565b6110805760405162461bcd60e51b81526004016106ce90612917565b61108c84848484611c7d565b50505050565b606061109d82611663565b6111035760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016106ce565b6000828152600660205260408120805461111c90612a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461114890612a6c565b80156111955780601f1061116a57610100808354040283529160200191611195565b820191906000526020600020905b81548152906001019060200180831161117857829003601f168201915b5050505050905060006111a6611cb0565b90508051600014156111b9575092915050565b8151156111eb5780826040516020016111d3929190612729565b60405160208183030381529060405292505050919050565b6111f484611cbf565b949350505050565b6007546001600160a01b031633146112265760405162461bcd60e51b81526004016106ce9061289d565b8051610a8890600990602084019061224f565b6000828152600860205260409020600101546112558133611a9a565b6107878383611b84565b61126881611663565b6112845760405162461bcd60e51b81526004016106ce9061286f565b6000818152600c60205260409020546112af5760405162461bcd60e51b81526004016106ce90612968565b6000818152600c6020526040902054341461132b5760405162461bcd60e51b815260206004820152603660248201527f506c656173652070726f766964652073756666696369656e742045544820746f604482015275207075726368617365207468697320636f6d70616e7960501b60648201526084016106ce565b600b546000906064906113419060ff16346129f3565b61134b91906129df565b905061135f6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611397573d6000803e3d6000fd5b506113a182610aa7565b6001600160a01b03166108fc6113b78334612a12565b6040518115909202916000818181858888f193505050501580156113df573d6000803e3d6000fd5b506113f36113ec83610aa7565b33846118ef565b7fa831d161ab34fd077c450edfeeac91cd8cc4e1d8a3b07930cf05bf9c0a23d83e8261141e84610aa7565b604080519283526001600160a01b03919091166020830152338282015234606083015260808201849052519081900360a00190a15050565b60606009805461079b90612a6c565b61146e81611663565b61148a5760405162461bcd60e51b81526004016106ce9061286f565b6000818152600c60205260409020546114b55760405162461bcd60e51b81526004016106ce90612968565b336114bf82610aa7565b6001600160a01b0316146114e55760405162461bcd60e51b81526004016106ce906128d2565b6000908152600c6020526040812055565b600b5460405163c455279160e01b81526001600160a01b038481166004830152600092610100900481169190841690829063c45527919060240160206040518083038186803b15801561154857600080fd5b505afa15801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612626565b6001600160a01b0316141561159957600191505061069e565b6111f484846114f6565b6007546001600160a01b031633146115cd5760405162461bcd60e51b81526004016106ce9061289d565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ce565b61163b81611beb565b50565b60006001600160e01b03198216637965db0b60e01b148061069e575061069e82611d8a565b6000908152600260205260409020546001600160a01b0316151590565b6001600160a01b0382166116d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ce565b6116df81611663565b1561172c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ce565b61173860008383611dda565b6001600160a01b03821660009081526003602052604081208054600192906117619084906129c7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117f482610aa7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061183882611663565b6118995760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ce565b60006118a483610aa7565b9050806001600160a01b0316846001600160a01b031614806118df5750836001600160a01b03166118d48461081e565b6001600160a01b0316145b806111f457506111f481856114f6565b826001600160a01b031661190282610aa7565b6001600160a01b03161461196a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106ce565b6001600160a01b0382166119cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ce565b6119d7838383611dda565b6119e26000826117bf565b6001600160a01b0383166000908152600360205260408120805460019290611a0b908490612a12565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a399084906129c7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611aa48282610f1e565b610a8857611abc816001600160a01b03166014611e01565b611ac7836020611e01565b604051602001611ad8929190612758565b60408051601f198184030181529082905262461bcd60e51b82526106ce9160040161280a565b611b088282610f1e565b610a885760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b403390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611b8e8282610f1e565b15610a885760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611c4681611f9d565b60008181526006602052604090208054611c5f90612a6c565b15905061163b57600081815260066020526040812061163b916122d3565b611c888484846118ef565b611c9484848484612044565b61108c5760405162461bcd60e51b81526004016106ce9061281d565b6060600a805461079b90612a6c565b6060611cca82611663565b611d2e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106ce565b6000611d38611cb0565b90506000815111611d585760405180602001604052806000815250611d83565b80611d6284612151565b604051602001611d73929190612729565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982166380ac58cd60e01b1480611dbb57506001600160e01b03198216635b5e139f60e01b145b8061069e57506301ffc9a760e01b6001600160e01b031983161461069e565b6000818152600c602052604090205415610787576000908152600c60205260408120555050565b60606000611e108360026129f3565b611e1b9060026129c7565b67ffffffffffffffff811115611e3357611e33612b18565b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b509050600360fc1b81600081518110611e7857611e78612b02565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ea757611ea7612b02565b60200101906001600160f81b031916908160001a9053506000611ecb8460026129f3565b611ed69060016129c7565b90505b6001811115611f4e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611f0a57611f0a612b02565b1a60f81b828281518110611f2057611f20612b02565b60200101906001600160f81b031916908160001a90535060049490941c93611f4781612a55565b9050611ed9565b508315611d835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ce565b6000611fa882610aa7565b9050611fb681600084611dda565b611fc16000836117bf565b6001600160a01b0381166000908152600360205260408120805460019290611fea908490612a12565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561214657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120889033908990889088906004016127cd565b602060405180830381600087803b1580156120a257600080fd5b505af19250505080156120d2575060408051601f3d908101601f191682019092526120cf91810190612609565b60015b61212c573d808015612100576040519150601f19603f3d011682016040523d82523d6000602084013e612105565b606091505b5080516121245760405162461bcd60e51b81526004016106ce9061281d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111f4565b506001949350505050565b6060816121755750506040805180820190915260018152600360fc1b602082015290565b8160005b811561219f578061218981612aa7565b91506121989050600a836129df565b9150612179565b60008167ffffffffffffffff8111156121ba576121ba612b18565b6040519080825280601f01601f1916602001820160405280156121e4576020820181803683370190505b5090505b84156111f4576121f9600183612a12565b9150612206600a86612ac2565b6122119060306129c7565b60f81b81838151811061222657612226612b02565b60200101906001600160f81b031916908160001a905350612248600a866129df565b94506121e8565b82805461225b90612a6c565b90600052602060002090601f01602090048101928261227d57600085556122c3565b82601f1061229657805160ff19168380011785556122c3565b828001600101855582156122c3579182015b828111156122c35782518255916020019190600101906122a8565b506122cf929150612309565b5090565b5080546122df90612a6c565b6000825580601f106122ef575050565b601f01602090049060005260206000209081019061163b91905b5b808211156122cf576000815560010161230a565b600067ffffffffffffffff83111561233857612338612b18565b61234b601f8401601f1916602001612996565b905082815283838301111561235f57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561238857600080fd5b8135611d8381612b2e565b600080604083850312156123a657600080fd5b82356123b181612b2e565b915060208301356123c181612b2e565b809150509250929050565b6000806000606084860312156123e157600080fd5b83356123ec81612b2e565b925060208401356123fc81612b2e565b929592945050506040919091013590565b6000806000806080858703121561242357600080fd5b843561242e81612b2e565b9350602085013561243e81612b2e565b925060408501359150606085013567ffffffffffffffff81111561246157600080fd5b8501601f8101871361247257600080fd5b6124818782356020840161231e565b91505092959194509250565b600080604083850312156124a057600080fd5b82356124ab81612b2e565b915060208381013567ffffffffffffffff808211156124c957600080fd5b818601915086601f8301126124dd57600080fd5b8135818111156124ef576124ef612b18565b8060051b9150612500848301612996565b8181528481019084860184860187018b101561251b57600080fd5b600095505b8386101561253e578035835260019590950194918601918601612520565b508096505050505050509250929050565b6000806040838503121561256257600080fd5b823561256d81612b2e565b9150602083013580151581146123c157600080fd5b6000806040838503121561259557600080fd5b82356125a081612b2e565b946020939093013593505050565b6000602082840312156125c057600080fd5b5035919050565b600080604083850312156125da57600080fd5b8235915060208301356123c181612b2e565b6000602082840312156125fe57600080fd5b8135611d8381612b43565b60006020828403121561261b57600080fd5b8151611d8381612b43565b60006020828403121561263857600080fd5b8151611d8381612b2e565b60006020828403121561265557600080fd5b813567ffffffffffffffff81111561266c57600080fd5b8201601f8101841361267d57600080fd5b6111f48482356020840161231e565b6000806040838503121561269f57600080fd5b50508035926020909101359150565b6000806000606084860312156126c357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156126ec57600080fd5b813560ff81168114611d8357600080fd5b60008151808452612715816020860160208601612a29565b601f01601f19169290920160200192915050565b6000835161273b818460208801612a29565b83519083019061274f818360208801612a29565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612790816017850160208801612a29565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516127c1816028840160208801612a29565b01602801949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612800908301846126fd565b9695505050505050565b602081526000611d8360208301846126fd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320636f6040820152646d70616e7960d81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260149082015273546f6b656e206973206e6f74206f6e2073616c6560601b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156129bf576129bf612b18565b604052919050565b600082198211156129da576129da612ad6565b500190565b6000826129ee576129ee612aec565b500490565b6000816000190483118215151615612a0d57612a0d612ad6565b500290565b600082821015612a2457612a24612ad6565b500390565b60005b83811015612a44578181015183820152602001612a2c565b8381111561108c5750506000910152565b600081612a6457612a64612ad6565b506000190190565b600181811c90821680612a8057607f821691505b60208210811415612aa157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612abb57612abb612ad6565b5060010190565b600082612ad157612ad1612aec565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461163b57600080fd5b6001600160e01b03198116811461163b57600080fdfea264697066735822122043cacffb993018e69efe8cda8a372bf95dc30e195e08c7c10a23c215bbc54d7164736f6c6343000807003368747470733a2f2f6170692e626c7565776f726c642e636f2f636f6e7472616374000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000e7db292e6f178cb3d54c1f5032d7f5fed1c2d901

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063720093e411610118578063b88d4fde116100a0578063e8376eb01161006f578063e8376eb01461060b578063e8a3d4851461061e578063e8cdea1114610633578063e985e9c514610653578063f2fde38b1461067357600080fd5b8063b88d4fde1461058b578063c87b56dd146105ab578063ccb4807b146105cb578063d547741f146105eb57600080fd5b806391d14854116100e757806391d148541461050157806395d89b4114610521578063a0bcfc7f14610536578063a217fddf14610556578063a22cb4651461056b57600080fd5b8063720093e4146104835780637836a925146104a35780638042853f146104c35780638da5cb5b146104e357600080fd5b80632f2ff15d1161019b5780636352211e1161016a5780636352211e146103ee57806365af37981461040e5780636ce3f6871461042e57806370a082311461044e578063715018a61461046e57600080fd5b80632f2ff15d1461035a57806336568abe1461037a57806337754d9a1461039a57806342842e0e146103ce57600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806323b872dd146102da578063248a9ca3146102fa57806326232a2e1461033857600080fd5b806301ffc9a714610209578063068da6571461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046125ec565b610693565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e61025936600461248d565b6106a4565b005b34801561026c57600080fd5b5061027561078c565b604051610235919061280a565b34801561028e57600080fd5b506102a261029d3660046125ae565b61081e565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d5366004612582565b6108a6565b3480156102e657600080fd5b5061025e6102f53660046123cc565b6109b7565b34801561030657600080fd5b5061032a6103153660046125ae565b60009081526008602052604090206001015490565b604051908152602001610235565b34801561034457600080fd5b50600b5460405160ff9091168152602001610235565b34801561036657600080fd5b5061025e6103753660046125c7565b6109e8565b34801561038657600080fd5b5061025e6103953660046125c7565b610a0e565b3480156103a657600080fd5b5061032a7f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316581565b3480156103da57600080fd5b5061025e6103e93660046123cc565b610a8c565b3480156103fa57600080fd5b506102a26104093660046125ae565b610aa7565b34801561041a57600080fd5b5061025e61042936600461268c565b610b1e565b34801561043a57600080fd5b5061032a6104493660046125ae565b610b60565b34801561045a57600080fd5b5061032a610469366004612376565b610bc5565b34801561047a57600080fd5b5061025e610c4c565b34801561048f57600080fd5b5061025e61049e366004612582565b610c82565b3480156104af57600080fd5b5061025e6104be3660046126ae565b610d5c565b3480156104cf57600080fd5b5061025e6104de3660046126da565b610ede565b3480156104ef57600080fd5b506007546001600160a01b03166102a2565b34801561050d57600080fd5b5061022961051c3660046125c7565b610f1e565b34801561052d57600080fd5b50610275610f49565b34801561054257600080fd5b5061025e610551366004612643565b610f58565b34801561056257600080fd5b5061032a600081565b34801561057757600080fd5b5061025e61058636600461254f565b610f95565b34801561059757600080fd5b5061025e6105a636600461240d565b61105a565b3480156105b757600080fd5b506102756105c63660046125ae565b611092565b3480156105d757600080fd5b5061025e6105e6366004612643565b6111fc565b3480156105f757600080fd5b5061025e6106063660046125c7565b611239565b61025e6106193660046125ae565b61125f565b34801561062a57600080fd5b50610275611456565b34801561063f57600080fd5b5061025e61064e3660046125ae565b611465565b34801561065f57600080fd5b5061022961066e366004612393565b6114f6565b34801561067f57600080fd5b5061025e61068e366004612376565b6115a3565b600061069e8261163e565b92915050565b6007546001600160a01b031633146106d75760405162461bcd60e51b81526004016106ce9061289d565b60405180910390fd5b60005b8151811015610787576107058282815181106106f8576106f8612b02565b6020026020010151611663565b156107525760405162461bcd60e51b815260206004820152601f60248201527f436f6d70616e792068617320616c7265616479206265656e206d696e7465640060448201526064016106ce565b6107758383838151811061076857610768612b02565b6020026020010151611680565b8061077f81612aa7565b9150506106da565b505050565b60606000805461079b90612a6c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612a6c565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050505050905090565b600061082982611663565b61088a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ce565b506000908152600460205260409020546001600160a01b031690565b60006108b182610aa7565b9050806001600160a01b0316836001600160a01b0316141561091f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ce565b336001600160a01b038216148061093b575061093b81336114f6565b6109ad5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ce565b61078783836117bf565b6109c1338261182d565b6109dd5760405162461bcd60e51b81526004016106ce90612917565b6107878383836118ef565b600082815260086020526040902060010154610a048133611a9a565b6107878383611afe565b6001600160a01b0381163314610a7e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ce565b610a888282611b84565b5050565b6107878383836040518060200160405280600081525061105a565b6000818152600260205260408120546001600160a01b03168061069e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ce565b33610b2883610aa7565b6001600160a01b031614610b4e5760405162461bcd60e51b81526004016106ce906128d2565b6000918252600c602052604090912055565b6000610b6b82611663565b610b875760405162461bcd60e51b81526004016106ce9061286f565b6000828152600c6020526040902054610bb25760405162461bcd60e51b81526004016106ce90612968565b506000908152600c602052604090205490565b60006001600160a01b038216610c305760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ce565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c765760405162461bcd60e51b81526004016106ce9061289d565b610c806000611beb565b565b610cac7f413b964388ffbef8da45753e2ce53bd2bcc66055e28876253fbd02817f2b316533610f1e565b80610cbd5750610cbd600033610f1e565b610cfc5760405162461bcd60e51b815260206004820152601060248201526f20b1b1b2b9b9903337b93134b23232b760811b60448201526064016106ce565b610d0581611663565b15610d525760405162461bcd60e51b815260206004820152601f60248201527f436f6d70616e792068617320616c7265616479206265656e206d696e7465640060448201526064016106ce565b610a888282611680565b610d6583611663565b8015610d755750610d7582611663565b610dcd5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f662074686520636f6d70616e69657320646f6573206e6f7420657860448201526334b9ba1760e11b60648201526084016106ce565b33610dd784610aa7565b6001600160a01b0316148015610dfd575033610df283610aa7565b6001600160a01b0316145b610e5b5760405162461bcd60e51b815260206004820152602960248201527f596f7520617265206e6f74206f776e6572206f66206f6e65206f662074686520604482015268636f6d70616e69657360b81b60648201526084016106ce565b610e6481611663565b15610ec25760405162461bcd60e51b815260206004820152602860248201527f436f6d70616e792077697468206e657720746f6b656e20494420616c72656164604482015267792065786973747360c01b60648201526084016106ce565b610ecb83611c3d565b610ed482611c3d565b6107873382611680565b6007546001600160a01b03163314610f085760405162461bcd60e51b81526004016106ce9061289d565b600b805460ff191660ff92909216919091179055565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606001805461079b90612a6c565b6007546001600160a01b03163314610f825760405162461bcd60e51b81526004016106ce9061289d565b8051610a8890600a90602084019061224f565b6001600160a01b038216331415610fee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ce565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611064338361182d565b6110805760405162461bcd60e51b81526004016106ce90612917565b61108c84848484611c7d565b50505050565b606061109d82611663565b6111035760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016106ce565b6000828152600660205260408120805461111c90612a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461114890612a6c565b80156111955780601f1061116a57610100808354040283529160200191611195565b820191906000526020600020905b81548152906001019060200180831161117857829003601f168201915b5050505050905060006111a6611cb0565b90508051600014156111b9575092915050565b8151156111eb5780826040516020016111d3929190612729565b60405160208183030381529060405292505050919050565b6111f484611cbf565b949350505050565b6007546001600160a01b031633146112265760405162461bcd60e51b81526004016106ce9061289d565b8051610a8890600990602084019061224f565b6000828152600860205260409020600101546112558133611a9a565b6107878383611b84565b61126881611663565b6112845760405162461bcd60e51b81526004016106ce9061286f565b6000818152600c60205260409020546112af5760405162461bcd60e51b81526004016106ce90612968565b6000818152600c6020526040902054341461132b5760405162461bcd60e51b815260206004820152603660248201527f506c656173652070726f766964652073756666696369656e742045544820746f604482015275207075726368617365207468697320636f6d70616e7960501b60648201526084016106ce565b600b546000906064906113419060ff16346129f3565b61134b91906129df565b905061135f6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611397573d6000803e3d6000fd5b506113a182610aa7565b6001600160a01b03166108fc6113b78334612a12565b6040518115909202916000818181858888f193505050501580156113df573d6000803e3d6000fd5b506113f36113ec83610aa7565b33846118ef565b7fa831d161ab34fd077c450edfeeac91cd8cc4e1d8a3b07930cf05bf9c0a23d83e8261141e84610aa7565b604080519283526001600160a01b03919091166020830152338282015234606083015260808201849052519081900360a00190a15050565b60606009805461079b90612a6c565b61146e81611663565b61148a5760405162461bcd60e51b81526004016106ce9061286f565b6000818152600c60205260409020546114b55760405162461bcd60e51b81526004016106ce90612968565b336114bf82610aa7565b6001600160a01b0316146114e55760405162461bcd60e51b81526004016106ce906128d2565b6000908152600c6020526040812055565b600b5460405163c455279160e01b81526001600160a01b038481166004830152600092610100900481169190841690829063c45527919060240160206040518083038186803b15801561154857600080fd5b505afa15801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612626565b6001600160a01b0316141561159957600191505061069e565b6111f484846114f6565b6007546001600160a01b031633146115cd5760405162461bcd60e51b81526004016106ce9061289d565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ce565b61163b81611beb565b50565b60006001600160e01b03198216637965db0b60e01b148061069e575061069e82611d8a565b6000908152600260205260409020546001600160a01b0316151590565b6001600160a01b0382166116d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ce565b6116df81611663565b1561172c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ce565b61173860008383611dda565b6001600160a01b03821660009081526003602052604081208054600192906117619084906129c7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117f482610aa7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061183882611663565b6118995760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ce565b60006118a483610aa7565b9050806001600160a01b0316846001600160a01b031614806118df5750836001600160a01b03166118d48461081e565b6001600160a01b0316145b806111f457506111f481856114f6565b826001600160a01b031661190282610aa7565b6001600160a01b03161461196a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106ce565b6001600160a01b0382166119cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ce565b6119d7838383611dda565b6119e26000826117bf565b6001600160a01b0383166000908152600360205260408120805460019290611a0b908490612a12565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a399084906129c7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611aa48282610f1e565b610a8857611abc816001600160a01b03166014611e01565b611ac7836020611e01565b604051602001611ad8929190612758565b60408051601f198184030181529082905262461bcd60e51b82526106ce9160040161280a565b611b088282610f1e565b610a885760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b403390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611b8e8282610f1e565b15610a885760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611c4681611f9d565b60008181526006602052604090208054611c5f90612a6c565b15905061163b57600081815260066020526040812061163b916122d3565b611c888484846118ef565b611c9484848484612044565b61108c5760405162461bcd60e51b81526004016106ce9061281d565b6060600a805461079b90612a6c565b6060611cca82611663565b611d2e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106ce565b6000611d38611cb0565b90506000815111611d585760405180602001604052806000815250611d83565b80611d6284612151565b604051602001611d73929190612729565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982166380ac58cd60e01b1480611dbb57506001600160e01b03198216635b5e139f60e01b145b8061069e57506301ffc9a760e01b6001600160e01b031983161461069e565b6000818152600c602052604090205415610787576000908152600c60205260408120555050565b60606000611e108360026129f3565b611e1b9060026129c7565b67ffffffffffffffff811115611e3357611e33612b18565b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b509050600360fc1b81600081518110611e7857611e78612b02565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ea757611ea7612b02565b60200101906001600160f81b031916908160001a9053506000611ecb8460026129f3565b611ed69060016129c7565b90505b6001811115611f4e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611f0a57611f0a612b02565b1a60f81b828281518110611f2057611f20612b02565b60200101906001600160f81b031916908160001a90535060049490941c93611f4781612a55565b9050611ed9565b508315611d835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ce565b6000611fa882610aa7565b9050611fb681600084611dda565b611fc16000836117bf565b6001600160a01b0381166000908152600360205260408120805460019290611fea908490612a12565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561214657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120889033908990889088906004016127cd565b602060405180830381600087803b1580156120a257600080fd5b505af19250505080156120d2575060408051601f3d908101601f191682019092526120cf91810190612609565b60015b61212c573d808015612100576040519150601f19603f3d011682016040523d82523d6000602084013e612105565b606091505b5080516121245760405162461bcd60e51b81526004016106ce9061281d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111f4565b506001949350505050565b6060816121755750506040805180820190915260018152600360fc1b602082015290565b8160005b811561219f578061218981612aa7565b91506121989050600a836129df565b9150612179565b60008167ffffffffffffffff8111156121ba576121ba612b18565b6040519080825280601f01601f1916602001820160405280156121e4576020820181803683370190505b5090505b84156111f4576121f9600183612a12565b9150612206600a86612ac2565b6122119060306129c7565b60f81b81838151811061222657612226612b02565b60200101906001600160f81b031916908160001a905350612248600a866129df565b94506121e8565b82805461225b90612a6c565b90600052602060002090601f01602090048101928261227d57600085556122c3565b82601f1061229657805160ff19168380011785556122c3565b828001600101855582156122c3579182015b828111156122c35782518255916020019190600101906122a8565b506122cf929150612309565b5090565b5080546122df90612a6c565b6000825580601f106122ef575050565b601f01602090049060005260206000209081019061163b91905b5b808211156122cf576000815560010161230a565b600067ffffffffffffffff83111561233857612338612b18565b61234b601f8401601f1916602001612996565b905082815283838301111561235f57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561238857600080fd5b8135611d8381612b2e565b600080604083850312156123a657600080fd5b82356123b181612b2e565b915060208301356123c181612b2e565b809150509250929050565b6000806000606084860312156123e157600080fd5b83356123ec81612b2e565b925060208401356123fc81612b2e565b929592945050506040919091013590565b6000806000806080858703121561242357600080fd5b843561242e81612b2e565b9350602085013561243e81612b2e565b925060408501359150606085013567ffffffffffffffff81111561246157600080fd5b8501601f8101871361247257600080fd5b6124818782356020840161231e565b91505092959194509250565b600080604083850312156124a057600080fd5b82356124ab81612b2e565b915060208381013567ffffffffffffffff808211156124c957600080fd5b818601915086601f8301126124dd57600080fd5b8135818111156124ef576124ef612b18565b8060051b9150612500848301612996565b8181528481019084860184860187018b101561251b57600080fd5b600095505b8386101561253e578035835260019590950194918601918601612520565b508096505050505050509250929050565b6000806040838503121561256257600080fd5b823561256d81612b2e565b9150602083013580151581146123c157600080fd5b6000806040838503121561259557600080fd5b82356125a081612b2e565b946020939093013593505050565b6000602082840312156125c057600080fd5b5035919050565b600080604083850312156125da57600080fd5b8235915060208301356123c181612b2e565b6000602082840312156125fe57600080fd5b8135611d8381612b43565b60006020828403121561261b57600080fd5b8151611d8381612b43565b60006020828403121561263857600080fd5b8151611d8381612b2e565b60006020828403121561265557600080fd5b813567ffffffffffffffff81111561266c57600080fd5b8201601f8101841361267d57600080fd5b6111f48482356020840161231e565b6000806040838503121561269f57600080fd5b50508035926020909101359150565b6000806000606084860312156126c357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156126ec57600080fd5b813560ff81168114611d8357600080fd5b60008151808452612715816020860160208601612a29565b601f01601f19169290920160200192915050565b6000835161273b818460208801612a29565b83519083019061274f818360208801612a29565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612790816017850160208801612a29565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516127c1816028840160208801612a29565b01602801949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612800908301846126fd565b9695505050505050565b602081526000611d8360208301846126fd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320636f6040820152646d70616e7960d81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260149082015273546f6b656e206973206e6f74206f6e2073616c6560601b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156129bf576129bf612b18565b604052919050565b600082198211156129da576129da612ad6565b500190565b6000826129ee576129ee612aec565b500490565b6000816000190483118215151615612a0d57612a0d612ad6565b500290565b600082821015612a2457612a24612ad6565b500390565b60005b83811015612a44578181015183820152602001612a2c565b8381111561108c5750506000910152565b600081612a6457612a64612ad6565b506000190190565b600181811c90821680612a8057607f821691505b60208210811415612aa157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612abb57612abb612ad6565b5060010190565b600082612ad157612ad1612aec565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461163b57600080fd5b6001600160e01b03198116811461163b57600080fdfea264697066735822122043cacffb993018e69efe8cda8a372bf95dc30e195e08c7c10a23c215bbc54d7164736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000e7db292e6f178cb3d54c1f5032d7f5fed1c2d901

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _proxyMinterAddress (address): 0xe7DB292E6f178CB3D54C1f5032D7f5fEd1C2d901

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 000000000000000000000000e7db292e6f178cb3d54c1f5032d7f5fed1c2d901


Deployed Bytecode Sourcemap

22850:5635:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23339:226;;;;;;;;;;-1:-1:-1;23339:226:0;;;;;:::i;:::-;;:::i;:::-;;;9344:14:1;;9337:22;9319:41;;9307:2;9292:18;23339:226:0;;;;;;;;25143:306;;;;;;;;;;-1:-1:-1;25143:306:0;;;;;:::i;:::-;;:::i;:::-;;10504:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11721:308::-;;;;;;;;;;-1:-1:-1;11721:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8642:32:1;;;8624:51;;8612:2;8597:18;11721:308:0;8478:203:1;11302:411:0;;;;;;;;;;-1:-1:-1;11302:411:0;;;;;:::i;:::-;;:::i;12594:376::-;;;;;;;;;;-1:-1:-1;12594:376:0;;;;;:::i;:::-;;:::i;21048:123::-;;;;;;;;;;-1:-1:-1;21048:123:0;;;;;:::i;:::-;21114:7;21141:12;;;:6;:12;;;;;:22;;;;21048:123;;;;9517:25:1;;;9505:2;9490:18;21048:123:0;9371:177:1;24592:92:0;;;;;;;;;;-1:-1:-1;24661:15:0;;24592:92;;24661:15;;;;21658:36:1;;21646:2;21631:18;24592:92:0;21516:184:1;21179:188:0;;;;;;;;;;-1:-1:-1;21179:188:0;;;;;:::i;:::-;;:::i;21573:287::-;;;;;;;;;;-1:-1:-1;21573:287:0;;;;;:::i;:::-;;:::i;22920:66::-;;;;;;;;;;;;22960:26;22920:66;;12978:185;;;;;;;;;;-1:-1:-1;12978:185:0;;;;;:::i;:::-;;:::i;10170:326::-;;;;;;;;;;-1:-1:-1;10170:326:0;;;;;:::i;:::-;;:::i;26054:244::-;;;;;;;;;;-1:-1:-1;26054:244:0;;;;;:::i;:::-;;:::i;26306:290::-;;;;;;;;;;-1:-1:-1;26306:290:0;;;;;:::i;:::-;;:::i;9867:295::-;;;;;;;;;;-1:-1:-1;9867:295:0;;;;;:::i;:::-;;:::i;786:94::-;;;;;;;;;;;;;:::i;24798:337::-;;;;;;;;;;-1:-1:-1;24798:337:0;;;;;:::i;:::-;;:::i;25457:589::-;;;;;;;;;;-1:-1:-1;25457:589:0;;;;;:::i;:::-;;:::i;24692:98::-;;;;;;;;;;-1:-1:-1;24692:98:0;;;;;:::i;:::-;;:::i;563:87::-;;;;;;;;;;-1:-1:-1;636:6:0;;-1:-1:-1;;;;;636:6:0;563:87;;20355:180;;;;;;;;;;-1:-1:-1;20355:180:0;;;;;:::i;:::-;;:::i;10612:104::-;;;;;;;;;;;;;:::i;24490:94::-;;;;;;;;;;-1:-1:-1;24490:94:0;;;;;:::i;:::-;;:::i;19908:49::-;;;;;;;;;;-1:-1:-1;19908:49:0;19953:4;19908:49;;12037:327;;;;;;;;;;-1:-1:-1;12037:327:0;;;;;:::i;:::-;;:::i;13171:365::-;;;;;;;;;;-1:-1:-1;13171:365:0;;;;;:::i;:::-;;:::i;17718:617::-;;;;;;;;;;-1:-1:-1;17718:617:0;;;;;:::i;:::-;;:::i;24272:102::-;;;;;;;;;;-1:-1:-1;24272:102:0;;;;;:::i;:::-;;:::i;21375:190::-;;;;;;;;;;-1:-1:-1;21375:190:0;;;;;:::i;:::-;;:::i;26604:750::-;;;;;;:::i;:::-;;:::i;24168:96::-;;;;;;;;;;;;;:::i;27362:362::-;;;;;;;;;;-1:-1:-1;27362:362:0;;;;;:::i;:::-;;:::i;27732:454::-;;;;;;;;;;-1:-1:-1;27732:454:0;;;;;:::i;:::-;;:::i;888:229::-;;;;;;;;;;-1:-1:-1;888:229:0;;;;;:::i;:::-;;:::i;23339:226::-;23492:4;23521:36;23545:11;23521:23;:36::i;:::-;23514:43;23339:226;-1:-1:-1;;23339:226:0:o;25143:306::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;;;;;;;;;25269:9:::1;25264:178;25288:8;:15;25284:1;:19;25264:178;;;25334:20;25342:8;25351:1;25342:11;;;;;;;;:::i;:::-;;;;;;;25334:7;:20::i;:::-;25333:21;25325:65;;;::::0;-1:-1:-1;;;25325:65:0;;15532:2:1;25325:65:0::1;::::0;::::1;15514:21:1::0;15571:2;15551:18;;;15544:30;15610:33;15590:18;;;15583:61;15661:18;;25325:65:0::1;15330:355:1::0;25325:65:0::1;25405:25;25411:5;25418:8;25427:1;25418:11;;;;;;;;:::i;:::-;;;;;;;25405:5;:25::i;:::-;25305:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25264:178;;;;25143:306:::0;;:::o;10504:100::-;10558:13;10591:5;10584:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10504:100;:::o;11721:308::-;11842:7;11889:16;11897:7;11889;:16::i;:::-;11867:110;;;;-1:-1:-1;;;11867:110:0;;16671:2:1;11867:110:0;;;16653:21:1;16710:2;16690:18;;;16683:30;16749:34;16729:18;;;16722:62;-1:-1:-1;;;16800:18:1;;;16793:42;16852:19;;11867:110:0;16469:408:1;11867:110:0;-1:-1:-1;11997:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11997:24:0;;11721:308::o;11302:411::-;11383:13;11399:23;11414:7;11399:14;:23::i;:::-;11383:39;;11447:5;-1:-1:-1;;;;;11441:11:0;:2;-1:-1:-1;;;;;11441:11:0;;;11433:57;;;;-1:-1:-1;;;11433:57:0;;19427:2:1;11433:57:0;;;19409:21:1;19466:2;19446:18;;;19439:30;19505:34;19485:18;;;19478:62;-1:-1:-1;;;19556:18:1;;;19549:31;19597:19;;11433:57:0;19225:397:1;11433:57:0;173:10;-1:-1:-1;;;;;11525:21:0;;;;:62;;-1:-1:-1;11550:37:0;11567:5;173:10;27732:454;:::i;11550:37::-;11503:168;;;;-1:-1:-1;;;11503:168:0;;14286:2:1;11503:168:0;;;14268:21:1;14325:2;14305:18;;;14298:30;14364:34;14344:18;;;14337:62;14435:26;14415:18;;;14408:54;14479:19;;11503:168:0;14084:420:1;11503:168:0;11684:21;11693:2;11697:7;11684:8;:21::i;12594:376::-;12803:41;173:10;12836:7;12803:18;:41::i;:::-;12781:140;;;;-1:-1:-1;;;12781:140:0;;;;;;;:::i;:::-;12934:28;12944:4;12950:2;12954:7;12934:9;:28::i;21179:188::-;21114:7;21141:12;;;:6;:12;;;;;:22;;;20009:30;20020:4;173:10;20009;:30::i;:::-;21334:25:::1;21345:4;21351:7;21334:10;:25::i;21573:287::-:0;-1:-1:-1;;;;;21715:23:0;;173:10;21715:23;21693:120;;;;-1:-1:-1;;;21693:120:0;;20596:2:1;21693:120:0;;;20578:21:1;20635:2;20615:18;;;20608:30;20674:34;20654:18;;;20647:62;-1:-1:-1;;;20725:18:1;;;20718:45;20780:19;;21693:120:0;20394:411:1;21693:120:0;21826:26;21838:4;21844:7;21826:11;:26::i;:::-;21573:287;;:::o;12978:185::-;13116:39;13133:4;13139:2;13143:7;13116:39;;;;;;;;;;;;:16;:39::i;10170:326::-;10287:7;10328:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10328:16:0;10377:19;10355:110;;;;-1:-1:-1;;;10355:110:0;;15122:2:1;10355:110:0;;;15104:21:1;15161:2;15141:18;;;15134:30;15200:34;15180:18;;;15173:62;-1:-1:-1;;;15251:18:1;;;15244:39;15300:19;;10355:110:0;14920:405:1;26054:244:0;173:10;26150:16;26158:7;26150;:16::i;:::-;-1:-1:-1;;;;;26150:32:0;;26128:119;;;;-1:-1:-1;;;26128:119:0;;;;;;;:::i;:::-;26258:24;;;;:15;:24;;;;;;:32;26054:244::o;26306:290::-;26400:7;26433:16;26441:7;26433;:16::i;:::-;26425:49;;;;-1:-1:-1;;;26425:49:0;;;;;;;:::i;:::-;26520:1;26493:24;;;:15;:24;;;;;;26485:61;;;;-1:-1:-1;;;26485:61:0;;;;;;;:::i;:::-;-1:-1:-1;26564:24:0;;;;:15;:24;;;;;;;26306:290::o;9867:295::-;9984:7;-1:-1:-1;;;;;10031:19:0;;10009:111;;;;-1:-1:-1;;;10009:111:0;;14711:2:1;10009:111:0;;;14693:21:1;14750:2;14730:18;;;14723:30;14789:34;14769:18;;;14762:62;-1:-1:-1;;;14840:18:1;;;14833:40;14890:19;;10009:111:0;14509:406:1;10009:111:0;-1:-1:-1;;;;;;10138:16:0;;;;;:9;:16;;;;;;;9867:295::o;786:94::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;851:21:::1;869:1;851:9;:21::i;:::-;786:94::o:0;24798:337::-;24888:34;22960:26;24911:10;24888:7;:34::i;:::-;:94;;;-1:-1:-1;24943:39:0;19953:4;24971:10;24943:7;:39::i;:::-;24866:160;;;;-1:-1:-1;;;24866:160:0;;19082:2:1;24866:160:0;;;19064:21:1;19121:2;19101:18;;;19094:30;-1:-1:-1;;;19140:18:1;;;19133:46;19196:18;;24866:160:0;18880:340:1;24866:160:0;25046:16;25054:7;25046;:16::i;:::-;25045:17;25037:61;;;;-1:-1:-1;;;25037:61:0;;15532:2:1;25037:61:0;;;15514:21:1;15571:2;15551:18;;;15544:30;15610:33;15590:18;;;15583:61;15661:18;;25037:61:0;15330:355:1;25037:61:0;25109:18;25115:2;25119:7;25109:5;:18::i;25457:589::-;25602:15;25610:6;25602:7;:15::i;:::-;:34;;;;;25621:15;25629:6;25621:7;:15::i;:::-;25580:120;;;;-1:-1:-1;;;25580:120:0;;17851:2:1;25580:120:0;;;17833:21:1;17890:2;17870:18;;;17863:30;17929:34;17909:18;;;17902:62;-1:-1:-1;;;17980:18:1;;;17973:34;18024:19;;25580:120:0;17649:400:1;25580:120:0;173:10;25733:15;25741:6;25733:7;:15::i;:::-;-1:-1:-1;;;;;25733:31:0;;:66;;;;-1:-1:-1;173:10:0;25768:15;25776:6;25768:7;:15::i;:::-;-1:-1:-1;;;;;25768:31:0;;25733:66;25711:157;;;;-1:-1:-1;;;25711:157:0;;11523:2:1;25711:157:0;;;11505:21:1;11562:2;11542:18;;;11535:30;11601:34;11581:18;;;11574:62;-1:-1:-1;;;11652:18:1;;;11645:39;11701:19;;25711:157:0;11321:405:1;25711:157:0;25888:17;25896:8;25888:7;:17::i;:::-;25887:18;25879:71;;;;-1:-1:-1;;;25879:71:0;;13115:2:1;25879:71:0;;;13097:21:1;13154:2;13134:18;;;13127:30;13193:34;13173:18;;;13166:62;-1:-1:-1;;;13244:18:1;;;13237:38;13292:19;;25879:71:0;12913:404:1;25879:71:0;25961:13;25967:6;25961:5;:13::i;:::-;25985;25991:6;25985:5;:13::i;:::-;26009:29;173:10;26029:8;26009:5;:29::i;24692:98::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;24758:15:::1;:24:::0;;-1:-1:-1;;24758:24:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;24692:98::o;20355:180::-;20469:4;20498:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;20498:29:0;;;;;;;;;;;;;;;20355:180::o;10612:104::-;10668:13;10701:7;10694:14;;;;;:::i;24490:94::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;24560:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;12037:327::-:0;-1:-1:-1;;;;;12172:24:0;;173:10;12172:24;;12164:62;;;;-1:-1:-1;;;12164:62:0;;12761:2:1;12164:62:0;;;12743:21:1;12800:2;12780:18;;;12773:30;12839:27;12819:18;;;12812:55;12884:18;;12164:62:0;12559:349:1;12164:62:0;173:10;12239:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;12239:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;12239:53:0;;;;;;;;;;12308:48;;9319:41:1;;;12239:42:0;;173:10;12308:48;;9292:18:1;12308:48:0;;;;;;;12037:327;;:::o;13171:365::-;13360:41;173:10;13393:7;13360:18;:41::i;:::-;13338:140;;;;-1:-1:-1;;;13338:140:0;;;;;;;:::i;:::-;13489:39;13503:4;13509:2;13513:7;13522:5;13489:13;:39::i;:::-;13171:365;;;;:::o;17718:617::-;17836:13;17889:16;17897:7;17889;:16::i;:::-;17867:115;;;;-1:-1:-1;;;17867:115:0;;16253:2:1;17867:115:0;;;16235:21:1;16292:2;16272:18;;;16265:30;16331:34;16311:18;;;16304:62;-1:-1:-1;;;16382:18:1;;;16375:47;16439:19;;17867:115:0;16051:413:1;17867:115:0;17995:23;18021:19;;;:10;:19;;;;;17995:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18051:18;18072:10;:8;:10::i;:::-;18051:31;;18105:4;18099:18;18121:1;18099:23;18095:72;;;-1:-1:-1;18146:9:0;17718:617;-1:-1:-1;;17718:617:0:o;18095:72::-;18181:23;;:27;18177:108;;18256:4;18262:9;18239:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18225:48;;;;17718:617;;;:::o;18177:108::-;18304:23;18319:7;18304:14;:23::i;:::-;18297:30;17718:617;-1:-1:-1;;;;17718:617:0:o;24272:102::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;24346:20;;::::1;::::0;:11:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;21375:190::-:0;21114:7;21141:12;;;:6;:12;;;;;:22;;;20009:30;20020:4;173:10;20009;:30::i;:::-;21531:26:::1;21543:4;21549:7;21531:11;:26::i;26604:750::-:0;26681:16;26689:7;26681;:16::i;:::-;26673:49;;;;-1:-1:-1;;;26673:49:0;;;;;;;:::i;:::-;26768:1;26741:24;;;:15;:24;;;;;;26733:61;;;;-1:-1:-1;;;26733:61:0;;;;;;;:::i;:::-;26840:24;;;;:15;:24;;;;;;26827:9;:37;26805:141;;;;-1:-1:-1;;;26805:141:0;;11933:2:1;26805:141:0;;;11915:21:1;11972:2;11952:18;;;11945:30;12011:34;11991:18;;;11984:62;-1:-1:-1;;;12062:18:1;;;12055:52;12124:19;;26805:141:0;11731:418:1;26805:141:0;26989:15;;26957;;27008:3;;26977:27;;26989:15;;26977:9;:27;:::i;:::-;26976:35;;;;:::i;:::-;26957:55;;27031:7;636:6;;-1:-1:-1;;;;;636:6:0;;563:87;27031:7;-1:-1:-1;;;;;27023:25:0;:34;27049:7;27023:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27076:16;27084:7;27076;:16::i;:::-;-1:-1:-1;;;;;27068:34:0;:55;27103:19;27115:7;27103:9;:19;:::i;:::-;27068:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27134:50;27144:16;27152:7;27144;:16::i;:::-;173:10;27176:7;27134:9;:50::i;:::-;27200:146;27224:7;27246:16;27254:7;27246;:16::i;:::-;27200:146;;;21251:25:1;;;-1:-1:-1;;;;;21350:15:1;;;;21345:2;21330:18;;21323:43;173:10:0;21382:18:1;;;21375:43;27304:9:0;21449:2:1;21434:18;;21427:34;21492:3;21477:19;;21470:35;;;27200:146:0;;;;;21238:3:1;27200:146:0;;;26662:692;26604:750;:::o;24168:96::-;24212:13;24245:11;24238:18;;;;;:::i;27362:362::-;27434:16;27442:7;27434;:16::i;:::-;27426:49;;;;-1:-1:-1;;;27426:49:0;;;;;;;:::i;:::-;27521:1;27494:24;;;:15;:24;;;;;;27486:61;;;;-1:-1:-1;;;27486:61:0;;;;;;;:::i;:::-;173:10;27580:16;27588:7;27580;:16::i;:::-;-1:-1:-1;;;;;27580:32:0;;27558:119;;;;-1:-1:-1;;;27558:119:0;;;;;;;:::i;:::-;27715:1;27688:24;;;:15;:24;;;;;:28;27362:362::o;27732:454::-;27999:20;;28043:29;;-1:-1:-1;;;28043:29:0;;-1:-1:-1;;;;;8642:32:1;;;28043:29:0;;;8624:51:1;27859:15:0;;27999:20;;;;;;28035:51;;;;27999:20;;28043:21;;8597:18:1;;28043:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28035:51:0;;28031:95;;;28110:4;28103:11;;;;;28031:95;28143:35;28160:6;28168:9;28143:16;:35::i;888:229::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;991:22:0;::::1;969:110;;;::::0;-1:-1:-1;;;969:110:0;;10759:2:1;969:110:0::1;::::0;::::1;10741:21:1::0;10798:2;10778:18;;;10771:30;10837:34;10817:18;;;10810:62;-1:-1:-1;;;10888:18:1;;;10881:36;10934:19;;969:110:0::1;10557:402:1::0;969:110:0::1;1090:19;1100:8;1090:9;:19::i;:::-;888:229:::0;:::o;20067:280::-;20197:4;-1:-1:-1;;;;;;20239:47:0;;-1:-1:-1;;;20239:47:0;;:100;;;20303:36;20327:11;20303:23;:36::i;13904:127::-;13969:4;13993:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13993:16:0;:30;;;13904:127::o;14946:382::-;-1:-1:-1;;;;;15026:16:0;;15018:61;;;;-1:-1:-1;;;15018:61:0;;15892:2:1;15018:61:0;;;15874:21:1;;;15911:18;;;15904:30;15970:34;15950:18;;;15943:62;16022:18;;15018:61:0;15690:356:1;15018:61:0;15099:16;15107:7;15099;:16::i;:::-;15098:17;15090:58;;;;-1:-1:-1;;;15090:58:0;;11166:2:1;15090:58:0;;;11148:21:1;11205:2;11185:18;;;11178:30;11244;11224:18;;;11217:58;11292:18;;15090:58:0;10964:352:1;15090:58:0;15161:45;15190:1;15194:2;15198:7;15161:20;:45::i;:::-;-1:-1:-1;;;;;15219:13:0;;;;;;:9;:13;;;;;:18;;15236:1;;15219:13;:18;;15236:1;;15219:18;:::i;:::-;;;;-1:-1:-1;;15248:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15248:21:0;-1:-1:-1;;;;;15248:21:0;;;;;;;;15287:33;;15248:16;;;15287:33;;15248:16;;15287:33;14946:382;;:::o;16275:174::-;16350:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16350:29:0;-1:-1:-1;;;;;16350:29:0;;;;;;;;:24;;16404:23;16350:24;16404:14;:23::i;:::-;-1:-1:-1;;;;;16395:46:0;;;;;;;;;;;16275:174;;:::o;14039:452::-;14168:4;14212:16;14220:7;14212;:16::i;:::-;14190:110;;;;-1:-1:-1;;;14190:110:0;;13873:2:1;14190:110:0;;;13855:21:1;13912:2;13892:18;;;13885:30;13951:34;13931:18;;;13924:62;-1:-1:-1;;;14002:18:1;;;13995:42;14054:19;;14190:110:0;13671:408:1;14190:110:0;14311:13;14327:23;14342:7;14327:14;:23::i;:::-;14311:39;;14380:5;-1:-1:-1;;;;;14369:16:0;:7;-1:-1:-1;;;;;14369:16:0;;:64;;;;14426:7;-1:-1:-1;;;;;14402:31:0;:20;14414:7;14402:11;:20::i;:::-;-1:-1:-1;;;;;14402:31:0;;14369:64;:113;;;;14450:32;14467:5;14474:7;14450:16;:32::i;15704:563::-;15877:4;-1:-1:-1;;;;;15850:31:0;:23;15865:7;15850:14;:23::i;:::-;-1:-1:-1;;;;;15850:31:0;;15828:122;;;;-1:-1:-1;;;15828:122:0;;18256:2:1;15828:122:0;;;18238:21:1;18295:2;18275:18;;;18268:30;18334:34;18314:18;;;18307:62;-1:-1:-1;;;18385:18:1;;;18378:39;18434:19;;15828:122:0;18054:405:1;15828:122:0;-1:-1:-1;;;;;15969:16:0;;15961:65;;;;-1:-1:-1;;;15961:65:0;;12356:2:1;15961:65:0;;;12338:21:1;12395:2;12375:18;;;12368:30;12434:34;12414:18;;;12407:62;-1:-1:-1;;;12485:18:1;;;12478:34;12529:19;;15961:65:0;12154:400:1;15961:65:0;16039:39;16060:4;16066:2;16070:7;16039:20;:39::i;:::-;16091:29;16108:1;16112:7;16091:8;:29::i;:::-;-1:-1:-1;;;;;16133:15:0;;;;;;:9;:15;;;;;:20;;16152:1;;16133:15;:20;;16152:1;;16133:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16164:13:0;;;;;;:9;:13;;;;;:18;;16181:1;;16164:13;:18;;16181:1;;16164:18;:::i;:::-;;;;-1:-1:-1;;16193:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;16193:21:0;-1:-1:-1;;;;;16193:21:0;;;;;;;;;16232:27;;16193:16;;16232:27;;;;;;;15704:563;;;:::o;20543:497::-;20624:22;20632:4;20638:7;20624;:22::i;:::-;20619:414;;20812:41;20840:7;-1:-1:-1;;;;;20812:41:0;20850:2;20812:19;:41::i;:::-;20926:38;20954:4;20961:2;20926:19;:38::i;:::-;20717:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20717:270:0;;;;;;;;;;-1:-1:-1;;;20663:358:0;;;;;;;:::i;22247:229::-;22322:22;22330:4;22336:7;22322;:22::i;:::-;22317:152;;22361:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;22361:29:0;;;;;;;;;:36;;-1:-1:-1;;22361:36:0;22393:4;22361:36;;;22444:12;173:10;;93:98;22444:12;-1:-1:-1;;;;;22417:40:0;22435:7;-1:-1:-1;;;;;22417:40:0;22429:4;22417:40;;;;;;;;;;22247:229;;:::o;22484:230::-;22559:22;22567:4;22573:7;22559;:22::i;:::-;22555:152;;;22630:5;22598:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;22598:29:0;;;;;;;;;;:37;;-1:-1:-1;;22598:37:0;;;22655:40;173:10;;22598:12;;22655:40;;22630:5;22655:40;22484:230;;:::o;1125:173::-;1200:6;;;-1:-1:-1;;;;;1217:17:0;;;-1:-1:-1;;;;;;1217:17:0;;;;;;;1250:40;;1200:6;;;1217:17;1200:6;;1250:40;;1181:16;;1250:40;1170:128;1125:173;:::o;18628:206::-;18697:20;18709:7;18697:11;:20::i;:::-;18740:19;;;;:10;:19;;;;;18734:33;;;;;:::i;:::-;:38;;-1:-1:-1;18730:97:0;;18796:19;;;;:10;:19;;;;;18789:26;;;:::i;13544:352::-;13701:28;13711:4;13717:2;13721:7;13701:9;:28::i;:::-;13762:48;13785:4;13791:2;13795:7;13804:5;13762:22;:48::i;:::-;13740:148;;;;-1:-1:-1;;;13740:148:0;;;;;;;:::i;24382:100::-;24434:13;24467:7;24460:14;;;;;:::i;10724:468::-;10842:13;10895:16;10903:7;10895;:16::i;:::-;10873:113;;;;-1:-1:-1;;;10873:113:0;;18666:2:1;10873:113:0;;;18648:21:1;18705:2;18685:18;;;18678:30;18744:34;18724:18;;;18717:62;-1:-1:-1;;;18795:18:1;;;18788:45;18850:19;;10873:113:0;18464:411:1;10873:113:0;10999:21;11023:10;:8;:10::i;:::-;10999:34;;11088:1;11070:7;11064:21;:25;:120;;;;;;;;;;;;;;;;;11133:7;11142:18;:7;:16;:18::i;:::-;11116:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11064:120;11044:140;10724:468;-1:-1:-1;;;10724:468:0:o;9504:355::-;9651:4;-1:-1:-1;;;;;;9693:40:0;;-1:-1:-1;;;9693:40:0;;:105;;-1:-1:-1;;;;;;;9750:48:0;;-1:-1:-1;;;9750:48:0;9693:105;:158;;;-1:-1:-1;;;;;;;;;;1615:40:0;;;9815:36;1456:207;28194:288;28417:1;28390:24;;;:15;:24;;;;;;:28;28386:89;;28462:1;28435:24;;;:15;:24;;;;;:28;-1:-1:-1;;28194:288:0:o;8245:483::-;8347:13;8378:19;8410:10;8414:6;8410:1;:10;:::i;:::-;:14;;8423:1;8410:14;:::i;:::-;8400:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8400:25:0;;8378:47;;-1:-1:-1;;;8436:6:0;8443:1;8436:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;8436:15:0;;;;;;;;;-1:-1:-1;;;8462:6:0;8469:1;8462:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;8462:15:0;;;;;;;;-1:-1:-1;8493:9:0;8505:10;8509:6;8505:1;:10;:::i;:::-;:14;;8518:1;8505:14;:::i;:::-;8493:26;;8488:135;8525:1;8521;:5;8488:135;;;-1:-1:-1;;;8573:5:0;8581:3;8573:11;8560:25;;;;;;;:::i;:::-;;;;8548:6;8555:1;8548:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;8548:37:0;;;;;;;;-1:-1:-1;8610:1:0;8600:11;;;;;8528:3;;;:::i;:::-;;;8488:135;;;-1:-1:-1;8641:10:0;;8633:55;;;;-1:-1:-1;;;8633:55:0;;9979:2:1;8633:55:0;;;9961:21:1;;;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;10109:18;;8633:55:0;9777:356:1;15336:360:0;15396:13;15412:23;15427:7;15412:14;:23::i;:::-;15396:39;;15448:48;15469:5;15484:1;15488:7;15448:20;:48::i;:::-;15537:29;15554:1;15558:7;15537:8;:29::i;:::-;-1:-1:-1;;;;;15579:16:0;;;;;;:9;:16;;;;;:21;;15599:1;;15579:16;:21;;15599:1;;15579:21;:::i;:::-;;;;-1:-1:-1;;15618:16:0;;;;:7;:16;;;;;;15611:23;;-1:-1:-1;;;;;;15611:23:0;;;15652:36;15626:7;;15618:16;-1:-1:-1;;;;;15652:36:0;;;;;15618:16;;15652:36;15385:311;15336:360;:::o;16457:980::-;16612:4;-1:-1:-1;;;;;16633:13:0;;3418:20;3466:8;16629:801;;16686:175;;-1:-1:-1;;;16686:175:0;;-1:-1:-1;;;;;16686:36:0;;;;;:175;;173:10;;16780:4;;16807:7;;16837:5;;16686:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16686:175:0;;;;;;;;-1:-1:-1;;16686:175:0;;;;;;;;;;;;:::i;:::-;;;16665:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17044:13:0;;17040:320;;17087:108;;-1:-1:-1;;;17087:108:0;;;;;;;:::i;17040:320::-;17310:6;17304:13;17295:6;17291:2;17287:15;17280:38;16665:710;-1:-1:-1;;;;;;16925:51:0;-1:-1:-1;;;16925:51:0;;-1:-1:-1;16918:58:0;;16629:801;-1:-1:-1;17414:4:0;16457:980;;;;;;:::o;7357:532::-;7413:13;7443:10;7439:53;;-1:-1:-1;;7470:10:0;;;;;;;;;;;;-1:-1:-1;;;7470:10:0;;;;;7357:532::o;7439:53::-;7517:5;7502:12;7558:78;7565:9;;7558:78;;7591:8;;;;:::i;:::-;;-1:-1:-1;7614:10:0;;-1:-1:-1;7622:2:0;7614:10;;:::i;:::-;;;7558:78;;;7646:19;7678:6;7668:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7668:17:0;;7646:39;;7696:154;7703:10;;7696:154;;7730:11;7740:1;7730:11;;:::i;:::-;;-1:-1:-1;7799:10:0;7807:2;7799:5;:10;:::i;:::-;7786:24;;:2;:24;:::i;:::-;7773:39;;7756:6;7763;7756:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7756:56:0;;;;;;;;-1:-1:-1;7827:11:0;7836:2;7827:11;;:::i;:::-;;;7696:154;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:247::-;484:6;537:2;525:9;516:7;512:23;508:32;505:52;;;553:1;550;543:12;505:52;592:9;579:23;611:31;636:5;611:31;:::i;677:388::-;745:6;753;806:2;794:9;785:7;781:23;777:32;774:52;;;822:1;819;812:12;774:52;861:9;848:23;880:31;905:5;880:31;:::i;:::-;930:5;-1:-1:-1;987:2:1;972:18;;959:32;1000:33;959:32;1000:33;:::i;:::-;1052:7;1042:17;;;677:388;;;;;:::o;1070:456::-;1147:6;1155;1163;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1271:9;1258:23;1290:31;1315:5;1290:31;:::i;:::-;1340:5;-1:-1:-1;1397:2:1;1382:18;;1369:32;1410:33;1369:32;1410:33;:::i;:::-;1070:456;;1462:7;;-1:-1:-1;;;1516:2:1;1501:18;;;;1488:32;;1070:456::o;1531:794::-;1626:6;1634;1642;1650;1703:3;1691:9;1682:7;1678:23;1674:33;1671:53;;;1720:1;1717;1710:12;1671:53;1759:9;1746:23;1778:31;1803:5;1778:31;:::i;:::-;1828:5;-1:-1:-1;1885:2:1;1870:18;;1857:32;1898:33;1857:32;1898:33;:::i;:::-;1950:7;-1:-1:-1;2004:2:1;1989:18;;1976:32;;-1:-1:-1;2059:2:1;2044:18;;2031:32;2086:18;2075:30;;2072:50;;;2118:1;2115;2108:12;2072:50;2141:22;;2194:4;2186:13;;2182:27;-1:-1:-1;2172:55:1;;2223:1;2220;2213:12;2172:55;2246:73;2311:7;2306:2;2293:16;2288:2;2284;2280:11;2246:73;:::i;:::-;2236:83;;;1531:794;;;;;;;:::o;2330:1092::-;2423:6;2431;2484:2;2472:9;2463:7;2459:23;2455:32;2452:52;;;2500:1;2497;2490:12;2452:52;2539:9;2526:23;2558:31;2583:5;2558:31;:::i;:::-;2608:5;-1:-1:-1;2632:2:1;2670:18;;;2657:32;2708:18;2738:14;;;2735:34;;;2765:1;2762;2755:12;2735:34;2803:6;2792:9;2788:22;2778:32;;2848:7;2841:4;2837:2;2833:13;2829:27;2819:55;;2870:1;2867;2860:12;2819:55;2906:2;2893:16;2928:2;2924;2921:10;2918:36;;;2934:18;;:::i;:::-;2980:2;2977:1;2973:10;2963:20;;3003:28;3027:2;3023;3019:11;3003:28;:::i;:::-;3065:15;;;3096:12;;;;3128:11;;;3158;;;3154:20;;3151:33;-1:-1:-1;3148:53:1;;;3197:1;3194;3187:12;3148:53;3219:1;3210:10;;3229:163;3243:2;3240:1;3237:9;3229:163;;;3300:17;;3288:30;;3261:1;3254:9;;;;;3338:12;;;;3370;;3229:163;;;3233:3;3411:5;3401:15;;;;;;;;2330:1092;;;;;:::o;3427:416::-;3492:6;3500;3553:2;3541:9;3532:7;3528:23;3524:32;3521:52;;;3569:1;3566;3559:12;3521:52;3608:9;3595:23;3627:31;3652:5;3627:31;:::i;:::-;3677:5;-1:-1:-1;3734:2:1;3719:18;;3706:32;3776:15;;3769:23;3757:36;;3747:64;;3807:1;3804;3797:12;3848:315;3916:6;3924;3977:2;3965:9;3956:7;3952:23;3948:32;3945:52;;;3993:1;3990;3983:12;3945:52;4032:9;4019:23;4051:31;4076:5;4051:31;:::i;:::-;4101:5;4153:2;4138:18;;;;4125:32;;-1:-1:-1;;;3848:315:1:o;4168:180::-;4227:6;4280:2;4268:9;4259:7;4255:23;4251:32;4248:52;;;4296:1;4293;4286:12;4248:52;-1:-1:-1;4319:23:1;;4168:180;-1:-1:-1;4168:180:1:o;4353:315::-;4421:6;4429;4482:2;4470:9;4461:7;4457:23;4453:32;4450:52;;;4498:1;4495;4488:12;4450:52;4534:9;4521:23;4511:33;;4594:2;4583:9;4579:18;4566:32;4607:31;4632:5;4607:31;:::i;4673:245::-;4731:6;4784:2;4772:9;4763:7;4759:23;4755:32;4752:52;;;4800:1;4797;4790:12;4752:52;4839:9;4826:23;4858:30;4882:5;4858:30;:::i;4923:249::-;4992:6;5045:2;5033:9;5024:7;5020:23;5016:32;5013:52;;;5061:1;5058;5051:12;5013:52;5093:9;5087:16;5112:30;5136:5;5112:30;:::i;5177:280::-;5276:6;5329:2;5317:9;5308:7;5304:23;5300:32;5297:52;;;5345:1;5342;5335:12;5297:52;5377:9;5371:16;5396:31;5421:5;5396:31;:::i;5462:450::-;5531:6;5584:2;5572:9;5563:7;5559:23;5555:32;5552:52;;;5600:1;5597;5590:12;5552:52;5640:9;5627:23;5673:18;5665:6;5662:30;5659:50;;;5705:1;5702;5695:12;5659:50;5728:22;;5781:4;5773:13;;5769:27;-1:-1:-1;5759:55:1;;5810:1;5807;5800:12;5759:55;5833:73;5898:7;5893:2;5880:16;5875:2;5871;5867:11;5833:73;:::i;6102:248::-;6170:6;6178;6231:2;6219:9;6210:7;6206:23;6202:32;6199:52;;;6247:1;6244;6237:12;6199:52;-1:-1:-1;;6270:23:1;;;6340:2;6325:18;;;6312:32;;-1:-1:-1;6102:248:1:o;6355:316::-;6432:6;6440;6448;6501:2;6489:9;6480:7;6476:23;6472:32;6469:52;;;6517:1;6514;6507:12;6469:52;-1:-1:-1;;6540:23:1;;;6610:2;6595:18;;6582:32;;-1:-1:-1;6661:2:1;6646:18;;;6633:32;;6355:316;-1:-1:-1;6355:316:1:o;6676:269::-;6733:6;6786:2;6774:9;6765:7;6761:23;6757:32;6754:52;;;6802:1;6799;6792:12;6754:52;6841:9;6828:23;6891:4;6884:5;6880:16;6873:5;6870:27;6860:55;;6911:1;6908;6901:12;6950:257;6991:3;7029:5;7023:12;7056:6;7051:3;7044:19;7072:63;7128:6;7121:4;7116:3;7112:14;7105:4;7098:5;7094:16;7072:63;:::i;:::-;7189:2;7168:15;-1:-1:-1;;7164:29:1;7155:39;;;;7196:4;7151:50;;6950:257;-1:-1:-1;;6950:257:1:o;7212:470::-;7391:3;7429:6;7423:13;7445:53;7491:6;7486:3;7479:4;7471:6;7467:17;7445:53;:::i;:::-;7561:13;;7520:16;;;;7583:57;7561:13;7520:16;7617:4;7605:17;;7583:57;:::i;:::-;7656:20;;7212:470;-1:-1:-1;;;;7212:470:1:o;7687:786::-;8098:25;8093:3;8086:38;8068:3;8153:6;8147:13;8169:62;8224:6;8219:2;8214:3;8210:12;8203:4;8195:6;8191:17;8169:62;:::i;:::-;-1:-1:-1;;;8290:2:1;8250:16;;;8282:11;;;8275:40;8340:13;;8362:63;8340:13;8411:2;8403:11;;8396:4;8384:17;;8362:63;:::i;:::-;8445:17;8464:2;8441:26;;7687:786;-1:-1:-1;;;;7687:786:1:o;8686:488::-;-1:-1:-1;;;;;8955:15:1;;;8937:34;;9007:15;;9002:2;8987:18;;8980:43;9054:2;9039:18;;9032:34;;;9102:3;9097:2;9082:18;;9075:31;;;8880:4;;9123:45;;9148:19;;9140:6;9123:45;:::i;:::-;9115:53;8686:488;-1:-1:-1;;;;;;8686:488:1:o;9553:219::-;9702:2;9691:9;9684:21;9665:4;9722:44;9762:2;9751:9;9747:18;9739:6;9722:44;:::i;10138:414::-;10340:2;10322:21;;;10379:2;10359:18;;;10352:30;10418:34;10413:2;10398:18;;10391:62;-1:-1:-1;;;10484:2:1;10469:18;;10462:48;10542:3;10527:19;;10138:414::o;13322:344::-;13524:2;13506:21;;;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13597:2:1;13582:18;;13575:50;13657:2;13642:18;;13322:344::o;16882:356::-;17084:2;17066:21;;;17103:18;;;17096:30;17162:34;17157:2;17142:18;;17135:62;17229:2;17214:18;;16882:356::o;17243:401::-;17445:2;17427:21;;;17484:2;17464:18;;;17457:30;17523:34;17518:2;17503:18;;17496:62;-1:-1:-1;;;17589:2:1;17574:18;;17567:35;17634:3;17619:19;;17243:401::o;19627:413::-;19829:2;19811:21;;;19868:2;19848:18;;;19841:30;19907:34;19902:2;19887:18;;19880:62;-1:-1:-1;;;19973:2:1;19958:18;;19951:47;20030:3;20015:19;;19627:413::o;20045:344::-;20247:2;20229:21;;;20286:2;20266:18;;;20259:30;-1:-1:-1;;;20320:2:1;20305:18;;20298:50;20380:2;20365:18;;20045:344::o;21705:275::-;21776:2;21770:9;21841:2;21822:13;;-1:-1:-1;;21818:27:1;21806:40;;21876:18;21861:34;;21897:22;;;21858:62;21855:88;;;21923:18;;:::i;:::-;21959:2;21952:22;21705:275;;-1:-1:-1;21705:275:1:o;21985:128::-;22025:3;22056:1;22052:6;22049:1;22046:13;22043:39;;;22062:18;;:::i;:::-;-1:-1:-1;22098:9:1;;21985:128::o;22118:120::-;22158:1;22184;22174:35;;22189:18;;:::i;:::-;-1:-1:-1;22223:9:1;;22118:120::o;22243:168::-;22283:7;22349:1;22345;22341:6;22337:14;22334:1;22331:21;22326:1;22319:9;22312:17;22308:45;22305:71;;;22356:18;;:::i;:::-;-1:-1:-1;22396:9:1;;22243:168::o;22416:125::-;22456:4;22484:1;22481;22478:8;22475:34;;;22489:18;;:::i;:::-;-1:-1:-1;22526:9:1;;22416:125::o;22546:258::-;22618:1;22628:113;22642:6;22639:1;22636:13;22628:113;;;22718:11;;;22712:18;22699:11;;;22692:39;22664:2;22657:10;22628:113;;;22759:6;22756:1;22753:13;22750:48;;;-1:-1:-1;;22794:1:1;22776:16;;22769:27;22546:258::o;22809:136::-;22848:3;22876:5;22866:39;;22885:18;;:::i;:::-;-1:-1:-1;;;22921:18:1;;22809:136::o;22950:380::-;23029:1;23025:12;;;;23072;;;23093:61;;23147:4;23139:6;23135:17;23125:27;;23093:61;23200:2;23192:6;23189:14;23169:18;23166:38;23163:161;;;23246:10;23241:3;23237:20;23234:1;23227:31;23281:4;23278:1;23271:15;23309:4;23306:1;23299:15;23163:161;;22950:380;;;:::o;23335:135::-;23374:3;-1:-1:-1;;23395:17:1;;23392:43;;;23415:18;;:::i;:::-;-1:-1:-1;23462:1:1;23451:13;;23335:135::o;23475:112::-;23507:1;23533;23523:35;;23538:18;;:::i;:::-;-1:-1:-1;23572:9:1;;23475:112::o;23592:127::-;23653:10;23648:3;23644:20;23641:1;23634:31;23684:4;23681:1;23674:15;23708:4;23705:1;23698:15;23724:127;23785:10;23780:3;23776:20;23773:1;23766:31;23816:4;23813:1;23806:15;23840:4;23837:1;23830:15;23856:127;23917:10;23912:3;23908:20;23905:1;23898:31;23948:4;23945:1;23938:15;23972:4;23969:1;23962:15;23988:127;24049:10;24044:3;24040:20;24037:1;24030:31;24080:4;24077:1;24070:15;24104:4;24101:1;24094:15;24120:131;-1:-1:-1;;;;;24195:31:1;;24185:42;;24175:70;;24241:1;24238;24231:12;24256:131;-1:-1:-1;;;;;;24330:32:1;;24320:43;;24310:71;;24377:1;24374;24367:12

Swarm Source

ipfs://43cacffb993018e69efe8cda8a372bf95dc30e195e08c7c10a23c215bbc54d71
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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