ETH Price: $3,445.55 (-0.28%)
Gas: 3 Gwei

Token

BIG3 Ownership (BIG3)
 

Overview

Max Total Supply

583 BIG3

Holders

165

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BIG3
0xdC654bfde85D1fEE2A67be90d4A007de74062970
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

BIG3 Ownership is an innovative, new approach to team ownership in professional sports. The league is creating a new model of ownership by leveraging blockchain technology to sell NFTs that represent ownership-like value in its twelve teams.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BIG3

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-08
*/

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

/**
 * @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);
}



/**
 * @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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}


/**
 * @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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


/**
 * @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);
}




/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}




/**
 * @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;
    }
}




/**
 * @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);
    }
}



/**
 * @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;
    }
}








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    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 (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @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 {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @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 {
        _setApprovalForAll(_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 _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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

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

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

        _afterTokenTransfer(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);

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

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

        _afterTokenTransfer(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 from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


/**
 * @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);
    }
}


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}




contract BIG3 is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;
    string public baseURI = "https://ownership.big3.com/apis/pages/getnft/";
    


    // mix=====================
    address payable public fundsTo; // Where funds should be sent to
    address payable public fundsToDev; // Where funds should be sent to
    // end mix=================

    mapping(uint256 => string) public _teamTierTokenURIs;

    mapping(uint256 => bool) public _paymentIds;

    mapping(uint256 => mapping(uint256=>uint256)) public _paymentIdLogs;
    // sale bools =============
    bool public vipSale = false;
    bool public sale = false;
    bool public whiteListSale = false;
    // end sale bools==========


    //whitelists and max wallets
        uint256 public maxWallet = 5;
        uint256 public maxWhiteListLimit = 3;
    // end whitelists and max wallets    

    // prices =================
    uint256 public FirePriceWhiteList = 9 ether;
    uint256 public FirePrice = 9 ether;

    uint256 public GoldPriceWhiteList = 1.6 ether;
    uint256 public GoldPrice = 1.85 ether;
    // end prices==============

    enum Teams {
        Team1,
        Team2,
        Team3,
        Team4,
        Team5,
        Team6,
        Team7,
        Team8,
        Team9,
        Team10,
        Team11,
        Team12
    }
    uint256 public FireTier = 1;
    uint256 public GoldTier = 2;

    //struct TeamTierInfo {
      //  uint256 Tiers;
    //    uint256 maxSupply;
   // }

    //mappings ==============
    mapping (Teams => mapping (uint256 => uint256)) teamTierLimits;

    uint256 public goldTierLimit;
    uint256 public goldTierMintCounts;
   // mapping (uint256 => uint256) public mintTeam;
   // mapping (uint256 => uint256) public mintTier;
    mapping (Teams => uint256) teamIDS;
    mapping (address => bool) whiteLists;
    mapping (Teams => mapping (uint256 => mapping (address => uint256))) whiteListsVip;
    mapping (address => uint256) whiteListsVipGold;
    mapping (Teams => mapping (uint256 => uint256)) teamTierMintCounts;
    
    mapping(address => uint256) public minted; // To check how many tokens an address has minted
    //end mappings
    

    constructor(address payable fundsTo_,address payable fundsToDev_) ERC721("BIG3 Ownership", "BIG3") {
        fundsTo = fundsTo_;
        fundsToDev = fundsToDev_;
        teamTierLimits[Teams.Team1][FireTier] = 25;
        teamTierLimits[Teams.Team2][FireTier] = 25;
        teamTierLimits[Teams.Team3][FireTier] = 25;
        teamTierLimits[Teams.Team4][FireTier] = 25;
        teamTierLimits[Teams.Team5][FireTier] = 25;
        teamTierLimits[Teams.Team6][FireTier] = 25;
        teamTierLimits[Teams.Team7][FireTier] = 25;
        teamTierLimits[Teams.Team8][FireTier] = 25;
        teamTierLimits[Teams.Team9][FireTier] = 25;
        teamTierLimits[Teams.Team10][FireTier] = 25;
        teamTierLimits[Teams.Team11][FireTier] = 25;
        teamTierLimits[Teams.Team12][FireTier] = 25;

        teamIDS[Teams.Team1] = 1;
        teamIDS[Teams.Team2] = 2;
        teamIDS[Teams.Team3] = 3;
        teamIDS[Teams.Team4] = 4;
        teamIDS[Teams.Team5] = 5;
        teamIDS[Teams.Team6] = 6;
        teamIDS[Teams.Team7] = 7;
        teamIDS[Teams.Team8] = 8;
        teamIDS[Teams.Team9] = 9;
        teamIDS[Teams.Team10] = 10;
        teamIDS[Teams.Team11] = 11;
        teamIDS[Teams.Team12] = 12;


        goldTierLimit = 11700;
     
    }


    function updateFundsTo(address payable newFundsTo) public onlyOwner {
        fundsTo = newFundsTo;
    }
    function updateFundsToDev(address payable newFundsToDev) public onlyOwner {
        fundsToDev = newFundsToDev;
    }
  
    
    function claimBalance() public onlyOwner {
        uint256 contractBalance = address(this).balance;
        (bool success2, ) = fundsToDev.call{value: (contractBalance/ 1000) * 150}("");
        (bool success, ) = fundsTo.call{value: (contractBalance/ 1000) * 850}("");
        require(success, "transfer failed");require(success2, "transfer failed");
    }


    function setMaxWallet(uint _newMaxWallet) external onlyOwner {
        maxWallet = _newMaxWallet;
    }

    function setMaxWhiteListLimit(uint _newMaxWhiteListLimit) external onlyOwner {
        maxWhiteListLimit = _newMaxWhiteListLimit;
    }

    function setFirePriceWhiteList(uint256 FirePriceWhiteList_) external onlyOwner {
        FirePriceWhiteList = FirePriceWhiteList_;
    }


    function setGoldPriceWhiteList(uint256 GoldPriceWhiteList_) external onlyOwner {
        GoldPriceWhiteList = GoldPriceWhiteList_;
    }

    function setGoldPrice(uint256 GoldPrice_) external onlyOwner {
        GoldPrice = GoldPrice_;
    }

    function setFirePrice(uint256 FirePrice_) external onlyOwner {
        FirePrice = FirePrice_;
    }

    function flipVipSaleState() public onlyOwner {
        vipSale = !vipSale;
    }
    function flipSaleState() public onlyOwner {
        sale = !sale;
    }

    function flipWhiteListSaleState() public onlyOwner {
        whiteListSale = !whiteListSale;
    }
    
    // wallet functions

    function isVipWallet(address wallet,Teams team,uint256 tier) public view returns (uint256) {
        return whiteListsVip[team][tier][wallet];
    }
    function isVipWalletGold(address wallet) public view returns (uint256) {
        return whiteListsVipGold[wallet];
    }
    function whitelistVipAddresses(address[] calldata wallets,uint256[] calldata quantities,Teams[] calldata team,uint256[] calldata tiers) public onlyOwner
    {
        for (uint256 i; i < wallets.length; i++) {
            whiteListsVip[team[i]][tiers[i]][wallets[i]] = quantities[i];
        }
    }
    function whitelistVipGoldAddresses(address[] calldata wallets,uint256[] calldata quantities) public onlyOwner
    {
        for (uint256 i; i < wallets.length; i++) {
            whiteListsVipGold[wallets[i]] = quantities[i];
        }
    }
    function whitelistAddresses(address[] calldata wallets,bool[] calldata enableDisables) public onlyOwner
    {
        for (uint256 i; i < wallets.length; i++) {
            whiteLists[wallets[i]] = enableDisables[i];
        }
    }
    function reduceLimit(address wallet, uint256 quantity,Teams team, uint256 tier) internal {
        whiteListsVip[team][tier][wallet] = whiteListsVip[team][tier][wallet] - quantity;
    }
    function reduceLimitGold(address wallet, uint256 quantity) internal {
        whiteListsVipGold[wallet] = whiteListsVipGold[wallet] - quantity;
    }
    function incrementTeamTierMintCount(Teams team,uint256 tier) internal {
        teamTierMintCounts[team][tier] = teamTierMintCounts[team][tier]+1;
    }
        
    function getTeamTierMintCount(Teams team,uint256 tier) public view returns (uint256) {
        return teamTierMintCounts[team][tier];
    }
    
    function getTeamTierSupply(Teams team,uint256 tier) public view returns (uint256) {

        return teamTierLimits[team][tier];
    } 

    function checkTeamTierAvailableSupply(Teams team, uint256 tier) public view returns(uint256) {
        return getTeamTierSupply(team,tier) - getTeamTierMintCount(team,tier);
    }
 

    // contract functions
    
    function setBaseURI(string memory __baseURI) external onlyOwner {
        baseURI = __baseURI;
    }
    

    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
  
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");

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

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    function _isWhitelistAddress (address wallet) public view returns (bool) {
        return whiteLists[wallet];
    }
    function totalSupplyMinted() public view  returns (uint256) { 
        return _tokenIdCounter.current(); 
    }
    
    // end setting functions 

    //mint functions

    function _safeMintLoop(address wallet, Teams team, uint256 tier, uint256 quantity,uint256 _paymentId) internal
    {
        
        for (uint256 i = 0; i < quantity; i++) {
           // mintTeam[_tokenIdCounter.current()] = teamIDS[team];
            //mintTier[_tokenIdCounter.current()] = tier;
            incrementTeamTierMintCount(team,tier);
            _mint(wallet, _tokenIdCounter.current());
            _setTokenURI(_tokenIdCounter.current(), string(abi.encodePacked(Strings.toString(_tokenIdCounter.current()),"/",Strings.toString(teamIDS[team]),"/", Strings.toString(tier))));
            _paymentIdLogs[_paymentId][_tokenIdCounter.current()] = _tokenIdCounter.current();
            _tokenIdCounter.increment();
        }
        
    }
    function _safeMintLoopGold(address wallet, uint256 tier, uint256 quantity,uint256 _paymentId) internal
    {

        for (uint256 i = 0; i < quantity; i++) {
            _mint(wallet, _tokenIdCounter.current());
            _setTokenURI(_tokenIdCounter.current(), string(abi.encodePacked(Strings.toString(_tokenIdCounter.current()),"/13/", Strings.toString(tier))));
            _paymentIdLogs[_paymentId][_tokenIdCounter.current()] = _tokenIdCounter.current();
            _tokenIdCounter.increment();
        }
        
    }
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal 
    {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _teamTierTokenURIs[tokenId] = _tokenURI;
    }
    function mintVipFire(address wallet, uint256 quantity,Teams team) payable public {
        require(vipSale, "VIP Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * FirePriceWhiteList <= msg.value, "Not enough ether sent");
        require(isVipWallet(wallet,team,FireTier)>=quantity,"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");        
        reduceLimit(wallet,quantity, team, FireTier);
        _safeMintLoop(wallet, team, FireTier, quantity,0);

    }

    function mintVipFireOwner(address wallet, uint256 quantity,Teams team,uint256 _paymentId) external onlyOwner {
        require(quantity != 0, "Requested quantity cannot be zero");
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        require(isVipWallet(wallet,team,FireTier)>=quantity,"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");        
        reduceLimit(wallet,quantity, team, FireTier);
        _paymentIds[_paymentId] = true;
        _safeMintLoop(wallet, team, FireTier, quantity,_paymentId);

    }

    function mintWhitelistFire(address wallet, uint256 quantity,Teams team) payable public {
        require(whiteListSale, "Whitelist Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * FirePriceWhiteList <= msg.value, "Not enough ether sent");
        require(_isWhitelistAddress(wallet),"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWhiteListLimit,"Wallet Mint limit rached");
        _safeMintLoop(wallet, team, FireTier, quantity,0);

    }

    function mintWhitelistFireOwner(address wallet, uint256 quantity,Teams team,uint256 _paymentId) external onlyOwner {
        require(whiteListSale, "Whitelist Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(_isWhitelistAddress(wallet),"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWhiteListLimit,"Wallet Mint limit rached");
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        _paymentIds[_paymentId] = true;
        _safeMintLoop(wallet, team, FireTier, quantity,_paymentId);

    }


    function mintFireNormal(address wallet, uint256 quantity,Teams team) payable public {
        require(sale, "Sale disabled");
        require(!Address.isContract(msg.sender), "Contracts are not allowed to mint");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * FirePrice <= msg.value, "Not enough ether sent");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWallet,"Wallet Mint limit rached");
        minted[wallet] += quantity;
        _safeMintLoop(wallet, team, FireTier, quantity,0);
    }


    function mintFireNormalOwner(address wallet, uint256 quantity,Teams team,uint256 _paymentId) external onlyOwner{
        require(sale, "Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(getTeamTierMintCount(team,FireTier)+quantity<=teamTierLimits[team][FireTier],"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWallet,"Wallet Mint limit rached");
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        _paymentIds[_paymentId] = true;
        minted[wallet] += quantity;
        _safeMintLoop(wallet, team, FireTier, quantity,_paymentId);
    }

    function mintVipGold(address wallet, uint256 quantity) payable public {
        require(vipSale, "VIP Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * GoldPriceWhiteList <= msg.value, "Not enough ether sent");
        require(isVipWalletGold(wallet)>=quantity,"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist");        
        reduceLimitGold(wallet,quantity);
        goldTierMintCounts += quantity;
        _safeMintLoopGold(wallet,  GoldTier, quantity,0);

    }

    function mintVipGoldOwner(address wallet, uint256 quantity,uint256 _paymentId) external onlyOwner {
        require(quantity != 0, "Requested quantity cannot be zero");
        require(isVipWalletGold(wallet)>=quantity,"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist"); 
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        _paymentIds[_paymentId] = true;          
        reduceLimitGold(wallet,quantity);
        goldTierMintCounts += quantity;
        _safeMintLoopGold(wallet,  GoldTier, quantity,_paymentId);

    }
    

    function mintWhitelistGold(address wallet, uint256 quantity) payable public {
        require(whiteListSale, "Whitelist Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * GoldPriceWhiteList <= msg.value, "Not enough ether sent");
        require(_isWhitelistAddress(wallet),"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWhiteListLimit,"Wallet Mint limit rached");
        goldTierMintCounts += quantity;
        _safeMintLoopGold(wallet,  GoldTier, quantity,0);

    }

    function mintWhitelistGoldOwner(address wallet, uint256 quantity,uint256 _paymentId) external onlyOwner {
        require(whiteListSale, "Whitelist Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(_isWhitelistAddress(wallet),"Wallet Not WhiteListed Or No Mint Quantity Available");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWhiteListLimit,"Wallet Mint limit rached");
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        goldTierMintCounts += quantity;
        _paymentIds[_paymentId] = true;
        _safeMintLoopGold(wallet,  GoldTier, quantity,_paymentId);

    }


    function mintGoldNormal(address wallet, uint256 quantity) payable public {
        require(sale, "Sale disabled");
        require(!Address.isContract(msg.sender), "Contracts are not allowed to mint");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(quantity * GoldPrice <= msg.value, "Not enough ether sent");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWallet,"Wallet Mint limit rached");
        goldTierMintCounts += quantity;
        minted[wallet] += quantity;
        _safeMintLoopGold(wallet,  GoldTier, quantity,0);
    }
    
    function mintGoldNormalOwner(address wallet, uint256 quantity,uint256 _paymentId) external onlyOwner{
        require(sale, "Sale disabled");
        require(quantity != 0, "Requested quantity cannot be zero");
        require(goldTierMintCounts+quantity<=goldTierLimit,"Low Mint Supply for Whitelist");
        require(minted[wallet]+quantity<=maxWallet,"Wallet Mint limit rached");
        require(!_paymentIds[_paymentId], "Mint Already Sent");
        _paymentIds[_paymentId] = true;
        goldTierMintCounts += quantity;
        minted[wallet] += quantity;
        _safeMintLoopGold(wallet,  GoldTier, quantity,_paymentId);
    }
    function checkTokenExists(uint256 tokenId) public view returns(bool) 
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return true;
    }
    function totalSupply() public view virtual  returns (uint256) {
        return _tokenIdCounter.current();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"fundsTo_","type":"address"},{"internalType":"address payable","name":"fundsToDev_","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":"FirePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FirePriceWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FireTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GoldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GoldPriceWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GoldTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"_isWhitelistAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_paymentIdLogs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_paymentIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_teamTierTokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"checkTeamTierAvailableSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkTokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipVipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhiteListSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsTo","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundsToDev","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getTeamTierMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getTeamTierSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldTierLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldTierMintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"wallet","type":"address"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"isVipWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isVipWalletGold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhiteListLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"}],"name":"mintFireNormal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintFireNormalOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintGoldNormal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintGoldNormalOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"}],"name":"mintVipFire","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintVipFireOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintVipGold","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintVipGoldOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"}],"name":"mintWhitelistFire","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"enum BIG3.Teams","name":"team","type":"uint8"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintWhitelistFireOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintWhitelistGold","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"_paymentId","type":"uint256"}],"name":"mintWhitelistGoldOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"FirePrice_","type":"uint256"}],"name":"setFirePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FirePriceWhiteList_","type":"uint256"}],"name":"setFirePriceWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GoldPrice_","type":"uint256"}],"name":"setGoldPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GoldPriceWhiteList_","type":"uint256"}],"name":"setGoldPriceWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWhiteListLimit","type":"uint256"}],"name":"setMaxWhiteListLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyMinted","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 payable","name":"newFundsTo","type":"address"}],"name":"updateFundsTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFundsToDev","type":"address"}],"name":"updateFundsToDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vipSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool[]","name":"enableDisables","type":"bool[]"}],"name":"whitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"},{"internalType":"enum BIG3.Teams[]","name":"team","type":"uint8[]"},{"internalType":"uint256[]","name":"tiers","type":"uint256[]"}],"name":"whitelistVipAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"whitelistVipGoldAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052602d60808181529062004b6a60a039805162000029916008916020909101906200059c565b50600e805462ffffff191690556005600f556003601055677ce66c50e284000060118190556012556716345785d8a000006013556719ac8532c2790000601455600160155560026016553480156200008057600080fd5b5060405162004b9738038062004b97833981016040819052620000a3916200065f565b604080518082018252600e81526d042494733204f776e6572736869760941b6020808301918252835180850190945260048452634249473360e01b908401528151919291620000f5916000916200059c565b5080516200010b9060019060208401906200059c565b50505062000128620001226200054660201b60201c565b6200054a565b600980546001600160a01b039384166001600160a01b0319918216178255600a80549390941692169190911782556015805460009081527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b60209081526040808320601990819055845484527ff36d6bc9642eb6fb6ee9998b09ce990566df752ab06e11f8de7ab633bbd57b8f8352818420819055845484527fc52df653038b2ad477d8d97f1ddd63cfd138847b628ad8a7b89c109c3f8782ca8352818420819055845484527fd8b2bced50346359af71f91110b86cdf684b6ab1c6ca64a7583c044d5c24de5c8352818420819055845484527f68052a315987b3c92fe6f7df77391bc5a825cabe4950d34f36f8f4e8a6abcb4d8352818420819055845484527f70266c3d5b8b2375fded59c72bf5f0d74bbb12fdf645a4c8630629f0191fb3178352818420819055845484527fdba639bd458ad7aa817aa5e381ad7ed79ea3aeac2e3d9b2d7c51df9a9229709d8352818420819055845484527ffae2f3cf7832fe1c3d9af0d1138f3108106a06e0c9fcfc402be937e37ff7af668352818420819055845484527ff573626183c54e3dd8eb68c6c0266a90101d76d98ec703822e6a139999dd76558352818420819055845484527f0480f894719e4db46f2c51c98cf5b891889d59db5c7f94573597494ddc8d4ae18352818420819055845484527fd01a1030c3796725449ebf72d73ac5540c8aa9c83f796ef75dcf19a390d0382c8352818420819055935483527f54acb9ed3edc1b7a8255332c8673f792d9928f1a0e23f8fa562129e3598e56e08252822092909255601a90915260017fb75ecc04ed35f89790e98640e901bda41eceff0cb896cf2765fb6976802537505560027ff88cd8d612926ebb404e40725c01084b6e9b3ce0344cde068570342cbd448c615560037f4c287b3e2c2cb129ae3ba596d613d760b15affdac7242e12903c37a886ea1c4f5560047f4ac83fca211703e3ddb90093cd219714e5e3715bf0b4fd15b0441390534a24e25560057f06b28f262ad931a15c9e47271fc159a891b2bcb0da2659cac5bbfed4886cf26e5560067f82f07edc09f3a46c1925d02252613a7fcc7be7d03b538b0c268df85f2f13a7ab5560077fe7513fcd4f864b78baf560f46c15980b6aa41b90911efc4ce7454b83cce613b15560087f2247382acc746a936c6b9b694445e53b16ccce9ebaa44dd1ce1d5f0641b0797b557f687151c9c7964c905d515053234445b7256d6eb52f0f0fb698ac00a08a410abf919091557f3a9dcd6f76534b067931c1cc4a24cb9c117c7d95c716bce6d59bb4825bc6713391909155600b7fdbe7ff1220189de7e6173da9d377e212c5f94fd76a3505f188b6c362d3973d9d8190559052600c7fcbecd97c0264932d894d2765644768ec1239a8c0656fd9914fd89b4e0c93174555612db4601855620006d4565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620005aa9062000697565b90600052602060002090601f016020900481019282620005ce576000855562000619565b82601f10620005e957805160ff191683800117855562000619565b8280016001018555821562000619579182015b8281111562000619578251825591602001919060010190620005fc565b50620006279291506200062b565b5090565b5b808211156200062757600081556001016200062c565b80516001600160a01b03811681146200065a57600080fd5b919050565b600080604083850312156200067357600080fd5b6200067e8362000642565b91506200068e6020840162000642565b90509250929050565b600181811c90821680620006ac57607f821691505b60208210811415620006ce57634e487b7160e01b600052602260045260246000fd5b50919050565b61448680620006e46000396000f3fe6080604052600436106104255760003560e01c8063753eb56011610229578063cca129891161012e578063e7b01a74116100b6578063f0ee92d01161007a578063f0ee92d014610c34578063f2fde38b14610c54578063f8b45b0514610c74578063f90ce19314610c8a578063fa5dcadf14610caa57600080fd5b8063e7b01a7414610b75578063e981154814610b8b578063e985e9c514610bab578063eb3670f714610bf4578063ecc1da2714610c1457600080fd5b8063da905e82116100fd578063da905e8214610ac9578063dc5447ca14610adf578063e3b8a0d214610aff578063e4169ddb14610b1f578063e44c9a9514610b5557600080fd5b8063cca1298914610a63578063d0a70d2714610a76578063d0bb439c14610a96578063d680bef014610ab657600080fd5b8063a22cb465116101b1578063b90714ae11610180578063b90714ae146109ab578063bfd5621e146109cb578063c056f56e146109eb578063c8752e3914610a0b578063c87b56dd14610a4357600080fd5b8063a22cb46514610938578063ab7a02f214610958578063b88d4fde1461096b578063b89fd23d1461098b57600080fd5b806391fc3263116101f857806391fc3263146108d7578063933e95b21461058457806395d89b41146108ed57806399024dd0146109025780639e86e8f71461092257600080fd5b8063753eb5601461085957806386a173ee146108795780638da5cb5b146108995780638df9b58b146108b757600080fd5b806330509bca1161032f5780635d0044ca116102b75780636ad1fe02116102865780636ad1fe02146107c05780636c0360eb146107df5780636c5e874c146107f457806370a0823114610824578063715018a61461084457600080fd5b80635d0044ca1461074a578063633220bb1461076a5780636352211e1461078057806367212f3f146107a057600080fd5b806342842e0e116102fe57806342842e0e146106cb5780634d3fe8ad146106eb57806355f804b3146107015780635622b95b146107215780635c1d29431461073757600080fd5b806330509bca1461066c57806334918dfd146106815780633aaa6bf01461069657806340fb3561146106b657600080fd5b80630f011123116103b25780632178c754116103815780632178c754146105d957806323b872dd146105f95780632a33ef44146106195780632d02a5b21461062c57806330136e381461064c57600080fd5b80630f0111231461056e57806318160ddd146105845780631e7269c5146105995780631f947d8b146105c657600080fd5b806306fdde03116103f957806306fdde03146104bf578063081812fc146104e1578063095ea7b3146105195780630acc8574146105395780630ddc47df1461054e57600080fd5b80620eadc61461042a57806301ffc9a714610459578063026478291461047957806302e75c561461049d575b600080fd5b34801561043657600080fd5b50600e546104449060ff1681565b60405190151581526020015b60405180910390f35b34801561046557600080fd5b50610444610474366004613d63565b610cca565b34801561048557600080fd5b5061048f60125481565b604051908152602001610450565b3480156104a957600080fd5b506104bd6104b8366004613be3565b610d1c565b005b3480156104cb57600080fd5b506104d4610e57565b6040516104509190613f89565b3480156104ed57600080fd5b506105016104fc366004613e1d565b610ee9565b6040516001600160a01b039091168152602001610450565b34801561052557600080fd5b506104bd610534366004613b33565b610f71565b34801561054557600080fd5b506104bd611082565b34801561055a57600080fd5b5061048f610569366004613db8565b6110cb565b34801561057a57600080fd5b5061048f60145481565b34801561059057600080fd5b5061048f61111c565b3480156105a557600080fd5b5061048f6105b43660046139a9565b601f6020526000908152604090205481565b6104bd6105d4366004613b33565b61112c565b3480156105e557600080fd5b506104bd6105f4366004613b9d565b611263565b34801561060557600080fd5b506104bd6106143660046139ff565b6113c2565b6104bd610627366004613b5f565b6113f3565b34801561063857600080fd5b506104bd610647366004613e1d565b611585565b34801561065857600080fd5b50600954610501906001600160a01b031681565b34801561067857600080fd5b506104bd6115b4565b34801561068d57600080fd5b506104bd611736565b3480156106a257600080fd5b506104bd6106b1366004613b9d565b61177d565b3480156106c257600080fd5b506104bd611903565b3480156106d757600080fd5b506104bd6106e63660046139ff565b611941565b3480156106f757600080fd5b5061048f60185481565b34801561070d57600080fd5b506104bd61071c366004613dd4565b61195c565b34801561072d57600080fd5b5061048f60135481565b6104bd610745366004613b33565b611999565b34801561075657600080fd5b506104bd610765366004613e1d565b611adc565b34801561077657600080fd5b5061048f60105481565b34801561078c57600080fd5b5061050161079b366004613e1d565b611b0b565b3480156107ac57600080fd5b506104bd6107bb366004613c18565b611b82565b3480156107cc57600080fd5b50600e5461044490610100900460ff1681565b3480156107eb57600080fd5b506104d4611c4a565b34801561080057600080fd5b5061044461080f366004613e1d565b600c6020526000908152604090205460ff1681565b34801561083057600080fd5b5061048f61083f3660046139a9565b611cd8565b34801561085057600080fd5b506104bd611d5f565b34801561086557600080fd5b506104bd6108743660046139a9565b611d95565b34801561088557600080fd5b50600e546104449062010000900460ff1681565b3480156108a557600080fd5b506006546001600160a01b0316610501565b3480156108c357600080fd5b5061048f6108d2366004613db8565b611de1565b3480156108e357600080fd5b5061048f60155481565b3480156108f957600080fd5b506104d4611df9565b34801561090e57600080fd5b506104bd61091d366004613e1d565b611e08565b34801561092e57600080fd5b5061048f60165481565b34801561094457600080fd5b506104bd610953366004613ac0565b611e37565b6104bd610966366004613b33565b611e42565b34801561097757600080fd5b506104bd610986366004613a40565b611f49565b34801561099757600080fd5b506104bd6109a6366004613e1d565b611f7b565b3480156109b757600080fd5b506104bd6109c6366004613be3565b611faa565b3480156109d757600080fd5b506104446109e6366004613e1d565b612113565b3480156109f757600080fd5b506104bd610a06366004613c18565b612142565b348015610a1757600080fd5b5061048f610a26366004613e36565b600d60209081526000928352604080842090915290825290205481565b348015610a4f57600080fd5b506104d4610a5e366004613e1d565b6121e7565b6104bd610a71366004613b5f565b612341565b348015610a8257600080fd5b50600a54610501906001600160a01b031681565b348015610aa257600080fd5b50610444610ab13660046139a9565b6124ab565b6104bd610ac4366004613b5f565b6124c9565b348015610ad557600080fd5b5061048f60115481565b348015610aeb57600080fd5b506104d4610afa366004613e1d565b612611565b348015610b0b57600080fd5b506104bd610b1a366004613be3565b61262a565b348015610b2b57600080fd5b5061048f610b3a3660046139a9565b6001600160a01b03166000908152601d602052604090205490565b348015610b6157600080fd5b506104bd610b70366004613b9d565b6127a1565b348015610b8157600080fd5b5061048f60195481565b348015610b9757600080fd5b506104bd610ba6366004613e1d565b612956565b348015610bb757600080fd5b50610444610bc63660046139c6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610c0057600080fd5b506104bd610c0f366004613e1d565b612985565b348015610c2057600080fd5b506104bd610c2f3660046139a9565b6129b4565b348015610c4057600080fd5b5061048f610c4f366004613db8565b612a00565b348015610c6057600080fd5b506104bd610c6f3660046139a9565b612a27565b348015610c8057600080fd5b5061048f600f5481565b348015610c9657600080fd5b5061048f610ca5366004613af5565b612ac2565b348015610cb657600080fd5b506104bd610cc5366004613c84565b612b23565b60006001600160e01b031982166380ac58cd60e01b1480610cfb57506001600160e01b03198216635b5e139f60e01b145b80610d1657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b03163314610d4f5760405162461bcd60e51b8152600401610d4690614087565b60405180910390fd5b81610d6c5760405162461bcd60e51b8152600401610d46906141b2565b81610d8c846001600160a01b03166000908152601d602052604090205490565b1015610daa5760405162461bcd60e51b8152600401610d46906141f3565b60185482601954610dbb91906142bf565b1115610dd95760405162461bcd60e51b8152600401610d4690613f9c565b6000818152600c602052604090205460ff1615610e085760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60205260409020805460ff19166001179055610e2b8383612c55565b8160196000828254610e3d91906142bf565b92505081905550610e52836016548484612c99565b505050565b606060008054610e669061434d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e929061434d565b8015610edf5780601f10610eb457610100808354040283529160200191610edf565b820191906000526020600020905b815481529060010190602001808311610ec257829003601f168201915b5050505050905090565b6000610ef482612d38565b610f555760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d46565b506000908152600460205260409020546001600160a01b031690565b6000610f7c82611b0b565b9050806001600160a01b0316836001600160a01b03161415610fea5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d46565b336001600160a01b038216148061100657506110068133610bc6565b6110785760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d46565b610e528383612d55565b6006546001600160a01b031633146110ac5760405162461bcd60e51b8152600401610d4690614087565b600e805462ff0000198116620100009182900460ff1615909102179055565b60006017600084600b8111156110e3576110e36143e3565b600b8111156110f4576110f46143e3565b8152602001908152602001600020600083815260200190815260200160002054905092915050565b600061112760075490565b905090565b600e5462010000900460ff166111545760405162461bcd60e51b8152600401610d4690614025565b806111715760405162461bcd60e51b8152600401610d46906141b2565b346013548261118091906142eb565b111561119e5760405162461bcd60e51b8152600401610d4690614183565b6111a7826124ab565b6111c35760405162461bcd60e51b8152600401610d46906141f3565b601854816019546111d491906142bf565b11156111f25760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0383166000908152601f60205260409020546112199083906142bf565b11156112375760405162461bcd60e51b8152600401610d4690614247565b806019600082825461124991906142bf565b9250508190555061125f82601654836000612c99565b5050565b6006546001600160a01b0316331461128d5760405162461bcd60e51b8152600401610d4690614087565b826112aa5760405162461bcd60e51b8152600401610d46906141b2565b6000818152600c602052604090205460ff16156112d95760405162461bcd60e51b8152600401610d469061405c565b826112e78584601554612ac2565b10156113055760405162461bcd60e51b8152600401610d46906141f3565b6017600083600b81111561131b5761131b6143e3565b600b81111561132c5761132c6143e3565b815260200190815260200160002060006015548152602001908152602001600020548361135b84601554611de1565b61136591906142bf565b11156113835760405162461bcd60e51b8152600401610d4690613f9c565b611391848484601554612dc3565b6000818152600c60205260409020805460ff191660011790556015546113bc90859084908685612e84565b50505050565b6113cc3382612f56565b6113e85760405162461bcd60e51b8152600401610d4690614132565b610e5283838361303f565b600e54610100900460ff1661141a5760405162461bcd60e51b8152600401610d469061410b565b333b156114395760405162461bcd60e51b8152600401610d469061427e565b816114565760405162461bcd60e51b8152600401610d46906141b2565b346012548361146591906142eb565b11156114835760405162461bcd60e51b8152600401610d4690614183565b6017600082600b811115611499576114996143e3565b600b8111156114aa576114aa6143e3565b81526020019081526020016000206000601554815260200190815260200160002054826114d983601554611de1565b6114e391906142bf565b11156115015760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0384166000908152601f60205260409020546115289084906142bf565b11156115465760405162461bcd60e51b8152600401610d4690614247565b6001600160a01b0383166000908152601f60205260408120805484929061156e9084906142bf565b92505081905550610e528382601554856000612e84565b6006546001600160a01b031633146115af5760405162461bcd60e51b8152600401610d4690614087565b601455565b6006546001600160a01b031633146115de5760405162461bcd60e51b8152600401610d4690614087565b600a5447906000906001600160a01b03166115fb6103e8846142d7565b6116069060966142eb565b604051600081818185875af1925050503d8060008114611642576040519150601f19603f3d011682016040523d82523d6000602084013e611647565b606091505b50506009549091506000906001600160a01b03166116676103e8856142d7565b611673906103526142eb565b604051600081818185875af1925050503d80600081146116af576040519150601f19603f3d011682016040523d82523d6000602084013e6116b4565b606091505b50509050806116f75760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d46565b81610e525760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d46565b6006546001600160a01b031633146117605760405162461bcd60e51b8152600401610d4690614087565b600e805461ff001981166101009182900460ff1615909102179055565b6006546001600160a01b031633146117a75760405162461bcd60e51b8152600401610d4690614087565b600e5462010000900460ff166117cf5760405162461bcd60e51b8152600401610d4690614025565b826117ec5760405162461bcd60e51b8152600401610d46906141b2565b6117f5846124ab565b6118115760405162461bcd60e51b8152600401610d46906141f3565b6017600083600b811115611827576118276143e3565b600b811115611838576118386143e3565b815260200190815260200160002060006015548152602001908152602001600020548361186784601554611de1565b61187191906142bf565b111561188f5760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0385166000908152601f60205260409020546118b69085906142bf565b11156118d45760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156113915760405162461bcd60e51b8152600401610d469061405c565b6006546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610d4690614087565b600e805460ff19811660ff90911615179055565b610e5283838360405180602001604052806000815250611f49565b6006546001600160a01b031633146119865760405162461bcd60e51b8152600401610d4690614087565b805161125f90600890602084019061382a565b600e54610100900460ff166119c05760405162461bcd60e51b8152600401610d469061410b565b333b156119df5760405162461bcd60e51b8152600401610d469061427e565b806119fc5760405162461bcd60e51b8152600401610d46906141b2565b3460145482611a0b91906142eb565b1115611a295760405162461bcd60e51b8152600401610d4690614183565b60185481601954611a3a91906142bf565b1115611a585760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0383166000908152601f6020526040902054611a7f9083906142bf565b1115611a9d5760405162461bcd60e51b8152600401610d4690614247565b8060196000828254611aaf91906142bf565b90915550506001600160a01b0382166000908152601f6020526040812080548392906112499084906142bf565b6006546001600160a01b03163314611b065760405162461bcd60e51b8152600401610d4690614087565b600f55565b6000818152600260205260408120546001600160a01b031680610d165760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d46565b6006546001600160a01b03163314611bac5760405162461bcd60e51b8152600401610d4690614087565b60005b83811015611c4357828282818110611bc957611bc96143f9565b9050602002016020810190611bde9190613d48565b601b6000878785818110611bf457611bf46143f9565b9050602002016020810190611c0991906139a9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c3b81614388565b915050611baf565b5050505050565b60088054611c579061434d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c839061434d565b8015611cd05780601f10611ca557610100808354040283529160200191611cd0565b820191906000526020600020905b815481529060010190602001808311611cb357829003601f168201915b505050505081565b60006001600160a01b038216611d435760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d46565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314611d895760405162461bcd60e51b8152600401610d4690614087565b611d9360006131db565b565b6006546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610d4690614087565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000601e600084600b8111156110e3576110e36143e3565b606060018054610e669061434d565b6006546001600160a01b03163314611e325760405162461bcd60e51b8152600401610d4690614087565b601255565b61125f33838361322d565b600e5460ff16611e885760405162461bcd60e51b81526020600482015260116024820152701592540814d85b1948191a5cd8589b1959607a1b6044820152606401610d46565b80611ea55760405162461bcd60e51b8152600401610d46906141b2565b3460135482611eb491906142eb565b1115611ed25760405162461bcd60e51b8152600401610d4690614183565b80611ef2836001600160a01b03166000908152601d602052604090205490565b1015611f105760405162461bcd60e51b8152600401610d46906141f3565b60185481601954611f2191906142bf565b1115611f3f5760405162461bcd60e51b8152600401610d4690613f9c565b6112378282612c55565b611f533383612f56565b611f6f5760405162461bcd60e51b8152600401610d4690614132565b6113bc848484846132fc565b6006546001600160a01b03163314611fa55760405162461bcd60e51b8152600401610d4690614087565b601055565b6006546001600160a01b03163314611fd45760405162461bcd60e51b8152600401610d4690614087565b600e54610100900460ff16611ffb5760405162461bcd60e51b8152600401610d469061410b565b816120185760405162461bcd60e51b8152600401610d46906141b2565b6018548260195461202991906142bf565b11156120475760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0384166000908152601f602052604090205461206e9084906142bf565b111561208c5760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156120bb5760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60205260408120805460ff19166001179055601980548492906120e69084906142bf565b90915550506001600160a01b0383166000908152601f602052604081208054849290610e3d9084906142bf565b600061211e82612d38565b61213a5760405162461bcd60e51b8152600401610d46906140bc565b506001919050565b6006546001600160a01b0316331461216c5760405162461bcd60e51b8152600401610d4690614087565b60005b83811015611c4357828282818110612189576121896143f9565b90506020020135601d60008787858181106121a6576121a66143f9565b90506020020160208101906121bb91906139a9565b6001600160a01b03168152602081019190915260400160002055806121df81614388565b91505061216f565b60606121f282612d38565b6122485760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610d46565b6000828152600b6020526040812080546122619061434d565b80601f016020809104026020016040519081016040528092919081815260200182805461228d9061434d565b80156122da5780601f106122af576101008083540402835291602001916122da565b820191906000526020600020905b8154815290600101906020018083116122bd57829003601f168201915b5050505050905060006122eb61332f565b90508051600014156122fe575092915050565b815115612330578082604051602001612318929190613e84565b60405160208183030381529060405292505050919050565b6123398461333e565b949350505050565b600e5462010000900460ff166123695760405162461bcd60e51b8152600401610d4690614025565b816123865760405162461bcd60e51b8152600401610d46906141b2565b346011548361239591906142eb565b11156123b35760405162461bcd60e51b8152600401610d4690614183565b6123bc836124ab565b6123d85760405162461bcd60e51b8152600401610d46906141f3565b6017600082600b8111156123ee576123ee6143e3565b600b8111156123ff576123ff6143e3565b815260200190815260200160002060006015548152602001908152602001600020548261242e83601554611de1565b61243891906142bf565b11156124565760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0384166000908152601f602052604090205461247d9084906142bf565b111561249b5760405162461bcd60e51b8152600401610d4690614247565b610e528382601554856000612e84565b6001600160a01b03166000908152601b602052604090205460ff1690565b600e5460ff1661250f5760405162461bcd60e51b81526020600482015260116024820152701592540814d85b1948191a5cd8589b1959607a1b6044820152606401610d46565b8161252c5760405162461bcd60e51b8152600401610d46906141b2565b346011548361253b91906142eb565b11156125595760405162461bcd60e51b8152600401610d4690614183565b816125678483601554612ac2565b10156125855760405162461bcd60e51b8152600401610d46906141f3565b6017600082600b81111561259b5761259b6143e3565b600b8111156125ac576125ac6143e3565b81526020019081526020016000206000601554815260200190815260200160002054826125db83601554611de1565b6125e591906142bf565b11156126035760405162461bcd60e51b8152600401610d4690613f9c565b61249b838383601554612dc3565b600b6020526000908152604090208054611c579061434d565b6006546001600160a01b031633146126545760405162461bcd60e51b8152600401610d4690614087565b600e5462010000900460ff1661267c5760405162461bcd60e51b8152600401610d4690614025565b816126995760405162461bcd60e51b8152600401610d46906141b2565b6126a2836124ab565b6126be5760405162461bcd60e51b8152600401610d46906141f3565b601854826019546126cf91906142bf565b11156126ed5760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0384166000908152601f60205260409020546127149084906142bf565b11156127325760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156127615760405162461bcd60e51b8152600401610d469061405c565b816019600082825461277391906142bf565b90915550506000818152600c60205260409020805460ff19166001179055601654610e529084908484612c99565b6006546001600160a01b031633146127cb5760405162461bcd60e51b8152600401610d4690614087565b600e54610100900460ff166127f25760405162461bcd60e51b8152600401610d469061410b565b8261280f5760405162461bcd60e51b8152600401610d46906141b2565b6017600083600b811115612825576128256143e3565b600b811115612836576128366143e3565b815260200190815260200160002060006015548152602001908152602001600020548361286584601554611de1565b61286f91906142bf565b111561288d5760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0385166000908152601f60205260409020546128b49085906142bf565b11156128d25760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156129015760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60209081526040808320805460ff191660011790556001600160a01b0387168352601f909152812080548592906129409084906142bf565b925050819055506113bc84836015548685612e84565b6006546001600160a01b031633146129805760405162461bcd60e51b8152600401610d4690614087565b601355565b6006546001600160a01b031633146129af5760405162461bcd60e51b8152600401610d4690614087565b601155565b6006546001600160a01b031633146129de5760405162461bcd60e51b8152600401610d4690614087565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a0c8383611de1565b612a1684846110cb565b612a20919061430a565b9392505050565b6006546001600160a01b03163314612a515760405162461bcd60e51b8152600401610d4690614087565b6001600160a01b038116612ab65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d46565b612abf816131db565b50565b6000601c600084600b811115612ada57612ada6143e3565b600b811115612aeb57612aeb6143e3565b81526020808201929092526040908101600090812085825283528181206001600160a01b038816825290925290205490509392505050565b6006546001600160a01b03163314612b4d5760405162461bcd60e51b8152600401610d4690614087565b60005b87811015612c4a57868682818110612b6a57612b6a6143f9565b90506020020135601c6000878785818110612b8757612b876143f9565b9050602002016020810190612b9c9190613d9d565b600b811115612bad57612bad6143e3565b600b811115612bbe57612bbe6143e3565b81526020019081526020016000206000858585818110612be057612be06143f9565b90506020020135815260200190815260200160002060008b8b85818110612c0957612c096143f9565b9050602002016020810190612c1e91906139a9565b6001600160a01b0316815260208101919091526040016000205580612c4281614388565b915050612b50565b505050505050505050565b6001600160a01b0382166000908152601d6020526040902054612c7990829061430a565b6001600160a01b039092166000908152601d602052604090209190915550565b60005b82811015611c4357612cb685612cb160075490565b6133c0565b612d01612cc260075490565b612cd3612cce60075490565b6134f3565b612cdc876134f3565b604051602001612ced929190613f0d565b6040516020818303038152906040526135f1565b600780546000848152600d602090815260408083208484529091529020819055600101905580612d3081614388565b915050612c9c565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612d8a82611b0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b82601c600084600b811115612dda57612dda6143e3565b600b811115612deb57612deb6143e3565b81526020808201929092526040908101600090812085825283528181206001600160a01b0389168252909252902054612e24919061430a565b601c600084600b811115612e3a57612e3a6143e3565b600b811115612e4b57612e4b6143e3565b8152602080820192909252604090810160009081209481529382528084206001600160a01b039097168452959052939020929092555050565b60005b82811015612f4e57612e99858561367c565b612ea686612cb160075490565b612f17612eb260075490565b612ebe612cce60075490565b612efc601a60008a600b811115612ed757612ed76143e3565b600b811115612ee857612ee86143e3565b8152602001908152602001600020546134f3565b612f05886134f3565b604051602001612ced93929190613eb3565b600780546000848152600d602090815260408083208484529091529020819055600101905580612f4681614388565b915050612e87565b505050505050565b6000612f6182612d38565b612fc25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d46565b6000612fcd83611b0b565b9050806001600160a01b0316846001600160a01b0316148061301457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806123395750836001600160a01b031661302d84610ee9565b6001600160a01b031614949350505050565b826001600160a01b031661305282611b0b565b6001600160a01b0316146130b65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610d46565b6001600160a01b0382166131185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d46565b613123600082612d55565b6001600160a01b038316600090815260036020526040812080546001929061314c90849061430a565b90915550506001600160a01b038216600090815260036020526040812080546001929061317a9084906142bf565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561328f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d46565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61330784848461303f565b6133138484848461371d565b6113bc5760405162461bcd60e51b8152600401610d4690613fd3565b606060088054610e669061434d565b606061334982612d38565b6133655760405162461bcd60e51b8152600401610d46906140bc565b600061336f61332f565b9050600081511161338f5760405180602001604052806000815250612a20565b80613399846134f3565b6040516020016133aa929190613e84565b6040516020818303038152906040529392505050565b6001600160a01b0382166134165760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d46565b61341f81612d38565b1561346c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d46565b6001600160a01b03821660009081526003602052604081208054600192906134959084906142bf565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816135175750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613541578061352b81614388565b915061353a9050600a836142d7565b915061351b565b60008167ffffffffffffffff81111561355c5761355c61440f565b6040519080825280601f01601f191660200182016040528015613586576020820181803683370190505b5090505b84156123395761359b60018361430a565b91506135a8600a866143a3565b6135b39060306142bf565b60f81b8183815181106135c8576135c86143f9565b60200101906001600160f81b031916908160001a9053506135ea600a866142d7565b945061358a565b6135fa82612d38565b61365d5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610d46565b6000828152600b602090815260409091208251610e529284019061382a565b601e600083600b811115613692576136926143e3565b600b8111156136a3576136a36143e3565b815260200190815260200160002060008281526020019081526020016000205460016136cf91906142bf565b601e600084600b8111156136e5576136e56143e3565b600b8111156136f6576136f66143e3565b81526020019081526020016000206000838152602001908152602001600020819055505050565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613761903390899088908890600401613f4c565b602060405180830381600087803b15801561377b57600080fd5b505af19250505080156137ab575060408051601f3d908101601f191682019092526137a891810190613d80565b60015b613805573d8080156137d9576040519150601f19603f3d011682016040523d82523d6000602084013e6137de565b606091505b5080516137fd5760405162461bcd60e51b8152600401610d4690613fd3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612339565b506001949350505050565b8280546138369061434d565b90600052602060002090601f016020900481019282613858576000855561389e565b82601f1061387157805160ff191683800117855561389e565b8280016001018555821561389e579182015b8281111561389e578251825591602001919060010190613883565b506138aa9291506138ae565b5090565b5b808211156138aa57600081556001016138af565b600067ffffffffffffffff808411156138de576138de61440f565b604051601f8501601f19908116603f011681019082821181831017156139065761390661440f565b8160405280935085815286868601111561391f57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261394b57600080fd5b50813567ffffffffffffffff81111561396357600080fd5b6020830191508360208260051b850101111561397e57600080fd5b9250929050565b8035801515811461399557600080fd5b919050565b8035600c811061399557600080fd5b6000602082840312156139bb57600080fd5b8135612a2081614425565b600080604083850312156139d957600080fd5b82356139e481614425565b915060208301356139f481614425565b809150509250929050565b600080600060608486031215613a1457600080fd5b8335613a1f81614425565b92506020840135613a2f81614425565b929592945050506040919091013590565b60008060008060808587031215613a5657600080fd5b8435613a6181614425565b93506020850135613a7181614425565b925060408501359150606085013567ffffffffffffffff811115613a9457600080fd5b8501601f81018713613aa557600080fd5b613ab4878235602084016138c3565b91505092959194509250565b60008060408385031215613ad357600080fd5b8235613ade81614425565b9150613aec60208401613985565b90509250929050565b600080600060608486031215613b0a57600080fd5b8335613b1581614425565b9250613b236020850161399a565b9150604084013590509250925092565b60008060408385031215613b4657600080fd5b8235613b5181614425565b946020939093013593505050565b600080600060608486031215613b7457600080fd5b8335613b7f81614425565b925060208401359150613b946040850161399a565b90509250925092565b60008060008060808587031215613bb357600080fd5b8435613bbe81614425565b935060208501359250613bd36040860161399a565b9396929550929360600135925050565b600080600060608486031215613bf857600080fd5b8335613c0381614425565b95602085013595506040909401359392505050565b60008060008060408587031215613c2e57600080fd5b843567ffffffffffffffff80821115613c4657600080fd5b613c5288838901613939565b90965094506020870135915080821115613c6b57600080fd5b50613c7887828801613939565b95989497509550505050565b6000806000806000806000806080898b031215613ca057600080fd5b883567ffffffffffffffff80821115613cb857600080fd5b613cc48c838d01613939565b909a50985060208b0135915080821115613cdd57600080fd5b613ce98c838d01613939565b909850965060408b0135915080821115613d0257600080fd5b613d0e8c838d01613939565b909650945060608b0135915080821115613d2757600080fd5b50613d348b828c01613939565b999c989b5096995094979396929594505050565b600060208284031215613d5a57600080fd5b612a2082613985565b600060208284031215613d7557600080fd5b8135612a208161443a565b600060208284031215613d9257600080fd5b8151612a208161443a565b600060208284031215613daf57600080fd5b612a208261399a565b60008060408385031215613dcb57600080fd5b613b518361399a565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b8201601f81018413613e0e57600080fd5b612339848235602084016138c3565b600060208284031215613e2f57600080fd5b5035919050565b60008060408385031215613e4957600080fd5b50508035926020909101359150565b60008151808452613e70816020860160208601614321565b601f01601f19169290920160200192915050565b60008351613e96818460208801614321565b835190830190613eaa818360208801614321565b01949350505050565b60008451613ec5818460208901614321565b8083019050602f60f81b8082528551613ee5816001850160208a01614321565b60019201918201528351613f00816002840160208801614321565b0160020195945050505050565b60008351613f1f818460208801614321565b632f31332f60e01b9083019081528351613f40816004840160208801614321565b01600401949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613f7f90830184613e58565b9695505050505050565b602081526000612a206020830184613e58565b6020808252601d908201527f4c6f77204d696e7420537570706c7920666f722057686974656c697374000000604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526017908201527f57686974656c6973742053616c652064697361626c6564000000000000000000604082015260600190565b602080825260119082015270135a5b9d08105b1c9958591e4814d95b9d607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252600d908201526c14d85b1948191a5cd8589b1959609a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b604082015260600190565b60208082526021908201527f526571756573746564207175616e746974792063616e6e6f74206265207a65726040820152606f60f81b606082015260800190565b60208082526034908201527f57616c6c6574204e6f742057686974654c6973746564204f72204e6f204d696e60408201527374205175616e7469747920417661696c61626c6560601b606082015260800190565b60208082526018908201527f57616c6c6574204d696e74206c696d6974207261636865640000000000000000604082015260600190565b60208082526021908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f206d696e6040820152601d60fa1b606082015260800190565b600082198211156142d2576142d26143b7565b500190565b6000826142e6576142e66143cd565b500490565b6000816000190483118215151615614305576143056143b7565b500290565b60008282101561431c5761431c6143b7565b500390565b60005b8381101561433c578181015183820152602001614324565b838111156113bc5750506000910152565b600181811c9082168061436157607f821691505b6020821081141561438257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561439c5761439c6143b7565b5060010190565b6000826143b2576143b26143cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612abf57600080fd5b6001600160e01b031981168114612abf57600080fdfea26469706673582212208fbc7386210e21c01609582643ff724667966878c6c281590a180d41777699c464736f6c6343000807003368747470733a2f2f6f776e6572736869702e626967332e636f6d2f617069732f70616765732f6765746e66742f000000000000000000000000cf9cd1f57ac03d5470e06a83510a4fce8072337e000000000000000000000000f3cfad0752ef2e070e40928de5c0c0ab89b0647f

Deployed Bytecode

0x6080604052600436106104255760003560e01c8063753eb56011610229578063cca129891161012e578063e7b01a74116100b6578063f0ee92d01161007a578063f0ee92d014610c34578063f2fde38b14610c54578063f8b45b0514610c74578063f90ce19314610c8a578063fa5dcadf14610caa57600080fd5b8063e7b01a7414610b75578063e981154814610b8b578063e985e9c514610bab578063eb3670f714610bf4578063ecc1da2714610c1457600080fd5b8063da905e82116100fd578063da905e8214610ac9578063dc5447ca14610adf578063e3b8a0d214610aff578063e4169ddb14610b1f578063e44c9a9514610b5557600080fd5b8063cca1298914610a63578063d0a70d2714610a76578063d0bb439c14610a96578063d680bef014610ab657600080fd5b8063a22cb465116101b1578063b90714ae11610180578063b90714ae146109ab578063bfd5621e146109cb578063c056f56e146109eb578063c8752e3914610a0b578063c87b56dd14610a4357600080fd5b8063a22cb46514610938578063ab7a02f214610958578063b88d4fde1461096b578063b89fd23d1461098b57600080fd5b806391fc3263116101f857806391fc3263146108d7578063933e95b21461058457806395d89b41146108ed57806399024dd0146109025780639e86e8f71461092257600080fd5b8063753eb5601461085957806386a173ee146108795780638da5cb5b146108995780638df9b58b146108b757600080fd5b806330509bca1161032f5780635d0044ca116102b75780636ad1fe02116102865780636ad1fe02146107c05780636c0360eb146107df5780636c5e874c146107f457806370a0823114610824578063715018a61461084457600080fd5b80635d0044ca1461074a578063633220bb1461076a5780636352211e1461078057806367212f3f146107a057600080fd5b806342842e0e116102fe57806342842e0e146106cb5780634d3fe8ad146106eb57806355f804b3146107015780635622b95b146107215780635c1d29431461073757600080fd5b806330509bca1461066c57806334918dfd146106815780633aaa6bf01461069657806340fb3561146106b657600080fd5b80630f011123116103b25780632178c754116103815780632178c754146105d957806323b872dd146105f95780632a33ef44146106195780632d02a5b21461062c57806330136e381461064c57600080fd5b80630f0111231461056e57806318160ddd146105845780631e7269c5146105995780631f947d8b146105c657600080fd5b806306fdde03116103f957806306fdde03146104bf578063081812fc146104e1578063095ea7b3146105195780630acc8574146105395780630ddc47df1461054e57600080fd5b80620eadc61461042a57806301ffc9a714610459578063026478291461047957806302e75c561461049d575b600080fd5b34801561043657600080fd5b50600e546104449060ff1681565b60405190151581526020015b60405180910390f35b34801561046557600080fd5b50610444610474366004613d63565b610cca565b34801561048557600080fd5b5061048f60125481565b604051908152602001610450565b3480156104a957600080fd5b506104bd6104b8366004613be3565b610d1c565b005b3480156104cb57600080fd5b506104d4610e57565b6040516104509190613f89565b3480156104ed57600080fd5b506105016104fc366004613e1d565b610ee9565b6040516001600160a01b039091168152602001610450565b34801561052557600080fd5b506104bd610534366004613b33565b610f71565b34801561054557600080fd5b506104bd611082565b34801561055a57600080fd5b5061048f610569366004613db8565b6110cb565b34801561057a57600080fd5b5061048f60145481565b34801561059057600080fd5b5061048f61111c565b3480156105a557600080fd5b5061048f6105b43660046139a9565b601f6020526000908152604090205481565b6104bd6105d4366004613b33565b61112c565b3480156105e557600080fd5b506104bd6105f4366004613b9d565b611263565b34801561060557600080fd5b506104bd6106143660046139ff565b6113c2565b6104bd610627366004613b5f565b6113f3565b34801561063857600080fd5b506104bd610647366004613e1d565b611585565b34801561065857600080fd5b50600954610501906001600160a01b031681565b34801561067857600080fd5b506104bd6115b4565b34801561068d57600080fd5b506104bd611736565b3480156106a257600080fd5b506104bd6106b1366004613b9d565b61177d565b3480156106c257600080fd5b506104bd611903565b3480156106d757600080fd5b506104bd6106e63660046139ff565b611941565b3480156106f757600080fd5b5061048f60185481565b34801561070d57600080fd5b506104bd61071c366004613dd4565b61195c565b34801561072d57600080fd5b5061048f60135481565b6104bd610745366004613b33565b611999565b34801561075657600080fd5b506104bd610765366004613e1d565b611adc565b34801561077657600080fd5b5061048f60105481565b34801561078c57600080fd5b5061050161079b366004613e1d565b611b0b565b3480156107ac57600080fd5b506104bd6107bb366004613c18565b611b82565b3480156107cc57600080fd5b50600e5461044490610100900460ff1681565b3480156107eb57600080fd5b506104d4611c4a565b34801561080057600080fd5b5061044461080f366004613e1d565b600c6020526000908152604090205460ff1681565b34801561083057600080fd5b5061048f61083f3660046139a9565b611cd8565b34801561085057600080fd5b506104bd611d5f565b34801561086557600080fd5b506104bd6108743660046139a9565b611d95565b34801561088557600080fd5b50600e546104449062010000900460ff1681565b3480156108a557600080fd5b506006546001600160a01b0316610501565b3480156108c357600080fd5b5061048f6108d2366004613db8565b611de1565b3480156108e357600080fd5b5061048f60155481565b3480156108f957600080fd5b506104d4611df9565b34801561090e57600080fd5b506104bd61091d366004613e1d565b611e08565b34801561092e57600080fd5b5061048f60165481565b34801561094457600080fd5b506104bd610953366004613ac0565b611e37565b6104bd610966366004613b33565b611e42565b34801561097757600080fd5b506104bd610986366004613a40565b611f49565b34801561099757600080fd5b506104bd6109a6366004613e1d565b611f7b565b3480156109b757600080fd5b506104bd6109c6366004613be3565b611faa565b3480156109d757600080fd5b506104446109e6366004613e1d565b612113565b3480156109f757600080fd5b506104bd610a06366004613c18565b612142565b348015610a1757600080fd5b5061048f610a26366004613e36565b600d60209081526000928352604080842090915290825290205481565b348015610a4f57600080fd5b506104d4610a5e366004613e1d565b6121e7565b6104bd610a71366004613b5f565b612341565b348015610a8257600080fd5b50600a54610501906001600160a01b031681565b348015610aa257600080fd5b50610444610ab13660046139a9565b6124ab565b6104bd610ac4366004613b5f565b6124c9565b348015610ad557600080fd5b5061048f60115481565b348015610aeb57600080fd5b506104d4610afa366004613e1d565b612611565b348015610b0b57600080fd5b506104bd610b1a366004613be3565b61262a565b348015610b2b57600080fd5b5061048f610b3a3660046139a9565b6001600160a01b03166000908152601d602052604090205490565b348015610b6157600080fd5b506104bd610b70366004613b9d565b6127a1565b348015610b8157600080fd5b5061048f60195481565b348015610b9757600080fd5b506104bd610ba6366004613e1d565b612956565b348015610bb757600080fd5b50610444610bc63660046139c6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610c0057600080fd5b506104bd610c0f366004613e1d565b612985565b348015610c2057600080fd5b506104bd610c2f3660046139a9565b6129b4565b348015610c4057600080fd5b5061048f610c4f366004613db8565b612a00565b348015610c6057600080fd5b506104bd610c6f3660046139a9565b612a27565b348015610c8057600080fd5b5061048f600f5481565b348015610c9657600080fd5b5061048f610ca5366004613af5565b612ac2565b348015610cb657600080fd5b506104bd610cc5366004613c84565b612b23565b60006001600160e01b031982166380ac58cd60e01b1480610cfb57506001600160e01b03198216635b5e139f60e01b145b80610d1657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b03163314610d4f5760405162461bcd60e51b8152600401610d4690614087565b60405180910390fd5b81610d6c5760405162461bcd60e51b8152600401610d46906141b2565b81610d8c846001600160a01b03166000908152601d602052604090205490565b1015610daa5760405162461bcd60e51b8152600401610d46906141f3565b60185482601954610dbb91906142bf565b1115610dd95760405162461bcd60e51b8152600401610d4690613f9c565b6000818152600c602052604090205460ff1615610e085760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60205260409020805460ff19166001179055610e2b8383612c55565b8160196000828254610e3d91906142bf565b92505081905550610e52836016548484612c99565b505050565b606060008054610e669061434d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e929061434d565b8015610edf5780601f10610eb457610100808354040283529160200191610edf565b820191906000526020600020905b815481529060010190602001808311610ec257829003601f168201915b5050505050905090565b6000610ef482612d38565b610f555760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d46565b506000908152600460205260409020546001600160a01b031690565b6000610f7c82611b0b565b9050806001600160a01b0316836001600160a01b03161415610fea5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d46565b336001600160a01b038216148061100657506110068133610bc6565b6110785760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d46565b610e528383612d55565b6006546001600160a01b031633146110ac5760405162461bcd60e51b8152600401610d4690614087565b600e805462ff0000198116620100009182900460ff1615909102179055565b60006017600084600b8111156110e3576110e36143e3565b600b8111156110f4576110f46143e3565b8152602001908152602001600020600083815260200190815260200160002054905092915050565b600061112760075490565b905090565b600e5462010000900460ff166111545760405162461bcd60e51b8152600401610d4690614025565b806111715760405162461bcd60e51b8152600401610d46906141b2565b346013548261118091906142eb565b111561119e5760405162461bcd60e51b8152600401610d4690614183565b6111a7826124ab565b6111c35760405162461bcd60e51b8152600401610d46906141f3565b601854816019546111d491906142bf565b11156111f25760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0383166000908152601f60205260409020546112199083906142bf565b11156112375760405162461bcd60e51b8152600401610d4690614247565b806019600082825461124991906142bf565b9250508190555061125f82601654836000612c99565b5050565b6006546001600160a01b0316331461128d5760405162461bcd60e51b8152600401610d4690614087565b826112aa5760405162461bcd60e51b8152600401610d46906141b2565b6000818152600c602052604090205460ff16156112d95760405162461bcd60e51b8152600401610d469061405c565b826112e78584601554612ac2565b10156113055760405162461bcd60e51b8152600401610d46906141f3565b6017600083600b81111561131b5761131b6143e3565b600b81111561132c5761132c6143e3565b815260200190815260200160002060006015548152602001908152602001600020548361135b84601554611de1565b61136591906142bf565b11156113835760405162461bcd60e51b8152600401610d4690613f9c565b611391848484601554612dc3565b6000818152600c60205260409020805460ff191660011790556015546113bc90859084908685612e84565b50505050565b6113cc3382612f56565b6113e85760405162461bcd60e51b8152600401610d4690614132565b610e5283838361303f565b600e54610100900460ff1661141a5760405162461bcd60e51b8152600401610d469061410b565b333b156114395760405162461bcd60e51b8152600401610d469061427e565b816114565760405162461bcd60e51b8152600401610d46906141b2565b346012548361146591906142eb565b11156114835760405162461bcd60e51b8152600401610d4690614183565b6017600082600b811115611499576114996143e3565b600b8111156114aa576114aa6143e3565b81526020019081526020016000206000601554815260200190815260200160002054826114d983601554611de1565b6114e391906142bf565b11156115015760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0384166000908152601f60205260409020546115289084906142bf565b11156115465760405162461bcd60e51b8152600401610d4690614247565b6001600160a01b0383166000908152601f60205260408120805484929061156e9084906142bf565b92505081905550610e528382601554856000612e84565b6006546001600160a01b031633146115af5760405162461bcd60e51b8152600401610d4690614087565b601455565b6006546001600160a01b031633146115de5760405162461bcd60e51b8152600401610d4690614087565b600a5447906000906001600160a01b03166115fb6103e8846142d7565b6116069060966142eb565b604051600081818185875af1925050503d8060008114611642576040519150601f19603f3d011682016040523d82523d6000602084013e611647565b606091505b50506009549091506000906001600160a01b03166116676103e8856142d7565b611673906103526142eb565b604051600081818185875af1925050503d80600081146116af576040519150601f19603f3d011682016040523d82523d6000602084013e6116b4565b606091505b50509050806116f75760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d46565b81610e525760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d46565b6006546001600160a01b031633146117605760405162461bcd60e51b8152600401610d4690614087565b600e805461ff001981166101009182900460ff1615909102179055565b6006546001600160a01b031633146117a75760405162461bcd60e51b8152600401610d4690614087565b600e5462010000900460ff166117cf5760405162461bcd60e51b8152600401610d4690614025565b826117ec5760405162461bcd60e51b8152600401610d46906141b2565b6117f5846124ab565b6118115760405162461bcd60e51b8152600401610d46906141f3565b6017600083600b811115611827576118276143e3565b600b811115611838576118386143e3565b815260200190815260200160002060006015548152602001908152602001600020548361186784601554611de1565b61187191906142bf565b111561188f5760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0385166000908152601f60205260409020546118b69085906142bf565b11156118d45760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156113915760405162461bcd60e51b8152600401610d469061405c565b6006546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610d4690614087565b600e805460ff19811660ff90911615179055565b610e5283838360405180602001604052806000815250611f49565b6006546001600160a01b031633146119865760405162461bcd60e51b8152600401610d4690614087565b805161125f90600890602084019061382a565b600e54610100900460ff166119c05760405162461bcd60e51b8152600401610d469061410b565b333b156119df5760405162461bcd60e51b8152600401610d469061427e565b806119fc5760405162461bcd60e51b8152600401610d46906141b2565b3460145482611a0b91906142eb565b1115611a295760405162461bcd60e51b8152600401610d4690614183565b60185481601954611a3a91906142bf565b1115611a585760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0383166000908152601f6020526040902054611a7f9083906142bf565b1115611a9d5760405162461bcd60e51b8152600401610d4690614247565b8060196000828254611aaf91906142bf565b90915550506001600160a01b0382166000908152601f6020526040812080548392906112499084906142bf565b6006546001600160a01b03163314611b065760405162461bcd60e51b8152600401610d4690614087565b600f55565b6000818152600260205260408120546001600160a01b031680610d165760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d46565b6006546001600160a01b03163314611bac5760405162461bcd60e51b8152600401610d4690614087565b60005b83811015611c4357828282818110611bc957611bc96143f9565b9050602002016020810190611bde9190613d48565b601b6000878785818110611bf457611bf46143f9565b9050602002016020810190611c0991906139a9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c3b81614388565b915050611baf565b5050505050565b60088054611c579061434d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c839061434d565b8015611cd05780601f10611ca557610100808354040283529160200191611cd0565b820191906000526020600020905b815481529060010190602001808311611cb357829003601f168201915b505050505081565b60006001600160a01b038216611d435760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d46565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314611d895760405162461bcd60e51b8152600401610d4690614087565b611d9360006131db565b565b6006546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610d4690614087565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000601e600084600b8111156110e3576110e36143e3565b606060018054610e669061434d565b6006546001600160a01b03163314611e325760405162461bcd60e51b8152600401610d4690614087565b601255565b61125f33838361322d565b600e5460ff16611e885760405162461bcd60e51b81526020600482015260116024820152701592540814d85b1948191a5cd8589b1959607a1b6044820152606401610d46565b80611ea55760405162461bcd60e51b8152600401610d46906141b2565b3460135482611eb491906142eb565b1115611ed25760405162461bcd60e51b8152600401610d4690614183565b80611ef2836001600160a01b03166000908152601d602052604090205490565b1015611f105760405162461bcd60e51b8152600401610d46906141f3565b60185481601954611f2191906142bf565b1115611f3f5760405162461bcd60e51b8152600401610d4690613f9c565b6112378282612c55565b611f533383612f56565b611f6f5760405162461bcd60e51b8152600401610d4690614132565b6113bc848484846132fc565b6006546001600160a01b03163314611fa55760405162461bcd60e51b8152600401610d4690614087565b601055565b6006546001600160a01b03163314611fd45760405162461bcd60e51b8152600401610d4690614087565b600e54610100900460ff16611ffb5760405162461bcd60e51b8152600401610d469061410b565b816120185760405162461bcd60e51b8152600401610d46906141b2565b6018548260195461202991906142bf565b11156120475760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0384166000908152601f602052604090205461206e9084906142bf565b111561208c5760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156120bb5760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60205260408120805460ff19166001179055601980548492906120e69084906142bf565b90915550506001600160a01b0383166000908152601f602052604081208054849290610e3d9084906142bf565b600061211e82612d38565b61213a5760405162461bcd60e51b8152600401610d46906140bc565b506001919050565b6006546001600160a01b0316331461216c5760405162461bcd60e51b8152600401610d4690614087565b60005b83811015611c4357828282818110612189576121896143f9565b90506020020135601d60008787858181106121a6576121a66143f9565b90506020020160208101906121bb91906139a9565b6001600160a01b03168152602081019190915260400160002055806121df81614388565b91505061216f565b60606121f282612d38565b6122485760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610d46565b6000828152600b6020526040812080546122619061434d565b80601f016020809104026020016040519081016040528092919081815260200182805461228d9061434d565b80156122da5780601f106122af576101008083540402835291602001916122da565b820191906000526020600020905b8154815290600101906020018083116122bd57829003601f168201915b5050505050905060006122eb61332f565b90508051600014156122fe575092915050565b815115612330578082604051602001612318929190613e84565b60405160208183030381529060405292505050919050565b6123398461333e565b949350505050565b600e5462010000900460ff166123695760405162461bcd60e51b8152600401610d4690614025565b816123865760405162461bcd60e51b8152600401610d46906141b2565b346011548361239591906142eb565b11156123b35760405162461bcd60e51b8152600401610d4690614183565b6123bc836124ab565b6123d85760405162461bcd60e51b8152600401610d46906141f3565b6017600082600b8111156123ee576123ee6143e3565b600b8111156123ff576123ff6143e3565b815260200190815260200160002060006015548152602001908152602001600020548261242e83601554611de1565b61243891906142bf565b11156124565760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0384166000908152601f602052604090205461247d9084906142bf565b111561249b5760405162461bcd60e51b8152600401610d4690614247565b610e528382601554856000612e84565b6001600160a01b03166000908152601b602052604090205460ff1690565b600e5460ff1661250f5760405162461bcd60e51b81526020600482015260116024820152701592540814d85b1948191a5cd8589b1959607a1b6044820152606401610d46565b8161252c5760405162461bcd60e51b8152600401610d46906141b2565b346011548361253b91906142eb565b11156125595760405162461bcd60e51b8152600401610d4690614183565b816125678483601554612ac2565b10156125855760405162461bcd60e51b8152600401610d46906141f3565b6017600082600b81111561259b5761259b6143e3565b600b8111156125ac576125ac6143e3565b81526020019081526020016000206000601554815260200190815260200160002054826125db83601554611de1565b6125e591906142bf565b11156126035760405162461bcd60e51b8152600401610d4690613f9c565b61249b838383601554612dc3565b600b6020526000908152604090208054611c579061434d565b6006546001600160a01b031633146126545760405162461bcd60e51b8152600401610d4690614087565b600e5462010000900460ff1661267c5760405162461bcd60e51b8152600401610d4690614025565b816126995760405162461bcd60e51b8152600401610d46906141b2565b6126a2836124ab565b6126be5760405162461bcd60e51b8152600401610d46906141f3565b601854826019546126cf91906142bf565b11156126ed5760405162461bcd60e51b8152600401610d4690613f9c565b6010546001600160a01b0384166000908152601f60205260409020546127149084906142bf565b11156127325760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156127615760405162461bcd60e51b8152600401610d469061405c565b816019600082825461277391906142bf565b90915550506000818152600c60205260409020805460ff19166001179055601654610e529084908484612c99565b6006546001600160a01b031633146127cb5760405162461bcd60e51b8152600401610d4690614087565b600e54610100900460ff166127f25760405162461bcd60e51b8152600401610d469061410b565b8261280f5760405162461bcd60e51b8152600401610d46906141b2565b6017600083600b811115612825576128256143e3565b600b811115612836576128366143e3565b815260200190815260200160002060006015548152602001908152602001600020548361286584601554611de1565b61286f91906142bf565b111561288d5760405162461bcd60e51b8152600401610d4690613f9c565b600f546001600160a01b0385166000908152601f60205260409020546128b49085906142bf565b11156128d25760405162461bcd60e51b8152600401610d4690614247565b6000818152600c602052604090205460ff16156129015760405162461bcd60e51b8152600401610d469061405c565b6000818152600c60209081526040808320805460ff191660011790556001600160a01b0387168352601f909152812080548592906129409084906142bf565b925050819055506113bc84836015548685612e84565b6006546001600160a01b031633146129805760405162461bcd60e51b8152600401610d4690614087565b601355565b6006546001600160a01b031633146129af5760405162461bcd60e51b8152600401610d4690614087565b601155565b6006546001600160a01b031633146129de5760405162461bcd60e51b8152600401610d4690614087565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a0c8383611de1565b612a1684846110cb565b612a20919061430a565b9392505050565b6006546001600160a01b03163314612a515760405162461bcd60e51b8152600401610d4690614087565b6001600160a01b038116612ab65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d46565b612abf816131db565b50565b6000601c600084600b811115612ada57612ada6143e3565b600b811115612aeb57612aeb6143e3565b81526020808201929092526040908101600090812085825283528181206001600160a01b038816825290925290205490509392505050565b6006546001600160a01b03163314612b4d5760405162461bcd60e51b8152600401610d4690614087565b60005b87811015612c4a57868682818110612b6a57612b6a6143f9565b90506020020135601c6000878785818110612b8757612b876143f9565b9050602002016020810190612b9c9190613d9d565b600b811115612bad57612bad6143e3565b600b811115612bbe57612bbe6143e3565b81526020019081526020016000206000858585818110612be057612be06143f9565b90506020020135815260200190815260200160002060008b8b85818110612c0957612c096143f9565b9050602002016020810190612c1e91906139a9565b6001600160a01b0316815260208101919091526040016000205580612c4281614388565b915050612b50565b505050505050505050565b6001600160a01b0382166000908152601d6020526040902054612c7990829061430a565b6001600160a01b039092166000908152601d602052604090209190915550565b60005b82811015611c4357612cb685612cb160075490565b6133c0565b612d01612cc260075490565b612cd3612cce60075490565b6134f3565b612cdc876134f3565b604051602001612ced929190613f0d565b6040516020818303038152906040526135f1565b600780546000848152600d602090815260408083208484529091529020819055600101905580612d3081614388565b915050612c9c565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612d8a82611b0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b82601c600084600b811115612dda57612dda6143e3565b600b811115612deb57612deb6143e3565b81526020808201929092526040908101600090812085825283528181206001600160a01b0389168252909252902054612e24919061430a565b601c600084600b811115612e3a57612e3a6143e3565b600b811115612e4b57612e4b6143e3565b8152602080820192909252604090810160009081209481529382528084206001600160a01b039097168452959052939020929092555050565b60005b82811015612f4e57612e99858561367c565b612ea686612cb160075490565b612f17612eb260075490565b612ebe612cce60075490565b612efc601a60008a600b811115612ed757612ed76143e3565b600b811115612ee857612ee86143e3565b8152602001908152602001600020546134f3565b612f05886134f3565b604051602001612ced93929190613eb3565b600780546000848152600d602090815260408083208484529091529020819055600101905580612f4681614388565b915050612e87565b505050505050565b6000612f6182612d38565b612fc25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d46565b6000612fcd83611b0b565b9050806001600160a01b0316846001600160a01b0316148061301457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806123395750836001600160a01b031661302d84610ee9565b6001600160a01b031614949350505050565b826001600160a01b031661305282611b0b565b6001600160a01b0316146130b65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610d46565b6001600160a01b0382166131185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d46565b613123600082612d55565b6001600160a01b038316600090815260036020526040812080546001929061314c90849061430a565b90915550506001600160a01b038216600090815260036020526040812080546001929061317a9084906142bf565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561328f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d46565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61330784848461303f565b6133138484848461371d565b6113bc5760405162461bcd60e51b8152600401610d4690613fd3565b606060088054610e669061434d565b606061334982612d38565b6133655760405162461bcd60e51b8152600401610d46906140bc565b600061336f61332f565b9050600081511161338f5760405180602001604052806000815250612a20565b80613399846134f3565b6040516020016133aa929190613e84565b6040516020818303038152906040529392505050565b6001600160a01b0382166134165760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d46565b61341f81612d38565b1561346c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d46565b6001600160a01b03821660009081526003602052604081208054600192906134959084906142bf565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816135175750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613541578061352b81614388565b915061353a9050600a836142d7565b915061351b565b60008167ffffffffffffffff81111561355c5761355c61440f565b6040519080825280601f01601f191660200182016040528015613586576020820181803683370190505b5090505b84156123395761359b60018361430a565b91506135a8600a866143a3565b6135b39060306142bf565b60f81b8183815181106135c8576135c86143f9565b60200101906001600160f81b031916908160001a9053506135ea600a866142d7565b945061358a565b6135fa82612d38565b61365d5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610d46565b6000828152600b602090815260409091208251610e529284019061382a565b601e600083600b811115613692576136926143e3565b600b8111156136a3576136a36143e3565b815260200190815260200160002060008281526020019081526020016000205460016136cf91906142bf565b601e600084600b8111156136e5576136e56143e3565b600b8111156136f6576136f66143e3565b81526020019081526020016000206000838152602001908152602001600020819055505050565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613761903390899088908890600401613f4c565b602060405180830381600087803b15801561377b57600080fd5b505af19250505080156137ab575060408051601f3d908101601f191682019092526137a891810190613d80565b60015b613805573d8080156137d9576040519150601f19603f3d011682016040523d82523d6000602084013e6137de565b606091505b5080516137fd5760405162461bcd60e51b8152600401610d4690613fd3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612339565b506001949350505050565b8280546138369061434d565b90600052602060002090601f016020900481019282613858576000855561389e565b82601f1061387157805160ff191683800117855561389e565b8280016001018555821561389e579182015b8281111561389e578251825591602001919060010190613883565b506138aa9291506138ae565b5090565b5b808211156138aa57600081556001016138af565b600067ffffffffffffffff808411156138de576138de61440f565b604051601f8501601f19908116603f011681019082821181831017156139065761390661440f565b8160405280935085815286868601111561391f57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261394b57600080fd5b50813567ffffffffffffffff81111561396357600080fd5b6020830191508360208260051b850101111561397e57600080fd5b9250929050565b8035801515811461399557600080fd5b919050565b8035600c811061399557600080fd5b6000602082840312156139bb57600080fd5b8135612a2081614425565b600080604083850312156139d957600080fd5b82356139e481614425565b915060208301356139f481614425565b809150509250929050565b600080600060608486031215613a1457600080fd5b8335613a1f81614425565b92506020840135613a2f81614425565b929592945050506040919091013590565b60008060008060808587031215613a5657600080fd5b8435613a6181614425565b93506020850135613a7181614425565b925060408501359150606085013567ffffffffffffffff811115613a9457600080fd5b8501601f81018713613aa557600080fd5b613ab4878235602084016138c3565b91505092959194509250565b60008060408385031215613ad357600080fd5b8235613ade81614425565b9150613aec60208401613985565b90509250929050565b600080600060608486031215613b0a57600080fd5b8335613b1581614425565b9250613b236020850161399a565b9150604084013590509250925092565b60008060408385031215613b4657600080fd5b8235613b5181614425565b946020939093013593505050565b600080600060608486031215613b7457600080fd5b8335613b7f81614425565b925060208401359150613b946040850161399a565b90509250925092565b60008060008060808587031215613bb357600080fd5b8435613bbe81614425565b935060208501359250613bd36040860161399a565b9396929550929360600135925050565b600080600060608486031215613bf857600080fd5b8335613c0381614425565b95602085013595506040909401359392505050565b60008060008060408587031215613c2e57600080fd5b843567ffffffffffffffff80821115613c4657600080fd5b613c5288838901613939565b90965094506020870135915080821115613c6b57600080fd5b50613c7887828801613939565b95989497509550505050565b6000806000806000806000806080898b031215613ca057600080fd5b883567ffffffffffffffff80821115613cb857600080fd5b613cc48c838d01613939565b909a50985060208b0135915080821115613cdd57600080fd5b613ce98c838d01613939565b909850965060408b0135915080821115613d0257600080fd5b613d0e8c838d01613939565b909650945060608b0135915080821115613d2757600080fd5b50613d348b828c01613939565b999c989b5096995094979396929594505050565b600060208284031215613d5a57600080fd5b612a2082613985565b600060208284031215613d7557600080fd5b8135612a208161443a565b600060208284031215613d9257600080fd5b8151612a208161443a565b600060208284031215613daf57600080fd5b612a208261399a565b60008060408385031215613dcb57600080fd5b613b518361399a565b600060208284031215613de657600080fd5b813567ffffffffffffffff811115613dfd57600080fd5b8201601f81018413613e0e57600080fd5b612339848235602084016138c3565b600060208284031215613e2f57600080fd5b5035919050565b60008060408385031215613e4957600080fd5b50508035926020909101359150565b60008151808452613e70816020860160208601614321565b601f01601f19169290920160200192915050565b60008351613e96818460208801614321565b835190830190613eaa818360208801614321565b01949350505050565b60008451613ec5818460208901614321565b8083019050602f60f81b8082528551613ee5816001850160208a01614321565b60019201918201528351613f00816002840160208801614321565b0160020195945050505050565b60008351613f1f818460208801614321565b632f31332f60e01b9083019081528351613f40816004840160208801614321565b01600401949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613f7f90830184613e58565b9695505050505050565b602081526000612a206020830184613e58565b6020808252601d908201527f4c6f77204d696e7420537570706c7920666f722057686974656c697374000000604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526017908201527f57686974656c6973742053616c652064697361626c6564000000000000000000604082015260600190565b602080825260119082015270135a5b9d08105b1c9958591e4814d95b9d607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252600d908201526c14d85b1948191a5cd8589b1959609a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b604082015260600190565b60208082526021908201527f526571756573746564207175616e746974792063616e6e6f74206265207a65726040820152606f60f81b606082015260800190565b60208082526034908201527f57616c6c6574204e6f742057686974654c6973746564204f72204e6f204d696e60408201527374205175616e7469747920417661696c61626c6560601b606082015260800190565b60208082526018908201527f57616c6c6574204d696e74206c696d6974207261636865640000000000000000604082015260600190565b60208082526021908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f206d696e6040820152601d60fa1b606082015260800190565b600082198211156142d2576142d26143b7565b500190565b6000826142e6576142e66143cd565b500490565b6000816000190483118215151615614305576143056143b7565b500290565b60008282101561431c5761431c6143b7565b500390565b60005b8381101561433c578181015183820152602001614324565b838111156113bc5750506000910152565b600181811c9082168061436157607f821691505b6020821081141561438257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561439c5761439c6143b7565b5060010190565b6000826143b2576143b26143cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612abf57600080fd5b6001600160e01b031981168114612abf57600080fdfea26469706673582212208fbc7386210e21c01609582643ff724667966878c6c281590a180d41777699c464736f6c63430008070033

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

000000000000000000000000cf9cd1f57ac03d5470e06a83510a4fce8072337e000000000000000000000000f3cfad0752ef2e070e40928de5c0c0ab89b0647f

-----Decoded View---------------
Arg [0] : fundsTo_ (address): 0xCf9cd1f57Ac03d5470E06A83510a4fcE8072337E
Arg [1] : fundsToDev_ (address): 0xf3CFAd0752ef2e070E40928DE5c0C0AB89B0647f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf9cd1f57ac03d5470e06a83510a4fce8072337e
Arg [1] : 000000000000000000000000f3cfad0752ef2e070e40928de5c0c0ab89b0647f


Deployed Bytecode Sourcemap

37064:18767:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37712:27;;;;;;;;;;-1:-1:-1;37712:27:0;;;;;;;;;;;14476:14:1;;14469:22;14451:41;;14439:2;14424:18;37712:27:0;;;;;;;;20228:305;;;;;;;;;;-1:-1:-1;20228:305:0;;;;;:::i;:::-;;:::i;38102:34::-;;;;;;;;;;;;;;;;;;;26084:25:1;;;26072:2;26057:18;38102:34:0;25938:177:1;52070:649:0;;;;;;;;;;-1:-1:-1;52070:649:0;;;;;:::i;:::-;;:::i;:::-;;21173:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22733:221::-;;;;;;;;;;-1:-1:-1;22733:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13550:32:1;;;13532:51;;13520:2;13505:18;22733:221:0;13386:203:1;22256:411:0;;;;;;;;;;-1:-1:-1;22256:411:0;;;;;:::i;:::-;;:::i;42227:100::-;;;;;;;;;;;;;:::i;44129:136::-;;;;;;;;;;-1:-1:-1;44129:136:0;;;;;:::i;:::-;;:::i;38197:37::-;;;;;;;;;;;;;;;;55715:113;;;;;;;;;;;;;:::i;39249:41::-;;;;;;;;;;-1:-1:-1;39249:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;52733:688;;;;;;:::i;:::-;;:::i;47939:673::-;;;;;;;;;;-1:-1:-1;47939:673:0;;;;;:::i;:::-;;:::i;23483:339::-;;;;;;;;;;-1:-1:-1;23483:339:0;;;;;:::i;:::-;;:::i;50080:675::-;;;;;;:::i;:::-;;:::i;41838:102::-;;;;;;;;;;-1:-1:-1;41838:102:0;;;;;:::i;:::-;;:::i;37314:30::-;;;;;;;;;;-1:-1:-1;37314:30:0;;;;-1:-1:-1;;;;;37314:30:0;;;40914:362;;;;;;;;;;;;;:::i;42146:73::-;;;;;;;;;;;;;:::i;49321:749::-;;;;;;;;;;-1:-1:-1;49321:749:0;;;;;:::i;:::-;;:::i;42058:82::-;;;;;;;;;;;;;:::i;23893:185::-;;;;;;;;;;-1:-1:-1;23893:185:0;;;;;:::i;:::-;;:::i;38763:28::-;;;;;;;;;;;;;;;;44499:102;;;;;;;;;;-1:-1:-1;44499:102:0;;;;;:::i;:::-;;:::i;38145:45::-;;;;;;;;;;;;;;;;54183:670;;;;;;:::i;:::-;;:::i;41286:105::-;;;;;;;;;;-1:-1:-1;41286:105:0;;;;;:::i;:::-;;:::i;37931:36::-;;;;;;;;;;;;;;;;20867:239;;;;;;;;;;-1:-1:-1;20867:239:0;;;;;:::i;:::-;;:::i;43212:237::-;;;;;;;;;;-1:-1:-1;43212:237:0;;;;;:::i;:::-;;:::i;37746:24::-;;;;;;;;;;-1:-1:-1;37746:24:0;;;;;;;;;;;37193:71;;;;;;;;;;;;;:::i;37553:43::-;;;;;;;;;;-1:-1:-1;37553:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20597:208;;;;;;;;;;-1:-1:-1;20597:208:0;;;;;:::i;:::-;;:::i;34915:103::-;;;;;;;;;;;;;:::i;40779:119::-;;;;;;;;;;-1:-1:-1;40779:119:0;;;;;:::i;:::-;;:::i;37777:33::-;;;;;;;;;;-1:-1:-1;37777:33:0;;;;;;;;;;;34264:87;;;;;;;;;;-1:-1:-1;34337:6:0;;-1:-1:-1;;;;;34337:6:0;34264:87;;43976:141;;;;;;;;;;-1:-1:-1;43976:141:0;;;;;:::i;:::-;;:::i;38495:27::-;;;;;;;;;;;;;;;;21342:104;;;;;;;;;;;;;:::i;41948:102::-;;;;;;;;;;-1:-1:-1;41948:102:0;;;;;:::i;:::-;;:::i;38529:27::-;;;;;;;;;;;;;;;;23026:155;;;;;;;;;;-1:-1:-1;23026:155:0;;;;;:::i;:::-;;:::i;51424:638::-;;;;;;:::i;:::-;;:::i;24149:328::-;;;;;;;;;;-1:-1:-1;24149:328:0;;;;;:::i;:::-;;:::i;41399:137::-;;;;;;;;;;-1:-1:-1;41399:137:0;;;;;:::i;:::-;;:::i;54865:646::-;;;;;;;;;;-1:-1:-1;54865:646:0;;;;;:::i;:::-;;:::i;55517:192::-;;;;;;;;;;-1:-1:-1;55517:192:0;;;;;:::i;:::-;;:::i;42960:246::-;;;;;;;;;;-1:-1:-1;42960:246:0;;;;;:::i;:::-;;:::i;37605:67::-;;;;;;;;;;-1:-1:-1;37605:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;44737:671;;;;;;;;;;-1:-1:-1;44737:671:0;;;;;:::i;:::-;;:::i;48620:693::-;;;;;;:::i;:::-;;:::i;37384:33::-;;;;;;;;;;-1:-1:-1;37384:33:0;;;;-1:-1:-1;;;;;37384:33:0;;;45416:117;;;;;;;;;;-1:-1:-1;45416:117:0;;;;;:::i;:::-;;:::i;47266:665::-;;;;;;:::i;:::-;;:::i;38052:43::-;;;;;;;;;;;;;;;;37492:52;;;;;;;;;;-1:-1:-1;37492:52:0;;;;;:::i;:::-;;:::i;53429:744::-;;;;;;;;;;-1:-1:-1;53429:744:0;;;;;:::i;:::-;;:::i;42522:122::-;;;;;;;;;;-1:-1:-1;42522:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;42611:25:0;42584:7;42611:25;;;:17;:25;;;;;;;42522:122;50765:651;;;;;;;;;;-1:-1:-1;50765:651:0;;;;;:::i;:::-;;:::i;38798:33::-;;;;;;;;;;;;;;;;41692:138;;;;;;;;;;-1:-1:-1;41692:138:0;;;;;:::i;:::-;;:::i;23252:164::-;;;;;;;;;;-1:-1:-1;23252:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23373:25:0;;;23349:4;23373:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23252:164;41544:138;;;;;;;;;;-1:-1:-1;41544:138:0;;;;;:::i;:::-;;:::i;40666:107::-;;;;;;;;;;-1:-1:-1;40666:107:0;;;;;:::i;:::-;;:::i;44274:181::-;;;;;;;;;;-1:-1:-1;44274:181:0;;;;;:::i;:::-;;:::i;35173:201::-;;;;;;;;;;-1:-1:-1;35173:201:0;;;;;:::i;:::-;;:::i;37892:28::-;;;;;;;;;;;;;;;;42366:150;;;;;;;;;;-1:-1:-1;42366:150:0;;;;;:::i;:::-;;:::i;42650:304::-;;;;;;;;;;-1:-1:-1;42650:304:0;;;;;:::i;:::-;;:::i;20228:305::-;20330:4;-1:-1:-1;;;;;;20367:40:0;;-1:-1:-1;;;20367:40:0;;:105;;-1:-1:-1;;;;;;;20424:48:0;;-1:-1:-1;;;20424:48:0;20367:105;:158;;;-1:-1:-1;;;;;;;;;;18932:40:0;;;20489:36;20347:178;20228:305;-1:-1:-1;;20228:305:0:o;52070:649::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;;;;;;;;;52187:13;52179:59:::1;;;;-1:-1:-1::0;;;52179:59:0::1;;;;;;;:::i;:::-;52282:8;52257:23;52273:6;-1:-1:-1::0;;;;;42611:25:0;42584:7;42611:25;;;:17;:25;;;;;;;42522:122;52257:23:::1;:33;;52249:97;;;;-1:-1:-1::0;;;52249:97:0::1;;;;;;;:::i;:::-;52394:13;;52384:8;52365:18;;:27;;;;:::i;:::-;:42;;52357:83;;;;-1:-1:-1::0;;;52357:83:0::1;;;;;;;:::i;:::-;52461:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;52460:24;52452:54;;;;-1:-1:-1::0;;;52452:54:0::1;;;;;;;:::i;:::-;52517:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;52517:30:0::1;52543:4;52517:30;::::0;;52568:32:::1;52584:6:::0;52591:8;52568:15:::1;:32::i;:::-;52633:8;52611:18;;:30;;;;;;;:::i;:::-;;;;;;;;52652:57;52670:6;52679:8;;52689;52698:10;52652:17;:57::i;:::-;52070:649:::0;;;:::o;21173:100::-;21227:13;21260:5;21253:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21173:100;:::o;22733:221::-;22809:7;22837:16;22845:7;22837;:16::i;:::-;22829:73;;;;-1:-1:-1;;;22829:73:0;;21516:2:1;22829:73:0;;;21498:21:1;21555:2;21535:18;;;21528:30;21594:34;21574:18;;;21567:62;-1:-1:-1;;;21645:18:1;;;21638:42;21697:19;;22829:73:0;21314:408:1;22829:73:0;-1:-1:-1;22922:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22922:24:0;;22733:221::o;22256:411::-;22337:13;22353:23;22368:7;22353:14;:23::i;:::-;22337:39;;22401:5;-1:-1:-1;;;;;22395:11:0;:2;-1:-1:-1;;;;;22395:11:0;;;22387:57;;;;-1:-1:-1;;;22387:57:0;;23048:2:1;22387:57:0;;;23030:21:1;23087:2;23067:18;;;23060:30;23126:34;23106:18;;;23099:62;-1:-1:-1;;;23177:18:1;;;23170:31;23218:19;;22387:57:0;22846:397:1;22387:57:0;15996:10;-1:-1:-1;;;;;22479:21:0;;;;:62;;-1:-1:-1;22504:37:0;22521:5;15996:10;23252:164;:::i;22504:37::-;22457:168;;;;-1:-1:-1;;;22457:168:0;;19494:2:1;22457:168:0;;;19476:21:1;19533:2;19513:18;;;19506:30;19572:34;19552:18;;;19545:62;19643:26;19623:18;;;19616:54;19687:19;;22457:168:0;19292:420:1;22457:168:0;22638:21;22647:2;22651:7;22638:8;:21::i;42227:100::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;42306:13:::1;::::0;;-1:-1:-1;;42289:30:0;::::1;42306:13:::0;;;;::::1;;;42305:14;42289:30:::0;;::::1;;::::0;;42227:100::o;44129:136::-;44202:7;44231:14;:20;44246:4;44231:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;44252:4;44231:26;;;;;;;;;;;;44224:33;;44129:136;;;;:::o;55715:113::-;55768:7;55795:25;:15;36557:14;;36465:114;55795:25;55788:32;;55715:113;:::o;52733:688::-;52828:13;;;;;;;52820:49;;;;-1:-1:-1;;;52820:49:0;;;;;;;:::i;:::-;52888:13;52880:59;;;;-1:-1:-1;;;52880:59:0;;;;;;;:::i;:::-;52991:9;52969:18;;52958:8;:29;;;;:::i;:::-;:42;;52950:76;;;;-1:-1:-1;;;52950:76:0;;;;;;;:::i;:::-;53045:27;53065:6;53045:19;:27::i;:::-;53037:91;;;;-1:-1:-1;;;53037:91:0;;;;;;;:::i;:::-;53176:13;;53166:8;53147:18;;:27;;;;:::i;:::-;:42;;53139:83;;;;-1:-1:-1;;;53139:83:0;;;;;;;:::i;:::-;53266:17;;-1:-1:-1;;;;;53241:14:0;;;;;;:6;:14;;;;;;:23;;53256:8;;53241:23;:::i;:::-;:42;;53233:78;;;;-1:-1:-1;;;53233:78:0;;;;;;;:::i;:::-;53344:8;53322:18;;:30;;;;;;;:::i;:::-;;;;;;;;53363:48;53381:6;53390:8;;53400;53409:1;53363:17;:48::i;:::-;52733:688;;:::o;47939:673::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;48067:13;48059:59:::1;;;;-1:-1:-1::0;;;48059:59:0::1;;;;;;;:::i;:::-;48138:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;48137:24;48129:54;;;;-1:-1:-1::0;;;48129:54:0::1;;;;;;;:::i;:::-;48237:8;48202:33;48214:6;48221:4;48226:8;;48202:11;:33::i;:::-;:43;;48194:107;;;;-1:-1:-1::0;;;48194:107:0::1;;;;;;;:::i;:::-;48366:14;:20;48381:4;48366:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;48387:8;;48366:30;;;;;;;;;;;;48356:8;48320:35;48341:4;48346:8;;48320:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;48312:117;;;;-1:-1:-1::0;;;48312:117:0::1;;;;;;;:::i;:::-;48448:44;48460:6;48467:8;48477:4;48483:8;;48448:11;:44::i;:::-;48503:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;48503:30:0::1;48529:4;48503:30;::::0;;48572:8:::1;::::0;48544:58:::1;::::0;48558:6;;48566:4;;48582:8;48515:10;48544:13:::1;:58::i;:::-;47939:673:::0;;;;:::o;23483:339::-;23678:41;15996:10;23711:7;23678:18;:41::i;:::-;23670:103;;;;-1:-1:-1;;;23670:103:0;;;;;;;:::i;:::-;23786:28;23796:4;23802:2;23806:7;23786:9;:28::i;50080:675::-;50183:4;;;;;;;50175:30;;;;-1:-1:-1;;;50175:30:0;;;;;;;:::i;:::-;50244:10;8395:19;:23;50216:77;;;;-1:-1:-1;;;50216:77:0;;;;;;;:::i;:::-;50312:13;50304:59;;;;-1:-1:-1;;;50304:59:0;;;;;;;:::i;:::-;50406:9;50393;;50382:8;:20;;;;:::i;:::-;:33;;50374:67;;;;-1:-1:-1;;;50374:67:0;;;;;;;:::i;:::-;50506:14;:20;50521:4;50506:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;50527:8;;50506:30;;;;;;;;;;;;50496:8;50460:35;50481:4;50486:8;;50460:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;50452:117;;;;-1:-1:-1;;;50452:117:0;;;;;;;:::i;:::-;50613:9;;-1:-1:-1;;;;;50588:14:0;;;;;;:6;:14;;;;;;:23;;50603:8;;50588:23;:::i;:::-;:34;;50580:70;;;;-1:-1:-1;;;50580:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50661:14:0;;;;;;:6;:14;;;;;:26;;50679:8;;50661:14;:26;;50679:8;;50661:26;:::i;:::-;;;;;;;;50698:49;50712:6;50720:4;50726:8;;50736;50745:1;50698:13;:49::i;41838:102::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41910:9:::1;:22:::0;41838:102::o;40914:362::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41044:10:::1;::::0;40992:21:::1;::::0;40966:23:::1;::::0;-1:-1:-1;;;;;41044:10:0::1;41068:21;41085:4;40992:21:::0;41068::::1;:::i;:::-;41067:29;::::0;41093:3:::1;41067:29;:::i;:::-;41044:57;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41131:7:0::1;::::0;41024:77;;-1:-1:-1;41113:12:0::1;::::0;-1:-1:-1;;;;;41131:7:0::1;41152:21;41169:4;41152:15:::0;:21:::1;:::i;:::-;41151:29;::::0;41177:3:::1;41151:29;:::i;:::-;41131:54;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41112:73;;;41204:7;41196:35;;;::::0;-1:-1:-1;;;41196:35:0;;24620:2:1;41196:35:0::1;::::0;::::1;24602:21:1::0;24659:2;24639:18;;;24632:30;-1:-1:-1;;;24678:18:1;;;24671:45;24733:18;;41196:35:0::1;24418:339:1::0;41196:35:0::1;41240:8;41232:36;;;::::0;-1:-1:-1;;;41232:36:0;;24620:2:1;41232:36:0::1;::::0;::::1;24602:21:1::0;24659:2;24639:18;;;24632:30;-1:-1:-1;;;24678:18:1;;;24671:45;24733:18;;41232:36:0::1;24418:339:1::0;42146:73:0;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;42207:4:::1;::::0;;-1:-1:-1;;42199:12:0;::::1;42207:4;::::0;;;::::1;;;42206:5;42199:12:::0;;::::1;;::::0;;42146:73::o;49321:749::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;49455:13:::1;::::0;;;::::1;;;49447:49;;;;-1:-1:-1::0;;;49447:49:0::1;;;;;;;:::i;:::-;49515:13:::0;49507:59:::1;;;;-1:-1:-1::0;;;49507:59:0::1;;;;;;;:::i;:::-;49585:27;49605:6;49585:19;:27::i;:::-;49577:91;;;;-1:-1:-1::0;;;49577:91:0::1;;;;;;;:::i;:::-;49733:14;:20;49748:4;49733:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;49754:8;;49733:30;;;;;;;;;;;;49723:8;49687:35;49708:4;49713:8;;49687:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;49679:117;;;;-1:-1:-1::0;;;49679:117:0::1;;;;;;;:::i;:::-;49840:17;::::0;-1:-1:-1;;;;;49815:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;:23:::1;::::0;49830:8;;49815:23:::1;:::i;:::-;:42;;49807:78;;;;-1:-1:-1::0;;;49807:78:0::1;;;;;;;:::i;:::-;49905:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;49904:24;49896:54;;;;-1:-1:-1::0;;;49896:54:0::1;;;;;;;:::i;42058:82::-:0;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;42125:7:::1;::::0;;-1:-1:-1;;42114:18:0;::::1;42125:7;::::0;;::::1;42124:8;42114:18;::::0;;42058:82::o;23893:185::-;24031:39;24048:4;24054:2;24058:7;24031:39;;;;;;;;;;;;:16;:39::i;44499:102::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;44574:19;;::::1;::::0;:7:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;54183:670::-:0;54275:4;;;;;;;54267:30;;;;-1:-1:-1;;;54267:30:0;;;;;;;:::i;:::-;54336:10;8395:19;:23;54308:77;;;;-1:-1:-1;;;54308:77:0;;;;;;;:::i;:::-;54404:13;54396:59;;;;-1:-1:-1;;;54396:59:0;;;;;;;:::i;:::-;54498:9;54485;;54474:8;:20;;;;:::i;:::-;:33;;54466:67;;;;-1:-1:-1;;;54466:67:0;;;;;;;:::i;:::-;54581:13;;54571:8;54552:18;;:27;;;;:::i;:::-;:42;;54544:83;;;;-1:-1:-1;;;54544:83:0;;;;;;;:::i;:::-;54671:9;;-1:-1:-1;;;;;54646:14:0;;;;;;:6;:14;;;;;;:23;;54661:8;;54646:23;:::i;:::-;:34;;54638:70;;;;-1:-1:-1;;;54638:70:0;;;;;;;:::i;:::-;54741:8;54719:18;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;54760:14:0;;;;;;:6;:14;;;;;:26;;54778:8;;54760:14;:26;;54778:8;;54760:26;:::i;41286:105::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41358:9:::1;:25:::0;41286:105::o;20867:239::-;20939:7;20975:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20975:16:0;21010:19;21002:73;;;;-1:-1:-1;;;21002:73:0;;20330:2:1;21002:73:0;;;20312:21:1;20369:2;20349:18;;;20342:30;20408:34;20388:18;;;20381:62;-1:-1:-1;;;20459:18:1;;;20452:39;20508:19;;21002:73:0;20128:405:1;43212:237:0;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;43337:9:::1;43332:110;43348:18:::0;;::::1;43332:110;;;43413:14;;43428:1;43413:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43388:10;:22;43399:7;;43407:1;43399:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43388:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43388:22:0;:42;;-1:-1:-1;;43388:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43368:3;::::1;::::0;::::1;:::i;:::-;;;;43332:110;;;;43212:237:::0;;;;:::o;37193:71::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20597:208::-;20669:7;-1:-1:-1;;;;;20697:19:0;;20689:74;;;;-1:-1:-1;;;20689:74:0;;19919:2:1;20689:74:0;;;19901:21:1;19958:2;19938:18;;;19931:30;19997:34;19977:18;;;19970:62;-1:-1:-1;;;20048:18:1;;;20041:40;20098:19;;20689:74:0;19717:406:1;20689:74:0;-1:-1:-1;;;;;;20781:16:0;;;;;:9;:16;;;;;;;20597:208::o;34915:103::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;34980:30:::1;35007:1;34980:18;:30::i;:::-;34915:103::o:0;40779:119::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;40864:10:::1;:26:::0;;-1:-1:-1;;;;;;40864:26:0::1;-1:-1:-1::0;;;;;40864:26:0;;;::::1;::::0;;;::::1;::::0;;40779:119::o;43976:141::-;44052:7;44079:18;:24;44098:4;44079:24;;;;;;;;:::i;21342:104::-;21398:13;21431:7;21424:14;;;;;:::i;41948:102::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;42020:9:::1;:22:::0;41948:102::o;23026:155::-;23121:52;15996:10;23154:8;23164;23121:18;:52::i;51424:638::-;51513:7;;;;51505:37;;;;-1:-1:-1;;;51505:37:0;;17683:2:1;51505:37:0;;;17665:21:1;17722:2;17702:18;;;17695:30;-1:-1:-1;;;17741:18:1;;;17734:47;17798:18;;51505:37:0;17481:341:1;51505:37:0;51561:13;51553:59;;;;-1:-1:-1;;;51553:59:0;;;;;;;:::i;:::-;51664:9;51642:18;;51631:8;:29;;;;:::i;:::-;:42;;51623:76;;;;-1:-1:-1;;;51623:76:0;;;;;;;:::i;:::-;51743:8;51718:23;51734:6;-1:-1:-1;;;;;42611:25:0;42584:7;42611:25;;;:17;:25;;;;;;;42522:122;51718:23;:33;;51710:97;;;;-1:-1:-1;;;51710:97:0;;;;;;;:::i;:::-;51855:13;;51845:8;51826:18;;:27;;;;:::i;:::-;:42;;51818:83;;;;-1:-1:-1;;;51818:83:0;;;;;;;:::i;:::-;51920:32;51936:6;51943:8;51920:15;:32::i;24149:328::-;24324:41;15996:10;24357:7;24324:18;:41::i;:::-;24316:103;;;;-1:-1:-1;;;24316:103:0;;;;;;;:::i;:::-;24430:39;24444:4;24450:2;24454:7;24463:5;24430:13;:39::i;41399:137::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41487:17:::1;:41:::0;41399:137::o;54865:646::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;54984:4:::1;::::0;::::1;::::0;::::1;;;54976:30;;;;-1:-1:-1::0;;;54976:30:0::1;;;;;;;:::i;:::-;55025:13:::0;55017:59:::1;;;;-1:-1:-1::0;;;55017:59:0::1;;;;;;;:::i;:::-;55124:13;;55114:8;55095:18;;:27;;;;:::i;:::-;:42;;55087:83;;;;-1:-1:-1::0;;;55087:83:0::1;;;;;;;:::i;:::-;55214:9;::::0;-1:-1:-1;;;;;55189:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;:23:::1;::::0;55204:8;;55189:23:::1;:::i;:::-;:34;;55181:70;;;;-1:-1:-1::0;;;55181:70:0::1;;;;;;;:::i;:::-;55271:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;55270:24;55262:54;;;;-1:-1:-1::0;;;55262:54:0::1;;;;;;;:::i;:::-;55327:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;55327:30:0::1;55353:4;55327:30;::::0;;55368:18:::1;:30:::0;;55390:8;;55327:23;55368:30:::1;::::0;55390:8;;55368:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;55409:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;:26;;55427:8;;55409:14;:26:::1;::::0;55427:8;;55409:26:::1;:::i;55517:192::-:0;55580:4;55611:16;55619:7;55611;:16::i;:::-;55603:76;;;;-1:-1:-1;;;55603:76:0;;;;;;;:::i;:::-;-1:-1:-1;55697:4:0;;55517:192;-1:-1:-1;55517:192:0:o;42960:246::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;43091:9:::1;43086:113;43102:18:::0;;::::1;43086:113;;;43174:10;;43185:1;43174:13;;;;;;;:::i;:::-;;;;;;;43142:17;:29;43160:7;;43168:1;43160:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43142:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43142:29:0;:45;43122:3;::::1;::::0;::::1;:::i;:::-;;;;43086:113;;44737:671:::0;44810:13;44844:16;44852:7;44844;:16::i;:::-;44836:62;;;;-1:-1:-1;;;44836:62:0;;15287:2:1;44836:62:0;;;15269:21:1;15326:2;15306:18;;;15299:30;15365:34;15345:18;;;15338:62;-1:-1:-1;;;15416:18:1;;;15409:31;15457:19;;44836:62:0;15085:397:1;44836:62:0;44911:23;44937:27;;;:18;:27;;;;;44911:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44975:18;44996:10;:8;:10::i;:::-;44975:31;;45088:4;45082:18;45104:1;45082:23;45078:72;;;-1:-1:-1;45129:9:0;44737:671;-1:-1:-1;;44737:671:0:o;45078:72::-;45254:23;;:27;45250:108;;45329:4;45335:9;45312:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45298:48;;;;44737:671;;;:::o;45250:108::-;45377:23;45392:7;45377:14;:23::i;:::-;45370:30;44737:671;-1:-1:-1;;;;44737:671:0:o;48620:693::-;48726:13;;;;;;;48718:49;;;;-1:-1:-1;;;48718:49:0;;;;;;;:::i;:::-;48786:13;48778:59;;;;-1:-1:-1;;;48778:59:0;;;;;;;:::i;:::-;48889:9;48867:18;;48856:8;:29;;;;:::i;:::-;:42;;48848:76;;;;-1:-1:-1;;;48848:76:0;;;;;;;:::i;:::-;48943:27;48963:6;48943:19;:27::i;:::-;48935:91;;;;-1:-1:-1;;;48935:91:0;;;;;;;:::i;:::-;49091:14;:20;49106:4;49091:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;49112:8;;49091:30;;;;;;;;;;;;49081:8;49045:35;49066:4;49071:8;;49045:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;49037:117;;;;-1:-1:-1;;;49037:117:0;;;;;;;:::i;:::-;49198:17;;-1:-1:-1;;;;;49173:14:0;;;;;;:6;:14;;;;;;:23;;49188:8;;49173:23;:::i;:::-;:42;;49165:78;;;;-1:-1:-1;;;49165:78:0;;;;;;;:::i;:::-;49254:49;49268:6;49276:4;49282:8;;49292;49301:1;49254:13;:49::i;45416:117::-;-1:-1:-1;;;;;45507:18:0;45483:4;45507:18;;;:10;:18;;;;;;;;;45416:117::o;47266:665::-;47366:7;;;;47358:37;;;;-1:-1:-1;;;47358:37:0;;17683:2:1;47358:37:0;;;17665:21:1;17722:2;17702:18;;;17695:30;-1:-1:-1;;;17741:18:1;;;17734:47;17798:18;;47358:37:0;17481:341:1;47358:37:0;47414:13;47406:59;;;;-1:-1:-1;;;47406:59:0;;;;;;;:::i;:::-;47517:9;47495:18;;47484:8;:29;;;;:::i;:::-;:42;;47476:76;;;;-1:-1:-1;;;47476:76:0;;;;;;;:::i;:::-;47606:8;47571:33;47583:6;47590:4;47595:8;;47571:11;:33::i;:::-;:43;;47563:107;;;;-1:-1:-1;;;47563:107:0;;;;;;;:::i;:::-;47735:14;:20;47750:4;47735:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;47756:8;;47735:30;;;;;;;;;;;;47725:8;47689:35;47710:4;47715:8;;47689:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;47681:117;;;;-1:-1:-1;;;47681:117:0;;;;;;;:::i;:::-;47817:44;47829:6;47836:8;47846:4;47852:8;;47817:11;:44::i;37492:52::-;;;;;;;;;;;;;;;;:::i;53429:744::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;53552:13:::1;::::0;;;::::1;;;53544:49;;;;-1:-1:-1::0;;;53544:49:0::1;;;;;;;:::i;:::-;53612:13:::0;53604:59:::1;;;;-1:-1:-1::0;;;53604:59:0::1;;;;;;;:::i;:::-;53682:27;53702:6;53682:19;:27::i;:::-;53674:91;;;;-1:-1:-1::0;;;53674:91:0::1;;;;;;;:::i;:::-;53813:13;;53803:8;53784:18;;:27;;;;:::i;:::-;:42;;53776:83;;;;-1:-1:-1::0;;;53776:83:0::1;;;;;;;:::i;:::-;53903:17;::::0;-1:-1:-1;;;;;53878:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;:23:::1;::::0;53893:8;;53878:23:::1;:::i;:::-;:42;;53870:78;;;;-1:-1:-1::0;;;53870:78:0::1;;;;;;;:::i;:::-;53968:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;53967:24;53959:54;;;;-1:-1:-1::0;;;53959:54:0::1;;;;;;;:::i;:::-;54046:8;54024:18;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;54065:23:0::1;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;54065:30:0::1;54091:4;54065:30;::::0;;54133:8:::1;::::0;54106:57:::1;::::0;54124:6;;54143:8;54077:10;54106:17:::1;:57::i;50765:651::-:0;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;50895:4:::1;::::0;::::1;::::0;::::1;;;50887:30;;;;-1:-1:-1::0;;;50887:30:0::1;;;;;;;:::i;:::-;50936:13:::0;50928:59:::1;;;;-1:-1:-1::0;;;50928:59:0::1;;;;;;;:::i;:::-;51052:14;:20;51067:4;51052:20;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;51073:8;;51052:30;;;;;;;;;;;;51042:8;51006:35;51027:4;51032:8;;51006:20;:35::i;:::-;:44;;;;:::i;:::-;:76;;50998:117;;;;-1:-1:-1::0;;;50998:117:0::1;;;;;;;:::i;:::-;51159:9;::::0;-1:-1:-1;;;;;51134:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;:23:::1;::::0;51149:8;;51134:23:::1;:::i;:::-;:34;;51126:70;;;;-1:-1:-1::0;;;51126:70:0::1;;;;;;;:::i;:::-;51216:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;51215:24;51207:54;;;;-1:-1:-1::0;;;51207:54:0::1;;;;;;;:::i;:::-;51272:23;::::0;;;:11:::1;:23;::::0;;;;;;;:30;;-1:-1:-1;;51272:30:0::1;51298:4;51272:30;::::0;;-1:-1:-1;;;;;51313:14:0;::::1;::::0;;:6:::1;:14:::0;;;;;:26;;51331:8;;51272:23;51313:26:::1;::::0;51331:8;;51313:26:::1;:::i;:::-;;;;;;;;51350:58;51364:6;51372:4;51378:8;;51388;51397:10;51350:13;:58::i;41692:138::-:0;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41782:18:::1;:40:::0;41692:138::o;41544:::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;41634:18:::1;:40:::0;41544:138::o;40666:107::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;40745:7:::1;:20:::0;;-1:-1:-1;;;;;;40745:20:0::1;-1:-1:-1::0;;;;;40745:20:0;;;::::1;::::0;;;::::1;::::0;;40666:107::o;44274:181::-;44358:7;44416:31;44437:4;44442;44416:20;:31::i;:::-;44385:28;44403:4;44408;44385:17;:28::i;:::-;:62;;;;:::i;:::-;44378:69;44274:181;-1:-1:-1;;;44274:181:0:o;35173:201::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35262:22:0;::::1;35254:73;;;::::0;-1:-1:-1;;;35254:73:0;;16108:2:1;35254:73:0::1;::::0;::::1;16090:21:1::0;16147:2;16127:18;;;16120:30;16186:34;16166:18;;;16159:62;-1:-1:-1;;;16237:18:1;;;16230:36;16283:19;;35254:73:0::1;15906:402:1::0;35254:73:0::1;35338:28;35357:8;35338:18;:28::i;:::-;35173:201:::0;:::o;42366:150::-;42448:7;42475:13;:19;42489:4;42475:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;42475:19:0;;;:25;;;;;;;;-1:-1:-1;;;;;42475:33:0;;;;;;;;;;;-1:-1:-1;42366:150:0;;;;;:::o;42650:304::-;34337:6;;-1:-1:-1;;;;;34337:6:0;15996:10;34484:23;34476:68;;;;-1:-1:-1;;;34476:68:0;;;;;;;:::i;:::-;42824:9:::1;42819:128;42835:18:::0;;::::1;42819:128;;;42922:10;;42933:1;42922:13;;;;;;;:::i;:::-;;;;;;;42875;:22;42889:4;;42894:1;42889:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42875:22;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;42898:5;;42904:1;42898:8;;;;;;;:::i;:::-;;;;;;;42875:32;;;;;;;;;;;:44;42908:7;;42916:1;42908:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42875:44:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42875:44:0;:60;42855:3;::::1;::::0;::::1;:::i;:::-;;;;42819:128;;;;42650:304:::0;;;;;;;;:::o;43649:151::-;-1:-1:-1;;;;;43756:25:0;;;;;;:17;:25;;;;;;:36;;43784:8;;43756:36;:::i;:::-;-1:-1:-1;;;;;43728:25:0;;;;;;;:17;:25;;;;;:64;;;;-1:-1:-1;43649:151:0:o;46493:538::-;46619:9;46614:400;46638:8;46634:1;:12;46614:400;;;46668:40;46674:6;46682:25;:15;36557:14;;36465:114;46682:25;46668:5;:40::i;:::-;46723:141;46736:25;:15;36557:14;;36465:114;46736:25;46787:43;46804:25;:15;36557:14;;36465:114;46804:25;46787:16;:43::i;:::-;46839:22;46856:4;46839:16;:22::i;:::-;46770:92;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46723:12;:141::i;:::-;46935:15;36557:14;;46879:26;;;;:14;:26;;;;;;;;:53;;;;;;;;:81;;;36694:1;36676:19;;;46648:3;;;;:::i;:::-;;;;46614:400;;25987:127;26052:4;26076:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26076:16:0;:30;;;25987:127::o;30133:174::-;30208:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30208:29:0;-1:-1:-1;;;;;30208:29:0;;;;;;;;:24;;30262:23;30208:24;30262:14;:23::i;:::-;-1:-1:-1;;;;;30253:46:0;;;;;;;;;;;30133:174;;:::o;43455:188::-;43627:8;43591:13;:19;43605:4;43591:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;43591:19:0;;;:25;;;;;;;;-1:-1:-1;;;;;43591:33:0;;;;;;;;;;:44;;;;:::i;:::-;43555:13;:19;43569:4;43555:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;43555:19:0;;;:25;;;;;;;;;-1:-1:-1;;;;;43555:33:0;;;;;;;;;;;:80;;;;-1:-1:-1;;43455:188:0:o;45721:766::-;45863:9;45858:612;45882:8;45878:1;:12;45858:612;;;46039:37;46066:4;46071;46039:26;:37::i;:::-;46091:40;46097:6;46105:25;:15;36557:14;;36465:114;46091:40;46146:174;46159:25;:15;36557:14;;36465:114;46159:25;46210:43;46227:25;:15;36557:14;;36465:114;46210:43;46258:31;46275:7;:13;46283:4;46275:13;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46258:16;:31::i;:::-;46295:22;46312:4;46295:16;:22::i;:::-;46193:125;;;;;;;;;;:::i;46146:174::-;46391:15;36557:14;;46335:26;;;;:14;:26;;;;;;;;:53;;;;;;;;:81;;;36694:1;36676:19;;;45892:3;;;;:::i;:::-;;;;45858:612;;;;45721:766;;;;;:::o;26281:348::-;26374:4;26399:16;26407:7;26399;:16::i;:::-;26391:73;;;;-1:-1:-1;;;26391:73:0;;18383:2:1;26391:73:0;;;18365:21:1;18422:2;18402:18;;;18395:30;18461:34;18441:18;;;18434:62;-1:-1:-1;;;18512:18:1;;;18505:42;18564:19;;26391:73:0;18181:408:1;26391:73:0;26475:13;26491:23;26506:7;26491:14;:23::i;:::-;26475:39;;26544:5;-1:-1:-1;;;;;26533:16:0;:7;-1:-1:-1;;;;;26533:16:0;;:52;;;-1:-1:-1;;;;;;23373:25:0;;;23349:4;23373:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26553:32;26533:87;;;;26613:7;-1:-1:-1;;;;;26589:31:0;:20;26601:7;26589:11;:20::i;:::-;-1:-1:-1;;;;;26589:31:0;;26525:96;26281:348;-1:-1:-1;;;;26281:348:0:o;29390:625::-;29549:4;-1:-1:-1;;;;;29522:31:0;:23;29537:7;29522:14;:23::i;:::-;-1:-1:-1;;;;;29522:31:0;;29514:81;;;;-1:-1:-1;;;29514:81:0;;16515:2:1;29514:81:0;;;16497:21:1;16554:2;16534:18;;;16527:30;16593:34;16573:18;;;16566:62;-1:-1:-1;;;16644:18:1;;;16637:35;16689:19;;29514:81:0;16313:401:1;29514:81:0;-1:-1:-1;;;;;29614:16:0;;29606:65;;;;-1:-1:-1;;;29606:65:0;;17278:2:1;29606:65:0;;;17260:21:1;17317:2;17297:18;;;17290:30;17356:34;17336:18;;;17329:62;-1:-1:-1;;;17407:18:1;;;17400:34;17451:19;;29606:65:0;17076:400:1;29606:65:0;29788:29;29805:1;29809:7;29788:8;:29::i;:::-;-1:-1:-1;;;;;29830:15:0;;;;;;:9;:15;;;;;:20;;29849:1;;29830:15;:20;;29849:1;;29830:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29861:13:0;;;;;;:9;:13;;;;;:18;;29878:1;;29861:13;:18;;29878:1;;29861:18;:::i;:::-;;;;-1:-1:-1;;29890:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29890:21:0;-1:-1:-1;;;;;29890:21:0;;;;;;;;;29929:27;;29890:16;;29929:27;;;;;;;52070:649;;;:::o;35534:191::-;35627:6;;;-1:-1:-1;;;;;35644:17:0;;;-1:-1:-1;;;;;;35644:17:0;;;;;;;35677:40;;35627:6;;;35644:17;35627:6;;35677:40;;35608:16;;35677:40;35597:128;35534:191;:::o;30449:315::-;30604:8;-1:-1:-1;;;;;30595:17:0;:5;-1:-1:-1;;;;;30595:17:0;;;30587:55;;;;-1:-1:-1;;;30587:55:0;;18029:2:1;30587:55:0;;;18011:21:1;18068:2;18048:18;;;18041:30;18107:27;18087:18;;;18080:55;18152:18;;30587:55:0;17827:349:1;30587:55:0;-1:-1:-1;;;;;30653:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;30653:46:0;;;;;;;;;;30715:41;;14451::1;;;30715::0;;14424:18:1;30715:41:0;;;;;;;30449:315;;;:::o;25359:::-;25516:28;25526:4;25532:2;25536:7;25516:9;:28::i;:::-;25563:48;25586:4;25592:2;25596:7;25605:5;25563:22;:48::i;:::-;25555:111;;;;-1:-1:-1;;;25555:111:0;;;;;;;:::i;44621:100::-;44673:13;44706:7;44699:14;;;;;:::i;21517:334::-;21590:13;21624:16;21632:7;21624;:16::i;:::-;21616:76;;;;-1:-1:-1;;;21616:76:0;;;;;;;:::i;:::-;21705:21;21729:10;:8;:10::i;:::-;21705:34;;21781:1;21763:7;21757:21;:25;:86;;;;;;;;;;;;;;;;;21809:7;21818:18;:7;:16;:18::i;:::-;21792:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21750:93;21517:334;-1:-1:-1;;;21517:334:0:o;27965:439::-;-1:-1:-1;;;;;28045:16:0;;28037:61;;;;-1:-1:-1;;;28037:61:0;;21155:2:1;28037:61:0;;;21137:21:1;;;21174:18;;;21167:30;21233:34;21213:18;;;21206:62;21285:18;;28037:61:0;20953:356:1;28037:61:0;28118:16;28126:7;28118;:16::i;:::-;28117:17;28109:58;;;;-1:-1:-1;;;28109:58:0;;16921:2:1;28109:58:0;;;16903:21:1;16960:2;16940:18;;;16933:30;16999;16979:18;;;16972:58;17047:18;;28109:58:0;16719:352:1;28109:58:0;-1:-1:-1;;;;;28238:13:0;;;;;;:9;:13;;;;;:18;;28255:1;;28238:13;:18;;28255:1;;28238:18;:::i;:::-;;;;-1:-1:-1;;28267:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28267:21:0;-1:-1:-1;;;;;28267:21:0;;;;;;;;28306:33;;28267:16;;;28306:33;;28267:16;;28306:33;52733:688;;:::o;16362:723::-;16418:13;16639:10;16635:53;;-1:-1:-1;;16666:10:0;;;;;;;;;;;;-1:-1:-1;;;16666:10:0;;;;;16362:723::o;16635:53::-;16713:5;16698:12;16754:78;16761:9;;16754:78;;16787:8;;;;:::i;:::-;;-1:-1:-1;16810:10:0;;-1:-1:-1;16818:2:0;16810:10;;:::i;:::-;;;16754:78;;;16842:19;16874:6;16864:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16864:17:0;;16842:39;;16892:154;16899:10;;16892:154;;16926:11;16936:1;16926:11;;:::i;:::-;;-1:-1:-1;16995:10:0;17003:2;16995:5;:10;:::i;:::-;16982:24;;:2;:24;:::i;:::-;16969:39;;16952:6;16959;16952:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16952:56:0;;;;;;;;-1:-1:-1;17023:11:0;17032:2;17023:11;;:::i;:::-;;;16892:154;;47037:223;47135:16;47143:7;47135;:16::i;:::-;47127:75;;;;-1:-1:-1;;;47127:75:0;;20740:2:1;47127:75:0;;;20722:21:1;20779:2;20759:18;;;20752:30;20818:34;20798:18;;;20791:62;-1:-1:-1;;;20869:18:1;;;20862:44;20923:19;;47127:75:0;20538:410:1;47127:75:0;47213:27;;;;:18;:27;;;;;;;;:39;;;;;;;;:::i;43806:154::-;43920:18;:24;43939:4;43920:24;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;43945:4;43920:30;;;;;;;;;;;;43951:1;43920:32;;;;:::i;:::-;43887:18;:24;43906:4;43887:24;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;43912:4;43887:30;;;;;;;;;;;:65;;;;43806:154;;:::o;31329:799::-;31484:4;-1:-1:-1;;;;;31505:13:0;;8395:19;:23;31501:620;;31541:72;;-1:-1:-1;;;31541:72:0;;-1:-1:-1;;;;;31541:36:0;;;;;:72;;15996:10;;31592:4;;31598:7;;31607:5;;31541:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31541:72:0;;;;;;;;-1:-1:-1;;31541:72:0;;;;;;;;;;;;:::i;:::-;;;31537:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31783:13:0;;31779:272;;31826:60;;-1:-1:-1;;;31826:60:0;;;;;;;:::i;31779:272::-;32001:6;31995:13;31986:6;31982:2;31978:15;31971:38;31537:529;-1:-1:-1;;;;;;31664:51:0;-1:-1:-1;;;31664:51:0;;-1:-1:-1;31657:58:0;;31501:620;-1:-1:-1;32105:4:0;31329:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:367::-;713:8;723:6;777:3;770:4;762:6;758:17;754:27;744:55;;795:1;792;785:12;744:55;-1:-1:-1;818:20:1;;861:18;850:30;;847:50;;;893:1;890;883:12;847:50;930:4;922:6;918:17;906:29;;990:3;983:4;973:6;970:1;966:14;958:6;954:27;950:38;947:47;944:67;;;1007:1;1004;997:12;944:67;650:367;;;;;:::o;1022:160::-;1087:20;;1143:13;;1136:21;1126:32;;1116:60;;1172:1;1169;1162:12;1116:60;1022:160;;;:::o;1187:147::-;1258:20;;1307:2;1297:13;;1287:41;;1324:1;1321;1314:12;1339:247;1398:6;1451:2;1439:9;1430:7;1426:23;1422:32;1419:52;;;1467:1;1464;1457:12;1419:52;1506:9;1493:23;1525:31;1550:5;1525:31;:::i;1851:388::-;1919:6;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;2226:7;2216:17;;;1851:388;;;;;:::o;2244:456::-;2321:6;2329;2337;2390:2;2378:9;2369:7;2365:23;2361:32;2358:52;;;2406:1;2403;2396:12;2358:52;2445:9;2432:23;2464:31;2489:5;2464:31;:::i;:::-;2514:5;-1:-1:-1;2571:2:1;2556:18;;2543:32;2584:33;2543:32;2584:33;:::i;:::-;2244:456;;2636:7;;-1:-1:-1;;;2690:2:1;2675:18;;;;2662:32;;2244:456::o;2705:794::-;2800:6;2808;2816;2824;2877:3;2865:9;2856:7;2852:23;2848:33;2845:53;;;2894:1;2891;2884:12;2845:53;2933:9;2920:23;2952:31;2977:5;2952:31;:::i;:::-;3002:5;-1:-1:-1;3059:2:1;3044:18;;3031:32;3072:33;3031:32;3072:33;:::i;:::-;3124:7;-1:-1:-1;3178:2:1;3163:18;;3150:32;;-1:-1:-1;3233:2:1;3218:18;;3205:32;3260:18;3249:30;;3246:50;;;3292:1;3289;3282:12;3246:50;3315:22;;3368:4;3360:13;;3356:27;-1:-1:-1;3346:55:1;;3397:1;3394;3387:12;3346:55;3420:73;3485:7;3480:2;3467:16;3462:2;3458;3454:11;3420:73;:::i;:::-;3410:83;;;2705:794;;;;;;;:::o;3504:315::-;3569:6;3577;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:31;3729:5;3704:31;:::i;:::-;3754:5;-1:-1:-1;3778:35:1;3809:2;3794:18;;3778:35;:::i;:::-;3768:45;;3504:315;;;;;:::o;3824:402::-;3911:6;3919;3927;3980:2;3968:9;3959:7;3955:23;3951:32;3948:52;;;3996:1;3993;3986:12;3948:52;4035:9;4022:23;4054:31;4079:5;4054:31;:::i;:::-;4104:5;-1:-1:-1;4128:41:1;4165:2;4150:18;;4128:41;:::i;:::-;4118:51;;4216:2;4205:9;4201:18;4188:32;4178:42;;3824:402;;;;;:::o;4231:315::-;4299:6;4307;4360:2;4348:9;4339:7;4335:23;4331:32;4328:52;;;4376:1;4373;4366:12;4328:52;4415:9;4402:23;4434:31;4459:5;4434:31;:::i;:::-;4484:5;4536:2;4521:18;;;;4508:32;;-1:-1:-1;;;4231:315:1:o;4551:402::-;4638:6;4646;4654;4707:2;4695:9;4686:7;4682:23;4678:32;4675:52;;;4723:1;4720;4713:12;4675:52;4762:9;4749:23;4781:31;4806:5;4781:31;:::i;:::-;4831:5;-1:-1:-1;4883:2:1;4868:18;;4855:32;;-1:-1:-1;4906:41:1;4943:2;4928:18;;4906:41;:::i;:::-;4896:51;;4551:402;;;;;:::o;4958:471::-;5054:6;5062;5070;5078;5131:3;5119:9;5110:7;5106:23;5102:33;5099:53;;;5148:1;5145;5138:12;5099:53;5187:9;5174:23;5206:31;5231:5;5206:31;:::i;:::-;5256:5;-1:-1:-1;5308:2:1;5293:18;;5280:32;;-1:-1:-1;5331:41:1;5368:2;5353:18;;5331:41;:::i;:::-;4958:471;;;;-1:-1:-1;5321:51:1;;5419:2;5404:18;5391:32;;-1:-1:-1;;4958:471:1:o;5434:383::-;5511:6;5519;5527;5580:2;5568:9;5559:7;5555:23;5551:32;5548:52;;;5596:1;5593;5586:12;5548:52;5635:9;5622:23;5654:31;5679:5;5654:31;:::i;:::-;5704:5;5756:2;5741:18;;5728:32;;-1:-1:-1;5807:2:1;5792:18;;;5779:32;;5434:383;-1:-1:-1;;;5434:383:1:o;5822:770::-;5941:6;5949;5957;5965;6018:2;6006:9;5997:7;5993:23;5989:32;5986:52;;;6034:1;6031;6024:12;5986:52;6074:9;6061:23;6103:18;6144:2;6136:6;6133:14;6130:34;;;6160:1;6157;6150:12;6130:34;6199:70;6261:7;6252:6;6241:9;6237:22;6199:70;:::i;:::-;6288:8;;-1:-1:-1;6173:96:1;-1:-1:-1;6376:2:1;6361:18;;6348:32;;-1:-1:-1;6392:16:1;;;6389:36;;;6421:1;6418;6411:12;6389:36;;6460:72;6524:7;6513:8;6502:9;6498:24;6460:72;:::i;:::-;5822:770;;;;-1:-1:-1;6551:8:1;-1:-1:-1;;;;5822:770:1:o;7375:1414::-;7579:6;7587;7595;7603;7611;7619;7627;7635;7688:3;7676:9;7667:7;7663:23;7659:33;7656:53;;;7705:1;7702;7695:12;7656:53;7745:9;7732:23;7774:18;7815:2;7807:6;7804:14;7801:34;;;7831:1;7828;7821:12;7801:34;7870:70;7932:7;7923:6;7912:9;7908:22;7870:70;:::i;:::-;7959:8;;-1:-1:-1;7844:96:1;-1:-1:-1;8047:2:1;8032:18;;8019:32;;-1:-1:-1;8063:16:1;;;8060:36;;;8092:1;8089;8082:12;8060:36;8131:72;8195:7;8184:8;8173:9;8169:24;8131:72;:::i;:::-;8222:8;;-1:-1:-1;8105:98:1;-1:-1:-1;8310:2:1;8295:18;;8282:32;;-1:-1:-1;8326:16:1;;;8323:36;;;8355:1;8352;8345:12;8323:36;8394:72;8458:7;8447:8;8436:9;8432:24;8394:72;:::i;:::-;8485:8;;-1:-1:-1;8368:98:1;-1:-1:-1;8573:2:1;8558:18;;8545:32;;-1:-1:-1;8589:16:1;;;8586:36;;;8618:1;8615;8608:12;8586:36;;8657:72;8721:7;8710:8;8699:9;8695:24;8657:72;:::i;:::-;7375:1414;;;;-1:-1:-1;7375:1414:1;;-1:-1:-1;7375:1414:1;;;;;;8748:8;-1:-1:-1;;;7375:1414:1:o;8794:180::-;8850:6;8903:2;8891:9;8882:7;8878:23;8874:32;8871:52;;;8919:1;8916;8909:12;8871:52;8942:26;8958:9;8942:26;:::i;8979:245::-;9037:6;9090:2;9078:9;9069:7;9065:23;9061:32;9058:52;;;9106:1;9103;9096:12;9058:52;9145:9;9132:23;9164:30;9188:5;9164:30;:::i;9229:249::-;9298:6;9351:2;9339:9;9330:7;9326:23;9322:32;9319:52;;;9367:1;9364;9357:12;9319:52;9399:9;9393:16;9418:30;9442:5;9418:30;:::i;9483:199::-;9552:6;9605:2;9593:9;9584:7;9580:23;9576:32;9573:52;;;9621:1;9618;9611:12;9573:52;9644:32;9666:9;9644:32;:::i;9687:267::-;9765:6;9773;9826:2;9814:9;9805:7;9801:23;9797:32;9794:52;;;9842:1;9839;9832:12;9794:52;9865:32;9887:9;9865:32;:::i;9959:450::-;10028:6;10081:2;10069:9;10060:7;10056:23;10052:32;10049:52;;;10097:1;10094;10087:12;10049:52;10137:9;10124:23;10170:18;10162:6;10159:30;10156:50;;;10202:1;10199;10192:12;10156:50;10225:22;;10278:4;10270:13;;10266:27;-1:-1:-1;10256:55:1;;10307:1;10304;10297:12;10256:55;10330:73;10395:7;10390:2;10377:16;10372:2;10368;10364:11;10330:73;:::i;10414:180::-;10473:6;10526:2;10514:9;10505:7;10501:23;10497:32;10494:52;;;10542:1;10539;10532:12;10494:52;-1:-1:-1;10565:23:1;;10414:180;-1:-1:-1;10414:180:1:o;10599:248::-;10667:6;10675;10728:2;10716:9;10707:7;10703:23;10699:32;10696:52;;;10744:1;10741;10734:12;10696:52;-1:-1:-1;;10767:23:1;;;10837:2;10822:18;;;10809:32;;-1:-1:-1;10599:248:1:o;10852:257::-;10893:3;10931:5;10925:12;10958:6;10953:3;10946:19;10974:63;11030:6;11023:4;11018:3;11014:14;11007:4;11000:5;10996:16;10974:63;:::i;:::-;11091:2;11070:15;-1:-1:-1;;11066:29:1;11057:39;;;;11098:4;11053:50;;10852:257;-1:-1:-1;;10852:257:1:o;11114:470::-;11293:3;11331:6;11325:13;11347:53;11393:6;11388:3;11381:4;11373:6;11369:17;11347:53;:::i;:::-;11463:13;;11422:16;;;;11485:57;11463:13;11422:16;11519:4;11507:17;;11485:57;:::i;:::-;11558:20;;11114:470;-1:-1:-1;;;;11114:470:1:o;11589:960::-;12018:3;12056:6;12050:13;12072:53;12118:6;12113:3;12106:4;12098:6;12094:17;12072:53;:::i;:::-;12156:6;12151:3;12147:16;12134:29;;-1:-1:-1;;;12208:2:1;12201:5;12194:17;12242:6;12236:13;12258:65;12314:8;12310:1;12303:5;12299:13;12292:4;12284:6;12280:17;12258:65;:::i;:::-;12386:1;12342:20;;12378:10;;;12371:22;12418:13;;12440:62;12418:13;12489:1;12481:10;;12474:4;12462:17;;12440:62;:::i;:::-;12522:17;12541:1;12518:25;;11589:960;-1:-1:-1;;;;;11589:960:1:o;12554:617::-;12834:3;12872:6;12866:13;12888:53;12934:6;12929:3;12922:4;12914:6;12910:17;12888:53;:::i;:::-;-1:-1:-1;;;12963:16:1;;;12988:21;;;13034:13;;13056:65;13034:13;13108:1;13097:13;;13090:4;13078:17;;13056:65;:::i;:::-;13141:20;13163:1;13137:28;;12554:617;-1:-1:-1;;;;12554:617:1:o;13818:488::-;-1:-1:-1;;;;;14087:15:1;;;14069:34;;14139:15;;14134:2;14119:18;;14112:43;14186:2;14171:18;;14164:34;;;14234:3;14229:2;14214:18;;14207:31;;;14012:4;;14255:45;;14280:19;;14272:6;14255:45;:::i;:::-;14247:53;13818:488;-1:-1:-1;;;;;;13818:488:1:o;14503:219::-;14652:2;14641:9;14634:21;14615:4;14672:44;14712:2;14701:9;14697:18;14689:6;14672:44;:::i;14727:353::-;14929:2;14911:21;;;14968:2;14948:18;;;14941:30;15007:31;15002:2;14987:18;;14980:59;15071:2;15056:18;;14727:353::o;15487:414::-;15689:2;15671:21;;;15728:2;15708:18;;;15701:30;15767:34;15762:2;15747:18;;15740:62;-1:-1:-1;;;15833:2:1;15818:18;;15811:48;15891:3;15876:19;;15487:414::o;18594:347::-;18796:2;18778:21;;;18835:2;18815:18;;;18808:30;18874:25;18869:2;18854:18;;18847:53;18932:2;18917:18;;18594:347::o;18946:341::-;19148:2;19130:21;;;19187:2;19167:18;;;19160:30;-1:-1:-1;;;19221:2:1;19206:18;;19199:47;19278:2;19263:18;;18946:341::o;21727:356::-;21929:2;21911:21;;;21948:18;;;21941:30;22007:34;22002:2;21987:18;;21980:62;22074:2;22059:18;;21727:356::o;22088:411::-;22290:2;22272:21;;;22329:2;22309:18;;;22302:30;22368:34;22363:2;22348:18;;22341:62;-1:-1:-1;;;22434:2:1;22419:18;;22412:45;22489:3;22474:19;;22088:411::o;22504:337::-;22706:2;22688:21;;;22745:2;22725:18;;;22718:30;-1:-1:-1;;;22779:2:1;22764:18;;22757:43;22832:2;22817:18;;22504:337::o;23248:413::-;23450:2;23432:21;;;23489:2;23469:18;;;23462:30;23528:34;23523:2;23508:18;;23501:62;-1:-1:-1;;;23594:2:1;23579:18;;23572:47;23651:3;23636:19;;23248:413::o;23666:345::-;23868:2;23850:21;;;23907:2;23887:18;;;23880:30;-1:-1:-1;;;23941:2:1;23926:18;;23919:51;24002:2;23987:18;;23666:345::o;24016:397::-;24218:2;24200:21;;;24257:2;24237:18;;;24230:30;24296:34;24291:2;24276:18;;24269:62;-1:-1:-1;;;24362:2:1;24347:18;;24340:31;24403:3;24388:19;;24016:397::o;24762:416::-;24964:2;24946:21;;;25003:2;24983:18;;;24976:30;25042:34;25037:2;25022:18;;25015:62;-1:-1:-1;;;25108:2:1;25093:18;;25086:50;25168:3;25153:19;;24762:416::o;25183:348::-;25385:2;25367:21;;;25424:2;25404:18;;;25397:30;25463:26;25458:2;25443:18;;25436:54;25522:2;25507:18;;25183:348::o;25536:397::-;25738:2;25720:21;;;25777:2;25757:18;;;25750:30;25816:34;25811:2;25796:18;;25789:62;-1:-1:-1;;;25882:2:1;25867:18;;25860:31;25923:3;25908:19;;25536:397::o;26120:128::-;26160:3;26191:1;26187:6;26184:1;26181:13;26178:39;;;26197:18;;:::i;:::-;-1:-1:-1;26233:9:1;;26120:128::o;26253:120::-;26293:1;26319;26309:35;;26324:18;;:::i;:::-;-1:-1:-1;26358:9:1;;26253:120::o;26378:168::-;26418:7;26484:1;26480;26476:6;26472:14;26469:1;26466:21;26461:1;26454:9;26447:17;26443:45;26440:71;;;26491:18;;:::i;:::-;-1:-1:-1;26531:9:1;;26378:168::o;26551:125::-;26591:4;26619:1;26616;26613:8;26610:34;;;26624:18;;:::i;:::-;-1:-1:-1;26661:9:1;;26551:125::o;26681:258::-;26753:1;26763:113;26777:6;26774:1;26771:13;26763:113;;;26853:11;;;26847:18;26834:11;;;26827:39;26799:2;26792:10;26763:113;;;26894:6;26891:1;26888:13;26885:48;;;-1:-1:-1;;26929:1:1;26911:16;;26904:27;26681:258::o;26944:380::-;27023:1;27019:12;;;;27066;;;27087:61;;27141:4;27133:6;27129:17;27119:27;;27087:61;27194:2;27186:6;27183:14;27163:18;27160:38;27157:161;;;27240:10;27235:3;27231:20;27228:1;27221:31;27275:4;27272:1;27265:15;27303:4;27300:1;27293:15;27157:161;;26944:380;;;:::o;27329:135::-;27368:3;-1:-1:-1;;27389:17:1;;27386:43;;;27409:18;;:::i;:::-;-1:-1:-1;27456:1:1;27445:13;;27329:135::o;27469:112::-;27501:1;27527;27517:35;;27532:18;;:::i;:::-;-1:-1:-1;27566:9:1;;27469:112::o;27586:127::-;27647:10;27642:3;27638:20;27635:1;27628:31;27678:4;27675:1;27668:15;27702:4;27699:1;27692:15;27718:127;27779:10;27774:3;27770:20;27767:1;27760:31;27810:4;27807:1;27800:15;27834:4;27831:1;27824:15;27850:127;27911:10;27906:3;27902:20;27899:1;27892:31;27942:4;27939:1;27932:15;27966:4;27963:1;27956:15;27982:127;28043:10;28038:3;28034:20;28031:1;28024:31;28074:4;28071:1;28064:15;28098:4;28095:1;28088:15;28114:127;28175:10;28170:3;28166:20;28163:1;28156:31;28206:4;28203:1;28196:15;28230:4;28227:1;28220:15;28246:131;-1:-1:-1;;;;;28321:31:1;;28311:42;;28301:70;;28367:1;28364;28357:12;28382:131;-1:-1:-1;;;;;;28456:32:1;;28446:43;;28436:71;;28503:1;28500;28493:12

Swarm Source

ipfs://8fbc7386210e21c01609582643ff724667966878c6c281590a180d41777699c4
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.