ETH Price: $2,561.22 (-1.91%)

Token

BlueprintedNFT (BP)
 

Overview

Max Total Supply

267 BP

Holders

128

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
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:
BlueprintedNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 14: BlueprintedNFT.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./MerkleProof.sol";
import "./Ownable.sol";
import "./ERC721Enumerable.sol";

contract BlueprintedNFT is ERC721Enumerable, Ownable {
    string  public              baseURI;
    
    address public              proxyRegistryAddress;
    address public              payee1;
    address public              payee2;

    bytes32 public              whitelistMerkleRoot1;
    bytes32 public              whitelistMerkleRoot2;
    uint256 public              saleStatus          = 0; // 0 closed, 1 BL, 2 WL, 3 PUBLIC
    uint256 public constant     MAX_SUPPLY          = 7000;
    uint256 public              MAX_GIVEAWAY        = 50;

    uint256 public constant     MAX_PER_TX          = 20;
    uint256 public constant     priceInWei          = 0.06 ether;

    uint256 public constant     BL_MAX_PER_TX       = 3;
    uint256 public constant     BL_priceInWei       = 0.02 ether;

    uint256 public constant     WL_MAX_PER_TX       = 10;
    uint256 public constant     WL_priceInWei       = 0.05 ether;

    mapping(address => bool) public projectProxy;
    mapping(address => uint) public addressToMinted;

    constructor(
        string memory _baseURI, 
        address _proxyRegistryAddress, 
        address _payee1,
        address _payee2
    )
        ERC721("BlueprintedNFT", "BP")
    {
        baseURI = _baseURI;
        proxyRegistryAddress = _proxyRegistryAddress;
        payee1 = _payee1;
        payee2 = _payee2;
    }

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

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId), ".json"));
    }

    function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner {
        proxyRegistryAddress = _proxyRegistryAddress;
    }


    function setWhitelistMerkleRoot1(bytes32 _whitelistMerkleRoot) external onlyOwner {
        // don't forget to prepend: 0x
        whitelistMerkleRoot1 = _whitelistMerkleRoot;
    }

    function setWhitelistMerkleRoot2(bytes32 _whitelistMerkleRoot) external onlyOwner {
        // don't forget to prepend: 0x
        whitelistMerkleRoot2 = _whitelistMerkleRoot;
    }

    function setSaleStatus(uint256 _status) external onlyOwner {
        require(saleStatus < 4 && saleStatus >= 0, "Invalid status.");
        saleStatus = _status;
    }


    function mint(uint256 count, bytes32[] calldata proof) public payable {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        uint256 totalSupply = _owners.length;
        require(totalSupply + count < MAX_SUPPLY, "Excedes max supply.");
        if (saleStatus == 1) {
            require(MerkleProof.verify(proof, whitelistMerkleRoot1, leaf), 'Not on bluelist. Merkle Proof fail.');
            require(addressToMinted[_msgSender()] + count <= BL_MAX_PER_TX, "Exceeds bluelist supply"); 
            require(count * BL_priceInWei == msg.value, "Invalid funds provided.");
            addressToMinted[_msgSender()] += count;
        } else if (saleStatus == 2) {
            require(MerkleProof.verify(proof, whitelistMerkleRoot2, leaf), 'Not on whitelist. Merkle Proof fail.');
            require(addressToMinted[_msgSender()] + count <= WL_MAX_PER_TX, "Exceeds whitelist supply"); 
            require(count * WL_priceInWei == msg.value, "Invalid funds provided.");
            addressToMinted[_msgSender()] += count;
        }  else if (saleStatus == 3) {
            require(count < MAX_PER_TX, "Exceeds max per transaction.");
            require(count * priceInWei == msg.value, "Invalid funds provided.");
            addressToMinted[_msgSender()] += count;
        } else {
            require(false, "Sale not open.");
        }
        
        for(uint i; i < count; i++) { 
            _mint(_msgSender(), totalSupply + i);
        }
    }

    function promoMint(uint _qty, address _to) public onlyOwner {
        require(MAX_GIVEAWAY - _qty >= 0, "Exceeds max giveaway.");
        uint256 totalSupply = _owners.length;
        for (uint i = 0; i < _qty; i++) {
            _mint(_to, totalSupply + i);
        }
        MAX_GIVEAWAY -= _qty;
    }

    function burn(uint256 tokenId) public { 
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Not approved to burn.");
        _burn(tokenId);
    }

    function withdraw() public  {
        (bool success, ) = payee1.call{value: address(this).balance * 8 / 100}("");
        require(success, "Failed to send to payee1.");
        (bool success2, ) = payee2.call{value: address(this).balance}("");
        require(success2, "Failed to send to payee2.");
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) return new uint256[](0);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            transferFrom(_from, _to, _tokenIds[i]);
        }
    }

    function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            safeTransferFrom(_from, _to, _tokenIds[i], data_);
        }
    }

    function isOwnerOf(address account, uint256[] calldata _tokenIds) external view returns (bool){
        for(uint256 i; i < _tokenIds.length; ++i ){
            if(_owners[_tokenIds[i]] != account)
                return false;
        }

        return true;
    }

    function isApprovedForAll(address _owner, address operator) public view override returns (bool) {
        OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true;
        return super.isApprovedForAll(_owner, operator);
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        _owners.push(to);
        emit Transfer(address(0), to, tokenId);
    }
}

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

File 1 of 14: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 14: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 4 of 14: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 14: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Address.sol";

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) 
        public 
        view 
        virtual 
        override 
        returns (uint) 
    {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    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);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    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"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    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));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    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"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);
        _owners.push(to);

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    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);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 14: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./ERC721.sol";
import "./IERC721Enumerable.sol"; 

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < _owners.length, "ERC721Enumerable: global index out of bounds");
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}

File 7 of 14: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 14: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 9 of 14: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 10 of 14: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 11 of 14: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 14: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

