ETH Price: $2,377.68 (-1.26%)

Token

 

Overview

Max Total Supply

39

Holders

28

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xeEBc7aF3C574a6E7EdA8F07B4a35736721B49392
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BigToysMintPass

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 2021-11-19
*/

//SPDX-License-Identifier: MIT


pragma solidity ^0.8.7;

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

interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

pragma solidity ^0.8.0;
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract BigToysMintPass is ERC165, IERC1155, IERC1155MetadataURI, Ownable {
    
    using Address for address;
    using Strings for uint256;
    using SafeMath for uint256;
    
    address private _manager;
    
    uint256 private _price = 300000000000000000; //300000000000000000
    uint256 private _totalAllowedMints = 1500;
    uint256 private _totalAllowedMintsPerUser = 10;
    uint256 private _totalMints;
    
    address _owner1 = 0xF54C396658E197c37828bf8812834C42c29A4Db1;
    address _owner2 = 0xe89e0199c7CCCA4Ec86177D0F9F9Dd11fa197c26;
    
    mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from token ID to account balances
    mapping(address => mapping(address => bool)) private _operatorApprovals; // Mapping from account to operator approvals
    mapping(address => uint256) private _mints;

    string private _uri;
    
    constructor() {
        _manager = msg.sender;
        _uri = "https://bigtoysnft.com/api/nft/0";
    }
    
    //Read Functions======================================================================================================================================================
    
    function balanceOf(address account, uint256 id) public view override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }
    
    function uri(uint256 id) external view override returns (string memory) {
        return _uri;
    }

    function balanceOfBatch(address[] memory accounts, uint256[] memory ids) external view override returns (uint256[] memory) {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }
    
    
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    
    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }
    
    function webData(address user) external view returns(uint256 totalAllowedMintsPerUser, uint256 leftNFT, uint256 userMints, uint256 price) {
        totalAllowedMintsPerUser = _totalAllowedMintsPerUser;
        leftNFT = _totalAllowedMints - _totalMints;
        userMints = _mints[user];
        price = _price;
    }
    
    
    function getItemPrice() external view returns (uint256) {
		return _price;
	}
	
    //Owner Functions
    function changePrice(uint256 newPrice) external onlyOwner{
        _price = newPrice;
    }
    
    function changeTotalAllowedMintsPerUser(uint256 newTotalAllowedMintsPerUser) external onlyOwner {
        _totalAllowedMintsPerUser = newTotalAllowedMintsPerUser;
    }
    
    function changeTotalAllowedMints(uint256 newTotalAllowedMints) external onlyOwner {
        _totalAllowedMints = newTotalAllowedMints;
    }
    
    function setUri(string calldata Uri) external onlyOwner {
       _uri = Uri;
    }
    
    // withdraw the earnings to pay for the artists & devs :)
	function withdraw() public payable onlyOwner {
	    require(address(this).balance > 0, "No balance to withdraw");
	    
	    
	    uint256 sixtyfive = address(this).balance.mul(65).div(100); //65%
	    uint256 thirtyfive = address(this).balance.mul(35).div(100); //35%
	    require(payable(_owner1).send(sixtyfive));
	    require(payable(_owner2).send(thirtyfive));
	
	}
    
    function giveawayMint(address[] calldata winners) external onlyOwner {
        uint256 length = winners.length;
        for(uint256 t; t < length; ++t) {
            
        ++_balances[0][winners[t]];
        
        emit TransferSingle(msg.sender, address(0), winners[t], 0, 1);
        }
        
        _totalMints += length;
    }
    
    //User Functions======================================================================================================================================================
    function setApprovalForAll(address operator, bool approved) external override {
        require(msg.sender != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(address from,address to,uint256 id,uint256 amount,bytes memory data) external override {
        require(
            from == msg.sender || isApprovedForAll(from, msg.sender),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeBatchTransferFrom(address from,address to,uint256[] memory ids,uint256[] memory amounts,bytes memory data) public virtual override {
        require(
            from == msg.sender || isApprovedForAll(from, msg.sender),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }
    
    function mintBigToyPass(address account, uint256 amount) external payable {
        require(msg.value == _price * amount, "Big Toys NFT: Insufficient balance");
        require(_mints[msg.sender] + amount <= _totalAllowedMintsPerUser, "Big Toys NFT: Max mints reached");
        require(_totalMints + amount <= _totalAllowedMints, "Big Toys NFT: Insufficient NFTs for minting");
        
        _mints[msg.sender] += amount;
        _totalMints += amount;
        
        _balances[0][account] += amount;
        
        emit TransferSingle(msg.sender, address(0), account, 0, amount);

    }
    
    //Internal Functions
    function _safeTransferFrom(address from,address to,uint256 id,uint256 amount,bytes memory data) internal virtual {

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, amount, data);
    }

    function _safeBatchTransferFrom(address from,address to,uint256[] memory ids,uint256[] memory amounts,bytes memory data) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(msg.sender, from, to, ids, amounts, data);
    }
   
    function _doSafeTransferAcceptanceCheck(address operator, address from, address to, uint256 id, uint256 amount, bytes memory data) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotalAllowedMints","type":"uint256"}],"name":"changeTotalAllowedMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotalAllowedMintsPerUser","type":"uint256"}],"name":"changeTotalAllowedMintsPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getItemPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"}],"name":"giveawayMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintBigToyPass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"Uri","type":"string"}],"name":"setUri","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"webData","outputs":[{"internalType":"uint256","name":"totalAllowedMintsPerUser","type":"uint256"},{"internalType":"uint256","name":"leftNFT","type":"uint256"},{"internalType":"uint256","name":"userMints","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052670429d069189e00006002556105dc600355600a600455600680546001600160a01b031990811673f54c396658e197c37828bf8812834c42c29a4db1179091556007805490911673e89e0199c7ccca4ec86177d0f9f9dd11fa197c261790553480156200007057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b031916331790556040805180820190915260208082527f68747470733a2f2f626967746f79736e66742e636f6d2f6170692f6e66742f309181019182526200010891600b916200010f565b50620001f2565b8280546200011d90620001b5565b90600052602060002090601f0160209004810192826200014157600085556200018c565b82601f106200015c57805160ff19168380011785556200018c565b828001600101855582156200018c579182015b828111156200018c5782518255916020019190600101906200016f565b506200019a9291506200019e565b5090565b5b808211156200019a57600081556001016200019f565b600181811c90821680620001ca57607f821691505b60208210811415620001ec57634e487b7160e01b600052602260045260246000fd5b50919050565b611e6680620002026000396000f3fe60806040526004361061011e5760003560e01c8063715018a6116100a0578063a2b40d1911610064578063a2b40d191461030f578063af0087b01461032f578063e985e9c51461036f578063f242432a1461038f578063f2fde38b146103af57600080fd5b8063715018a614610272578063805eff82146102875780638da5cb5b146102a75780639b642de1146102cf578063a22cb465146102ef57600080fd5b80632eb2c2d6116100e75780632eb2c2d6146101ea5780633a2323331461020a5780633ccfd60b1461021d5780634e1273f4146102255780635779444f1461025257600080fd5b8062fdd58e1461012357806301ffc9a714610156578063053a24d6146101865780630e89341c146101a85780632083ad82146101d5575b600080fd5b34801561012f57600080fd5b5061014361013e3660046117af565b6103cf565b6040519081526020015b60405180910390f35b34801561016257600080fd5b5061017661017136600461191f565b610468565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a13660046117d9565b6104ba565b005b3480156101b457600080fd5b506101c86101c33660046119b9565b610613565b60405161014d9190611b3e565b3480156101e157600080fd5b50600254610143565b3480156101f657600080fd5b506101a6610205366004611664565b6106a7565b6101a66102183660046117af565b61073e565b6101a661095b565b34801561023157600080fd5b5061024561024036600461184e565b610a63565b60405161014d9190611afd565b34801561025e57600080fd5b506101a661026d3660046119b9565b610b8d565b34801561027e57600080fd5b506101a6610bbc565b34801561029357600080fd5b506101a66102a23660046119b9565b610c30565b3480156102b357600080fd5b506000546040516001600160a01b03909116815260200161014d565b3480156102db57600080fd5b506101a66102ea366004611959565b610c5f565b3480156102fb57600080fd5b506101a661030a366004611773565b610c9a565b34801561031b57600080fd5b506101a661032a3660046119b9565b610d71565b34801561033b57600080fd5b5061034f61034a366004611616565b610da0565b60408051948552602085019390935291830152606082015260800161014d565b34801561037b57600080fd5b5061017661038a366004611631565b610de1565b34801561039b57600080fd5b506101a66103aa36600461170e565b610e0f565b3480156103bb57600080fd5b506101a66103ca366004611616565b610e96565b60006001600160a01b0383166104405760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526008602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049957506001600160e01b031982166303a24d0760e21b145b806104b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104e45760405162461bcd60e51b815260040161043790611be3565b8060005b818110156105f657600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c79085858481811061052e5761052e611d45565b90506020020160208101906105439190611616565b6001600160a01b03166001600160a01b031681526020019081526020016000206000815461057090611d14565b9091555083838281811061058657610586611d45565b905060200201602081019061059b9190611616565b604080516000808252600160208301526001600160a01b0393909316929133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46105ef81611d14565b90506104e8565b5080600560008282546106099190611c3c565b9091555050505050565b6060600b805461062290611cac565b80601f016020809104026020016040519081016040528092919081815260200182805461064e90611cac565b801561069b5780601f106106705761010080835404028352916020019161069b565b820191906000526020600020905b81548152906001019060200180831161067e57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806106c357506106c38533610de1565b61072a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610437565b6107378585858585610f80565b5050505050565b8060025461074c9190611c76565b34146107a55760405162461bcd60e51b815260206004820152602260248201527f42696720546f7973204e46543a20496e73756666696369656e742062616c616e604482015261636560f01b6064820152608401610437565b600454336000908152600a60205260409020546107c3908390611c3c565b11156108115760405162461bcd60e51b815260206004820152601f60248201527f42696720546f7973204e46543a204d6178206d696e74732072656163686564006044820152606401610437565b600354816005546108229190611c3c565b11156108845760405162461bcd60e51b815260206004820152602b60248201527f42696720546f7973204e46543a20496e73756666696369656e74204e4654732060448201526a666f72206d696e74696e6760a81b6064820152608401610437565b336000908152600a6020526040812080548392906108a3908490611c3c565b9250508190555080600560008282546108bc9190611c3c565b90915550506001600160a01b03821660009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604081208054839290610908908490611c3c565b9091555050604080516000808252602082018490526001600160a01b03851692909133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050565b6000546001600160a01b031633146109855760405162461bcd60e51b815260040161043790611be3565b600047116109ce5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610437565b60006109e660646109e0476041611131565b90611144565b905060006109fa60646109e0476023611131565b6006546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050610a2d57600080fd5b6007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610a5f57600080fd5b5050565b60608151835114610ac85760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610437565b6000835167ffffffffffffffff811115610ae457610ae4611d5b565b604051908082528060200260200182016040528015610b0d578160200160208202803683370190505b50905060005b8451811015610b8557610b58858281518110610b3157610b31611d45565b6020026020010151858381518110610b4b57610b4b611d45565b60200260200101516103cf565b828281518110610b6a57610b6a611d45565b6020908102919091010152610b7e81611d14565b9050610b13565b509392505050565b6000546001600160a01b03163314610bb75760405162461bcd60e51b815260040161043790611be3565b600355565b6000546001600160a01b03163314610be65760405162461bcd60e51b815260040161043790611be3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c5a5760405162461bcd60e51b815260040161043790611be3565b600455565b6000546001600160a01b03163314610c895760405162461bcd60e51b815260040161043790611be3565b610c95600b8383611476565b505050565b336001600160a01b0383161415610d055760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610437565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b815260040161043790611be3565b600255565b60045460055460035460009182918291610db991611c95565b6001600160a01b039095166000908152600a6020526040902054600254949690949350915050565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516331480610e2b5750610e2b8533610de1565b610e895760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610437565b6107378585858585611150565b6000546001600160a01b03163314610ec05760405162461bcd60e51b815260040161043790611be3565b6001600160a01b038116610f255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610437565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114610fe25760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610437565b60005b83518110156110cb57600084828151811061100257611002611d45565b60200260200101519050600084838151811061102057611020611d45565b60209081029190910181015160008481526008835260408082206001600160a01b038d1683529093529190912054909150818110156110715760405162461bcd60e51b815260040161043790611b99565b60008381526008602090815260408083206001600160a01b038d8116855292528083208585039055908a168252812080548492906110b0908490611c3c565b92505081905550505050806110c490611d14565b9050610fe5565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161111b929190611b10565b60405180910390a4610737338686868686611238565b600061113d8284611c76565b9392505050565b600061113d8284611c54565b60008381526008602090815260408083206001600160a01b0389168452909152902054828110156111935760405162461bcd60e51b815260040161043790611b99565b60008481526008602090815260408083206001600160a01b038a81168552925280832086850390559087168252812080548592906111d2908490611c3c565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46112303387878787876113ac565b505050505050565b6001600160a01b0384163b156112305760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061127c9089908990889088908890600401611a5a565b602060405180830381600087803b15801561129657600080fd5b505af19250505080156112c6575060408051601f3d908101601f191682019092526112c39181019061193c565b60015b611373576112d2611d71565b806308c379a0141561130c57506112e7611d8d565b806112f2575061130e565b8060405162461bcd60e51b81526004016104379190611b3e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610437565b6001600160e01b0319811663bc197c8160e01b146113a35760405162461bcd60e51b815260040161043790611b51565b50505050505050565b6001600160a01b0384163b156112305760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113f09089908990889088908890600401611ab8565b602060405180830381600087803b15801561140a57600080fd5b505af192505050801561143a575060408051601f3d908101601f191682019092526114379181019061193c565b60015b611446576112d2611d71565b6001600160e01b0319811663f23a6e6160e01b146113a35760405162461bcd60e51b815260040161043790611b51565b82805461148290611cac565b90600052602060002090601f0160209004810192826114a457600085556114ea565b82601f106114bd5782800160ff198235161785556114ea565b828001600101855582156114ea579182015b828111156114ea5782358255916020019190600101906114cf565b506114f69291506114fa565b5090565b5b808211156114f657600081556001016114fb565b80356001600160a01b038116811461152657600080fd5b919050565b600082601f83011261153c57600080fd5b8135602061154982611c18565b6040516115568282611ce7565b8381528281019150858301600585901b8701840188101561157657600080fd5b60005b8581101561159557813584529284019290840190600101611579565b5090979650505050505050565b600082601f8301126115b357600080fd5b813567ffffffffffffffff8111156115cd576115cd611d5b565b6040516115e4601f8301601f191660200182611ce7565b8181528460208386010111156115f957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561162857600080fd5b61113d8261150f565b6000806040838503121561164457600080fd5b61164d8361150f565b915061165b6020840161150f565b90509250929050565b600080600080600060a0868803121561167c57600080fd5b6116858661150f565b94506116936020870161150f565b9350604086013567ffffffffffffffff808211156116b057600080fd5b6116bc89838a0161152b565b945060608801359150808211156116d257600080fd5b6116de89838a0161152b565b935060808801359150808211156116f457600080fd5b50611701888289016115a2565b9150509295509295909350565b600080600080600060a0868803121561172657600080fd5b61172f8661150f565b945061173d6020870161150f565b93506040860135925060608601359150608086013567ffffffffffffffff81111561176757600080fd5b611701888289016115a2565b6000806040838503121561178657600080fd5b61178f8361150f565b9150602083013580151581146117a457600080fd5b809150509250929050565b600080604083850312156117c257600080fd5b6117cb8361150f565b946020939093013593505050565b600080602083850312156117ec57600080fd5b823567ffffffffffffffff8082111561180457600080fd5b818501915085601f83011261181857600080fd5b81358181111561182757600080fd5b8660208260051b850101111561183c57600080fd5b60209290920196919550909350505050565b6000806040838503121561186157600080fd5b823567ffffffffffffffff8082111561187957600080fd5b818501915085601f83011261188d57600080fd5b8135602061189a82611c18565b6040516118a78282611ce7565b8381528281019150858301600585901b870184018b10156118c757600080fd5b600096505b848710156118f1576118dd8161150f565b8352600196909601959183019183016118cc565b509650508601359250508082111561190857600080fd5b506119158582860161152b565b9150509250929050565b60006020828403121561193157600080fd5b813561113d81611e17565b60006020828403121561194e57600080fd5b815161113d81611e17565b6000806020838503121561196c57600080fd5b823567ffffffffffffffff8082111561198457600080fd5b818501915085601f83011261199857600080fd5b8135818111156119a757600080fd5b86602082850101111561183c57600080fd5b6000602082840312156119cb57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015611a02578151875295820195908201906001016119e6565b509495945050505050565b6000815180845260005b81811015611a3357602081850181015186830182015201611a17565b81811115611a45576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611a86908301866119d2565b8281036060840152611a9881866119d2565b90508281036080840152611aac8185611a0d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611af290830184611a0d565b979650505050505050565b60208152600061113d60208301846119d2565b604081526000611b2360408301856119d2565b8281036020840152611b3581856119d2565b95945050505050565b60208152600061113d6020830184611a0d565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff821115611c3257611c32611d5b565b5060051b60200190565b60008219821115611c4f57611c4f611d2f565b500190565b600082611c7157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c9057611c90611d2f565b500290565b600082821015611ca757611ca7611d2f565b500390565b600181811c90821680611cc057607f821691505b60208210811415611ce157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611d0d57611d0d611d5b565b6040525050565b6000600019821415611d2857611d28611d2f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611d8a5760046000803e5060005160e01c5b90565b600060443d1015611d9b5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611dcb57505050505090565b8285019150815181811115611de35750505050505090565b843d8701016020828501011115611dfd5750505050505090565b611e0c60208286010187611ce7565b509095945050505050565b6001600160e01b031981168114611e2d57600080fd5b5056fea2646970667358221220934f2c9eff5be902c2819cae2fd2b1f6a81d92bda933c0d903b53e2dc74e9f7d64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061011e5760003560e01c8063715018a6116100a0578063a2b40d1911610064578063a2b40d191461030f578063af0087b01461032f578063e985e9c51461036f578063f242432a1461038f578063f2fde38b146103af57600080fd5b8063715018a614610272578063805eff82146102875780638da5cb5b146102a75780639b642de1146102cf578063a22cb465146102ef57600080fd5b80632eb2c2d6116100e75780632eb2c2d6146101ea5780633a2323331461020a5780633ccfd60b1461021d5780634e1273f4146102255780635779444f1461025257600080fd5b8062fdd58e1461012357806301ffc9a714610156578063053a24d6146101865780630e89341c146101a85780632083ad82146101d5575b600080fd5b34801561012f57600080fd5b5061014361013e3660046117af565b6103cf565b6040519081526020015b60405180910390f35b34801561016257600080fd5b5061017661017136600461191f565b610468565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a13660046117d9565b6104ba565b005b3480156101b457600080fd5b506101c86101c33660046119b9565b610613565b60405161014d9190611b3e565b3480156101e157600080fd5b50600254610143565b3480156101f657600080fd5b506101a6610205366004611664565b6106a7565b6101a66102183660046117af565b61073e565b6101a661095b565b34801561023157600080fd5b5061024561024036600461184e565b610a63565b60405161014d9190611afd565b34801561025e57600080fd5b506101a661026d3660046119b9565b610b8d565b34801561027e57600080fd5b506101a6610bbc565b34801561029357600080fd5b506101a66102a23660046119b9565b610c30565b3480156102b357600080fd5b506000546040516001600160a01b03909116815260200161014d565b3480156102db57600080fd5b506101a66102ea366004611959565b610c5f565b3480156102fb57600080fd5b506101a661030a366004611773565b610c9a565b34801561031b57600080fd5b506101a661032a3660046119b9565b610d71565b34801561033b57600080fd5b5061034f61034a366004611616565b610da0565b60408051948552602085019390935291830152606082015260800161014d565b34801561037b57600080fd5b5061017661038a366004611631565b610de1565b34801561039b57600080fd5b506101a66103aa36600461170e565b610e0f565b3480156103bb57600080fd5b506101a66103ca366004611616565b610e96565b60006001600160a01b0383166104405760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526008602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049957506001600160e01b031982166303a24d0760e21b145b806104b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104e45760405162461bcd60e51b815260040161043790611be3565b8060005b818110156105f657600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c79085858481811061052e5761052e611d45565b90506020020160208101906105439190611616565b6001600160a01b03166001600160a01b031681526020019081526020016000206000815461057090611d14565b9091555083838281811061058657610586611d45565b905060200201602081019061059b9190611616565b604080516000808252600160208301526001600160a01b0393909316929133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46105ef81611d14565b90506104e8565b5080600560008282546106099190611c3c565b9091555050505050565b6060600b805461062290611cac565b80601f016020809104026020016040519081016040528092919081815260200182805461064e90611cac565b801561069b5780601f106106705761010080835404028352916020019161069b565b820191906000526020600020905b81548152906001019060200180831161067e57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806106c357506106c38533610de1565b61072a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610437565b6107378585858585610f80565b5050505050565b8060025461074c9190611c76565b34146107a55760405162461bcd60e51b815260206004820152602260248201527f42696720546f7973204e46543a20496e73756666696369656e742062616c616e604482015261636560f01b6064820152608401610437565b600454336000908152600a60205260409020546107c3908390611c3c565b11156108115760405162461bcd60e51b815260206004820152601f60248201527f42696720546f7973204e46543a204d6178206d696e74732072656163686564006044820152606401610437565b600354816005546108229190611c3c565b11156108845760405162461bcd60e51b815260206004820152602b60248201527f42696720546f7973204e46543a20496e73756666696369656e74204e4654732060448201526a666f72206d696e74696e6760a81b6064820152608401610437565b336000908152600a6020526040812080548392906108a3908490611c3c565b9250508190555080600560008282546108bc9190611c3c565b90915550506001600160a01b03821660009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604081208054839290610908908490611c3c565b9091555050604080516000808252602082018490526001600160a01b03851692909133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050565b6000546001600160a01b031633146109855760405162461bcd60e51b815260040161043790611be3565b600047116109ce5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610437565b60006109e660646109e0476041611131565b90611144565b905060006109fa60646109e0476023611131565b6006546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050610a2d57600080fd5b6007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610a5f57600080fd5b5050565b60608151835114610ac85760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610437565b6000835167ffffffffffffffff811115610ae457610ae4611d5b565b604051908082528060200260200182016040528015610b0d578160200160208202803683370190505b50905060005b8451811015610b8557610b58858281518110610b3157610b31611d45565b6020026020010151858381518110610b4b57610b4b611d45565b60200260200101516103cf565b828281518110610b6a57610b6a611d45565b6020908102919091010152610b7e81611d14565b9050610b13565b509392505050565b6000546001600160a01b03163314610bb75760405162461bcd60e51b815260040161043790611be3565b600355565b6000546001600160a01b03163314610be65760405162461bcd60e51b815260040161043790611be3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c5a5760405162461bcd60e51b815260040161043790611be3565b600455565b6000546001600160a01b03163314610c895760405162461bcd60e51b815260040161043790611be3565b610c95600b8383611476565b505050565b336001600160a01b0383161415610d055760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610437565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b815260040161043790611be3565b600255565b60045460055460035460009182918291610db991611c95565b6001600160a01b039095166000908152600a6020526040902054600254949690949350915050565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516331480610e2b5750610e2b8533610de1565b610e895760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610437565b6107378585858585611150565b6000546001600160a01b03163314610ec05760405162461bcd60e51b815260040161043790611be3565b6001600160a01b038116610f255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610437565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114610fe25760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610437565b60005b83518110156110cb57600084828151811061100257611002611d45565b60200260200101519050600084838151811061102057611020611d45565b60209081029190910181015160008481526008835260408082206001600160a01b038d1683529093529190912054909150818110156110715760405162461bcd60e51b815260040161043790611b99565b60008381526008602090815260408083206001600160a01b038d8116855292528083208585039055908a168252812080548492906110b0908490611c3c565b92505081905550505050806110c490611d14565b9050610fe5565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161111b929190611b10565b60405180910390a4610737338686868686611238565b600061113d8284611c76565b9392505050565b600061113d8284611c54565b60008381526008602090815260408083206001600160a01b0389168452909152902054828110156111935760405162461bcd60e51b815260040161043790611b99565b60008481526008602090815260408083206001600160a01b038a81168552925280832086850390559087168252812080548592906111d2908490611c3c565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46112303387878787876113ac565b505050505050565b6001600160a01b0384163b156112305760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061127c9089908990889088908890600401611a5a565b602060405180830381600087803b15801561129657600080fd5b505af19250505080156112c6575060408051601f3d908101601f191682019092526112c39181019061193c565b60015b611373576112d2611d71565b806308c379a0141561130c57506112e7611d8d565b806112f2575061130e565b8060405162461bcd60e51b81526004016104379190611b3e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610437565b6001600160e01b0319811663bc197c8160e01b146113a35760405162461bcd60e51b815260040161043790611b51565b50505050505050565b6001600160a01b0384163b156112305760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113f09089908990889088908890600401611ab8565b602060405180830381600087803b15801561140a57600080fd5b505af192505050801561143a575060408051601f3d908101601f191682019092526114379181019061193c565b60015b611446576112d2611d71565b6001600160e01b0319811663f23a6e6160e01b146113a35760405162461bcd60e51b815260040161043790611b51565b82805461148290611cac565b90600052602060002090601f0160209004810192826114a457600085556114ea565b82601f106114bd5782800160ff198235161785556114ea565b828001600101855582156114ea579182015b828111156114ea5782358255916020019190600101906114cf565b506114f69291506114fa565b5090565b5b808211156114f657600081556001016114fb565b80356001600160a01b038116811461152657600080fd5b919050565b600082601f83011261153c57600080fd5b8135602061154982611c18565b6040516115568282611ce7565b8381528281019150858301600585901b8701840188101561157657600080fd5b60005b8581101561159557813584529284019290840190600101611579565b5090979650505050505050565b600082601f8301126115b357600080fd5b813567ffffffffffffffff8111156115cd576115cd611d5b565b6040516115e4601f8301601f191660200182611ce7565b8181528460208386010111156115f957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561162857600080fd5b61113d8261150f565b6000806040838503121561164457600080fd5b61164d8361150f565b915061165b6020840161150f565b90509250929050565b600080600080600060a0868803121561167c57600080fd5b6116858661150f565b94506116936020870161150f565b9350604086013567ffffffffffffffff808211156116b057600080fd5b6116bc89838a0161152b565b945060608801359150808211156116d257600080fd5b6116de89838a0161152b565b935060808801359150808211156116f457600080fd5b50611701888289016115a2565b9150509295509295909350565b600080600080600060a0868803121561172657600080fd5b61172f8661150f565b945061173d6020870161150f565b93506040860135925060608601359150608086013567ffffffffffffffff81111561176757600080fd5b611701888289016115a2565b6000806040838503121561178657600080fd5b61178f8361150f565b9150602083013580151581146117a457600080fd5b809150509250929050565b600080604083850312156117c257600080fd5b6117cb8361150f565b946020939093013593505050565b600080602083850312156117ec57600080fd5b823567ffffffffffffffff8082111561180457600080fd5b818501915085601f83011261181857600080fd5b81358181111561182757600080fd5b8660208260051b850101111561183c57600080fd5b60209290920196919550909350505050565b6000806040838503121561186157600080fd5b823567ffffffffffffffff8082111561187957600080fd5b818501915085601f83011261188d57600080fd5b8135602061189a82611c18565b6040516118a78282611ce7565b8381528281019150858301600585901b870184018b10156118c757600080fd5b600096505b848710156118f1576118dd8161150f565b8352600196909601959183019183016118cc565b509650508601359250508082111561190857600080fd5b506119158582860161152b565b9150509250929050565b60006020828403121561193157600080fd5b813561113d81611e17565b60006020828403121561194e57600080fd5b815161113d81611e17565b6000806020838503121561196c57600080fd5b823567ffffffffffffffff8082111561198457600080fd5b818501915085601f83011261199857600080fd5b8135818111156119a757600080fd5b86602082850101111561183c57600080fd5b6000602082840312156119cb57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015611a02578151875295820195908201906001016119e6565b509495945050505050565b6000815180845260005b81811015611a3357602081850181015186830182015201611a17565b81811115611a45576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611a86908301866119d2565b8281036060840152611a9881866119d2565b90508281036080840152611aac8185611a0d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611af290830184611a0d565b979650505050505050565b60208152600061113d60208301846119d2565b604081526000611b2360408301856119d2565b8281036020840152611b3581856119d2565b95945050505050565b60208152600061113d6020830184611a0d565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff821115611c3257611c32611d5b565b5060051b60200190565b60008219821115611c4f57611c4f611d2f565b500190565b600082611c7157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c9057611c90611d2f565b500290565b600082821015611ca757611ca7611d2f565b500390565b600181811c90821680611cc057607f821691505b60208210811415611ce157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611d0d57611d0d611d5b565b6040525050565b6000600019821415611d2857611d28611d2f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611d8a5760046000803e5060005160e01c5b90565b600060443d1015611d9b5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611dcb57505050505090565b8285019150815181811115611de35750505050505090565b843d8701016020828501011115611dfd5750505050505090565b611e0c60208286010187611ce7565b509095945050505050565b6001600160e01b031981168114611e2d57600080fd5b5056fea2646970667358221220934f2c9eff5be902c2819cae2fd2b1f6a81d92bda933c0d903b53e2dc74e9f7d64736f6c63430008070033

Deployed Bytecode Sourcemap

25912:9026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27112:223;;;;;;;;;;-1:-1:-1;27112:223:0;;;;;:::i;:::-;;:::i;:::-;;;17601:25:1;;;17589:2;17574:18;27112:223:0;;;;;;;;27943:310;;;;;;;;;;-1:-1:-1;27943:310:0;;;;;:::i;:::-;;:::i;:::-;;;10669:14:1;;10662:22;10644:41;;10632:2;10617:18;27943:310:0;10504:187:1;29876:348:0;;;;;;;;;;-1:-1:-1;29876:348:0;;;;;:::i;:::-;;:::i;:::-;;27347:102;;;;;;;;;;-1:-1:-1;27347:102:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28777:79::-;;;;;;;;;;-1:-1:-1;28845:6:0;;28777:79;;31058:382;;;;;;;;;;-1:-1:-1;31058:382:0;;;;;:::i;:::-;;:::i;31452:607::-;;;;;;:::i;:::-;;:::i;29485:379::-;;;:::i;27457:468::-;;;;;;;;;;-1:-1:-1;27457:468:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29175:142::-;;;;;;;;;;-1:-1:-1;29175:142:0;;;;;:::i;:::-;;:::i;18463:148::-;;;;;;;;;;;;;:::i;28993:170::-;;;;;;;;;;-1:-1:-1;28993:170:0;;;;;:::i;:::-;;:::i;17812:87::-;;;;;;;;;;-1:-1:-1;17858:7:0;17885:6;17812:87;;-1:-1:-1;;;;;17885:6:0;;;8310:51:1;;8298:2;8283:18;17812:87:0;8164:203:1;29329:84:0;;;;;;;;;;-1:-1:-1;29329:84:0;;;;;:::i;:::-;;:::i;30408:299::-;;;;;;;;;;-1:-1:-1;30408:299:0;;;;;:::i;:::-;;:::i;28888:93::-;;;;;;;;;;-1:-1:-1;28888:93:0;;;;;:::i;:::-;;:::i;28437:322::-;;;;;;;;;;-1:-1:-1;28437:322:0;;;;;:::i;:::-;;:::i;:::-;;;;18121:25:1;;;18177:2;18162:18;;18155:34;;;;18205:18;;;18198:34;18263:2;18248:18;;18241:34;18108:3;18093:19;28437:322:0;17890:391:1;28265:160:0;;;;;;;;;;-1:-1:-1;28265:160:0;;;;;:::i;:::-;;:::i;30715:335::-;;;;;;;;;;-1:-1:-1;30715:335:0;;;;;:::i;:::-;;:::i;18766:244::-;;;;;;;;;;-1:-1:-1;18766:244:0;;;;;:::i;:::-;;:::i;27112:223::-;27190:7;-1:-1:-1;;;;;27218:21:0;;27210:77;;;;-1:-1:-1;;;27210:77:0;;12894:2:1;27210:77:0;;;12876:21:1;12933:2;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;-1:-1:-1;;;13023:18:1;;;13016:41;13074:19;;27210:77:0;;;;;;;;;-1:-1:-1;27305:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;27305:22:0;;;;;;;;;;;;27112:223::o;27943:310::-;28045:4;-1:-1:-1;;;;;;28082:41:0;;-1:-1:-1;;;28082:41:0;;:110;;-1:-1:-1;;;;;;;28140:52:0;;-1:-1:-1;;;28140:52:0;28082:110;:163;;;-1:-1:-1;;;;;;;;;;7191:40:0;;;28209:36;28062:183;27943:310;-1:-1:-1;;27943:310:0:o;29876:348::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;29973:7;29956:14:::1;29998:177;30017:6;30013:1;:10;29998:177;;;30057:12;::::0;;;:9:::1;:12;::::0;;;30070:7;;30078:1;30070:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30057:24:0::1;-1:-1:-1::0;;;;;30057:24:0::1;;;;;;;;;;;;;30055:26;;;;;:::i;:::-;::::0;;;-1:-1:-1;30146:7:0;;30154:1;30146:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30107:56;::::0;;30142:1:::1;10886:25:1::0;;;30161:1:0::1;10942:2:1::0;10927:18;;10920:34;-1:-1:-1;;;;;30107:56:0;;;::::1;::::0;30142:1;30122:10:::1;::::0;30107:56:::1;::::0;10859:18:1;30107:56:0::1;;;;;;;30025:3;::::0;::::1;:::i;:::-;;;29998:177;;;;30210:6;30195:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;29876:348:0:o;27347:102::-;27404:13;27437:4;27430:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27347:102;;;:::o;31058:382::-;-1:-1:-1;;;;;31235:18:0;;31243:10;31235:18;;:56;;;31257:34;31274:4;31280:10;31257:16;:34::i;:::-;31213:156;;;;-1:-1:-1;;;31213:156:0;;14123:2:1;31213:156:0;;;14105:21:1;14162:2;14142:18;;;14135:30;14201:34;14181:18;;;14174:62;-1:-1:-1;;;14252:18:1;;;14245:48;14310:19;;31213:156:0;13921:414:1;31213:156:0;31380:52;31403:4;31409:2;31413:3;31418:7;31427:4;31380:22;:52::i;:::-;31058:382;;;;;:::o;31452:607::-;31567:6;31558;;:15;;;;:::i;:::-;31545:9;:28;31537:75;;;;-1:-1:-1;;;31537:75:0;;16025:2:1;31537:75:0;;;16007:21:1;16064:2;16044:18;;;16037:30;16103:34;16083:18;;;16076:62;-1:-1:-1;;;16154:18:1;;;16147:32;16196:19;;31537:75:0;15823:398:1;31537:75:0;31662:25;;31638:10;31631:18;;;;:6;:18;;;;;;:27;;31652:6;;31631:27;:::i;:::-;:56;;31623:100;;;;-1:-1:-1;;;31623:100:0;;14542:2:1;31623:100:0;;;14524:21:1;14581:2;14561:18;;;14554:30;14620:33;14600:18;;;14593:61;14671:18;;31623:100:0;14340:355:1;31623:100:0;31766:18;;31756:6;31742:11;;:20;;;;:::i;:::-;:42;;31734:98;;;;-1:-1:-1;;;31734:98:0;;12482:2:1;31734:98:0;;;12464:21:1;12521:2;12501:18;;;12494:30;12560:34;12540:18;;;12533:62;-1:-1:-1;;;12611:18:1;;;12604:41;12662:19;;31734:98:0;12280:407:1;31734:98:0;31860:10;31853:18;;;;:6;:18;;;;;:28;;31875:6;;31853:18;:28;;31875:6;;31853:28;:::i;:::-;;;;;;;;31907:6;31892:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;31934:21:0;;:12;:21;;;:12;;:21;:12;:21;;:31;;31959:6;;31934:12;:31;;31959:6;;31934:31;:::i;:::-;;;;-1:-1:-1;;31991:58:0;;;32026:1;10886:25:1;;;10942:2;10927:18;;10920:34;;;-1:-1:-1;;;;;31991:58:0;;;32026:1;;32006:10;;31991:58;;10859:18:1;31991:58:0;;;;;;;31452:607;;:::o;29485:379::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;29570:1:::1;29546:21;:25;29538:60;;;::::0;-1:-1:-1;;;29538:60:0;;15674:2:1;29538:60:0::1;::::0;::::1;15656:21:1::0;15713:2;15693:18;;;15686:30;-1:-1:-1;;;15732:18:1;;;15725:52;15794:18;;29538:60:0::1;15472:346:1::0;29538:60:0::1;29620:17;29640:38;29674:3;29640:29;:21;29666:2;29640:25;:29::i;:::-;:33:::0;::::1;:38::i;:::-;29620:58:::0;-1:-1:-1;29692:18:0::1;29713:38;29747:3;29713:29;:21;29739:2;29713:25;:29::i;:38::-;29781:7;::::0;29773:32:::1;::::0;29692:59;;-1:-1:-1;;;;;;29781:7:0::1;::::0;29773:32;::::1;;;::::0;29795:9;;29781:7:::1;29773:32:::0;29781:7;29773:32;29795:9;29781:7;29773:32;::::1;;;;;;29765:41;;;::::0;::::1;;29830:7;::::0;29822:33:::1;::::0;-1:-1:-1;;;;;29830:7:0;;::::1;::::0;29822:33;::::1;;;::::0;29844:10;;29830:7:::1;29822:33:::0;29830:7;29822:33;29844:10;29830:7;29822:33;::::1;;;;;;29814:42;;;::::0;::::1;;29530:334;;29485:379::o:0;27457:468::-;27562:16;27618:3;:10;27599:8;:15;:29;27591:83;;;;-1:-1:-1;;;27591:83:0;;16838:2:1;27591:83:0;;;16820:21:1;16877:2;16857:18;;;16850:30;16916:34;16896:18;;;16889:62;-1:-1:-1;;;16967:18:1;;;16960:39;17016:19;;27591:83:0;16636:405:1;27591:83:0;27687:30;27734:8;:15;27720:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27720:30:0;;27687:63;;27768:9;27763:122;27787:8;:15;27783:1;:19;27763:122;;;27843:30;27853:8;27862:1;27853:11;;;;;;;;:::i;:::-;;;;;;;27866:3;27870:1;27866:6;;;;;;;;:::i;:::-;;;;;;;27843:9;:30::i;:::-;27824:13;27838:1;27824:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;27804:3;;;:::i;:::-;;;27763:122;;;-1:-1:-1;27904:13:0;27457:468;-1:-1:-1;;;27457:468:0:o;29175:142::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;29268:18:::1;:41:::0;29175:142::o;18463:148::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;18570:1:::1;18554:6:::0;;18533:40:::1;::::0;-1:-1:-1;;;;;18554:6:0;;::::1;::::0;18533:40:::1;::::0;18570:1;;18533:40:::1;18601:1;18584:19:::0;;-1:-1:-1;;;;;;18584:19:0::1;::::0;;18463:148::o;28993:170::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;29100:25:::1;:55:::0;28993:170::o;29329:84::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;29395:10:::1;:4;29402:3:::0;;29395:10:::1;:::i;:::-;;29329:84:::0;;:::o;30408:299::-;30505:10;-1:-1:-1;;;;;30505:22:0;;;;30497:76;;;;-1:-1:-1;;;30497:76:0;;16428:2:1;30497:76:0;;;16410:21:1;16467:2;16447:18;;;16440:30;16506:34;16486:18;;;16479:62;-1:-1:-1;;;16557:18:1;;;16550:39;16606:19;;30497:76:0;16226:405:1;30497:76:0;30605:10;30586:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;30586:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;30586:51:0;;;;;;;;;;30653:46;;10644:41:1;;;30586:40:0;;30605:10;30653:46;;10617:18:1;30653:46:0;;;;;;;30408:299;;:::o;28888:93::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;28956:6:::1;:17:::0;28888:93::o;28437:322::-;28613:25;;28680:11;;28659:18;;28490:32;;;;;;28659;;;:::i;:::-;-1:-1:-1;;;;;28714:12:0;;;;;;;:6;:12;;;;;;28745:6;;28437:322;;28714:12;;28745:6;-1:-1:-1;28437:322:0;-1:-1:-1;;28437:322:0:o;28265:160::-;-1:-1:-1;;;;;28380:27:0;;;28356:4;28380:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;28265:160::o;30715:335::-;-1:-1:-1;;;;;30861:18:0;;30869:10;30861:18;;:56;;;30883:34;30900:4;30906:10;30883:16;:34::i;:::-;30839:147;;;;-1:-1:-1;;;30839:147:0;;13713:2:1;30839:147:0;;;13695:21:1;13752:2;13732:18;;;13725:30;13791:34;13771:18;;;13764:62;-1:-1:-1;;;13842:18:1;;;13835:39;13891:19;;30839:147:0;13511:405:1;30839:147:0;30997:45;31015:4;31021:2;31025;31029:6;31037:4;30997:17;:45::i;18766:244::-;17858:7;17885:6;-1:-1:-1;;;;;17885:6:0;17024:10;18032:23;18024:68;;;;-1:-1:-1;;;18024:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18855:22:0;::::1;18847:73;;;::::0;-1:-1:-1;;;18847:73:0;;13306:2:1;18847:73:0::1;::::0;::::1;13288:21:1::0;13345:2;13325:18;;;13318:30;13384:34;13364:18;;;13357:62;-1:-1:-1;;;13435:18:1;;;13428:36;13481:19;;18847:73:0::1;13104:402:1::0;18847:73:0::1;18957:6;::::0;;18936:38:::1;::::0;-1:-1:-1;;;;;18936:38:0;;::::1;::::0;18957:6;::::1;::::0;18936:38:::1;::::0;::::1;18985:6;:17:::0;;-1:-1:-1;;;;;;18985:17:0::1;-1:-1:-1::0;;;;;18985:17:0;;;::::1;::::0;;;::::1;::::0;;18766:244::o;32643:828::-;32814:7;:14;32800:3;:10;:28;32792:81;;;;-1:-1:-1;;;32792:81:0;;17248:2:1;32792:81:0;;;17230:21:1;17287:2;17267:18;;;17260:30;17326:34;17306:18;;;17299:62;-1:-1:-1;;;17377:18:1;;;17370:38;17425:19;;32792:81:0;17046:404:1;32792:81:0;32891:9;32886:421;32910:3;:10;32906:1;:14;32886:421;;;32942:10;32955:3;32959:1;32955:6;;;;;;;;:::i;:::-;;;;;;;32942:19;;32976:14;32993:7;33001:1;32993:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33020:19;33042:13;;;:9;:13;;;;;;-1:-1:-1;;;;;33042:19:0;;;;;;;;;;;;32993:10;;-1:-1:-1;33084:21:0;;;;33076:76;;;;-1:-1:-1;;;33076:76:0;;;;;;;:::i;:::-;33196:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;33196:19:0;;;;;;;;;;33218:20;;;33196:42;;33268:17;;;;;;;:27;;33218:20;;33196:13;33268:27;;33218:20;;33268:27;:::i;:::-;;;;;;;;32927:380;;;32922:3;;;;:::i;:::-;;;32886:421;;;;33356:2;-1:-1:-1;;;;;33324:49:0;33350:4;-1:-1:-1;;;;;33324:49:0;33338:10;-1:-1:-1;;;;;33324:49:0;;33360:3;33365:7;33324:49;;;;;;;:::i;:::-;;;;;;;;33386:77;33422:10;33434:4;33440:2;33444:3;33449:7;33458:4;33386:35;:77::i;22485:98::-;22543:7;22570:5;22574:1;22570;:5;:::i;:::-;22563:12;22485:98;-1:-1:-1;;;22485:98:0:o;22884:::-;22942:7;22969:5;22973:1;22969;:5;:::i;32097:538::-;32223:19;32245:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32245:19:0;;;;;;;;;;32283:21;;;;32275:76;;;;-1:-1:-1;;;32275:76:0;;;;;;;:::i;:::-;32387:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32387:19:0;;;;;;;;;;32409:20;;;32387:42;;32451:17;;;;;;;:27;;32409:20;;32387:13;32451:27;;32409:20;;32451:27;:::i;:::-;;;;-1:-1:-1;;32496:48:0;;;10886:25:1;;;10942:2;10927:18;;10920:34;;;-1:-1:-1;;;;;32496:48:0;;;;;;;;32511:10;;32496:48;;10859:18:1;32496:48:0;;;;;;;32557:70;32588:10;32600:4;32606:2;32610;32614:6;32622:4;32557:30;:70::i;:::-;32210:425;32097:538;;;;;:::o;34177:756::-;-1:-1:-1;;;;;34356:13:0;;8179:20;8227:8;34352:574;;34392:79;;-1:-1:-1;;;34392:79:0;;-1:-1:-1;;;;;34392:43:0;;;;;:79;;34436:8;;34446:4;;34452:3;;34457:7;;34466:4;;34392:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34392:79:0;;;;;;;;-1:-1:-1;;34392:79:0;;;;;;;;;;;;:::i;:::-;;;34388:527;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34788:6;34781:14;;-1:-1:-1;;;34781:14:0;;;;;;;;:::i;34388:527::-;;;34837:62;;-1:-1:-1;;;34837:62:0;;11652:2:1;34837:62:0;;;11634:21:1;11691:2;11671:18;;;11664:30;11730:34;11710:18;;;11703:62;-1:-1:-1;;;11781:18:1;;;11774:50;11841:19;;34837:62:0;11450:416:1;34388:527:0;-1:-1:-1;;;;;;34553:64:0;;-1:-1:-1;;;34553:64:0;34549:163;;34642:50;;-1:-1:-1;;;34642:50:0;;;;;;;:::i;34549:163::-;34472:255;34177:756;;;;;;:::o;33482:687::-;-1:-1:-1;;;;;33636:13:0;;8179:20;8227:8;33632:530;;33672:72;;-1:-1:-1;;;33672:72:0;;-1:-1:-1;;;;;33672:38:0;;;;;:72;;33711:8;;33721:4;;33727:2;;33731:6;;33739:4;;33672:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33672:72:0;;;;;;;;-1:-1:-1;;33672:72:0;;;;;;;;;;;;:::i;:::-;;;33668:483;;;;:::i;:::-;-1:-1:-1;;;;;;33794:59:0;;-1:-1:-1;;;33794:59:0;33790:158;;33878:50;;-1:-1:-1;;;33878:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:735::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:163;748:2;745:1;742:9;734:163;;;805:17;;793:30;;843:12;;;;875;;;;766:1;759:9;734:163;;;-1:-1:-1;915:6:1;;192:735;-1:-1:-1;;;;;;;192:735:1:o;932:555::-;974:5;1027:3;1020:4;1012:6;1008:17;1004:27;994:55;;1045:1;1042;1035:12;994:55;1081:6;1068:20;1107:18;1103:2;1100:26;1097:52;;;1129:18;;:::i;:::-;1178:2;1172:9;1190:67;1245:2;1226:13;;-1:-1:-1;;1222:27:1;1251:4;1218:38;1172:9;1190:67;:::i;:::-;1281:2;1273:6;1266:18;1327:3;1320:4;1315:2;1307:6;1303:15;1299:26;1296:35;1293:55;;;1344:1;1341;1334:12;1293:55;1408:2;1401:4;1393:6;1389:17;1382:4;1374:6;1370:17;1357:54;1455:1;1431:15;;;1448:4;1427:26;1420:37;;;;1435:6;932:555;-1:-1:-1;;;932:555:1:o;1492:186::-;1551:6;1604:2;1592:9;1583:7;1579:23;1575:32;1572:52;;;1620:1;1617;1610:12;1572:52;1643:29;1662:9;1643:29;:::i;1683:260::-;1751:6;1759;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1851:29;1870:9;1851:29;:::i;:::-;1841:39;;1899:38;1933:2;1922:9;1918:18;1899:38;:::i;:::-;1889:48;;1683:260;;;;;:::o;1948:943::-;2102:6;2110;2118;2126;2134;2187:3;2175:9;2166:7;2162:23;2158:33;2155:53;;;2204:1;2201;2194:12;2155:53;2227:29;2246:9;2227:29;:::i;:::-;2217:39;;2275:38;2309:2;2298:9;2294:18;2275:38;:::i;:::-;2265:48;;2364:2;2353:9;2349:18;2336:32;2387:18;2428:2;2420:6;2417:14;2414:34;;;2444:1;2441;2434:12;2414:34;2467:61;2520:7;2511:6;2500:9;2496:22;2467:61;:::i;:::-;2457:71;;2581:2;2570:9;2566:18;2553:32;2537:48;;2610:2;2600:8;2597:16;2594:36;;;2626:1;2623;2616:12;2594:36;2649:63;2704:7;2693:8;2682:9;2678:24;2649:63;:::i;:::-;2639:73;;2765:3;2754:9;2750:19;2737:33;2721:49;;2795:2;2785:8;2782:16;2779:36;;;2811:1;2808;2801:12;2779:36;;2834:51;2877:7;2866:8;2855:9;2851:24;2834:51;:::i;:::-;2824:61;;;1948:943;;;;;;;;:::o;2896:606::-;3000:6;3008;3016;3024;3032;3085:3;3073:9;3064:7;3060:23;3056:33;3053:53;;;3102:1;3099;3092:12;3053:53;3125:29;3144:9;3125:29;:::i;:::-;3115:39;;3173:38;3207:2;3196:9;3192:18;3173:38;:::i;:::-;3163:48;;3258:2;3247:9;3243:18;3230:32;3220:42;;3309:2;3298:9;3294:18;3281:32;3271:42;;3364:3;3353:9;3349:19;3336:33;3392:18;3384:6;3381:30;3378:50;;;3424:1;3421;3414:12;3378:50;3447:49;3488:7;3479:6;3468:9;3464:22;3447:49;:::i;3507:347::-;3572:6;3580;3633:2;3621:9;3612:7;3608:23;3604:32;3601:52;;;3649:1;3646;3639:12;3601:52;3672:29;3691:9;3672:29;:::i;:::-;3662:39;;3751:2;3740:9;3736:18;3723:32;3798:5;3791:13;3784:21;3777:5;3774:32;3764:60;;3820:1;3817;3810:12;3764:60;3843:5;3833:15;;;3507:347;;;;;:::o;3859:254::-;3927:6;3935;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4027:29;4046:9;4027:29;:::i;:::-;4017:39;4103:2;4088:18;;;;4075:32;;-1:-1:-1;;;3859:254:1:o;4118:615::-;4204:6;4212;4265:2;4253:9;4244:7;4240:23;4236:32;4233:52;;;4281:1;4278;4271:12;4233:52;4321:9;4308:23;4350:18;4391:2;4383:6;4380:14;4377:34;;;4407:1;4404;4397:12;4377:34;4445:6;4434:9;4430:22;4420:32;;4490:7;4483:4;4479:2;4475:13;4471:27;4461:55;;4512:1;4509;4502:12;4461:55;4552:2;4539:16;4578:2;4570:6;4567:14;4564:34;;;4594:1;4591;4584:12;4564:34;4647:7;4642:2;4632:6;4629:1;4625:14;4621:2;4617:23;4613:32;4610:45;4607:65;;;4668:1;4665;4658:12;4607:65;4699:2;4691:11;;;;;4721:6;;-1:-1:-1;4118:615:1;;-1:-1:-1;;;;4118:615:1:o;4738:1219::-;4856:6;4864;4917:2;4905:9;4896:7;4892:23;4888:32;4885:52;;;4933:1;4930;4923:12;4885:52;4973:9;4960:23;5002:18;5043:2;5035:6;5032:14;5029:34;;;5059:1;5056;5049:12;5029:34;5097:6;5086:9;5082:22;5072:32;;5142:7;5135:4;5131:2;5127:13;5123:27;5113:55;;5164:1;5161;5154:12;5113:55;5200:2;5187:16;5222:4;5245:43;5285:2;5245:43;:::i;:::-;5317:2;5311:9;5329:31;5357:2;5349:6;5329:31;:::i;:::-;5395:18;;;5429:15;;;;-1:-1:-1;5464:11:1;;;5506:1;5502:10;;;5494:19;;5490:28;;5487:41;-1:-1:-1;5484:61:1;;;5541:1;5538;5531:12;5484:61;5563:1;5554:10;;5573:169;5587:2;5584:1;5581:9;5573:169;;;5644:23;5663:3;5644:23;:::i;:::-;5632:36;;5605:1;5598:9;;;;;5688:12;;;;5720;;5573:169;;;-1:-1:-1;5761:6:1;-1:-1:-1;;5805:18:1;;5792:32;;-1:-1:-1;;5836:16:1;;;5833:36;;;5865:1;5862;5855:12;5833:36;;5888:63;5943:7;5932:8;5921:9;5917:24;5888:63;:::i;:::-;5878:73;;;4738:1219;;;;;:::o;5962:245::-;6020:6;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;6128:9;6115:23;6147:30;6171:5;6147:30;:::i;6212:249::-;6281:6;6334:2;6322:9;6313:7;6309:23;6305:32;6302:52;;;6350:1;6347;6340:12;6302:52;6382:9;6376:16;6401:30;6425:5;6401:30;:::i;6466:592::-;6537:6;6545;6598:2;6586:9;6577:7;6573:23;6569:32;6566:52;;;6614:1;6611;6604:12;6566:52;6654:9;6641:23;6683:18;6724:2;6716:6;6713:14;6710:34;;;6740:1;6737;6730:12;6710:34;6778:6;6767:9;6763:22;6753:32;;6823:7;6816:4;6812:2;6808:13;6804:27;6794:55;;6845:1;6842;6835:12;6794:55;6885:2;6872:16;6911:2;6903:6;6900:14;6897:34;;;6927:1;6924;6917:12;6897:34;6972:7;6967:2;6958:6;6954:2;6950:15;6946:24;6943:37;6940:57;;;6993:1;6990;6983:12;7063:180;7122:6;7175:2;7163:9;7154:7;7150:23;7146:32;7143:52;;;7191:1;7188;7181:12;7143:52;-1:-1:-1;7214:23:1;;7063:180;-1:-1:-1;7063:180:1:o;7248:435::-;7301:3;7339:5;7333:12;7366:6;7361:3;7354:19;7392:4;7421:2;7416:3;7412:12;7405:19;;7458:2;7451:5;7447:14;7479:1;7489:169;7503:6;7500:1;7497:13;7489:169;;;7564:13;;7552:26;;7598:12;;;;7633:15;;;;7525:1;7518:9;7489:169;;;-1:-1:-1;7674:3:1;;7248:435;-1:-1:-1;;;;;7248:435:1:o;7688:471::-;7729:3;7767:5;7761:12;7794:6;7789:3;7782:19;7819:1;7829:162;7843:6;7840:1;7837:13;7829:162;;;7905:4;7961:13;;;7957:22;;7951:29;7933:11;;;7929:20;;7922:59;7858:12;7829:162;;;8009:6;8006:1;8003:13;8000:87;;;8075:1;8068:4;8059:6;8054:3;8050:16;8046:27;8039:38;8000:87;-1:-1:-1;8141:2:1;8120:15;-1:-1:-1;;8116:29:1;8107:39;;;;8148:4;8103:50;;7688:471;-1:-1:-1;;7688:471:1:o;8372:826::-;-1:-1:-1;;;;;8769:15:1;;;8751:34;;8821:15;;8816:2;8801:18;;8794:43;8731:3;8868:2;8853:18;;8846:31;;;8694:4;;8900:57;;8937:19;;8929:6;8900:57;:::i;:::-;9005:9;8997:6;8993:22;8988:2;8977:9;8973:18;8966:50;9039:44;9076:6;9068;9039:44;:::i;:::-;9025:58;;9132:9;9124:6;9120:22;9114:3;9103:9;9099:19;9092:51;9160:32;9185:6;9177;9160:32;:::i;:::-;9152:40;8372:826;-1:-1:-1;;;;;;;;8372:826:1:o;9203:560::-;-1:-1:-1;;;;;9500:15:1;;;9482:34;;9552:15;;9547:2;9532:18;;9525:43;9599:2;9584:18;;9577:34;;;9642:2;9627:18;;9620:34;;;9462:3;9685;9670:19;;9663:32;;;9425:4;;9712:45;;9737:19;;9729:6;9712:45;:::i;:::-;9704:53;9203:560;-1:-1:-1;;;;;;;9203:560:1:o;9768:261::-;9947:2;9936:9;9929:21;9910:4;9967:56;10019:2;10008:9;10004:18;9996:6;9967:56;:::i;10034:465::-;10291:2;10280:9;10273:21;10254:4;10317:56;10369:2;10358:9;10354:18;10346:6;10317:56;:::i;:::-;10421:9;10413:6;10409:22;10404:2;10393:9;10389:18;10382:50;10449:44;10486:6;10478;10449:44;:::i;:::-;10441:52;10034:465;-1:-1:-1;;;;;10034:465:1:o;11226:219::-;11375:2;11364:9;11357:21;11338:4;11395:44;11435:2;11424:9;11420:18;11412:6;11395:44;:::i;11871:404::-;12073:2;12055:21;;;12112:2;12092:18;;;12085:30;12151:34;12146:2;12131:18;;12124:62;-1:-1:-1;;;12217:2:1;12202:18;;12195:38;12265:3;12250:19;;11871:404::o;14700:406::-;14902:2;14884:21;;;14941:2;14921:18;;;14914:30;14980:34;14975:2;14960:18;;14953:62;-1:-1:-1;;;15046:2:1;15031:18;;15024:40;15096:3;15081:19;;14700:406::o;15111:356::-;15313:2;15295:21;;;15332:18;;;15325:30;15391:34;15386:2;15371:18;;15364:62;15458:2;15443:18;;15111:356::o;18286:183::-;18346:4;18379:18;18371:6;18368:30;18365:56;;;18401:18;;:::i;:::-;-1:-1:-1;18446:1:1;18442:14;18458:4;18438:25;;18286:183::o;18474:128::-;18514:3;18545:1;18541:6;18538:1;18535:13;18532:39;;;18551:18;;:::i;:::-;-1:-1:-1;18587:9:1;;18474:128::o;18607:217::-;18647:1;18673;18663:132;;18717:10;18712:3;18708:20;18705:1;18698:31;18752:4;18749:1;18742:15;18780:4;18777:1;18770:15;18663:132;-1:-1:-1;18809:9:1;;18607:217::o;18829:168::-;18869:7;18935:1;18931;18927:6;18923:14;18920:1;18917:21;18912:1;18905:9;18898:17;18894:45;18891:71;;;18942:18;;:::i;:::-;-1:-1:-1;18982:9:1;;18829:168::o;19002:125::-;19042:4;19070:1;19067;19064:8;19061:34;;;19075:18;;:::i;:::-;-1:-1:-1;19112:9:1;;19002:125::o;19132:380::-;19211:1;19207:12;;;;19254;;;19275:61;;19329:4;19321:6;19317:17;19307:27;;19275:61;19382:2;19374:6;19371:14;19351:18;19348:38;19345:161;;;19428:10;19423:3;19419:20;19416:1;19409:31;19463:4;19460:1;19453:15;19491:4;19488:1;19481:15;19345:161;;19132:380;;;:::o;19517:249::-;19627:2;19608:13;;-1:-1:-1;;19604:27:1;19592:40;;19662:18;19647:34;;19683:22;;;19644:62;19641:88;;;19709:18;;:::i;:::-;19745:2;19738:22;-1:-1:-1;;19517:249:1:o;19771:135::-;19810:3;-1:-1:-1;;19831:17:1;;19828:43;;;19851:18;;:::i;:::-;-1:-1:-1;19898:1:1;19887:13;;19771:135::o;19911:127::-;19972:10;19967:3;19963:20;19960:1;19953:31;20003:4;20000:1;19993:15;20027:4;20024:1;20017:15;20043:127;20104:10;20099:3;20095:20;20092:1;20085:31;20135:4;20132:1;20125:15;20159:4;20156:1;20149:15;20175:127;20236:10;20231:3;20227:20;20224:1;20217:31;20267:4;20264:1;20257:15;20291:4;20288:1;20281:15;20307:179;20342:3;20384:1;20366:16;20363:23;20360:120;;;20430:1;20427;20424;20409:23;-1:-1:-1;20467:1:1;20461:8;20456:3;20452:18;20360:120;20307:179;:::o;20491:671::-;20530:3;20572:4;20554:16;20551:26;20548:39;;;20491:671;:::o;20548:39::-;20614:2;20608:9;-1:-1:-1;;20679:16:1;20675:25;;20672:1;20608:9;20651:50;20730:4;20724:11;20754:16;20789:18;20860:2;20853:4;20845:6;20841:17;20838:25;20833:2;20825:6;20822:14;20819:45;20816:58;;;20867:5;;;;;20491:671;:::o;20816:58::-;20904:6;20898:4;20894:17;20883:28;;20940:3;20934:10;20967:2;20959:6;20956:14;20953:27;;;20973:5;;;;;;20491:671;:::o;20953:27::-;21057:2;21038:16;21032:4;21028:27;21024:36;21017:4;21008:6;21003:3;20999:16;20995:27;20992:69;20989:82;;;21064:5;;;;;;20491:671;:::o;20989:82::-;21080:57;21131:4;21122:6;21114;21110:19;21106:30;21100:4;21080:57;:::i;:::-;-1:-1:-1;21153:3:1;;20491:671;-1:-1:-1;;;;;20491:671:1:o;21167:131::-;-1:-1:-1;;;;;;21241:32:1;;21231:43;;21221:71;;21288:1;21285;21278:12;21221:71;21167:131;:::o

Swarm Source

ipfs://934f2c9eff5be902c2819cae2fd2b1f6a81d92bda933c0d903b53e2dc74e9f7d
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.