File 13 of 14: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 14 of 14: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"},{"internalType":"address","name":"_payee1","type":"address"},{"internalType":"address","name":"_payee2","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":"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":"BL_MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BL_priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_GIVEAWAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"baseURI","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":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"payee1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"promoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[],"name":"saleStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_status","type":"uint256"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot2","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot1","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot2","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600c556032600d553480156200001b57600080fd5b5060405162003067380380620030678339810160408190526200003e9162000234565b604080518082018252600e81526d109b1d595c1c9a5b9d195913919560921b602080830191825283518085019094526002845261042560f41b9084015281519192916200008e9160009162000171565b508051620000a490600190602084019062000171565b505050620000c1620000bb6200011b60201b60201c565b6200011f565b8351620000d690600690602087019062000171565b50600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055506200039d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200017f906200034a565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b80516001600160a01b03811681146200022f57600080fd5b919050565b600080600080608085870312156200024b57600080fd5b84516001600160401b03808211156200026357600080fd5b818701915087601f8301126200027857600080fd5b8151818111156200028d576200028d62000387565b604051601f8201601f19908116603f01168101908382118183101715620002b857620002b862000387565b81604052828152602093508a84848701011115620002d557600080fd5b600091505b82821015620002f95784820184015181830185015290830190620002da565b828211156200030b5760008484830101525b97506200031d91505087820162000217565b945050506200032f6040860162000217565b91506200033f6060860162000217565b905092959194509250565b600181811c908216806200035f57607f821691505b602082108114156200038157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612cba80620003ad6000396000f3fe6080604052600436106102ae5760003560e01c806370a0823111610175578063cd7c0326116100dc578063f29f15af11610095578063f43a22dc1161006f578063f43a22dc14610834578063f9020e3314610849578063fe930b901461085f578063ffd69c0e1461087457600080fd5b8063f29f15af146107d4578063f2fde38b146107f4578063f3993d111461081457600080fd5b8063cd7c032614610714578063d26ea6c014610734578063df9132ef14610754578063e985e9c514610774578063eaa6074214610794578063f126e325146107b457600080fd5b8063a22cb4651161012e578063a22cb46514610666578063b88d4fde14610686578063ba41b0c6146106a6578063c0f2f251146106b9578063c79b25cf146106d4578063c87b56dd146106f457600080fd5b806370a08231146105bb578063715018a6146105db578063832cf109146105f05780638da5cb5b1461060657806395d89b41146106245780639ec00c951461063957600080fd5b806342966c681161021957806355042e33116101d257806355042e331461050157806355f804b3146105165780635a4fee30146105365780635bab26e2146105565780636352211e146105865780636c0360eb146105a657600080fd5b806342966c6814610448578063438b6300146104685780634c5b7a29146104955780634d44660c146104ab5780634f41d114146104cb5780634f6ccce7146104e157600080fd5b806323b872dd1161026b57806323b872dd146103a25780632f745c59146103c257806332cb6b0c146103e25780633c8da588146103f85780633ccfd60b1461041357806342842e0e1461042857600080fd5b806301ffc9a7146102b357806306fdde03146102e857806307839b031461030a578063081812fc14610333578063095ea7b31461036b57806318160ddd1461038d575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612726565b610894565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108bf565b6040516102df91906129a2565b34801561031657600080fd5b5061032566470de4df82000081565b6040519081526020016102df565b34801561033f57600080fd5b5061035361034e36600461270d565b610951565b6040516001600160a01b0390911681526020016102df565b34801561037757600080fd5b5061038b6103863660046126e1565b6109de565b005b34801561039957600080fd5b50600254610325565b3480156103ae57600080fd5b5061038b6103bd3660046125b8565b610af4565b3480156103ce57600080fd5b506103256103dd3660046126e1565b610b26565b3480156103ee57600080fd5b50610325611b5881565b34801561040457600080fd5b5061032566d529ae9e86000081565b34801561041f57600080fd5b5061038b610bd9565b34801561043457600080fd5b5061038b6104433660046125b8565b610d3d565b34801561045457600080fd5b5061038b61046336600461270d565b610d58565b34801561047457600080fd5b50610488610483366004612477565b610db1565b6040516102df919061295e565b3480156104a157600080fd5b50610325600d5481565b3480156104b757600080fd5b506102d36104c6366004612659565b610e6a565b3480156104d757600080fd5b50610325600b5481565b3480156104ed57600080fd5b506103256104fc36600461270d565b610eec565b34801561050d57600080fd5b50610325600a81565b34801561052257600080fd5b5061038b61053136600461277d565b610f59565b34801561054257600080fd5b5061038b61055136600461252f565b610f96565b34801561056257600080fd5b506102d3610571366004612477565b600e6020526000908152604090205460ff1681565b34801561059257600080fd5b506103536105a136600461270d565b610fe0565b3480156105b257600080fd5b506102fd61106c565b3480156105c757600080fd5b506103256105d6366004612477565b6110fa565b3480156105e757600080fd5b5061038b6111c8565b3480156105fc57600080fd5b50610325600a5481565b34801561061257600080fd5b506005546001600160a01b0316610353565b34801561063057600080fd5b506102fd6111fe565b34801561064557600080fd5b50610325610654366004612477565b600f6020526000908152604090205481565b34801561067257600080fd5b5061038b6106813660046126ae565b61120d565b34801561069257600080fd5b5061038b6106a13660046125f9565b6112d2565b61038b6106b43660046127eb565b61130a565b3480156106c557600080fd5b5061032566b1a2bc2ec5000081565b3480156106e057600080fd5b5061038b6106ef3660046127c6565b61172d565b34801561070057600080fd5b506102fd61070f36600461270d565b6117f8565b34801561072057600080fd5b50600754610353906001600160a01b031681565b34801561074057600080fd5b5061038b61074f366004612477565b611879565b34801561076057600080fd5b5061038b61076f36600461270d565b6118c5565b34801561078057600080fd5b506102d361078f366004612494565b6118f4565b3480156107a057600080fd5b50600954610353906001600160a01b031681565b3480156107c057600080fd5b5061038b6107cf36600461270d565b6119e7565b3480156107e057600080fd5b5061038b6107ef36600461270d565b611a16565b34801561080057600080fd5b5061038b61080f366004612477565b611a93565b34801561082057600080fd5b5061038b61082f3660046124cd565b611b2b565b34801561084057600080fd5b50610325601481565b34801561085557600080fd5b50610325600c5481565b34801561086b57600080fd5b50610325600381565b34801561088057600080fd5b50600854610353906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b14806108b957506108b982611b6d565b92915050565b6060600080546108ce90612b97565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612b97565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b5050505050905090565b600061095c82611bbd565b6109c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006109e982610fe0565b9050806001600160a01b0316836001600160a01b03161415610a575760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109b9565b336001600160a01b0382161480610a735750610a7381336118f4565b610ae55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109b9565b610aef8383611c07565b505050565b610aff335b82611c75565b610b1b5760405162461bcd60e51b81526004016109b990612a87565b610aef838383611d37565b6000610b31836110fa565b8210610b4f5760405162461bcd60e51b81526004016109b9906129b5565b6000805b600254811015610bc05760028181548110610b7057610b70612c2d565b6000918252602090912001546001600160a01b0386811691161415610bae5783821415610ba05791506108b99050565b81610baa81612bd2565b9250505b80610bb881612bd2565b915050610b53565b5060405162461bcd60e51b81526004016109b9906129b5565b600880546000916001600160a01b0390911690606490610bfa904790612b35565b610c049190612b21565b604051600081818185875af1925050503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b5050905080610c965760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565312e0000000000000060448201526064016109b9565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ce3576040519150601f19603f3d011682016040523d82523d6000602084013e610ce8565b606091505b5050905080610d395760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565322e0000000000000060448201526064016109b9565b5050565b610aef838383604051806020016040528060008152506112d2565b610d6133610af9565b610da55760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b60448201526064016109b9565b610dae81611e8d565b50565b60606000610dbe836110fa565b905080610ddf5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610dfa57610dfa612c43565b604051908082528060200260200182016040528015610e23578160200160208202803683370190505b50905060005b82811015610dd757610e3b8582610b26565b828281518110610e4d57610e4d612c2d565b602090810291909101015280610e6281612bd2565b915050610e29565b6000805b82811015610edf57846001600160a01b03166002858584818110610e9457610e94612c2d565b9050602002013581548110610eab57610eab612c2d565b6000918252602090912001546001600160a01b031614610ecf576000915050610ee5565b610ed881612bd2565b9050610e6e565b50600190505b9392505050565b6002546000908210610f555760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109b9565b5090565b6005546001600160a01b03163314610f835760405162461bcd60e51b81526004016109b990612a52565b8051610d3990600690602084019061229d565b60005b8251811015610fd957610fc78585858481518110610fb957610fb9612c2d565b6020026020010151856112d2565b80610fd181612bd2565b915050610f99565b5050505050565b60008060028381548110610ff657610ff6612c2d565b6000918252602090912001546001600160a01b03169050806108b95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109b9565b6006805461107990612b97565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590612b97565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b505050505081565b60006001600160a01b0382166111655760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109b9565b6000805b6002548110156111c1576002818154811061118657611186612c2d565b6000918252602090912001546001600160a01b03858116911614156111b1576111ae82612bd2565b91505b6111ba81612bd2565b9050611169565b5092915050565b6005546001600160a01b031633146111f25760405162461bcd60e51b81526004016109b990612a52565b6111fc6000611f0f565b565b6060600180546108ce90612b97565b6001600160a01b0382163314156112665760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b9565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112dc3383611c75565b6112f85760405162461bcd60e51b81526004016109b990612a87565b61130484848484611f61565b50505050565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120600254611b586113518683612b09565b106113945760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b60448201526064016109b9565b600c546001141561152d576113e084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a549150859050611f94565b6114385760405162461bcd60e51b815260206004820152602360248201527f4e6f74206f6e20626c75656c6973742e204d65726b6c652050726f6f6620666160448201526234b61760e91b60648201526084016109b9565b336000908152600f6020526040902054600390611456908790612b09565b11156114a45760405162461bcd60e51b815260206004820152601760248201527f4578636565647320626c75656c69737420737570706c7900000000000000000060448201526064016109b9565b346114b666470de4df82000087612b35565b146115035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e00000000000000000060448201526064016109b9565b336000908152600f602052604081208054879290611522908490612b09565b909155506116f59050565b600c546002141561164f5761157984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150859050611f94565b6115d15760405162461bcd60e51b8152602060048201526024808201527f4e6f74206f6e2077686974656c6973742e204d65726b6c652050726f6f66206660448201526330b4b61760e11b60648201526084016109b9565b336000908152600f6020526040902054600a906115ef908790612b09565b111561163d5760405162461bcd60e51b815260206004820152601860248201527f457863656564732077686974656c69737420737570706c79000000000000000060448201526064016109b9565b346114b666b1a2bc2ec5000087612b35565b600c54600314156116bc57601485106116aa5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e0000000060448201526064016109b9565b346114b666d529ae9e86000087612b35565b60405162461bcd60e51b815260206004820152600e60248201526d29b0b632903737ba1037b832b71760911b60448201526064016109b9565b60005b85811015611725576117133361170e8385612b09565b611faa565b8061171d81612bd2565b9150506116f8565b505050505050565b6005546001600160a01b031633146117575760405162461bcd60e51b81526004016109b990612a52565b600082600d546117679190612b54565b10156117ad5760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b2399036b0bc1033b4bb32b0bbb0bc9760591b60448201526064016109b9565b60025460005b838110156117db576117c98361170e8385612b09565b806117d381612bd2565b9150506117b3565b5082600d60008282546117ee9190612b54565b9091555050505050565b606061180382611bbd565b6118475760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109b9565b600661185283612026565b604051602001611863929190612866565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109b990612a52565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118ef5760405162461bcd60e51b81526004016109b990612a52565b600b55565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561194157600080fd5b505afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119799190612760565b6001600160a01b031614806119a657506001600160a01b0383166000908152600e602052604090205460ff165b156119b55760019150506108b9565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b03163314611a115760405162461bcd60e51b81526004016109b990612a52565b600a55565b6005546001600160a01b03163314611a405760405162461bcd60e51b81526004016109b990612a52565b6004600c54108015611a50575060015b611a8e5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21039ba30ba3ab99760891b60448201526064016109b9565b600c55565b6005546001600160a01b03163314611abd5760405162461bcd60e51b81526004016109b990612a52565b6001600160a01b038116611b225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b9565b610dae81611f0f565b60005b815181101561130457611b5b8484848481518110611b4e57611b4e612c2d565b6020026020010151610af4565b80611b6581612bd2565b915050611b2e565b60006001600160e01b031982166380ac58cd60e01b1480611b9e57506001600160e01b03198216635b5e139f60e01b145b806108b957506301ffc9a760e01b6001600160e01b03198316146108b9565b600254600090821080156108b9575060006001600160a01b031660028381548110611bea57611bea612c2d565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c3c82610fe0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8082611bbd565b611ce15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b9565b6000611cec83610fe0565b9050806001600160a01b0316846001600160a01b03161480611d275750836001600160a01b0316611d1c84610951565b6001600160a01b0316145b806119df57506119df81856118f4565b826001600160a01b0316611d4a82610fe0565b6001600160a01b031614611db25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109b9565b6001600160a01b038216611e145760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b9565b611e1f600082611c07565b8160028281548110611e3357611e33612c2d565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611e9882610fe0565b9050611ea5600083611c07565b600060028381548110611eba57611eba612c2d565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f6c848484611d37565b611f7884848484612124565b6113045760405162461bcd60e51b81526004016109b990612a00565b600082611fa18584612231565b14949350505050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161204a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612074578061205e81612bd2565b915061206d9050600a83612b21565b915061204e565b60008167ffffffffffffffff81111561208f5761208f612c43565b6040519080825280601f01601f1916602001820160405280156120b9576020820181803683370190505b5090505b84156119df576120ce600183612b54565b91506120db600a86612bed565b6120e6906030612b09565b60f81b8183815181106120fb576120fb612c2d565b60200101906001600160f81b031916908160001a90535061211d600a86612b21565b94506120bd565b60006001600160a01b0384163b1561222657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612168903390899088908890600401612921565b602060405180830381600087803b15801561218257600080fd5b505af19250505080156121b2575060408051601f3d908101601f191682019092526121af91810190612743565b60015b61220c573d8080156121e0576040519150601f19603f3d011682016040523d82523d6000602084013e6121e5565b606091505b5080516122045760405162461bcd60e51b81526004016109b990612a00565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119df565b506001949350505050565b600081815b8451811015610dd757600085828151811061225357612253612c2d565b60200260200101519050808311612279576000838152602082905260409020925061228a565b600081815260208490526040902092505b508061229581612bd2565b915050612236565b8280546122a990612b97565b90600052602060002090601f0160209004810192826122cb5760008555612311565b82601f106122e457805160ff1916838001178555612311565b82800160010185558215612311579182015b828111156123115782518255916020019190600101906122f6565b50610f559291505b80821115610f555760008155600101612319565b600067ffffffffffffffff83111561234757612347612c43565b61235a601f8401601f1916602001612ad8565b905082815283838301111561236e57600080fd5b828260208301376000602084830101529392505050565b60008083601f84011261239757600080fd5b50813567ffffffffffffffff8111156123af57600080fd5b6020830191508360208260051b85010111156123ca57600080fd5b9250929050565b600082601f8301126123e257600080fd5b8135602067ffffffffffffffff8211156123fe576123fe612c43565b8160051b61240d828201612ad8565b83815282810190868401838801850189101561242857600080fd5b600093505b8584101561244b57803583526001939093019291840191840161242d565b50979650505050505050565b600082601f83011261246857600080fd5b610ee58383356020850161232d565b60006020828403121561248957600080fd5b8135610ee581612c59565b600080604083850312156124a757600080fd5b82356124b281612c59565b915060208301356124c281612c59565b809150509250929050565b6000806000606084860312156124e257600080fd5b83356124ed81612c59565b925060208401356124fd81612c59565b9150604084013567ffffffffffffffff81111561251957600080fd5b612525868287016123d1565b9150509250925092565b6000806000806080858703121561254557600080fd5b843561255081612c59565b9350602085013561256081612c59565b9250604085013567ffffffffffffffff8082111561257d57600080fd5b612589888389016123d1565b9350606087013591508082111561259f57600080fd5b506125ac87828801612457565b91505092959194509250565b6000806000606084860312156125cd57600080fd5b83356125d881612c59565b925060208401356125e881612c59565b929592945050506040919091013590565b6000806000806080858703121561260f57600080fd5b843561261a81612c59565b9350602085013561262a81612c59565b925060408501359150606085013567ffffffffffffffff81111561264d57600080fd5b6125ac87828801612457565b60008060006040848603121561266e57600080fd5b833561267981612c59565b9250602084013567ffffffffffffffff81111561269557600080fd5b6126a186828701612385565b9497909650939450505050565b600080604083850312156126c157600080fd5b82356126cc81612c59565b9150602083013580151581146124c257600080fd5b600080604083850312156126f457600080fd5b82356126ff81612c59565b946020939093013593505050565b60006020828403121561271f57600080fd5b5035919050565b60006020828403121561273857600080fd5b8135610ee581612c6e565b60006020828403121561275557600080fd5b8151610ee581612c6e565b60006020828403121561277257600080fd5b8151610ee581612c59565b60006020828403121561278f57600080fd5b813567ffffffffffffffff8111156127a657600080fd5b8201601f810184136127b757600080fd5b6119df8482356020840161232d565b600080604083850312156127d957600080fd5b8235915060208301356124c281612c59565b60008060006040848603121561280057600080fd5b83359250602084013567ffffffffffffffff81111561269557600080fd5b60008151808452612836816020860160208601612b6b565b601f01601f19169290920160200192915050565b6000815161285c818560208601612b6b565b9290920192915050565b600080845481600182811c91508083168061288257607f831692505b60208084108214156128a257634e487b7160e01b86526022600452602486fd5b8180156128b657600181146128c7576128f4565b60ff198616895284890196506128f4565b60008b81526020902060005b868110156128ec5781548b8201529085019083016128d3565b505084890196505b505050505050612918612907828661284a565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129549083018461281e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129965783518352928401929184019160010161297a565b50909695505050505050565b602081526000610ee5602083018461281e565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b0157612b01612c43565b604052919050565b60008219821115612b1c57612b1c612c01565b500190565b600082612b3057612b30612c17565b500490565b6000816000190483118215151615612b4f57612b4f612c01565b500290565b600082821015612b6657612b66612c01565b500390565b60005b83811015612b86578181015183820152602001612b6e565b838111156113045750506000910152565b600181811c90821680612bab57607f821691505b60208210811415612bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612be657612be6612c01565b5060010190565b600082612bfc57612bfc612c17565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dae57600080fd5b6001600160e01b031981168114610dae57600080fdfea26469706673582212206c8d42a1d9c8c025e9840410de89eea5cb50d57606f29348ab8a22a4096fd6f464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d920000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056544b456d6973473378333541754450666e786974562f00000000000000000000

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c806370a0823111610175578063cd7c0326116100dc578063f29f15af11610095578063f43a22dc1161006f578063f43a22dc14610834578063f9020e3314610849578063fe930b901461085f578063ffd69c0e1461087457600080fd5b8063f29f15af146107d4578063f2fde38b146107f4578063f3993d111461081457600080fd5b8063cd7c032614610714578063d26ea6c014610734578063df9132ef14610754578063e985e9c514610774578063eaa6074214610794578063f126e325146107b457600080fd5b8063a22cb4651161012e578063a22cb46514610666578063b88d4fde14610686578063ba41b0c6146106a6578063c0f2f251146106b9578063c79b25cf146106d4578063c87b56dd146106f457600080fd5b806370a08231146105bb578063715018a6146105db578063832cf109146105f05780638da5cb5b1461060657806395d89b41146106245780639ec00c951461063957600080fd5b806342966c681161021957806355042e33116101d257806355042e331461050157806355f804b3146105165780635a4fee30146105365780635bab26e2146105565780636352211e146105865780636c0360eb146105a657600080fd5b806342966c6814610448578063438b6300146104685780634c5b7a29146104955780634d44660c146104ab5780634f41d114146104cb5780634f6ccce7146104e157600080fd5b806323b872dd1161026b57806323b872dd146103a25780632f745c59146103c257806332cb6b0c146103e25780633c8da588146103f85780633ccfd60b1461041357806342842e0e1461042857600080fd5b806301ffc9a7146102b357806306fdde03146102e857806307839b031461030a578063081812fc14610333578063095ea7b31461036b57806318160ddd1461038d575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612726565b610894565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108bf565b6040516102df91906129a2565b34801561031657600080fd5b5061032566470de4df82000081565b6040519081526020016102df565b34801561033f57600080fd5b5061035361034e36600461270d565b610951565b6040516001600160a01b0390911681526020016102df565b34801561037757600080fd5b5061038b6103863660046126e1565b6109de565b005b34801561039957600080fd5b50600254610325565b3480156103ae57600080fd5b5061038b6103bd3660046125b8565b610af4565b3480156103ce57600080fd5b506103256103dd3660046126e1565b610b26565b3480156103ee57600080fd5b50610325611b5881565b34801561040457600080fd5b5061032566d529ae9e86000081565b34801561041f57600080fd5b5061038b610bd9565b34801561043457600080fd5b5061038b6104433660046125b8565b610d3d565b34801561045457600080fd5b5061038b61046336600461270d565b610d58565b34801561047457600080fd5b50610488610483366004612477565b610db1565b6040516102df919061295e565b3480156104a157600080fd5b50610325600d5481565b3480156104b757600080fd5b506102d36104c6366004612659565b610e6a565b3480156104d757600080fd5b50610325600b5481565b3480156104ed57600080fd5b506103256104fc36600461270d565b610eec565b34801561050d57600080fd5b50610325600a81565b34801561052257600080fd5b5061038b61053136600461277d565b610f59565b34801561054257600080fd5b5061038b61055136600461252f565b610f96565b34801561056257600080fd5b506102d3610571366004612477565b600e6020526000908152604090205460ff1681565b34801561059257600080fd5b506103536105a136600461270d565b610fe0565b3480156105b257600080fd5b506102fd61106c565b3480156105c757600080fd5b506103256105d6366004612477565b6110fa565b3480156105e757600080fd5b5061038b6111c8565b3480156105fc57600080fd5b50610325600a5481565b34801561061257600080fd5b506005546001600160a01b0316610353565b34801561063057600080fd5b506102fd6111fe565b34801561064557600080fd5b50610325610654366004612477565b600f6020526000908152604090205481565b34801561067257600080fd5b5061038b6106813660046126ae565b61120d565b34801561069257600080fd5b5061038b6106a13660046125f9565b6112d2565b61038b6106b43660046127eb565b61130a565b3480156106c557600080fd5b5061032566b1a2bc2ec5000081565b3480156106e057600080fd5b5061038b6106ef3660046127c6565b61172d565b34801561070057600080fd5b506102fd61070f36600461270d565b6117f8565b34801561072057600080fd5b50600754610353906001600160a01b031681565b34801561074057600080fd5b5061038b61074f366004612477565b611879565b34801561076057600080fd5b5061038b61076f36600461270d565b6118c5565b34801561078057600080fd5b506102d361078f366004612494565b6118f4565b3480156107a057600080fd5b50600954610353906001600160a01b031681565b3480156107c057600080fd5b5061038b6107cf36600461270d565b6119e7565b3480156107e057600080fd5b5061038b6107ef36600461270d565b611a16565b34801561080057600080fd5b5061038b61080f366004612477565b611a93565b34801561082057600080fd5b5061038b61082f3660046124cd565b611b2b565b34801561084057600080fd5b50610325601481565b34801561085557600080fd5b50610325600c5481565b34801561086b57600080fd5b50610325600381565b34801561088057600080fd5b50600854610353906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b14806108b957506108b982611b6d565b92915050565b6060600080546108ce90612b97565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612b97565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b5050505050905090565b600061095c82611bbd565b6109c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006109e982610fe0565b9050806001600160a01b0316836001600160a01b03161415610a575760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109b9565b336001600160a01b0382161480610a735750610a7381336118f4565b610ae55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109b9565b610aef8383611c07565b505050565b610aff335b82611c75565b610b1b5760405162461bcd60e51b81526004016109b990612a87565b610aef838383611d37565b6000610b31836110fa565b8210610b4f5760405162461bcd60e51b81526004016109b9906129b5565b6000805b600254811015610bc05760028181548110610b7057610b70612c2d565b6000918252602090912001546001600160a01b0386811691161415610bae5783821415610ba05791506108b99050565b81610baa81612bd2565b9250505b80610bb881612bd2565b915050610b53565b5060405162461bcd60e51b81526004016109b9906129b5565b600880546000916001600160a01b0390911690606490610bfa904790612b35565b610c049190612b21565b604051600081818185875af1925050503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b5050905080610c965760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565312e0000000000000060448201526064016109b9565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ce3576040519150601f19603f3d011682016040523d82523d6000602084013e610ce8565b606091505b5050905080610d395760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565322e0000000000000060448201526064016109b9565b5050565b610aef838383604051806020016040528060008152506112d2565b610d6133610af9565b610da55760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b60448201526064016109b9565b610dae81611e8d565b50565b60606000610dbe836110fa565b905080610ddf5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610dfa57610dfa612c43565b604051908082528060200260200182016040528015610e23578160200160208202803683370190505b50905060005b82811015610dd757610e3b8582610b26565b828281518110610e4d57610e4d612c2d565b602090810291909101015280610e6281612bd2565b915050610e29565b6000805b82811015610edf57846001600160a01b03166002858584818110610e9457610e94612c2d565b9050602002013581548110610eab57610eab612c2d565b6000918252602090912001546001600160a01b031614610ecf576000915050610ee5565b610ed881612bd2565b9050610e6e565b50600190505b9392505050565b6002546000908210610f555760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109b9565b5090565b6005546001600160a01b03163314610f835760405162461bcd60e51b81526004016109b990612a52565b8051610d3990600690602084019061229d565b60005b8251811015610fd957610fc78585858481518110610fb957610fb9612c2d565b6020026020010151856112d2565b80610fd181612bd2565b915050610f99565b5050505050565b60008060028381548110610ff657610ff6612c2d565b6000918252602090912001546001600160a01b03169050806108b95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109b9565b6006805461107990612b97565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590612b97565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b505050505081565b60006001600160a01b0382166111655760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109b9565b6000805b6002548110156111c1576002818154811061118657611186612c2d565b6000918252602090912001546001600160a01b03858116911614156111b1576111ae82612bd2565b91505b6111ba81612bd2565b9050611169565b5092915050565b6005546001600160a01b031633146111f25760405162461bcd60e51b81526004016109b990612a52565b6111fc6000611f0f565b565b6060600180546108ce90612b97565b6001600160a01b0382163314156112665760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b9565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112dc3383611c75565b6112f85760405162461bcd60e51b81526004016109b990612a87565b61130484848484611f61565b50505050565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120600254611b586113518683612b09565b106113945760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b60448201526064016109b9565b600c546001141561152d576113e084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a549150859050611f94565b6114385760405162461bcd60e51b815260206004820152602360248201527f4e6f74206f6e20626c75656c6973742e204d65726b6c652050726f6f6620666160448201526234b61760e91b60648201526084016109b9565b336000908152600f6020526040902054600390611456908790612b09565b11156114a45760405162461bcd60e51b815260206004820152601760248201527f4578636565647320626c75656c69737420737570706c7900000000000000000060448201526064016109b9565b346114b666470de4df82000087612b35565b146115035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e00000000000000000060448201526064016109b9565b336000908152600f602052604081208054879290611522908490612b09565b909155506116f59050565b600c546002141561164f5761157984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150859050611f94565b6115d15760405162461bcd60e51b8152602060048201526024808201527f4e6f74206f6e2077686974656c6973742e204d65726b6c652050726f6f66206660448201526330b4b61760e11b60648201526084016109b9565b336000908152600f6020526040902054600a906115ef908790612b09565b111561163d5760405162461bcd60e51b815260206004820152601860248201527f457863656564732077686974656c69737420737570706c79000000000000000060448201526064016109b9565b346114b666b1a2bc2ec5000087612b35565b600c54600314156116bc57601485106116aa5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e0000000060448201526064016109b9565b346114b666d529ae9e86000087612b35565b60405162461bcd60e51b815260206004820152600e60248201526d29b0b632903737ba1037b832b71760911b60448201526064016109b9565b60005b85811015611725576117133361170e8385612b09565b611faa565b8061171d81612bd2565b9150506116f8565b505050505050565b6005546001600160a01b031633146117575760405162461bcd60e51b81526004016109b990612a52565b600082600d546117679190612b54565b10156117ad5760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b2399036b0bc1033b4bb32b0bbb0bc9760591b60448201526064016109b9565b60025460005b838110156117db576117c98361170e8385612b09565b806117d381612bd2565b9150506117b3565b5082600d60008282546117ee9190612b54565b9091555050505050565b606061180382611bbd565b6118475760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109b9565b600661185283612026565b604051602001611863929190612866565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109b990612a52565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118ef5760405162461bcd60e51b81526004016109b990612a52565b600b55565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561194157600080fd5b505afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119799190612760565b6001600160a01b031614806119a657506001600160a01b0383166000908152600e602052604090205460ff165b156119b55760019150506108b9565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b03163314611a115760405162461bcd60e51b81526004016109b990612a52565b600a55565b6005546001600160a01b03163314611a405760405162461bcd60e51b81526004016109b990612a52565b6004600c54108015611a50575060015b611a8e5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21039ba30ba3ab99760891b60448201526064016109b9565b600c55565b6005546001600160a01b03163314611abd5760405162461bcd60e51b81526004016109b990612a52565b6001600160a01b038116611b225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b9565b610dae81611f0f565b60005b815181101561130457611b5b8484848481518110611b4e57611b4e612c2d565b6020026020010151610af4565b80611b6581612bd2565b915050611b2e565b60006001600160e01b031982166380ac58cd60e01b1480611b9e57506001600160e01b03198216635b5e139f60e01b145b806108b957506301ffc9a760e01b6001600160e01b03198316146108b9565b600254600090821080156108b9575060006001600160a01b031660028381548110611bea57611bea612c2d565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c3c82610fe0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8082611bbd565b611ce15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b9565b6000611cec83610fe0565b9050806001600160a01b0316846001600160a01b03161480611d275750836001600160a01b0316611d1c84610951565b6001600160a01b0316145b806119df57506119df81856118f4565b826001600160a01b0316611d4a82610fe0565b6001600160a01b031614611db25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109b9565b6001600160a01b038216611e145760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b9565b611e1f600082611c07565b8160028281548110611e3357611e33612c2d565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611e9882610fe0565b9050611ea5600083611c07565b600060028381548110611eba57611eba612c2d565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611f6c848484611d37565b611f7884848484612124565b6113045760405162461bcd60e51b81526004016109b990612a00565b600082611fa18584612231565b14949350505050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161204a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612074578061205e81612bd2565b915061206d9050600a83612b21565b915061204e565b60008167ffffffffffffffff81111561208f5761208f612c43565b6040519080825280601f01601f1916602001820160405280156120b9576020820181803683370190505b5090505b84156119df576120ce600183612b54565b91506120db600a86612bed565b6120e6906030612b09565b60f81b8183815181106120fb576120fb612c2d565b60200101906001600160f81b031916908160001a90535061211d600a86612b21565b94506120bd565b60006001600160a01b0384163b1561222657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612168903390899088908890600401612921565b602060405180830381600087803b15801561218257600080fd5b505af19250505080156121b2575060408051601f3d908101601f191682019092526121af91810190612743565b60015b61220c573d8080156121e0576040519150601f19603f3d011682016040523d82523d6000602084013e6121e5565b606091505b5080516122045760405162461bcd60e51b81526004016109b990612a00565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119df565b506001949350505050565b600081815b8451811015610dd757600085828151811061225357612253612c2d565b60200260200101519050808311612279576000838152602082905260409020925061228a565b600081815260208490526040902092505b508061229581612bd2565b915050612236565b8280546122a990612b97565b90600052602060002090601f0160209004810192826122cb5760008555612311565b82601f106122e457805160ff1916838001178555612311565b82800160010185558215612311579182015b828111156123115782518255916020019190600101906122f6565b50610f559291505b80821115610f555760008155600101612319565b600067ffffffffffffffff83111561234757612347612c43565b61235a601f8401601f1916602001612ad8565b905082815283838301111561236e57600080fd5b828260208301376000602084830101529392505050565b60008083601f84011261239757600080fd5b50813567ffffffffffffffff8111156123af57600080fd5b6020830191508360208260051b85010111156123ca57600080fd5b9250929050565b600082601f8301126123e257600080fd5b8135602067ffffffffffffffff8211156123fe576123fe612c43565b8160051b61240d828201612ad8565b83815282810190868401838801850189101561242857600080fd5b600093505b8584101561244b57803583526001939093019291840191840161242d565b50979650505050505050565b600082601f83011261246857600080fd5b610ee58383356020850161232d565b60006020828403121561248957600080fd5b8135610ee581612c59565b600080604083850312156124a757600080fd5b82356124b281612c59565b915060208301356124c281612c59565b809150509250929050565b6000806000606084860312156124e257600080fd5b83356124ed81612c59565b925060208401356124fd81612c59565b9150604084013567ffffffffffffffff81111561251957600080fd5b612525868287016123d1565b9150509250925092565b6000806000806080858703121561254557600080fd5b843561255081612c59565b9350602085013561256081612c59565b9250604085013567ffffffffffffffff8082111561257d57600080fd5b612589888389016123d1565b9350606087013591508082111561259f57600080fd5b506125ac87828801612457565b91505092959194509250565b6000806000606084860312156125cd57600080fd5b83356125d881612c59565b925060208401356125e881612c59565b929592945050506040919091013590565b6000806000806080858703121561260f57600080fd5b843561261a81612c59565b9350602085013561262a81612c59565b925060408501359150606085013567ffffffffffffffff81111561264d57600080fd5b6125ac87828801612457565b60008060006040848603121561266e57600080fd5b833561267981612c59565b9250602084013567ffffffffffffffff81111561269557600080fd5b6126a186828701612385565b9497909650939450505050565b600080604083850312156126c157600080fd5b82356126cc81612c59565b9150602083013580151581146124c257600080fd5b600080604083850312156126f457600080fd5b82356126ff81612c59565b946020939093013593505050565b60006020828403121561271f57600080fd5b5035919050565b60006020828403121561273857600080fd5b8135610ee581612c6e565b60006020828403121561275557600080fd5b8151610ee581612c6e565b60006020828403121561277257600080fd5b8151610ee581612c59565b60006020828403121561278f57600080fd5b813567ffffffffffffffff8111156127a657600080fd5b8201601f810184136127b757600080fd5b6119df8482356020840161232d565b600080604083850312156127d957600080fd5b8235915060208301356124c281612c59565b60008060006040848603121561280057600080fd5b83359250602084013567ffffffffffffffff81111561269557600080fd5b60008151808452612836816020860160208601612b6b565b601f01601f19169290920160200192915050565b6000815161285c818560208601612b6b565b9290920192915050565b600080845481600182811c91508083168061288257607f831692505b60208084108214156128a257634e487b7160e01b86526022600452602486fd5b8180156128b657600181146128c7576128f4565b60ff198616895284890196506128f4565b60008b81526020902060005b868110156128ec5781548b8201529085019083016128d3565b505084890196505b505050505050612918612907828661284a565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129549083018461281e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129965783518352928401929184019160010161297a565b50909695505050505050565b602081526000610ee5602083018461281e565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b0157612b01612c43565b604052919050565b60008219821115612b1c57612b1c612c01565b500190565b600082612b3057612b30612c17565b500490565b6000816000190483118215151615612b4f57612b4f612c01565b500290565b600082821015612b6657612b66612c01565b500390565b60005b83811015612b86578181015183820152602001612b6e565b838111156113045750506000910152565b600181811c90821680612bab57607f821691505b60208210811415612bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612be657612be6612c01565b5060010190565b600082612bfc57612bfc612c17565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dae57600080fd5b6001600160e01b031981168114610dae57600080fdfea26469706673582212206c8d42a1d9c8c025e9840410de89eea5cb50d57606f29348ab8a22a4096fd6f464736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d920000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056544b456d6973473378333541754450666e786974562f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmdYGxLntDtv4ganQcDnzfSPVTKEmisG3x35AuDPfnxitV/
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [2] : _payee1 (address): 0x99DCCFb625e61FA3980BDda32B55284aD2aa9aF5
Arg [3] : _payee2 (address): 0xfd041d4Ee464bA0FaD5D627f599702BEC3CB3d92

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 00000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5
Arg [3] : 000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d92
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056
Arg [6] : 544b456d6973473378333541754450666e786974562f00000000000000000000


Deployed Bytecode Sourcemap

144:6325:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;529:222:5;;;;;;;;;;-1:-1:-1;529:222:5;;;;;:::i;:::-;;:::i;:::-;;;12588:14:14;;12581:22;12563:41;;12551:2;12536:18;529:222:5;;;;;;;;2159:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;884:60:1:-;;;;;;;;;;;;934:10;884:60;;;;;12761:25:14;;;12749:2;12734:18;884:60:1;12615:177:14;2942:295:4;;;;;;;;;;-1:-1:-1;2942:295:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;11249:32:14;;;11231:51;;11219:2;11204:18;2942:295:4;11085:203:14;2480:401:4;;;;;;;;;;-1:-1:-1;2480:401:4;;;;;:::i;:::-;;:::i;:::-;;822:108:5;;;;;;;;;;-1:-1:-1;909:7:5;:14;822:108;;3956:364:4;;;;;;;;;;-1:-1:-1;3956:364:4;;;;;:::i;:::-;;:::i;1283:478:5:-;;;;;;;;;;-1:-1:-1;1283:478:5;;;;;:::i;:::-;;:::i;583:54:1:-;;;;;;;;;;;;633:4;583:54;;760:60;;;;;;;;;;;;810:10;760:60;;4501:305;;;;;;;;;;;;;:::i;4386:179:4:-;;;;;;;;;;-1:-1:-1;4386:179:4;;;;;:::i;:::-;;:::i;4340:155:1:-;;;;;;;;;;-1:-1:-1;4340:155:1;;;;;:::i;:::-;;:::i;4812:391::-;;;;;;;;;;-1:-1:-1;4812:391:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;643:52::-;;;;;;;;;;;;;;;;5688:264;;;;;;;;;;-1:-1:-1;5688:264:1;;;;;:::i;:::-;;:::i;438:48::-;;;;;;;;;;;;;;;;1002:202:5;;;;;;;;;;-1:-1:-1;1002:202:5;;;;;:::i;:::-;;:::i;951:52:1:-;;;;;;;;;;;;1001:2;951:52;;1511:96;;;;;;;;;;-1:-1:-1;1511:96:1;;;;;:::i;:::-;;:::i;5431:251::-;;;;;;;;;;-1:-1:-1;5431:251:1;;;;;:::i;:::-;;:::i;1076:44::-;;;;;;;;;;-1:-1:-1;1076:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;1784:313:4;;;;;;;;;;-1:-1:-1;1784:313:4;;;;;:::i;:::-;;:::i;203:35:1:-;;;;;;;;;;;;;:::i;1350:377:4:-;;;;;;;;;;-1:-1:-1;1350:377:4;;;;;:::i;:::-;;:::i;1661:101:12:-;;;;;;;;;;;;;:::i;384:48:1:-;;;;;;;;;;;;;;;;1029:85:12;;;;;;;;;;-1:-1:-1;1101:6:12;;-1:-1:-1;;;;;1101:6:12;1029:85;;2321:102:4;;;;;;;;;;;;;:::i;1126:47:1:-;;;;;;;;;;-1:-1:-1;1126:47:1;;;;;:::i;:::-;;;;;;;;;;;;;;3304:318:4;;;;;;;;;;-1:-1:-1;3304:318:4;;;;;:::i;:::-;;:::i;4631:354::-;;;;;;;;;;-1:-1:-1;4631:354:4;;;;;:::i;:::-;;:::i;2554:1470:1:-;;;;;;:::i;:::-;;:::i;1009:60::-;;;;;;;;;;;;1059:10;1009:60;;4030:304;;;;;;;;;;-1:-1:-1;4030:304:1;;;;;:::i;:::-;;:::i;1613:236::-;;;;;;;;;;-1:-1:-1;1613:236:1;;;;;:::i;:::-;;:::i;249:48::-;;;;;;;;;;-1:-1:-1;249:48:1;;;;-1:-1:-1;;;;;249:48:1;;;1855:144;;;;;;;;;;-1:-1:-1;1855:144:1;;;;;:::i;:::-;;:::i;2193:181::-;;;;;;;;;;-1:-1:-1;2193:181:1;;;;;:::i;:::-;;:::i;5958:352::-;;;;;;;;;;-1:-1:-1;5958:352:1;;;;;:::i;:::-;;:::i;343:34::-;;;;;;;;;;-1:-1:-1;343:34:1;;;;-1:-1:-1;;;;;343:34:1;;;2006:181;;;;;;;;;;-1:-1:-1;2006:181:1;;;;;:::i;:::-;;:::i;2380:167::-;;;;;;;;;;-1:-1:-1;2380:167:1;;;;;:::i;:::-;;:::i;1911:198:12:-;;;;;;;;;;-1:-1:-1;1911:198:12;;;;;:::i;:::-;;:::i;5209:216:1:-;;;;;;;;;;-1:-1:-1;5209:216:1;;;;;:::i;:::-;;:::i;702:52::-;;;;;;;;;;;;752:2;702:52;;492:51;;;;;;;;;;;;;;;;827;;;;;;;;;;;;877:1;827:51;;303:34;;;;;;;;;;-1:-1:-1;303:34:1;;;;-1:-1:-1;;;;;303:34:1;;;529:222:5;631:4;-1:-1:-1;;;;;;654:50:5;;-1:-1:-1;;;654:50:5;;:90;;;708:36;732:11;708:23;:36::i;:::-;647:97;529:222;-1:-1:-1;;529:222:5:o;2159:98:4:-;2213:13;2245:5;2238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2159:98;:::o;2942:295::-;3058:7;3102:16;3110:7;3102;:16::i;:::-;3081:107;;;;-1:-1:-1;;;3081:107:4;;19746:2:14;3081:107:4;;;19728:21:14;19785:2;19765:18;;;19758:30;19824:34;19804:18;;;19797:62;-1:-1:-1;;;19875:18:14;;;19868:42;19927:19;;3081:107:4;;;;;;;;;-1:-1:-1;3206:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;3206:24:4;;2942:295::o;2480:401::-;2560:13;2576:23;2591:7;2576:14;:23::i;:::-;2560:39;;2623:5;-1:-1:-1;;;;;2617:11:4;:2;-1:-1:-1;;;;;2617:11:4;;;2609:57;;;;-1:-1:-1;;;2609:57:4;;22028:2:14;2609:57:4;;;22010:21:14;22067:2;22047:18;;;22040:30;22106:34;22086:18;;;22079:62;-1:-1:-1;;;22157:18:14;;;22150:31;22198:19;;2609:57:4;21826:397:14;2609:57:4;719:10:2;-1:-1:-1;;;;;2698:21:4;;;;:62;;-1:-1:-1;2723:37:4;2740:5;719:10:2;5958:352:1;:::i;2723:37:4:-;2677:165;;;;-1:-1:-1;;;2677:165:4;;17798:2:14;2677:165:4;;;17780:21:14;17837:2;17817:18;;;17810:30;17876:34;17856:18;;;17849:62;17947:26;17927:18;;;17920:54;17991:19;;2677:165:4;17596:420:14;2677:165:4;2853:21;2862:2;2866:7;2853:8;:21::i;:::-;2550:331;2480:401;;:::o;3956:364::-;4158:41;719:10:2;4177:12:4;4191:7;4158:18;:41::i;:::-;4137:137;;;;-1:-1:-1;;;4137:137:4;;;;;;;:::i;:::-;4285:28;4295:4;4301:2;4305:7;4285:9;:28::i;1283:478:5:-;1380:15;1423:16;1433:5;1423:9;:16::i;:::-;1415:5;:24;1407:80;;;;-1:-1:-1;;;1407:80:5;;;;;;;:::i;:::-;1498:10;1522:6;1518:173;1534:7;:14;1530:18;;1518:173;;;1580:7;1588:1;1580:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1571:19:5;;;1580:10;;1571:19;1568:113;;;1621:5;1612;:14;1609:57;;;1635:1;-1:-1:-1;1628:8:5;;-1:-1:-1;1628:8:5;1609:57;1659:7;;;;:::i;:::-;;;;1609:57;1550:3;;;;:::i;:::-;;;;1518:173;;;;1701:53;;-1:-1:-1;;;1701:53:5;;;;;;;:::i;4501:305:1:-;4558:6;;;4540:12;;-1:-1:-1;;;;;4558:6:1;;;;4605:3;;4577:25;;:21;;:25;:::i;:::-;:31;;;;:::i;:::-;4558:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4539:74;;;4631:7;4623:45;;;;-1:-1:-1;;;4623:45:1;;17092:2:14;4623:45:1;;;17074:21:14;17131:2;17111:18;;;17104:30;17170:27;17150:18;;;17143:55;17215:18;;4623:45:1;16890:349:14;4623:45:1;4698:6;;:45;;4679:13;;-1:-1:-1;;;;;4698:6:1;;4717:21;;4679:13;4698:45;4679:13;4698:45;4717:21;4698:6;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4678:65;;;4761:8;4753:46;;;;-1:-1:-1;;;4753:46:1;;14809:2:14;4753:46:1;;;14791:21:14;14848:2;14828:18;;;14821:30;14887:27;14867:18;;;14860:55;14932:18;;4753:46:1;14607:349:14;4753:46:1;4529:277;;4501:305::o;4386:179:4:-;4519:39;4536:4;4542:2;4546:7;4519:39;;;;;;;;;;;;:16;:39::i;4340:155:1:-;4397:41;719:10:2;4416:12:1;640:96:2;4397:41:1;4389:75;;;;-1:-1:-1;;;4389:75:1;;21678:2:14;4389:75:1;;;21660:21:14;21717:2;21697:18;;;21690:30;-1:-1:-1;;;21736:18:14;;;21729:51;21797:18;;4389:75:1;21476:345:14;4389:75:1;4474:14;4480:7;4474:5;:14::i;:::-;4340:155;:::o;4812:391::-;4872:16;4900:18;4921:17;4931:6;4921:9;:17::i;:::-;4900:38;-1:-1:-1;4952:15:1;4948:44;;4976:16;;;4990:1;4976:16;;;;;;;;;;;-1:-1:-1;4969:23:1;4812:391;-1:-1:-1;;;4812:391:1:o;4948:44::-;5003:25;5045:10;5031:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5031:25:1;;5003:53;;5071:9;5066:106;5086:10;5082:1;:14;5066:106;;;5131:30;5151:6;5159:1;5131:19;:30::i;:::-;5117:8;5126:1;5117:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;5098:3;;;;:::i;:::-;;;;5066:106;;5688:264;5777:4;5796:9;5792:132;5807:20;;;5792:132;;;5876:7;-1:-1:-1;;;;;5851:32:1;:7;5859:9;;5869:1;5859:12;;;;;;;:::i;:::-;;;;;;;5851:21;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5851:21:1;:32;5848:65;;5908:5;5901:12;;;;;5848:65;5829:3;;;:::i;:::-;;;5792:132;;;;5941:4;5934:11;;5688:264;;;;;;:::o;1002:202:5:-;1112:7;:14;1077:7;;1104:22;;1096:79;;;;-1:-1:-1;;;1096:79:5;;23555:2:14;1096:79:5;;;23537:21:14;23594:2;23574:18;;;23567:30;23633:34;23613:18;;;23606:62;-1:-1:-1;;;23684:18:14;;;23677:42;23736:19;;1096:79:5;23353:408:14;1096:79:5;-1:-1:-1;1192:5:5;1002:202::o;1511:96:1:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;1582:18:1;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;5431:251::-:0;5560:9;5555:121;5579:9;:16;5575:1;:20;5555:121;;;5616:49;5633:5;5640:3;5645:9;5655:1;5645:12;;;;;;;;:::i;:::-;;;;;;;5659:5;5616:16;:49::i;:::-;5597:3;;;;:::i;:::-;;;;5555:121;;;;5431:251;;;;:::o;1784:313:4:-;1896:7;1919:13;1935:7;1943;1935:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1935:16:4;;-1:-1:-1;1982:19:4;1961:107;;;;-1:-1:-1;;;1961:107:4;;18634:2:14;1961:107:4;;;18616:21:14;18673:2;18653:18;;;18646:30;18712:34;18692:18;;;18685:62;-1:-1:-1;;;18763:18:14;;;18756:39;18812:19;;1961:107:4;18432:405:14;203:35:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1350:377:4:-;1467:4;-1:-1:-1;;;;;1496:19:4;;1488:74;;;;-1:-1:-1;;;1488:74:4;;18223:2:14;1488:74:4;;;18205:21:14;18262:2;18242:18;;;18235:30;18301:34;18281:18;;;18274:62;-1:-1:-1;;;18352:18:14;;;18345:40;18402:19;;1488:74:4;18021:406:14;1488:74:4;1573:10;1598:6;1593:106;1610:7;:14;1606:18;;1593:106;;;1656:7;1664:1;1656:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1647:19:4;;;1656:10;;1647:19;1643:45;;;1681:7;;;:::i;:::-;;;1643:45;1626:3;;;:::i;:::-;;;1593:106;;;-1:-1:-1;1715:5:4;1350:377;-1:-1:-1;;1350:377:4:o;1661:101:12:-;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;2321:102:4:-;2377:13;2409:7;2402:14;;;;;:::i;3304:318::-;-1:-1:-1;;;;;3434:24:4;;719:10:2;3434:24:4;;3426:62;;;;-1:-1:-1;;;3426:62:4;;16325:2:14;3426:62:4;;;16307:21:14;16364:2;16344:18;;;16337:30;16403:27;16383:18;;;16376:55;16448:18;;3426:62:4;16123:349:14;3426:62:4;719:10:2;3499:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;3499:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;3499:53:4;;;;;;;;;;3567:48;;12563:41:14;;;3499:42:4;;719:10:2;3567:48:4;;12536:18:14;3567:48:4;;;;;;;3304:318;;:::o;4631:354::-;4813:41;719:10:2;4846:7:4;4813:18;:41::i;:::-;4792:137;;;;-1:-1:-1;;;4792:137:4;;;;;;;:::i;:::-;4939:39;4953:4;4959:2;4963:7;4972:5;4939:13;:39::i;:::-;4631:354;;;;:::o;2554:1470:1:-;2659:28;;;2676:10;9484:2:14;9480:15;-1:-1:-1;;9476:53:14;2659:28:1;;;;9464:66:14;;;;2659:28:1;;;;;;;;;9546:12:14;;;;2659:28:1;;;2649:39;;;;;2720:7;:14;633:4;2752:19;2766:5;2720:14;2752:19;:::i;:::-;:32;2744:64;;;;-1:-1:-1;;;2744:64:1;;13223:2:14;2744:64:1;;;13205:21:14;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13281:18:14;;;13274:49;13340:18;;2744:64:1;13021:343:14;2744:64:1;2822:10;;2836:1;2822:15;2818:1092;;;2861:53;2880:5;;2861:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2887:20:1;;;-1:-1:-1;2909:4:1;;-1:-1:-1;2861:18:1;:53::i;:::-;2853:101;;;;-1:-1:-1;;;2853:101:1;;15163:2:14;2853:101:1;;;15145:21:14;15202:2;15182:18;;;15175:30;15241:34;15221:18;;;15214:62;-1:-1:-1;;;15292:18:14;;;15285:33;15335:19;;2853:101:1;14961:399:14;2853:101:1;719:10:2;2976:29:1;;;;:15;:29;;;;;;877:1;;2976:37;;3008:5;;2976:37;:::i;:::-;:54;;2968:90;;;;-1:-1:-1;;;2968:90:1;;17446:2:14;2968:90:1;;;17428:21:14;17485:2;17465:18;;;17458:30;17524:25;17504:18;;;17497:53;17567:18;;2968:90:1;17244:347:14;2968:90:1;3106:9;3081:21;934:10;3081:5;:21;:::i;:::-;:34;3073:70;;;;-1:-1:-1;;;3073:70:1;;19044:2:14;3073:70:1;;;19026:21:14;19083:2;19063:18;;;19056:30;19122:25;19102:18;;;19095:53;19165:18;;3073:70:1;18842:347:14;3073:70:1;719:10:2;3157:29:1;;;;:15;:29;;;;;:38;;3190:5;;3157:29;:38;;3190:5;;3157:38;:::i;:::-;;;;-1:-1:-1;2818:1092:1;;-1:-1:-1;2818:1092:1;;3216:10;;3230:1;3216:15;3212:698;;;3255:53;3274:5;;3255:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3281:20:1;;;-1:-1:-1;3303:4:1;;-1:-1:-1;3255:18:1;:53::i;:::-;3247:102;;;;-1:-1:-1;;;3247:102:1;;21273:2:14;3247:102:1;;;21255:21:14;21312:2;21292:18;;;21285:30;21351:34;21331:18;;;21324:62;-1:-1:-1;;;21402:18:14;;;21395:34;21446:19;;3247:102:1;21071:400:14;3247:102:1;719:10:2;3371:29:1;;;;:15;:29;;;;;;1001:2;;3371:37;;3403:5;;3371:37;:::i;:::-;:54;;3363:91;;;;-1:-1:-1;;;3363:91:1;;15567:2:14;3363:91:1;;;15549:21:14;15606:2;15586:18;;;15579:30;15645:26;15625:18;;;15618:54;15689:18;;3363:91:1;15365:348:14;3363:91:1;3502:9;3477:21;1059:10;3477:5;:21;:::i;3212:698::-;3613:10;;3627:1;3613:15;3609:301;;;752:2;3652:5;:18;3644:59;;;;-1:-1:-1;;;3644:59:1;;23198:2:14;3644:59:1;;;23180:21:14;23237:2;23217:18;;;23210:30;23276;23256:18;;;23249:58;23324:18;;3644:59:1;22996:352:14;3644:59:1;3747:9;3725:18;810:10;3725:5;:18;:::i;3609:301::-;3867:32;;-1:-1:-1;;;3867:32:1;;20520:2:14;3867:32:1;;;20502:21:14;20559:2;20539:18;;;20532:30;-1:-1:-1;;;20578:18:14;;;20571:44;20632:18;;3867:32:1;20318:338:14;3867:32:1;3932:6;3928:90;3944:5;3940:1;:9;3928:90;;;3971:36;719:10:2;3991:15:1;4005:1;3991:11;:15;:::i;:::-;3971:5;:36::i;:::-;3951:3;;;;:::i;:::-;;;;3928:90;;;;2624:1400;;2554:1470;;;:::o;4030:304::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;4131:1:1::1;4123:4;4108:12;;:19;;;;:::i;:::-;:24;;4100:58;;;::::0;-1:-1:-1;;;4100:58:1;;22848:2:14;4100:58:1::1;::::0;::::1;22830:21:14::0;22887:2;22867:18;;;22860:30;-1:-1:-1;;;22906:18:14;;;22899:51;22967:18;;4100:58:1::1;22646:345:14::0;4100:58:1::1;4190:7;:14:::0;4168:19:::1;4214:84;4235:4;4231:1;:8;4214:84;;;4260:27;4266:3:::0;4271:15:::1;4285:1:::0;4271:11;:15:::1;:::i;4260:27::-;4241:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4214:84;;;;4323:4;4307:12;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;4030:304:1:o;1613:236::-;1679:13;1712:17;1720:8;1712:7;:17::i;:::-;1704:51;;;;-1:-1:-1;;;1704:51:1;;19396:2:14;1704:51:1;;;19378:21:14;19435:2;19415:18;;;19408:30;-1:-1:-1;;;19454:18:14;;;19447:51;19515:18;;1704:51:1;19194:345:14;1704:51:1;1796:7;1805:26;1822:8;1805:16;:26::i;:::-;1779:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1765:77;;1613:236;;;:::o;1855:144::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;1948:20:1::1;:44:::0;;-1:-1:-1;;;;;;1948:44:1::1;-1:-1:-1::0;;;;;1948:44:1;;;::::1;::::0;;;::::1;::::0;;1855:144::o;2193:181::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;2324:20:1::1;:43:::0;2193:181::o;5958:352::-;6122:20;;6165:29;;-1:-1:-1;;;6165:29:1;;-1:-1:-1;;;;;11249:32:14;;;6165:29:1;;;11231:51:14;6048:4:1;;6122:20;;;6157:50;;;;6122:20;;6165:21;;11204:18:14;;6165:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6157:50:1;;:76;;;-1:-1:-1;;;;;;6211:22:1;;;;;;:12;:22;;;;;;;;6157:76;6153:93;;;6242:4;6235:11;;;;;6153:93;-1:-1:-1;;;;;3852:25:4;;;3825:4;3852:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;6263:40:1;6256:47;5958:352;-1:-1:-1;;;;5958:352:1:o;2006:181::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;2137:20:1::1;:43:::0;2006:181::o;2380:167::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;2470:1:1::1;2457:10;;:14;:33;;;;-1:-1:-1::0;2475:15:1;2457:33:::1;2449:61;;;::::0;-1:-1:-1;;;2449:61:1;;23968:2:14;2449:61:1::1;::::0;::::1;23950:21:14::0;24007:2;23987:18;;;23980:30;-1:-1:-1;;;24026:18:14;;;24019:45;24081:18;;2449:61:1::1;23766:339:14::0;2449:61:1::1;2520:10;:20:::0;2380:167::o;1911:198:12:-;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:2;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:12;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:12;;14402:2:14;1991:73:12::1;::::0;::::1;14384:21:14::0;14441:2;14421:18;;;14414:30;14480:34;14460:18;;;14453:62;-1:-1:-1;;;14531:18:14;;;14524:36;14577:19;;1991:73:12::1;14200:402:14::0;1991:73:12::1;2074:28;2093:8;2074:18;:28::i;5209:216:1:-:0;5314:9;5309:110;5333:9;:16;5329:1;:20;5309:110;;;5370:38;5383:5;5390:3;5395:9;5405:1;5395:12;;;;;;;;:::i;:::-;;;;;;;5370;:38::i;:::-;5351:3;;;;:::i;:::-;;;;5309:110;;947:344:4;1089:4;-1:-1:-1;;;;;;1128:40:4;;-1:-1:-1;;;1128:40:4;;:104;;-1:-1:-1;;;;;;;1184:48:4;;-1:-1:-1;;;1184:48:4;1128:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:3;;;1248:36:4;829:155:3;6491:153:4;6589:7;:14;6556:4;;6579:24;;:58;;;;;6635:1;-1:-1:-1;;;;;6607:30:4;:7;6615;6607:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6607:16:4;:30;;6572:65;6491:153;-1:-1:-1;;6491:153:4:o;10379:171::-;10453:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10453:29:4;-1:-1:-1;;;;;10453:29:4;;;;;;;;:24;;10506:23;10453:24;10506:14;:23::i;:::-;-1:-1:-1;;;;;10497:46:4;;;;;;;;;;;10379:171;;:::o;6802:438::-;6927:4;6968:16;6976:7;6968;:16::i;:::-;6947:107;;;;-1:-1:-1;;;6947:107:4;;16679:2:14;6947:107:4;;;16661:21:14;16718:2;16698:18;;;16691:30;16757:34;16737:18;;;16730:62;-1:-1:-1;;;16808:18:14;;;16801:42;16860:19;;6947:107:4;16477:408:14;6947:107:4;7064:13;7080:23;7095:7;7080:14;:23::i;:::-;7064:39;;7132:5;-1:-1:-1;;;;;7121:16:4;:7;-1:-1:-1;;;;;7121:16:4;;:63;;;;7177:7;-1:-1:-1;;;;;7153:31:4;:20;7165:7;7153:11;:20::i;:::-;-1:-1:-1;;;;;7153:31:4;;7121:63;:111;;;;7200:32;7217:5;7224:7;7200:16;:32::i;9733:535::-;9900:4;-1:-1:-1;;;;;9873:31:4;:23;9888:7;9873:14;:23::i;:::-;-1:-1:-1;;;;;9873:31:4;;9852:119;;;;-1:-1:-1;;;9852:119:4;;20863:2:14;9852:119:4;;;20845:21:14;20902:2;20882:18;;;20875:30;20941:34;20921:18;;;20914:62;-1:-1:-1;;;20992:18:14;;;20985:39;21041:19;;9852:119:4;20661:405:14;9852:119:4;-1:-1:-1;;;;;9989:16:4;;9981:65;;;;-1:-1:-1;;;9981:65:4;;15920:2:14;9981:65:4;;;15902:21:14;15959:2;15939:18;;;15932:30;15998:34;15978:18;;;15971:62;-1:-1:-1;;;16049:18:14;;;16042:34;16093:19;;9981:65:4;15718:400:14;9981:65:4;10158:29;10175:1;10179:7;10158:8;:29::i;:::-;10216:2;10197:7;10205;10197:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;10197:21:4;-1:-1:-1;;;;;10197:21:4;;;;;;10234:27;;10253:7;;10234:27;;;;;;;;;;10197:16;10234:27;9733:535;;;:::o;9087:322::-;9146:13;9162:23;9177:7;9162:14;:23::i;:::-;9146:39;;9282:29;9299:1;9303:7;9282:8;:29::i;:::-;9348:1;9321:7;9329;9321:16;;;;;;;;:::i;:::-;;;;;;;;;:29;;-1:-1:-1;;;;;;9321:29:4;-1:-1:-1;;;;;9321:29:4;;;;;;9366:36;;9394:7;;9366:36;;;;;9321:16;;9366:36;9136:273;9087:322;:::o;2263:187:12:-;2355:6;;;-1:-1:-1;;;;;2371:17:12;;;-1:-1:-1;;;;;;2371:17:12;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;5847:341:4:-;5998:28;6008:4;6014:2;6018:7;5998:9;:28::i;:::-;6057:48;6080:4;6086:2;6090:7;6099:5;6057:22;:48::i;:::-;6036:145;;;;-1:-1:-1;;;6036:145:4;;;;;;;:::i;847:184:11:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;;847:184;-1:-1:-1;;;;847:184:11:o;6316:151:1:-;6396:7;:16;;;;;;;-1:-1:-1;6396:16:1;;;;;;;-1:-1:-1;;;;;;6396:16:1;-1:-1:-1;;;;;6396:16:1;;;;;;;;6427:33;;6452:7;;-1:-1:-1;6427:33:1;;-1:-1:-1;;6427:33:1;6316:151;;:::o;328:703:13:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:13;;;;;;;;;;;;-1:-1:-1;;;627:10:13;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:13;;-1:-1:-1;773:2:13;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:13;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:13;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:13;;;;;;;;-1:-1:-1;972:11:13;981:2;972:11;;:::i;:::-;;;844:150;;11103:950:4;11253:4;-1:-1:-1;;;;;11273:13:4;;1087:20:0;1133:8;11269:778:4;;11324:170;;-1:-1:-1;;;11324:170:4;;-1:-1:-1;;;;;11324:36:4;;;;;:170;;719:10:2;;11416:4:4;;11442:7;;11471:5;;11324:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11324:170:4;;;;;;;;-1:-1:-1;;11324:170:4;;;;;;;;;;;;:::i;:::-;;;11304:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11673:13:4;;11669:312;;11715:106;;-1:-1:-1;;;11715:106:4;;;;;;;:::i;11669:312::-;11933:6;11927:13;11918:6;11914:2;11910:15;11903:38;11304:691;-1:-1:-1;;;;;;11556:51:4;-1:-1:-1;;;11556:51:4;;-1:-1:-1;11549:58:4;;11269:778;-1:-1:-1;12032:4:4;11103:950;;;;;;:::o;1383:662:11:-;1466:7;1508:4;1466:7;1522:488;1546:5;:12;1542:1;:16;1522:488;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;:::i;:::-;;;;;;;1579:31;;1644:12;1628;:28;1624:376;;2119:13;2167:15;;;2202:4;2195:15;;;2248:4;2232:21;;1754:57;;1624:376;;;2119:13;2167:15;;;2202:4;2195:15;;;2248:4;2232:21;;1928:57;;1624:376;-1:-1:-1;1560:3:11;;;;:::i;:::-;;;;1522:488;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:14;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:14;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:367::-;488:8;498:6;552:3;545:4;537:6;533:17;529:27;519:55;;570:1;567;560:12;519:55;-1:-1:-1;593:20:14;;636:18;625:30;;622:50;;;668:1;665;658:12;622:50;705:4;697:6;693:17;681:29;;765:3;758:4;748:6;745:1;741:14;733:6;729:27;725:38;722:47;719:67;;;782:1;779;772:12;719:67;425:367;;;;;:::o;797:723::-;851:5;904:3;897:4;889:6;885:17;881:27;871:55;;922:1;919;912:12;871:55;958:6;945:20;984:4;1007:18;1003:2;1000:26;997:52;;;1029:18;;:::i;:::-;1075:2;1072:1;1068:10;1098:28;1122:2;1118;1114:11;1098:28;:::i;:::-;1160:15;;;1191:12;;;;1223:15;;;1257;;;1253:24;;1250:33;-1:-1:-1;1247:53:14;;;1296:1;1293;1286:12;1247:53;1318:1;1309:10;;1328:163;1342:2;1339:1;1336:9;1328:163;;;1399:17;;1387:30;;1360:1;1353:9;;;;;1437:12;;;;1469;;1328:163;;;-1:-1:-1;1509:5:14;797:723;-1:-1:-1;;;;;;;797:723:14:o;1525:220::-;1567:5;1620:3;1613:4;1605:6;1601:17;1597:27;1587:55;;1638:1;1635;1628:12;1587:55;1660:79;1735:3;1726:6;1713:20;1706:4;1698:6;1694:17;1660:79;:::i;1750:247::-;1809:6;1862:2;1850:9;1841:7;1837:23;1833:32;1830:52;;;1878:1;1875;1868:12;1830:52;1917:9;1904:23;1936:31;1961:5;1936:31;:::i;2002:388::-;2070:6;2078;2131:2;2119:9;2110:7;2106:23;2102:32;2099:52;;;2147:1;2144;2137:12;2099:52;2186:9;2173:23;2205:31;2230:5;2205:31;:::i;:::-;2255:5;-1:-1:-1;2312:2:14;2297:18;;2284:32;2325:33;2284:32;2325:33;:::i;:::-;2377:7;2367:17;;;2002:388;;;;;:::o;2395:624::-;2497:6;2505;2513;2566:2;2554:9;2545:7;2541:23;2537:32;2534:52;;;2582:1;2579;2572:12;2534:52;2621:9;2608:23;2640:31;2665:5;2640:31;:::i;:::-;2690:5;-1:-1:-1;2747:2:14;2732:18;;2719:32;2760:33;2719:32;2760:33;:::i;:::-;2812:7;-1:-1:-1;2870:2:14;2855:18;;2842:32;2897:18;2886:30;;2883:50;;;2929:1;2926;2919:12;2883:50;2952:61;3005:7;2996:6;2985:9;2981:22;2952:61;:::i;:::-;2942:71;;;2395:624;;;;;:::o;3024:844::-;3144:6;3152;3160;3168;3221:3;3209:9;3200:7;3196:23;3192:33;3189:53;;;3238:1;3235;3228:12;3189:53;3277:9;3264:23;3296:31;3321:5;3296:31;:::i;:::-;3346:5;-1:-1:-1;3403:2:14;3388:18;;3375:32;3416:33;3375:32;3416:33;:::i;:::-;3468:7;-1:-1:-1;3526:2:14;3511:18;;3498:32;3549:18;3579:14;;;3576:34;;;3606:1;3603;3596:12;3576:34;3629:61;3682:7;3673:6;3662:9;3658:22;3629:61;:::i;:::-;3619:71;;3743:2;3732:9;3728:18;3715:32;3699:48;;3772:2;3762:8;3759:16;3756:36;;;3788:1;3785;3778:12;3756:36;;3811:51;3854:7;3843:8;3832:9;3828:24;3811:51;:::i;:::-;3801:61;;;3024:844;;;;;;;:::o;3873:456::-;3950:6;3958;3966;4019:2;4007:9;3998:7;3994:23;3990:32;3987:52;;;4035:1;4032;4025:12;3987:52;4074:9;4061:23;4093:31;4118:5;4093:31;:::i;:::-;4143:5;-1:-1:-1;4200:2:14;4185:18;;4172:32;4213:33;4172:32;4213:33;:::i;:::-;3873:456;;4265:7;;-1:-1:-1;;;4319:2:14;4304:18;;;;4291:32;;3873:456::o;4334:665::-;4429:6;4437;4445;4453;4506:3;4494:9;4485:7;4481:23;4477:33;4474:53;;;4523:1;4520;4513:12;4474:53;4562:9;4549:23;4581:31;4606:5;4581:31;:::i;:::-;4631:5;-1:-1:-1;4688:2:14;4673:18;;4660:32;4701:33;4660:32;4701:33;:::i;:::-;4753:7;-1:-1:-1;4807:2:14;4792:18;;4779:32;;-1:-1:-1;4862:2:14;4847:18;;4834:32;4889:18;4878:30;;4875:50;;;4921:1;4918;4911:12;4875:50;4944:49;4985:7;4976:6;4965:9;4961:22;4944:49;:::i;5004:572::-;5099:6;5107;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5223:9;5210:23;5242:31;5267:5;5242:31;:::i;:::-;5292:5;-1:-1:-1;5348:2:14;5333:18;;5320:32;5375:18;5364:30;;5361:50;;;5407:1;5404;5397:12;5361:50;5446:70;5508:7;5499:6;5488:9;5484:22;5446:70;:::i;:::-;5004:572;;5535:8;;-1:-1:-1;5420:96:14;;-1:-1:-1;;;;5004:572:14:o;5581:416::-;5646:6;5654;5707:2;5695:9;5686:7;5682:23;5678:32;5675:52;;;5723:1;5720;5713:12;5675:52;5762:9;5749:23;5781:31;5806:5;5781:31;:::i;:::-;5831:5;-1:-1:-1;5888:2:14;5873:18;;5860:32;5930:15;;5923:23;5911:36;;5901:64;;5961:1;5958;5951:12;6002:315;6070:6;6078;6131:2;6119:9;6110:7;6106:23;6102:32;6099:52;;;6147:1;6144;6137:12;6099:52;6186:9;6173:23;6205:31;6230:5;6205:31;:::i;:::-;6255:5;6307:2;6292:18;;;;6279:32;;-1:-1:-1;;;6002:315:14:o;6322:180::-;6381:6;6434:2;6422:9;6413:7;6409:23;6405:32;6402:52;;;6450:1;6447;6440:12;6402:52;-1:-1:-1;6473:23:14;;6322:180;-1:-1:-1;6322:180:14:o;6507:245::-;6565:6;6618:2;6606:9;6597:7;6593:23;6589:32;6586:52;;;6634:1;6631;6624:12;6586:52;6673:9;6660:23;6692:30;6716:5;6692:30;:::i;6757:249::-;6826:6;6879:2;6867:9;6858:7;6854:23;6850:32;6847:52;;;6895:1;6892;6885:12;6847:52;6927:9;6921:16;6946:30;6970:5;6946:30;:::i;7011:279::-;7109:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:52;;;7178:1;7175;7168:12;7130:52;7210:9;7204:16;7229:31;7254:5;7229:31;:::i;7295:450::-;7364:6;7417:2;7405:9;7396:7;7392:23;7388:32;7385:52;;;7433:1;7430;7423:12;7385:52;7473:9;7460:23;7506:18;7498:6;7495:30;7492:50;;;7538:1;7535;7528:12;7492:50;7561:22;;7614:4;7606:13;;7602:27;-1:-1:-1;7592:55:14;;7643:1;7640;7633:12;7592:55;7666:73;7731:7;7726:2;7713:16;7708:2;7704;7700:11;7666:73;:::i;7935:315::-;8003:6;8011;8064:2;8052:9;8043:7;8039:23;8035:32;8032:52;;;8080:1;8077;8070:12;8032:52;8116:9;8103:23;8093:33;;8176:2;8165:9;8161:18;8148:32;8189:31;8214:5;8189:31;:::i;8255:505::-;8350:6;8358;8366;8419:2;8407:9;8398:7;8394:23;8390:32;8387:52;;;8435:1;8432;8425:12;8387:52;8471:9;8458:23;8448:33;;8532:2;8521:9;8517:18;8504:32;8559:18;8551:6;8548:30;8545:50;;;8591:1;8588;8581:12;8765:257;8806:3;8844:5;8838:12;8871:6;8866:3;8859:19;8887:63;8943:6;8936:4;8931:3;8927:14;8920:4;8913:5;8909:16;8887:63;:::i;:::-;9004:2;8983:15;-1:-1:-1;;8979:29:14;8970:39;;;;9011:4;8966:50;;8765:257;-1:-1:-1;;8765:257:14:o;9027:185::-;9069:3;9107:5;9101:12;9122:52;9167:6;9162:3;9155:4;9148:5;9144:16;9122:52;:::i;:::-;9190:16;;;;;9027:185;-1:-1:-1;;9027:185:14:o;9569:1301::-;9846:3;9875:1;9908:6;9902:13;9938:3;9960:1;9988:9;9984:2;9980:18;9970:28;;10048:2;10037:9;10033:18;10070;10060:61;;10114:4;10106:6;10102:17;10092:27;;10060:61;10140:2;10188;10180:6;10177:14;10157:18;10154:38;10151:165;;;-1:-1:-1;;;10215:33:14;;10271:4;10268:1;10261:15;10301:4;10222:3;10289:17;10151:165;10332:18;10359:104;;;;10477:1;10472:320;;;;10325:467;;10359:104;-1:-1:-1;;10392:24:14;;10380:37;;10437:16;;;;-1:-1:-1;10359:104:14;;10472:320;24645:1;24638:14;;;24682:4;24669:18;;10567:1;10581:165;10595:6;10592:1;10589:13;10581:165;;;10673:14;;10660:11;;;10653:35;10716:16;;;;10610:10;;10581:165;;;10585:3;;10775:6;10770:3;10766:16;10759:23;;10325:467;;;;;;;10808:56;10833:30;10859:3;10851:6;10833:30;:::i;:::-;-1:-1:-1;;;9277:20:14;;9322:1;9313:11;;9217:113;10808:56;10801:63;9569:1301;-1:-1:-1;;;;;9569:1301:14:o;11293:488::-;-1:-1:-1;;;;;11562:15:14;;;11544:34;;11614:15;;11609:2;11594:18;;11587:43;11661:2;11646:18;;11639:34;;;11709:3;11704:2;11689:18;;11682:31;;;11487:4;;11730:45;;11755:19;;11747:6;11730:45;:::i;:::-;11722:53;11293:488;-1:-1:-1;;;;;;11293:488:14:o;11786:632::-;11957:2;12009:21;;;12079:13;;11982:18;;;12101:22;;;11928:4;;11957:2;12180:15;;;;12154:2;12139:18;;;11928:4;12223:169;12237:6;12234:1;12231:13;12223:169;;;12298:13;;12286:26;;12367:15;;;;12332:12;;;;12259:1;12252:9;12223:169;;;-1:-1:-1;12409:3:14;;11786:632;-1:-1:-1;;;;;;11786:632:14:o;12797:219::-;12946:2;12935:9;12928:21;12909:4;12966:44;13006:2;12995:9;12991:18;12983:6;12966:44;:::i;13369:407::-;13571:2;13553:21;;;13610:2;13590:18;;;13583:30;13649:34;13644:2;13629:18;;13622:62;-1:-1:-1;;;13715:2:14;13700:18;;13693:41;13766:3;13751:19;;13369:407::o;13781:414::-;13983:2;13965:21;;;14022:2;14002:18;;;13995:30;14061:34;14056:2;14041:18;;14034:62;-1:-1:-1;;;14127:2:14;14112:18;;14105:48;14185:3;14170:19;;13781:414::o;19957:356::-;20159:2;20141:21;;;20178:18;;;20171:30;20237:34;20232:2;20217:18;;20210:62;20304:2;20289:18;;19957:356::o;22228:413::-;22430:2;22412:21;;;22469:2;22449:18;;;22442:30;22508:34;22503:2;22488:18;;22481:62;-1:-1:-1;;;22574:2:14;22559:18;;22552:47;22631:3;22616:19;;22228:413::o;24292:275::-;24363:2;24357:9;24428:2;24409:13;;-1:-1:-1;;24405:27:14;24393:40;;24463:18;24448:34;;24484:22;;;24445:62;24442:88;;;24510:18;;:::i;:::-;24546:2;24539:22;24292:275;;-1:-1:-1;24292:275:14:o;24698:128::-;24738:3;24769:1;24765:6;24762:1;24759:13;24756:39;;;24775:18;;:::i;:::-;-1:-1:-1;24811:9:14;;24698:128::o;24831:120::-;24871:1;24897;24887:35;;24902:18;;:::i;:::-;-1:-1:-1;24936:9:14;;24831:120::o;24956:168::-;24996:7;25062:1;25058;25054:6;25050:14;25047:1;25044:21;25039:1;25032:9;25025:17;25021:45;25018:71;;;25069:18;;:::i;:::-;-1:-1:-1;25109:9:14;;24956:168::o;25129:125::-;25169:4;25197:1;25194;25191:8;25188:34;;;25202:18;;:::i;:::-;-1:-1:-1;25239:9:14;;25129:125::o;25259:258::-;25331:1;25341:113;25355:6;25352:1;25349:13;25341:113;;;25431:11;;;25425:18;25412:11;;;25405:39;25377:2;25370:10;25341:113;;;25472:6;25469:1;25466:13;25463:48;;;-1:-1:-1;;25507:1:14;25489:16;;25482:27;25259:258::o;25522:380::-;25601:1;25597:12;;;;25644;;;25665:61;;25719:4;25711:6;25707:17;25697:27;;25665:61;25772:2;25764:6;25761:14;25741:18;25738:38;25735:161;;;25818:10;25813:3;25809:20;25806:1;25799:31;25853:4;25850:1;25843:15;25881:4;25878:1;25871:15;25735:161;;25522:380;;;:::o;25907:135::-;25946:3;-1:-1:-1;;25967:17:14;;25964:43;;;25987:18;;:::i;:::-;-1:-1:-1;26034:1:14;26023:13;;25907:135::o;26047:112::-;26079:1;26105;26095:35;;26110:18;;:::i;:::-;-1:-1:-1;26144:9:14;;26047:112::o;26164:127::-;26225:10;26220:3;26216:20;26213:1;26206:31;26256:4;26253:1;26246:15;26280:4;26277:1;26270:15;26296:127;26357:10;26352:3;26348:20;26345:1;26338:31;26388:4;26385:1;26378:15;26412:4;26409:1;26402:15;26428:127;26489:10;26484:3;26480:20;26477:1;26470:31;26520:4;26517:1;26510:15;26544:4;26541:1;26534:15;26560:127;26621:10;26616:3;26612:20;26609:1;26602:31;26652:4;26649:1;26642:15;26676:4;26673:1;26666:15;26692:131;-1:-1:-1;;;;;26767:31:14;;26757:42;;26747:70;;26813:1;26810;26803:12;26828:131;-1:-1:-1;;;;;;26902:32:14;;26892:43;;26882:71;;26949:1;26946;26939:12

Swarm Source

ipfs://6c8d42a1d9c8c025e9840410de89eea5cb50d57606f29348ab8a22a4096fd6f4
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.