ETH Price: $2,994.57 (+4.66%)
Gas: 2 Gwei

Token

Mythic Enhancements ()
 

Overview

Max Total Supply

13

Holders

2

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
aleph0ne.eth
0x867eb0804eaca9feeda8a0e1d2b9a32eef58af8f
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:
MythicWeapons

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-14
*/

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

// SPDX-License-Identifier: MIT
/*
       .____    .__             .__    .___           
       |    |   |__| ________ __|__| __| _/           
       |    |   |  |/ ____/  |  \  |/ __ |            
       |    |___|  < <_|  |  |  /  / /_/ |            
       |_______ \__|\__   |____/|__\____ |            
               \/      |__|             \/            
 __      __                                           
/  \    /  \ ____ _____  ______   ____   ____   ______
\   \/\/   // __ \\__  \ \____ \ /  _ \ /    \ /  ___/
 \        /\  ___/ / __ \|  |_> >  <_> )   |  \\___ \ 
  \__/\  /  \___  >____  /   __/ \____/|___|  /____  >
       \/       \/     \/|__|               \/     \/ 
   Standing on the shoulders of giants -- Yuga Labs & MAYC
     * Written by Aleph 0ne for the ApeLiquid community *
*/

// File @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC1155/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
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 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;
}

// File @openzeppelin/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @dev _Available since v3.1._
 */
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.
     *
     * NOTE: 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.
     *
     * NOTE: 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);
}

// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
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);
}

// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC1155/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            account != address(0),
            "ERC1155: address zero is not a valid owner"
        );
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        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;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `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 memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        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(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - 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[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        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(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            from,
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(
            operator,
            address(0),
            to,
            id,
            amount,
            data
        );
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            address(0),
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        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: burn amount exceeds balance"
            );
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    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.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.onERC1155BatchReceived.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element)
        private
        pure
        returns (uint256[] memory)
    {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(
                    supply >= amount,
                    "ERC1155: burn amount exceeds totalSupply"
                );
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

pragma solidity ^0.8.6;

contract MythicWeapons is ERC1155, Ownable {
    using Strings for uint256;

    address private useWeaponAddy = 0x0B0237aD59e1BbCb611fdf0c9Fa07350C3f41e87;
    string private baseURI = "https://apeliquid.io/weapons/json/";
    string public name = "Mythic Enhancements";

    mapping(uint256 => bool) public validWeapons;

    event SetBaseURI(string indexed _baseURI);

    // Construct 100+ weapons
    constructor(string memory _baseURI) ERC1155(_baseURI) {
        for (uint256 i = 1; i < 100; i++) {
            validWeapons[i] = true;
        }
        emit SetBaseURI(baseURI);
    }

    /**
     * @notice Airdrop tokens to multiple addresses at once.
     * No strict supply is set in the contract. All methods are ownerOnly,
     * it is up to the owner to control the supply by not minting
     * past their desired number for each token.
     * @dev Airdrop tokens to each address in the calldata list,
     * setting the supply to the length of the list + previously minted (airdropped) supply.
     * Add an address once per token you would like to send.
     * @param _tokenIds The tokenIDs to send
     * @param _list address[] list of wallets to send tokens to
     * @param _qty The qty of each token we are sending
     */
    function airdrop(
        uint256[] memory _tokenIds,
        address[] calldata _list,
        uint256[] memory _qty
    ) external onlyOwner {
        for (uint256 i = 0; i < _list.length; i++) {
            // Mint address, tokenid, amount
            _mint(_list[i], _tokenIds[i], _qty[i], "Mint-a-palooza!");
        }
    }

    /**
     * @notice Sends multiple tokens to a single address
     * @param _tokenID The id of the token to send
     * @param _address The address to receive the tokens
     * @param _quantity How many to send she receiver
     */
    function batchMint(
        uint256 _tokenID,
        address _address,
        uint256 _quantity
    ) external onlyOwner {
        _mint(_address, _tokenID, _quantity, "");
    }

    function setName(string memory _name) public onlyOwner {
        name = _name;
    }

    function setUseWeaponAddress(address openLootAddress) external onlyOwner {
        useWeaponAddy = openLootAddress;
    }

    function useWeapon(
        address tokenOwner,
        uint256 tokenId,
        uint256 totalToBurn
    ) external {
        require(msg.sender == useWeaponAddy, "Invalid Evolution Contract");
        _burn(tokenOwner, tokenId, totalToBurn);
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(baseURI);
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(
            validWeapons[typeId],
            "URI requested for invalid token type or id"
        );
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"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":"string","name":"_baseURI","type":"string"}],"name":"SetBaseURI","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":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"_list","type":"address[]"},{"internalType":"uint256[]","name":"_qty","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"_tokenID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"batchMint","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_name","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"openLootAddress","type":"address"}],"name":"setUseWeaponAddress","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":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalToBurn","type":"uint256"}],"name":"useWeapon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validWeapons","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052730b0237ad59e1bbcb611fdf0c9fa07350c3f41e87600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280602281526020016200424960229139600590805190602001906200008a929190620002c9565b506040518060400160405280601381526020017f4d797468696320456e68616e63656d656e74730000000000000000000000000081525060069080519060200190620000d8929190620002c9565b50348015620000e657600080fd5b506040516200426b3803806200426b83398181016040528101906200010c919062000516565b806200011e81620001df60201b60201c565b506200013f62000133620001fb60201b60201c565b6200020360201b60201c565b6000600190505b6064811015620001925760016007600083815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200018990620005a0565b91505062000146565b506005604051620001a49190620006fe565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a25062000717565b8060029080519060200190620001f7929190620002c9565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d7906200061d565b90600052602060002090601f016020900481019282620002fb576000855562000347565b82601f106200031657805160ff191683800117855562000347565b8280016001018555821562000347579182015b828111156200034657825182559160200191906001019062000329565b5b5090506200035691906200035a565b5090565b5b80821115620003755760008160009055506001016200035b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003e28262000397565b810181811067ffffffffffffffff82111715620004045762000403620003a8565b5b80604052505050565b60006200041962000379565b9050620004278282620003d7565b919050565b600067ffffffffffffffff8211156200044a5762000449620003a8565b5b620004558262000397565b9050602081019050919050565b60005b838110156200048257808201518184015260208101905062000465565b8381111562000492576000848401525b50505050565b6000620004af620004a9846200042c565b6200040d565b905082815260208101848484011115620004ce57620004cd62000392565b5b620004db84828562000462565b509392505050565b600082601f830112620004fb57620004fa6200038d565b5b81516200050d84826020860162000498565b91505092915050565b6000602082840312156200052f576200052e62000383565b5b600082015167ffffffffffffffff81111562000550576200054f62000388565b5b6200055e84828501620004e3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620005ad8262000596565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620005e357620005e262000567565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200063657607f821691505b602082108114156200064d576200064c620005ee565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815462000682816200061d565b6200068e818662000653565b94506001821660008114620006ac5760018114620006be57620006f5565b60ff19831686528186019350620006f5565b620006c9856200065e565b60005b83811015620006ed57815481890152600182019150602081019050620006cc565b838801955050505b50505092915050565b60006200070c828462000673565b915081905092915050565b613b2280620007276000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80634e1273f4116100ad578063c47f002711610071578063c47f002714610303578063d10507a91461031f578063e985e9c51461033b578063f242432a1461036b578063f2fde38b1461038757610120565b80634e1273f414610273578063715018a6146102a35780638da5cb5b146102ad578063a22cb465146102cb578063c135cb61146102e757610120565b80632b77fa6d116100f45780632b77fa6d146101d35780632eb2c2d6146102035780633567ed3b1461021f57806336af95901461023b57806339f7e37f1461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806306fdde03146101855780630e89341c146101a3575b600080fd5b61013f600480360381019061013a9190612147565b6103a3565b60405161014c9190612196565b60405180910390f35b61016f600480360381019061016a9190612209565b61046c565b60405161017c9190612251565b60405180910390f35b61018d61054e565b60405161019a9190612305565b60405180910390f35b6101bd60048036038101906101b89190612327565b6105dc565b6040516101ca9190612305565b60405180910390f35b6101ed60048036038101906101e89190612327565b610717565b6040516101fa9190612251565b60405180910390f35b61021d60048036038101906102189190612551565b610737565b005b61023960048036038101906102349190612620565b6107d8565b005b61025560048036038101906102509190612673565b610800565b005b610271600480360381019061026c9190612741565b61084c565b005b61028d6004803603810190610288919061284d565b6108b1565b60405161029a9190612983565b60405180910390f35b6102ab6109ca565b005b6102b56109de565b6040516102c291906129b4565b60405180910390f35b6102e560048036038101906102e091906129fb565b610a08565b005b61030160048036038101906102fc9190612a3b565b610a1e565b005b61031d60048036038101906103189190612741565b610abe565b005b61033960048036038101906103349190612ae9565b610ae0565b005b61035560048036038101906103509190612b95565b610bac565b6040516103629190612251565b60405180910390f35b61038560048036038101906103809190612bd5565b610c40565b005b6103a1600480360381019061039c9190612673565b610ce1565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040b90612cde565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061053757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610547575061054682610d65565b5b9050919050565b6006805461055b90612d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461058790612d2d565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b505050505081565b60606007600083815260200190815260200160002060009054906101000a900460ff1661063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063590612dd1565b60405180910390fd5b60006005805461064d90612d2d565b9050116106e4576005805461066190612d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461068d90612d2d565b80156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050610710565b60056106ef83610dcf565b604051602001610700929190612ec1565b6040516020818303038152906040525b9050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b61073f610f30565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078557506107848561077f610f30565b610bac565b5b6107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb90612f57565b60405180910390fd5b6107d18585858585610f38565b5050505050565b6107e061125a565b6107fb828483604051806020016040528060008152506112d8565b505050565b61080861125a565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61085461125a565b806005908051906020019061086a929190611ffc565b50600560405161087a9190612f77565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b606081518351146108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90613000565b60405180910390fd5b6000835167ffffffffffffffff81111561091457610913612359565b5b6040519080825280602002602001820160405280156109425781602001602082028036833780820191505090505b50905060005b84518110156109bf5761098f85828151811061096757610966613020565b5b602002602001015185838151811061098257610981613020565b5b60200260200101516103a3565b8282815181106109a2576109a1613020565b5b602002602001018181525050806109b89061307e565b9050610948565b508091505092915050565b6109d261125a565b6109dc6000611489565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a1a610a13610f30565b838361154f565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613113565b60405180910390fd5b610ab98383836116bc565b505050565b610ac661125a565b8060069080519060200190610adc929190611ffc565b5050565b610ae861125a565b60005b83839050811015610ba557610b92848483818110610b0c57610b0b613020565b5b9050602002016020810190610b219190612673565b868381518110610b3457610b33613020565b5b6020026020010151848481518110610b4f57610b4e613020565b5b60200260200101516040518060400160405280600f81526020017f4d696e742d612d70616c6f6f7a612100000000000000000000000000000000008152506112d8565b8080610b9d9061307e565b915050610aeb565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c48610f30565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c8e5750610c8d85610c88610f30565b610bac565b5b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490612f57565b60405180910390fd5b610cda8585858585611903565b5050505050565b610ce961125a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131a5565b60405180910390fd5b610d6281611489565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610e17576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f2b565b600082905060005b60008214610e49578080610e329061307e565b915050600a82610e4291906131f4565b9150610e1f565b60008167ffffffffffffffff811115610e6557610e64612359565b5b6040519080825280601f01601f191660200182016040528015610e975781602001600182028036833780820191505090505b5090505b60008514610f2457600182610eb09190613225565b9150600a85610ebf9190613259565b6030610ecb919061328a565b60f81b818381518110610ee157610ee0613020565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610f1d91906131f4565b9450610e9b565b8093505050505b919050565b600033905090565b8151835114610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390613352565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906133e4565b60405180910390fd5b6000610ff6610f30565b9050611006818787878787611b9f565b60005b84518110156111b757600085828151811061102757611026613020565b5b60200260200101519050600085838151811061104657611045613020565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613476565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119c919061328a565b92505081905550505050806111b09061307e565b9050611009565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161122e929190613496565b60405180910390a4611244818787878787611ba7565b611252818787878787611baf565b505050505050565b611262610f30565b73ffffffffffffffffffffffffffffffffffffffff166112806109de565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613519565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906135ab565b60405180910390fd5b6000611352610f30565b9050600061135f85611d87565b9050600061136c85611d87565b905061137d83600089858589611b9f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dc919061328a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161145a9291906135cb565b60405180910390a461147183600089858589611ba7565b61148083600089898989611e01565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590613666565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116af9190612251565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906136f8565b60405180910390fd5b6000611736610f30565b9050600061174384611d87565b9050600061175084611d87565b905061177083876000858560405180602001604052806000815250611b9f565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061378a565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118d49291906135cb565b60405180910390a46118fa84886000868660405180602001604052806000815250611ba7565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906133e4565b60405180910390fd5b600061197d610f30565b9050600061198a85611d87565b9050600061199785611d87565b90506119a7838989858589611b9f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590613476565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af3919061328a565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611b709291906135cb565b60405180910390a4611b86848a8a86868a611ba7565b611b94848a8a8a8a8a611e01565b505050505050505050565b505050505050565b505050505050565b611bce8473ffffffffffffffffffffffffffffffffffffffff16611fd9565b15611d7f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c149594939291906137ff565b6020604051808303816000875af1925050508015611c5057506040513d601f19601f82011682018060405250810190611c4d919061387c565b60015b611cf657611c5c6138b6565b806308c379a01415611cb95750611c716138d8565b80611c7c5750611cbb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb09190612305565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced906139e0565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613a72565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611da657611da5612359565b5b604051908082528060200260200182016040528015611dd45781602001602082028036833780820191505090505b5090508281600081518110611dec57611deb613020565b5b60200260200101818152505080915050919050565b611e208473ffffffffffffffffffffffffffffffffffffffff16611fd9565b15611fd1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e66959493929190613a92565b6020604051808303816000875af1925050508015611ea257506040513d601f19601f82011682018060405250810190611e9f919061387c565b60015b611f4857611eae6138b6565b806308c379a01415611f0b5750611ec36138d8565b80611ece5750611f0d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f029190612305565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f906139e0565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613a72565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461200890612d2d565b90600052602060002090601f01602090048101928261202a5760008555612071565b82601f1061204357805160ff1916838001178555612071565b82800160010185558215612071579182015b82811115612070578251825591602001919060010190612055565b5b50905061207e9190612082565b5090565b5b8082111561209b576000816000905550600101612083565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120de826120b3565b9050919050565b6120ee816120d3565b81146120f957600080fd5b50565b60008135905061210b816120e5565b92915050565b6000819050919050565b61212481612111565b811461212f57600080fd5b50565b6000813590506121418161211b565b92915050565b6000806040838503121561215e5761215d6120a9565b5b600061216c858286016120fc565b925050602061217d85828601612132565b9150509250929050565b61219081612111565b82525050565b60006020820190506121ab6000830184612187565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121e6816121b1565b81146121f157600080fd5b50565b600081359050612203816121dd565b92915050565b60006020828403121561221f5761221e6120a9565b5b600061222d848285016121f4565b91505092915050565b60008115159050919050565b61224b81612236565b82525050565b60006020820190506122666000830184612242565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122a657808201518184015260208101905061228b565b838111156122b5576000848401525b50505050565b6000601f19601f8301169050919050565b60006122d78261226c565b6122e18185612277565b93506122f1818560208601612288565b6122fa816122bb565b840191505092915050565b6000602082019050818103600083015261231f81846122cc565b905092915050565b60006020828403121561233d5761233c6120a9565b5b600061234b84828501612132565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612391826122bb565b810181811067ffffffffffffffff821117156123b0576123af612359565b5b80604052505050565b60006123c361209f565b90506123cf8282612388565b919050565b600067ffffffffffffffff8211156123ef576123ee612359565b5b602082029050602081019050919050565b600080fd5b6000612418612413846123d4565b6123b9565b9050808382526020820190506020840283018581111561243b5761243a612400565b5b835b8181101561246457806124508882612132565b84526020840193505060208101905061243d565b5050509392505050565b600082601f83011261248357612482612354565b5b8135612493848260208601612405565b91505092915050565b600080fd5b600067ffffffffffffffff8211156124bc576124bb612359565b5b6124c5826122bb565b9050602081019050919050565b82818337600083830152505050565b60006124f46124ef846124a1565b6123b9565b9050828152602081018484840111156125105761250f61249c565b5b61251b8482856124d2565b509392505050565b600082601f83011261253857612537612354565b5b81356125488482602086016124e1565b91505092915050565b600080600080600060a0868803121561256d5761256c6120a9565b5b600061257b888289016120fc565b955050602061258c888289016120fc565b945050604086013567ffffffffffffffff8111156125ad576125ac6120ae565b5b6125b98882890161246e565b935050606086013567ffffffffffffffff8111156125da576125d96120ae565b5b6125e68882890161246e565b925050608086013567ffffffffffffffff811115612607576126066120ae565b5b61261388828901612523565b9150509295509295909350565b600080600060608486031215612639576126386120a9565b5b600061264786828701612132565b9350506020612658868287016120fc565b925050604061266986828701612132565b9150509250925092565b600060208284031215612689576126886120a9565b5b6000612697848285016120fc565b91505092915050565b600067ffffffffffffffff8211156126bb576126ba612359565b5b6126c4826122bb565b9050602081019050919050565b60006126e46126df846126a0565b6123b9565b905082815260208101848484011115612700576126ff61249c565b5b61270b8482856124d2565b509392505050565b600082601f83011261272857612727612354565b5b81356127388482602086016126d1565b91505092915050565b600060208284031215612757576127566120a9565b5b600082013567ffffffffffffffff811115612775576127746120ae565b5b61278184828501612713565b91505092915050565b600067ffffffffffffffff8211156127a5576127a4612359565b5b602082029050602081019050919050565b60006127c96127c48461278a565b6123b9565b905080838252602082019050602084028301858111156127ec576127eb612400565b5b835b81811015612815578061280188826120fc565b8452602084019350506020810190506127ee565b5050509392505050565b600082601f83011261283457612833612354565b5b81356128448482602086016127b6565b91505092915050565b60008060408385031215612864576128636120a9565b5b600083013567ffffffffffffffff811115612882576128816120ae565b5b61288e8582860161281f565b925050602083013567ffffffffffffffff8111156128af576128ae6120ae565b5b6128bb8582860161246e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128fa81612111565b82525050565b600061290c83836128f1565b60208301905092915050565b6000602082019050919050565b6000612930826128c5565b61293a81856128d0565b9350612945836128e1565b8060005b8381101561297657815161295d8882612900565b975061296883612918565b925050600181019050612949565b5085935050505092915050565b6000602082019050818103600083015261299d8184612925565b905092915050565b6129ae816120d3565b82525050565b60006020820190506129c960008301846129a5565b92915050565b6129d881612236565b81146129e357600080fd5b50565b6000813590506129f5816129cf565b92915050565b60008060408385031215612a1257612a116120a9565b5b6000612a20858286016120fc565b9250506020612a31858286016129e6565b9150509250929050565b600080600060608486031215612a5457612a536120a9565b5b6000612a62868287016120fc565b9350506020612a7386828701612132565b9250506040612a8486828701612132565b9150509250925092565b600080fd5b60008083601f840112612aa957612aa8612354565b5b8235905067ffffffffffffffff811115612ac657612ac5612a8e565b5b602083019150836020820283011115612ae257612ae1612400565b5b9250929050565b60008060008060608587031215612b0357612b026120a9565b5b600085013567ffffffffffffffff811115612b2157612b206120ae565b5b612b2d8782880161246e565b945050602085013567ffffffffffffffff811115612b4e57612b4d6120ae565b5b612b5a87828801612a93565b9350935050604085013567ffffffffffffffff811115612b7d57612b7c6120ae565b5b612b898782880161246e565b91505092959194509250565b60008060408385031215612bac57612bab6120a9565b5b6000612bba858286016120fc565b9250506020612bcb858286016120fc565b9150509250929050565b600080600080600060a08688031215612bf157612bf06120a9565b5b6000612bff888289016120fc565b9550506020612c10888289016120fc565b9450506040612c2188828901612132565b9350506060612c3288828901612132565b925050608086013567ffffffffffffffff811115612c5357612c526120ae565b5b612c5f88828901612523565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612cc8602a83612277565b9150612cd382612c6c565b604082019050919050565b60006020820190508181036000830152612cf781612cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d4557607f821691505b60208210811415612d5957612d58612cfe565b5b50919050565b7f5552492072657175657374656420666f7220696e76616c696420746f6b656e2060008201527f74797065206f7220696400000000000000000000000000000000000000000000602082015250565b6000612dbb602a83612277565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612e1e81612d2d565b612e288186612df1565b94506001821660008114612e435760018114612e5457612e87565b60ff19831686528186019350612e87565b612e5d85612dfc565b60005b83811015612e7f57815481890152600182019150602081019050612e60565b838801955050505b50505092915050565b6000612e9b8261226c565b612ea58185612df1565b9350612eb5818560208601612288565b80840191505092915050565b6000612ecd8285612e11565b9150612ed98284612e90565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000612f41602f83612277565b9150612f4c82612ee5565b604082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b6000612f838284612e11565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612fea602983612277565b9150612ff582612f8e565b604082019050919050565b6000602082019050818103600083015261301981612fdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061308982612111565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130bc576130bb61304f565b5b600182019050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b60006130fd601a83612277565b9150613108826130c7565b602082019050919050565b6000602082019050818103600083015261312c816130f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061318f602683612277565b915061319a82613133565b604082019050919050565b600060208201905081810360008301526131be81613182565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131ff82612111565b915061320a83612111565b92508261321a576132196131c5565b5b828204905092915050565b600061323082612111565b915061323b83612111565b92508282101561324e5761324d61304f565b5b828203905092915050565b600061326482612111565b915061326f83612111565b92508261327f5761327e6131c5565b5b828206905092915050565b600061329582612111565b91506132a083612111565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132d5576132d461304f565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061333c602883612277565b9150613347826132e0565b604082019050919050565b6000602082019050818103600083015261336b8161332f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133ce602583612277565b91506133d982613372565b604082019050919050565b600060208201905081810360008301526133fd816133c1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613460602a83612277565b915061346b82613404565b604082019050919050565b6000602082019050818103600083015261348f81613453565b9050919050565b600060408201905081810360008301526134b08185612925565b905081810360208301526134c48184612925565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613503602083612277565b915061350e826134cd565b602082019050919050565b60006020820190508181036000830152613532816134f6565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613595602183612277565b91506135a082613539565b604082019050919050565b600060208201905081810360008301526135c481613588565b9050919050565b60006040820190506135e06000830185612187565b6135ed6020830184612187565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613650602983612277565b915061365b826135f4565b604082019050919050565b6000602082019050818103600083015261367f81613643565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136e2602383612277565b91506136ed82613686565b604082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613774602483612277565b915061377f82613718565b604082019050919050565b600060208201905081810360008301526137a381613767565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137d1826137aa565b6137db81856137b5565b93506137eb818560208601612288565b6137f4816122bb565b840191505092915050565b600060a08201905061381460008301886129a5565b61382160208301876129a5565b81810360408301526138338186612925565b905081810360608301526138478185612925565b9050818103608083015261385b81846137c6565b90509695505050505050565b600081519050613876816121dd565b92915050565b600060208284031215613892576138916120a9565b5b60006138a084828501613867565b91505092915050565b60008160e01c9050919050565b600060033d11156138d55760046000803e6138d26000516138a9565b90505b90565b600060443d10156138e85761396b565b6138f061209f565b60043d036004823e80513d602482011167ffffffffffffffff8211171561391857505061396b565b808201805167ffffffffffffffff811115613936575050505061396b565b80602083010160043d03850181111561395357505050505061396b565b61396282602001850186612388565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006139ca603483612277565b91506139d58261396e565b604082019050919050565b600060208201905081810360008301526139f9816139bd565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a5c602883612277565b9150613a6782613a00565b604082019050919050565b60006020820190508181036000830152613a8b81613a4f565b9050919050565b600060a082019050613aa760008301886129a5565b613ab460208301876129a5565b613ac16040830186612187565b613ace6060830185612187565b8181036080830152613ae081846137c6565b9050969550505050505056fea2646970667358221220de5e9bfcfa47d26780bc07e4c30d0c65c0f555346a13e0750b35aaaa2bbb97b064736f6c634300080a003368747470733a2f2f6170656c69717569642e696f2f776561706f6e732f6a736f6e2f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f6170656c69717569642e696f2f776561706f6e732f6a736f6e2f000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c80634e1273f4116100ad578063c47f002711610071578063c47f002714610303578063d10507a91461031f578063e985e9c51461033b578063f242432a1461036b578063f2fde38b1461038757610120565b80634e1273f414610273578063715018a6146102a35780638da5cb5b146102ad578063a22cb465146102cb578063c135cb61146102e757610120565b80632b77fa6d116100f45780632b77fa6d146101d35780632eb2c2d6146102035780633567ed3b1461021f57806336af95901461023b57806339f7e37f1461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806306fdde03146101855780630e89341c146101a3575b600080fd5b61013f600480360381019061013a9190612147565b6103a3565b60405161014c9190612196565b60405180910390f35b61016f600480360381019061016a9190612209565b61046c565b60405161017c9190612251565b60405180910390f35b61018d61054e565b60405161019a9190612305565b60405180910390f35b6101bd60048036038101906101b89190612327565b6105dc565b6040516101ca9190612305565b60405180910390f35b6101ed60048036038101906101e89190612327565b610717565b6040516101fa9190612251565b60405180910390f35b61021d60048036038101906102189190612551565b610737565b005b61023960048036038101906102349190612620565b6107d8565b005b61025560048036038101906102509190612673565b610800565b005b610271600480360381019061026c9190612741565b61084c565b005b61028d6004803603810190610288919061284d565b6108b1565b60405161029a9190612983565b60405180910390f35b6102ab6109ca565b005b6102b56109de565b6040516102c291906129b4565b60405180910390f35b6102e560048036038101906102e091906129fb565b610a08565b005b61030160048036038101906102fc9190612a3b565b610a1e565b005b61031d60048036038101906103189190612741565b610abe565b005b61033960048036038101906103349190612ae9565b610ae0565b005b61035560048036038101906103509190612b95565b610bac565b6040516103629190612251565b60405180910390f35b61038560048036038101906103809190612bd5565b610c40565b005b6103a1600480360381019061039c9190612673565b610ce1565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040b90612cde565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061053757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610547575061054682610d65565b5b9050919050565b6006805461055b90612d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461058790612d2d565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b505050505081565b60606007600083815260200190815260200160002060009054906101000a900460ff1661063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063590612dd1565b60405180910390fd5b60006005805461064d90612d2d565b9050116106e4576005805461066190612d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461068d90612d2d565b80156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050610710565b60056106ef83610dcf565b604051602001610700929190612ec1565b6040516020818303038152906040525b9050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b61073f610f30565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078557506107848561077f610f30565b610bac565b5b6107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb90612f57565b60405180910390fd5b6107d18585858585610f38565b5050505050565b6107e061125a565b6107fb828483604051806020016040528060008152506112d8565b505050565b61080861125a565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61085461125a565b806005908051906020019061086a929190611ffc565b50600560405161087a9190612f77565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b606081518351146108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90613000565b60405180910390fd5b6000835167ffffffffffffffff81111561091457610913612359565b5b6040519080825280602002602001820160405280156109425781602001602082028036833780820191505090505b50905060005b84518110156109bf5761098f85828151811061096757610966613020565b5b602002602001015185838151811061098257610981613020565b5b60200260200101516103a3565b8282815181106109a2576109a1613020565b5b602002602001018181525050806109b89061307e565b9050610948565b508091505092915050565b6109d261125a565b6109dc6000611489565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a1a610a13610f30565b838361154f565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613113565b60405180910390fd5b610ab98383836116bc565b505050565b610ac661125a565b8060069080519060200190610adc929190611ffc565b5050565b610ae861125a565b60005b83839050811015610ba557610b92848483818110610b0c57610b0b613020565b5b9050602002016020810190610b219190612673565b868381518110610b3457610b33613020565b5b6020026020010151848481518110610b4f57610b4e613020565b5b60200260200101516040518060400160405280600f81526020017f4d696e742d612d70616c6f6f7a612100000000000000000000000000000000008152506112d8565b8080610b9d9061307e565b915050610aeb565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c48610f30565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c8e5750610c8d85610c88610f30565b610bac565b5b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490612f57565b60405180910390fd5b610cda8585858585611903565b5050505050565b610ce961125a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131a5565b60405180910390fd5b610d6281611489565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610e17576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f2b565b600082905060005b60008214610e49578080610e329061307e565b915050600a82610e4291906131f4565b9150610e1f565b60008167ffffffffffffffff811115610e6557610e64612359565b5b6040519080825280601f01601f191660200182016040528015610e975781602001600182028036833780820191505090505b5090505b60008514610f2457600182610eb09190613225565b9150600a85610ebf9190613259565b6030610ecb919061328a565b60f81b818381518110610ee157610ee0613020565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610f1d91906131f4565b9450610e9b565b8093505050505b919050565b600033905090565b8151835114610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390613352565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906133e4565b60405180910390fd5b6000610ff6610f30565b9050611006818787878787611b9f565b60005b84518110156111b757600085828151811061102757611026613020565b5b60200260200101519050600085838151811061104657611045613020565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613476565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119c919061328a565b92505081905550505050806111b09061307e565b9050611009565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161122e929190613496565b60405180910390a4611244818787878787611ba7565b611252818787878787611baf565b505050505050565b611262610f30565b73ffffffffffffffffffffffffffffffffffffffff166112806109de565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613519565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906135ab565b60405180910390fd5b6000611352610f30565b9050600061135f85611d87565b9050600061136c85611d87565b905061137d83600089858589611b9f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dc919061328a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161145a9291906135cb565b60405180910390a461147183600089858589611ba7565b61148083600089898989611e01565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590613666565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116af9190612251565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906136f8565b60405180910390fd5b6000611736610f30565b9050600061174384611d87565b9050600061175084611d87565b905061177083876000858560405180602001604052806000815250611b9f565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061378a565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118d49291906135cb565b60405180910390a46118fa84886000868660405180602001604052806000815250611ba7565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906133e4565b60405180910390fd5b600061197d610f30565b9050600061198a85611d87565b9050600061199785611d87565b90506119a7838989858589611b9f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590613476565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af3919061328a565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611b709291906135cb565b60405180910390a4611b86848a8a86868a611ba7565b611b94848a8a8a8a8a611e01565b505050505050505050565b505050505050565b505050505050565b611bce8473ffffffffffffffffffffffffffffffffffffffff16611fd9565b15611d7f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c149594939291906137ff565b6020604051808303816000875af1925050508015611c5057506040513d601f19601f82011682018060405250810190611c4d919061387c565b60015b611cf657611c5c6138b6565b806308c379a01415611cb95750611c716138d8565b80611c7c5750611cbb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb09190612305565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced906139e0565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613a72565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611da657611da5612359565b5b604051908082528060200260200182016040528015611dd45781602001602082028036833780820191505090505b5090508281600081518110611dec57611deb613020565b5b60200260200101818152505080915050919050565b611e208473ffffffffffffffffffffffffffffffffffffffff16611fd9565b15611fd1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e66959493929190613a92565b6020604051808303816000875af1925050508015611ea257506040513d601f19601f82011682018060405250810190611e9f919061387c565b60015b611f4857611eae6138b6565b806308c379a01415611f0b5750611ec36138d8565b80611ece5750611f0d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f029190612305565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f906139e0565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613a72565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461200890612d2d565b90600052602060002090601f01602090048101928261202a5760008555612071565b82601f1061204357805160ff1916838001178555612071565b82800160010185558215612071579182015b82811115612070578251825591602001919060010190612055565b5b50905061207e9190612082565b5090565b5b8082111561209b576000816000905550600101612083565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120de826120b3565b9050919050565b6120ee816120d3565b81146120f957600080fd5b50565b60008135905061210b816120e5565b92915050565b6000819050919050565b61212481612111565b811461212f57600080fd5b50565b6000813590506121418161211b565b92915050565b6000806040838503121561215e5761215d6120a9565b5b600061216c858286016120fc565b925050602061217d85828601612132565b9150509250929050565b61219081612111565b82525050565b60006020820190506121ab6000830184612187565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121e6816121b1565b81146121f157600080fd5b50565b600081359050612203816121dd565b92915050565b60006020828403121561221f5761221e6120a9565b5b600061222d848285016121f4565b91505092915050565b60008115159050919050565b61224b81612236565b82525050565b60006020820190506122666000830184612242565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122a657808201518184015260208101905061228b565b838111156122b5576000848401525b50505050565b6000601f19601f8301169050919050565b60006122d78261226c565b6122e18185612277565b93506122f1818560208601612288565b6122fa816122bb565b840191505092915050565b6000602082019050818103600083015261231f81846122cc565b905092915050565b60006020828403121561233d5761233c6120a9565b5b600061234b84828501612132565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612391826122bb565b810181811067ffffffffffffffff821117156123b0576123af612359565b5b80604052505050565b60006123c361209f565b90506123cf8282612388565b919050565b600067ffffffffffffffff8211156123ef576123ee612359565b5b602082029050602081019050919050565b600080fd5b6000612418612413846123d4565b6123b9565b9050808382526020820190506020840283018581111561243b5761243a612400565b5b835b8181101561246457806124508882612132565b84526020840193505060208101905061243d565b5050509392505050565b600082601f83011261248357612482612354565b5b8135612493848260208601612405565b91505092915050565b600080fd5b600067ffffffffffffffff8211156124bc576124bb612359565b5b6124c5826122bb565b9050602081019050919050565b82818337600083830152505050565b60006124f46124ef846124a1565b6123b9565b9050828152602081018484840111156125105761250f61249c565b5b61251b8482856124d2565b509392505050565b600082601f83011261253857612537612354565b5b81356125488482602086016124e1565b91505092915050565b600080600080600060a0868803121561256d5761256c6120a9565b5b600061257b888289016120fc565b955050602061258c888289016120fc565b945050604086013567ffffffffffffffff8111156125ad576125ac6120ae565b5b6125b98882890161246e565b935050606086013567ffffffffffffffff8111156125da576125d96120ae565b5b6125e68882890161246e565b925050608086013567ffffffffffffffff811115612607576126066120ae565b5b61261388828901612523565b9150509295509295909350565b600080600060608486031215612639576126386120a9565b5b600061264786828701612132565b9350506020612658868287016120fc565b925050604061266986828701612132565b9150509250925092565b600060208284031215612689576126886120a9565b5b6000612697848285016120fc565b91505092915050565b600067ffffffffffffffff8211156126bb576126ba612359565b5b6126c4826122bb565b9050602081019050919050565b60006126e46126df846126a0565b6123b9565b905082815260208101848484011115612700576126ff61249c565b5b61270b8482856124d2565b509392505050565b600082601f83011261272857612727612354565b5b81356127388482602086016126d1565b91505092915050565b600060208284031215612757576127566120a9565b5b600082013567ffffffffffffffff811115612775576127746120ae565b5b61278184828501612713565b91505092915050565b600067ffffffffffffffff8211156127a5576127a4612359565b5b602082029050602081019050919050565b60006127c96127c48461278a565b6123b9565b905080838252602082019050602084028301858111156127ec576127eb612400565b5b835b81811015612815578061280188826120fc565b8452602084019350506020810190506127ee565b5050509392505050565b600082601f83011261283457612833612354565b5b81356128448482602086016127b6565b91505092915050565b60008060408385031215612864576128636120a9565b5b600083013567ffffffffffffffff811115612882576128816120ae565b5b61288e8582860161281f565b925050602083013567ffffffffffffffff8111156128af576128ae6120ae565b5b6128bb8582860161246e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128fa81612111565b82525050565b600061290c83836128f1565b60208301905092915050565b6000602082019050919050565b6000612930826128c5565b61293a81856128d0565b9350612945836128e1565b8060005b8381101561297657815161295d8882612900565b975061296883612918565b925050600181019050612949565b5085935050505092915050565b6000602082019050818103600083015261299d8184612925565b905092915050565b6129ae816120d3565b82525050565b60006020820190506129c960008301846129a5565b92915050565b6129d881612236565b81146129e357600080fd5b50565b6000813590506129f5816129cf565b92915050565b60008060408385031215612a1257612a116120a9565b5b6000612a20858286016120fc565b9250506020612a31858286016129e6565b9150509250929050565b600080600060608486031215612a5457612a536120a9565b5b6000612a62868287016120fc565b9350506020612a7386828701612132565b9250506040612a8486828701612132565b9150509250925092565b600080fd5b60008083601f840112612aa957612aa8612354565b5b8235905067ffffffffffffffff811115612ac657612ac5612a8e565b5b602083019150836020820283011115612ae257612ae1612400565b5b9250929050565b60008060008060608587031215612b0357612b026120a9565b5b600085013567ffffffffffffffff811115612b2157612b206120ae565b5b612b2d8782880161246e565b945050602085013567ffffffffffffffff811115612b4e57612b4d6120ae565b5b612b5a87828801612a93565b9350935050604085013567ffffffffffffffff811115612b7d57612b7c6120ae565b5b612b898782880161246e565b91505092959194509250565b60008060408385031215612bac57612bab6120a9565b5b6000612bba858286016120fc565b9250506020612bcb858286016120fc565b9150509250929050565b600080600080600060a08688031215612bf157612bf06120a9565b5b6000612bff888289016120fc565b9550506020612c10888289016120fc565b9450506040612c2188828901612132565b9350506060612c3288828901612132565b925050608086013567ffffffffffffffff811115612c5357612c526120ae565b5b612c5f88828901612523565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612cc8602a83612277565b9150612cd382612c6c565b604082019050919050565b60006020820190508181036000830152612cf781612cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d4557607f821691505b60208210811415612d5957612d58612cfe565b5b50919050565b7f5552492072657175657374656420666f7220696e76616c696420746f6b656e2060008201527f74797065206f7220696400000000000000000000000000000000000000000000602082015250565b6000612dbb602a83612277565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612e1e81612d2d565b612e288186612df1565b94506001821660008114612e435760018114612e5457612e87565b60ff19831686528186019350612e87565b612e5d85612dfc565b60005b83811015612e7f57815481890152600182019150602081019050612e60565b838801955050505b50505092915050565b6000612e9b8261226c565b612ea58185612df1565b9350612eb5818560208601612288565b80840191505092915050565b6000612ecd8285612e11565b9150612ed98284612e90565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000612f41602f83612277565b9150612f4c82612ee5565b604082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b6000612f838284612e11565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612fea602983612277565b9150612ff582612f8e565b604082019050919050565b6000602082019050818103600083015261301981612fdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061308982612111565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130bc576130bb61304f565b5b600182019050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b60006130fd601a83612277565b9150613108826130c7565b602082019050919050565b6000602082019050818103600083015261312c816130f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061318f602683612277565b915061319a82613133565b604082019050919050565b600060208201905081810360008301526131be81613182565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131ff82612111565b915061320a83612111565b92508261321a576132196131c5565b5b828204905092915050565b600061323082612111565b915061323b83612111565b92508282101561324e5761324d61304f565b5b828203905092915050565b600061326482612111565b915061326f83612111565b92508261327f5761327e6131c5565b5b828206905092915050565b600061329582612111565b91506132a083612111565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132d5576132d461304f565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061333c602883612277565b9150613347826132e0565b604082019050919050565b6000602082019050818103600083015261336b8161332f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133ce602583612277565b91506133d982613372565b604082019050919050565b600060208201905081810360008301526133fd816133c1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613460602a83612277565b915061346b82613404565b604082019050919050565b6000602082019050818103600083015261348f81613453565b9050919050565b600060408201905081810360008301526134b08185612925565b905081810360208301526134c48184612925565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613503602083612277565b915061350e826134cd565b602082019050919050565b60006020820190508181036000830152613532816134f6565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613595602183612277565b91506135a082613539565b604082019050919050565b600060208201905081810360008301526135c481613588565b9050919050565b60006040820190506135e06000830185612187565b6135ed6020830184612187565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613650602983612277565b915061365b826135f4565b604082019050919050565b6000602082019050818103600083015261367f81613643565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136e2602383612277565b91506136ed82613686565b604082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613774602483612277565b915061377f82613718565b604082019050919050565b600060208201905081810360008301526137a381613767565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137d1826137aa565b6137db81856137b5565b93506137eb818560208601612288565b6137f4816122bb565b840191505092915050565b600060a08201905061381460008301886129a5565b61382160208301876129a5565b81810360408301526138338186612925565b905081810360608301526138478185612925565b9050818103608083015261385b81846137c6565b90509695505050505050565b600081519050613876816121dd565b92915050565b600060208284031215613892576138916120a9565b5b60006138a084828501613867565b91505092915050565b60008160e01c9050919050565b600060033d11156138d55760046000803e6138d26000516138a9565b90505b90565b600060443d10156138e85761396b565b6138f061209f565b60043d036004823e80513d602482011167ffffffffffffffff8211171561391857505061396b565b808201805167ffffffffffffffff811115613936575050505061396b565b80602083010160043d03850181111561395357505050505061396b565b61396282602001850186612388565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006139ca603483612277565b91506139d58261396e565b604082019050919050565b600060208201905081810360008301526139f9816139bd565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a5c602883612277565b9150613a6782613a00565b604082019050919050565b60006020820190508181036000830152613a8b81613a4f565b9050919050565b600060a082019050613aa760008301886129a5565b613ab460208301876129a5565b613ac16040830186612187565b613ace6060830185612187565b8181036080830152613ae081846137c6565b9050969550505050505056fea2646970667358221220de5e9bfcfa47d26780bc07e4c30d0c65c0f555346a13e0750b35aaaa2bbb97b064736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f6170656c69717569642e696f2f776561706f6e732f6a736f6e2f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://apeliquid.io/weapons/json/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [2] : 68747470733a2f2f6170656c69717569642e696f2f776561706f6e732f6a736f
Arg [3] : 6e2f000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

46519:3057:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22458:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21431:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46752:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49213:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46803:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24608:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48385:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48673:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49067:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22941:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43491:103;;;:::i;:::-;;42843:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23575:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48804:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48579:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47798:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23834:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24124:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43749:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22458:317;22589:7;22655:1;22636:21;;:7;:21;;;;22614:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22745:9;:13;22755:2;22745:13;;;;;;;;;;;:22;22759:7;22745:22;;;;;;;;;;;;;;;;22738:29;;22458:317;;;;:::o;21431:360::-;21578:4;21635:26;21620:41;;;:11;:41;;;;:110;;;;21693:37;21678:52;;;:11;:52;;;;21620:110;:163;;;;21747:36;21771:11;21747:23;:36::i;:::-;21620:163;21600:183;;21431:360;;;:::o;46752:42::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49213:360::-;49272:13;49320:12;:20;49333:6;49320:20;;;;;;;;;;;;;;;;;;;;;49298:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;49465:1;49447:7;49441:21;;;;;:::i;:::-;;;:25;:124;;49558:7;49441:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49510:7;49519:17;:6;:15;:17::i;:::-;49493:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49441:124;49421:144;;49213:360;;;:::o;46803:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;24608:439::-;24849:12;:10;:12::i;:::-;24841:20;;:4;:20;;;:60;;;;24865:36;24882:4;24888:12;:10;:12::i;:::-;24865:16;:36::i;:::-;24841:60;24819:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24987:52;25010:4;25016:2;25020:3;25025:7;25034:4;24987:22;:52::i;:::-;24608:439;;;;;:::o;48385:186::-;42729:13;:11;:13::i;:::-;48523:40:::1;48529:8;48539;48549:9;48523:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;48385:186:::0;;;:::o;48673:123::-;42729:13;:11;:13::i;:::-;48773:15:::1;48757:13;;:31;;;;;;;;;;;;;;;;;;48673:123:::0;:::o;49067:138::-;42729:13;:11;:13::i;:::-;49154:8:::1;49144:7;:18;;;;;;;;;;;;:::i;:::-;;49189:7;49178:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;49067:138:::0;:::o;22941:561::-;23097:16;23172:3;:10;23153:8;:15;:29;23131:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;23264:30;23311:8;:15;23297:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23264:63;;23345:9;23340:122;23364:8;:15;23360:1;:19;23340:122;;;23420:30;23430:8;23439:1;23430:11;;;;;;;;:::i;:::-;;;;;;;;23443:3;23447:1;23443:6;;;;;;;;:::i;:::-;;;;;;;;23420:9;:30::i;:::-;23401:13;23415:1;23401:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23381:3;;;;:::i;:::-;;;23340:122;;;;23481:13;23474:20;;;22941:561;;;;:::o;43491:103::-;42729:13;:11;:13::i;:::-;43556:30:::1;43583:1;43556:18;:30::i;:::-;43491:103::o:0;42843:87::-;42889:7;42916:6;;;;;;;;;;;42909:13;;42843:87;:::o;23575:187::-;23702:52;23721:12;:10;:12::i;:::-;23735:8;23745;23702:18;:52::i;:::-;23575:187;;:::o;48804:255::-;48957:13;;;;;;;;;;;48943:27;;:10;:27;;;48935:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49012:39;49018:10;49030:7;49039:11;49012:5;:39::i;:::-;48804:255;;;:::o;48579:86::-;42729:13;:11;:13::i;:::-;48652:5:::1;48645:4;:12;;;;;;;;;;;;:::i;:::-;;48579:86:::0;:::o;47798:338::-;42729:13;:11;:13::i;:::-;47961:9:::1;47956:173;47980:5;;:12;;47976:1;:16;47956:173;;;48060:57;48066:5;;48072:1;48066:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48076:9;48086:1;48076:12;;;;;;;;:::i;:::-;;;;;;;;48090:4;48095:1;48090:7;;;;;;;;:::i;:::-;;;;;;;;48060:57;;;;;;;;;;;;;;;;::::0;:5:::1;:57::i;:::-;47994:3;;;;;:::i;:::-;;;;47956:173;;;;47798:338:::0;;;;:::o;23834:218::-;23978:4;24007:18;:27;24026:7;24007:27;;;;;;;;;;;;;;;:37;24035:8;24007:37;;;;;;;;;;;;;;;;;;;;;;;;;24000:44;;23834:218;;;;:::o;24124:407::-;24340:12;:10;:12::i;:::-;24332:20;;:4;:20;;;:60;;;;24356:36;24373:4;24379:12;:10;:12::i;:::-;24356:16;:36::i;:::-;24332:60;24310:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24478:45;24496:4;24502:2;24506;24510:6;24518:4;24478:17;:45::i;:::-;24124:407;;;;;:::o;43749:238::-;42729:13;:11;:13::i;:::-;43872:1:::1;43852:22;;:8;:22;;;;43830:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;43951:28;43970:8;43951:18;:28::i;:::-;43749:238:::0;:::o;20212:207::-;20342:4;20386:25;20371:40;;;:11;:40;;;;20364:47;;20212:207;;;:::o;39484:723::-;39540:13;39770:1;39761:5;:10;39757:53;;;39788:10;;;;;;;;;;;;;;;;;;;;;39757:53;39820:12;39835:5;39820:20;;39851:14;39876:78;39891:1;39883:4;:9;39876:78;;39909:8;;;;;:::i;:::-;;;;39940:2;39932:10;;;;;:::i;:::-;;;39876:78;;;39964:19;39996:6;39986:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39964:39;;40014:154;40030:1;40021:5;:10;40014:154;;40058:1;40048:11;;;;;:::i;:::-;;;40125:2;40117:5;:10;;;;:::i;:::-;40104:2;:24;;;;:::i;:::-;40091:39;;40074:6;40081;40074:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;40154:2;40145:11;;;;;:::i;:::-;;;40014:154;;;40192:6;40178:21;;;;;39484:723;;;;:::o;19133:98::-;19186:7;19213:10;19206:17;;19133:98;:::o;26880:1321::-;27121:7;:14;27107:3;:10;:28;27085:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;27236:1;27222:16;;:2;:16;;;;27214:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27293:16;27312:12;:10;:12::i;:::-;27293:31;;27337:60;27358:8;27368:4;27374:2;27378:3;27383:7;27392:4;27337:20;:60::i;:::-;27415:9;27410:470;27434:3;:10;27430:1;:14;27410:470;;;27466:10;27479:3;27483:1;27479:6;;;;;;;;:::i;:::-;;;;;;;;27466:19;;27500:14;27517:7;27525:1;27517:10;;;;;;;;:::i;:::-;;;;;;;;27500:27;;27544:19;27566:9;:13;27576:2;27566:13;;;;;;;;;;;:19;27580:4;27566:19;;;;;;;;;;;;;;;;27544:41;;27641:6;27626:11;:21;;27600:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;27805:6;27791:11;:20;27769:9;:13;27779:2;27769:13;;;;;;;;;;;:19;27783:4;27769:19;;;;;;;;;;;;;;;:42;;;;27862:6;27841:9;:13;27851:2;27841:13;;;;;;;;;;;:17;27855:2;27841:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27451:429;;;27446:3;;;;:::i;:::-;;;27410:470;;;;27927:2;27897:47;;27921:4;27897:47;;27911:8;27897:47;;;27931:3;27936:7;27897:47;;;;;;;:::i;:::-;;;;;;;;27957:59;27977:8;27987:4;27993:2;27997:3;28002:7;28011:4;27957:19;:59::i;:::-;28029:164;28079:8;28102:4;28121:2;28138:3;28156:7;28178:4;28029:35;:164::i;:::-;27074:1127;26880:1321;;;;;:::o;43008:132::-;43083:12;:10;:12::i;:::-;43072:23;;:7;:5;:7::i;:::-;:23;;;43064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43008:132::o;29519:818::-;29686:1;29672:16;;:2;:16;;;;29664:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29739:16;29758:12;:10;:12::i;:::-;29739:31;;29781:20;29804:21;29822:2;29804:17;:21::i;:::-;29781:44;;29836:24;29863:25;29881:6;29863:17;:25::i;:::-;29836:52;;29901:66;29922:8;29940:1;29944:2;29948:3;29953:7;29962:4;29901:20;:66::i;:::-;30001:6;29980:9;:13;29990:2;29980:13;;;;;;;;;;;:17;29994:2;29980:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30060:2;30023:52;;30056:1;30023:52;;30038:8;30023:52;;;30064:2;30068:6;30023:52;;;;;;;:::i;:::-;;;;;;;;30088:65;30108:8;30126:1;30130:2;30134:3;30139:7;30148:4;30088:19;:65::i;:::-;30166:163;30211:8;30242:1;30259:2;30276;30293:6;30314:4;30166:30;:163::i;:::-;29653:684;;;29519:818;;;;:::o;44147:191::-;44221:16;44240:6;;;;;;;;;;;44221:25;;44266:8;44257:6;;:17;;;;;;;;;;;;;;;;;;44321:8;44290:40;;44311:8;44290:40;;;;;;;;;;;;44210:128;44147:191;:::o;34233:331::-;34388:8;34379:17;;:5;:17;;;;34371:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34491:8;34453:18;:25;34472:5;34453:25;;;;;;;;;;;;;;;:35;34479:8;34453:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34537:8;34515:41;;34530:5;34515:41;;;34547:8;34515:41;;;;;;:::i;:::-;;;;;;;;34233:331;;;:::o;31977:808::-;32120:1;32104:18;;:4;:18;;;;32096:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32175:16;32194:12;:10;:12::i;:::-;32175:31;;32217:20;32240:21;32258:2;32240:17;:21::i;:::-;32217:44;;32272:24;32299:25;32317:6;32299:17;:25::i;:::-;32272:52;;32337:66;32358:8;32368:4;32382:1;32386:3;32391:7;32337:66;;;;;;;;;;;;:20;:66::i;:::-;32416:19;32438:9;:13;32448:2;32438:13;;;;;;;;;;;:19;32452:4;32438:19;;;;;;;;;;;;;;;;32416:41;;32491:6;32476:11;:21;;32468:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32610:6;32596:11;:20;32574:9;:13;32584:2;32574:13;;;;;;;;;;;:19;32588:4;32574:19;;;;;;;;;;;;;;;:42;;;;32684:1;32645:54;;32670:4;32645:54;;32660:8;32645:54;;;32688:2;32692:6;32645:54;;;;;;;:::i;:::-;;;;;;;;32712:65;32732:8;32742:4;32756:1;32760:3;32765:7;32712:65;;;;;;;;;;;;:19;:65::i;:::-;32085:700;;;;31977:808;;;:::o;25511:1011::-;25713:1;25699:16;;:2;:16;;;;25691:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25770:16;25789:12;:10;:12::i;:::-;25770:31;;25812:20;25835:21;25853:2;25835:17;:21::i;:::-;25812:44;;25867:24;25894:25;25912:6;25894:17;:25::i;:::-;25867:52;;25932:60;25953:8;25963:4;25969:2;25973:3;25978:7;25987:4;25932:20;:60::i;:::-;26005:19;26027:9;:13;26037:2;26027:13;;;;;;;;;;;:19;26041:4;26027:19;;;;;;;;;;;;;;;;26005:41;;26094:6;26079:11;:21;;26057:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;26242:6;26228:11;:20;26206:9;:13;26216:2;26206:13;;;;;;;;;;;:19;26220:4;26206:19;;;;;;;;;;;;;;;:42;;;;26291:6;26270:9;:13;26280:2;26270:13;;;;;;;;;;;:17;26284:2;26270:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26346:2;26315:46;;26340:4;26315:46;;26330:8;26315:46;;;26350:2;26354:6;26315:46;;;;;;;:::i;:::-;;;;;;;;26374:59;26394:8;26404:4;26410:2;26414:3;26419:7;26428:4;26374:19;:59::i;:::-;26446:68;26477:8;26487:4;26493:2;26497;26501:6;26509:4;26446:30;:68::i;:::-;25680:842;;;;25511:1011;;;;;:::o;35522:221::-;;;;;;;:::o;36698:220::-;;;;;;;:::o;37832:975::-;38072:15;:2;:13;;;:15::i;:::-;38068:732;;;38142:2;38125:43;;;38191:8;38222:4;38249:3;38275:7;38305:4;38125:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38104:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38662:6;38655:14;;;;;;;;;;;:::i;:::-;;;;;;;;38104:685;;;38711:62;;;;;;;;;;:::i;:::-;;;;;;;;38104:685;38425:48;;;38413:60;;;:8;:60;;;;38387:199;;38516:50;;;;;;;;;;:::i;:::-;;;;;;;;38387:199;38342:259;38068:732;37832:975;;;;;;:::o;38815:230::-;38908:16;38942:22;38981:1;38967:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38942:41;;39005:7;38994:5;39000:1;38994:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39032:5;39025:12;;;38815:230;;;:::o;36926:898::-;37141:15;:2;:13;;;:15::i;:::-;37137:680;;;37211:2;37194:38;;;37255:8;37286:4;37313:2;37338:6;37367:4;37194:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37173:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37679:6;37672:14;;;;;;;;;;;:::i;:::-;;;;;;;;37173:633;;;37728:62;;;;;;;;;;:::i;:::-;;;;;;;;37173:633;37465:43;;;37453:55;;;:8;:55;;;;37449:154;;37533:50;;;;;;;;;;:::i;:::-;;;;;;;;37449:154;37404:214;37137:680;36926:898;;;;;;:::o;10665:326::-;10725:4;10982:1;10960:7;:19;;;:23;10953:30;;10665:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:619::-;10196:6;10204;10212;10261:2;10249:9;10240:7;10236:23;10232:32;10229:119;;;10267:79;;:::i;:::-;10229:119;10387:1;10412:53;10457:7;10448:6;10437:9;10433:22;10412:53;:::i;:::-;10402:63;;10358:117;10514:2;10540:53;10585:7;10576:6;10565:9;10561:22;10540:53;:::i;:::-;10530:63;;10485:118;10642:2;10668:53;10713:7;10704:6;10693:9;10689:22;10668:53;:::i;:::-;10658:63;;10613:118;10119:619;;;;;:::o;10744:329::-;10803:6;10852:2;10840:9;10831:7;10827:23;10823:32;10820:119;;;10858:79;;:::i;:::-;10820:119;10978:1;11003:53;11048:7;11039:6;11028:9;11024:22;11003:53;:::i;:::-;10993:63;;10949:117;10744:329;;;;:::o;11079:308::-;11141:4;11231:18;11223:6;11220:30;11217:56;;;11253:18;;:::i;:::-;11217:56;11291:29;11313:6;11291:29;:::i;:::-;11283:37;;11375:4;11369;11365:15;11357:23;;11079:308;;;:::o;11393:412::-;11471:5;11496:66;11512:49;11554:6;11512:49;:::i;:::-;11496:66;:::i;:::-;11487:75;;11585:6;11578:5;11571:21;11623:4;11616:5;11612:16;11661:3;11652:6;11647:3;11643:16;11640:25;11637:112;;;11668:79;;:::i;:::-;11637:112;11758:41;11792:6;11787:3;11782;11758:41;:::i;:::-;11477:328;11393:412;;;;;:::o;11825:340::-;11881:5;11930:3;11923:4;11915:6;11911:17;11907:27;11897:122;;11938:79;;:::i;:::-;11897:122;12055:6;12042:20;12080:79;12155:3;12147:6;12140:4;12132:6;12128:17;12080:79;:::i;:::-;12071:88;;11887:278;11825:340;;;;:::o;12171:509::-;12240:6;12289:2;12277:9;12268:7;12264:23;12260:32;12257:119;;;12295:79;;:::i;:::-;12257:119;12443:1;12432:9;12428:17;12415:31;12473:18;12465:6;12462:30;12459:117;;;12495:79;;:::i;:::-;12459:117;12600:63;12655:7;12646:6;12635:9;12631:22;12600:63;:::i;:::-;12590:73;;12386:287;12171:509;;;;:::o;12686:311::-;12763:4;12853:18;12845:6;12842:30;12839:56;;;12875:18;;:::i;:::-;12839:56;12925:4;12917:6;12913:17;12905:25;;12985:4;12979;12975:15;12967:23;;12686:311;;;:::o;13020:710::-;13116:5;13141:81;13157:64;13214:6;13157:64;:::i;:::-;13141:81;:::i;:::-;13132:90;;13242:5;13271:6;13264:5;13257:21;13305:4;13298:5;13294:16;13287:23;;13358:4;13350:6;13346:17;13338:6;13334:30;13387:3;13379:6;13376:15;13373:122;;;13406:79;;:::i;:::-;13373:122;13521:6;13504:220;13538:6;13533:3;13530:15;13504:220;;;13613:3;13642:37;13675:3;13663:10;13642:37;:::i;:::-;13637:3;13630:50;13709:4;13704:3;13700:14;13693:21;;13580:144;13564:4;13559:3;13555:14;13548:21;;13504:220;;;13508:21;13122:608;;13020:710;;;;;:::o;13753:370::-;13824:5;13873:3;13866:4;13858:6;13854:17;13850:27;13840:122;;13881:79;;:::i;:::-;13840:122;13998:6;13985:20;14023:94;14113:3;14105:6;14098:4;14090:6;14086:17;14023:94;:::i;:::-;14014:103;;13830:293;13753:370;;;;:::o;14129:894::-;14247:6;14255;14304:2;14292:9;14283:7;14279:23;14275:32;14272:119;;;14310:79;;:::i;:::-;14272:119;14458:1;14447:9;14443:17;14430:31;14488:18;14480:6;14477:30;14474:117;;;14510:79;;:::i;:::-;14474:117;14615:78;14685:7;14676:6;14665:9;14661:22;14615:78;:::i;:::-;14605:88;;14401:302;14770:2;14759:9;14755:18;14742:32;14801:18;14793:6;14790:30;14787:117;;;14823:79;;:::i;:::-;14787:117;14928:78;14998:7;14989:6;14978:9;14974:22;14928:78;:::i;:::-;14918:88;;14713:303;14129:894;;;;;:::o;15029:114::-;15096:6;15130:5;15124:12;15114:22;;15029:114;;;:::o;15149:184::-;15248:11;15282:6;15277:3;15270:19;15322:4;15317:3;15313:14;15298:29;;15149:184;;;;:::o;15339:132::-;15406:4;15429:3;15421:11;;15459:4;15454:3;15450:14;15442:22;;15339:132;;;:::o;15477:108::-;15554:24;15572:5;15554:24;:::i;:::-;15549:3;15542:37;15477:108;;:::o;15591:179::-;15660:10;15681:46;15723:3;15715:6;15681:46;:::i;:::-;15759:4;15754:3;15750:14;15736:28;;15591:179;;;;:::o;15776:113::-;15846:4;15878;15873:3;15869:14;15861:22;;15776:113;;;:::o;15925:732::-;16044:3;16073:54;16121:5;16073:54;:::i;:::-;16143:86;16222:6;16217:3;16143:86;:::i;:::-;16136:93;;16253:56;16303:5;16253:56;:::i;:::-;16332:7;16363:1;16348:284;16373:6;16370:1;16367:13;16348:284;;;16449:6;16443:13;16476:63;16535:3;16520:13;16476:63;:::i;:::-;16469:70;;16562:60;16615:6;16562:60;:::i;:::-;16552:70;;16408:224;16395:1;16392;16388:9;16383:14;;16348:284;;;16352:14;16648:3;16641:10;;16049:608;;;15925:732;;;;:::o;16663:373::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:108;17024:4;17015:6;16921:108;:::i;:::-;16913:116;;16663:373;;;;:::o;17042:118::-;17129:24;17147:5;17129:24;:::i;:::-;17124:3;17117:37;17042:118;;:::o;17166:222::-;17259:4;17297:2;17286:9;17282:18;17274:26;;17310:71;17378:1;17367:9;17363:17;17354:6;17310:71;:::i;:::-;17166:222;;;;:::o;17394:116::-;17464:21;17479:5;17464:21;:::i;:::-;17457:5;17454:32;17444:60;;17500:1;17497;17490:12;17444:60;17394:116;:::o;17516:133::-;17559:5;17597:6;17584:20;17575:29;;17613:30;17637:5;17613:30;:::i;:::-;17516:133;;;;:::o;17655:468::-;17720:6;17728;17777:2;17765:9;17756:7;17752:23;17748:32;17745:119;;;17783:79;;:::i;:::-;17745:119;17903:1;17928:53;17973:7;17964:6;17953:9;17949:22;17928:53;:::i;:::-;17918:63;;17874:117;18030:2;18056:50;18098:7;18089:6;18078:9;18074:22;18056:50;:::i;:::-;18046:60;;18001:115;17655:468;;;;;:::o;18129:619::-;18206:6;18214;18222;18271:2;18259:9;18250:7;18246:23;18242:32;18239:119;;;18277:79;;:::i;:::-;18239:119;18397:1;18422:53;18467:7;18458:6;18447:9;18443:22;18422:53;:::i;:::-;18412:63;;18368:117;18524:2;18550:53;18595:7;18586:6;18575:9;18571:22;18550:53;:::i;:::-;18540:63;;18495:118;18652:2;18678:53;18723:7;18714:6;18703:9;18699:22;18678:53;:::i;:::-;18668:63;;18623:118;18129:619;;;;;:::o;18754:117::-;18863:1;18860;18853:12;18894:568;18967:8;18977:6;19027:3;19020:4;19012:6;19008:17;19004:27;18994:122;;19035:79;;:::i;:::-;18994:122;19148:6;19135:20;19125:30;;19178:18;19170:6;19167:30;19164:117;;;19200:79;;:::i;:::-;19164:117;19314:4;19306:6;19302:17;19290:29;;19368:3;19360:4;19352:6;19348:17;19338:8;19334:32;19331:41;19328:128;;;19375:79;;:::i;:::-;19328:128;18894:568;;;;;:::o;19468:1269::-;19622:6;19630;19638;19646;19695:2;19683:9;19674:7;19670:23;19666:32;19663:119;;;19701:79;;:::i;:::-;19663:119;19849:1;19838:9;19834:17;19821:31;19879:18;19871:6;19868:30;19865:117;;;19901:79;;:::i;:::-;19865:117;20006:78;20076:7;20067:6;20056:9;20052:22;20006:78;:::i;:::-;19996:88;;19792:302;20161:2;20150:9;20146:18;20133:32;20192:18;20184:6;20181:30;20178:117;;;20214:79;;:::i;:::-;20178:117;20327:80;20399:7;20390:6;20379:9;20375:22;20327:80;:::i;:::-;20309:98;;;;20104:313;20484:2;20473:9;20469:18;20456:32;20515:18;20507:6;20504:30;20501:117;;;20537:79;;:::i;:::-;20501:117;20642:78;20712:7;20703:6;20692:9;20688:22;20642:78;:::i;:::-;20632:88;;20427:303;19468:1269;;;;;;;:::o;20743:474::-;20811:6;20819;20868:2;20856:9;20847:7;20843:23;20839:32;20836:119;;;20874:79;;:::i;:::-;20836:119;20994:1;21019:53;21064:7;21055:6;21044:9;21040:22;21019:53;:::i;:::-;21009:63;;20965:117;21121:2;21147:53;21192:7;21183:6;21172:9;21168:22;21147:53;:::i;:::-;21137:63;;21092:118;20743:474;;;;;:::o;21223:1089::-;21327:6;21335;21343;21351;21359;21408:3;21396:9;21387:7;21383:23;21379:33;21376:120;;;21415:79;;:::i;:::-;21376:120;21535:1;21560:53;21605:7;21596:6;21585:9;21581:22;21560:53;:::i;:::-;21550:63;;21506:117;21662:2;21688:53;21733:7;21724:6;21713:9;21709:22;21688:53;:::i;:::-;21678:63;;21633:118;21790:2;21816:53;21861:7;21852:6;21841:9;21837:22;21816:53;:::i;:::-;21806:63;;21761:118;21918:2;21944:53;21989:7;21980:6;21969:9;21965:22;21944:53;:::i;:::-;21934:63;;21889:118;22074:3;22063:9;22059:19;22046:33;22106:18;22098:6;22095:30;22092:117;;;22128:79;;:::i;:::-;22092:117;22233:62;22287:7;22278:6;22267:9;22263:22;22233:62;:::i;:::-;22223:72;;22017:288;21223:1089;;;;;;;;:::o;22318:229::-;22458:34;22454:1;22446:6;22442:14;22435:58;22527:12;22522:2;22514:6;22510:15;22503:37;22318:229;:::o;22553:366::-;22695:3;22716:67;22780:2;22775:3;22716:67;:::i;:::-;22709:74;;22792:93;22881:3;22792:93;:::i;:::-;22910:2;22905:3;22901:12;22894:19;;22553:366;;;:::o;22925:419::-;23091:4;23129:2;23118:9;23114:18;23106:26;;23178:9;23172:4;23168:20;23164:1;23153:9;23149:17;23142:47;23206:131;23332:4;23206:131;:::i;:::-;23198:139;;22925:419;;;:::o;23350:180::-;23398:77;23395:1;23388:88;23495:4;23492:1;23485:15;23519:4;23516:1;23509:15;23536:320;23580:6;23617:1;23611:4;23607:12;23597:22;;23664:1;23658:4;23654:12;23685:18;23675:81;;23741:4;23733:6;23729:17;23719:27;;23675:81;23803:2;23795:6;23792:14;23772:18;23769:38;23766:84;;;23822:18;;:::i;:::-;23766:84;23587:269;23536:320;;;:::o;23862:229::-;24002:34;23998:1;23990:6;23986:14;23979:58;24071:12;24066:2;24058:6;24054:15;24047:37;23862:229;:::o;24097:366::-;24239:3;24260:67;24324:2;24319:3;24260:67;:::i;:::-;24253:74;;24336:93;24425:3;24336:93;:::i;:::-;24454:2;24449:3;24445:12;24438:19;;24097:366;;;:::o;24469:419::-;24635:4;24673:2;24662:9;24658:18;24650:26;;24722:9;24716:4;24712:20;24708:1;24697:9;24693:17;24686:47;24750:131;24876:4;24750:131;:::i;:::-;24742:139;;24469:419;;;:::o;24894:148::-;24996:11;25033:3;25018:18;;24894:148;;;;:::o;25048:141::-;25097:4;25120:3;25112:11;;25143:3;25140:1;25133:14;25177:4;25174:1;25164:18;25156:26;;25048:141;;;:::o;25219:845::-;25322:3;25359:5;25353:12;25388:36;25414:9;25388:36;:::i;:::-;25440:89;25522:6;25517:3;25440:89;:::i;:::-;25433:96;;25560:1;25549:9;25545:17;25576:1;25571:137;;;;25722:1;25717:341;;;;25538:520;;25571:137;25655:4;25651:9;25640;25636:25;25631:3;25624:38;25691:6;25686:3;25682:16;25675:23;;25571:137;;25717:341;25784:38;25816:5;25784:38;:::i;:::-;25844:1;25858:154;25872:6;25869:1;25866:13;25858:154;;;25946:7;25940:14;25936:1;25931:3;25927:11;25920:35;25996:1;25987:7;25983:15;25972:26;;25894:4;25891:1;25887:12;25882:17;;25858:154;;;26041:6;26036:3;26032:16;26025:23;;25724:334;;25538:520;;25326:738;;25219:845;;;;:::o;26070:377::-;26176:3;26204:39;26237:5;26204:39;:::i;:::-;26259:89;26341:6;26336:3;26259:89;:::i;:::-;26252:96;;26357:52;26402:6;26397:3;26390:4;26383:5;26379:16;26357:52;:::i;:::-;26434:6;26429:3;26425:16;26418:23;;26180:267;26070:377;;;;:::o;26453:429::-;26630:3;26652:92;26740:3;26731:6;26652:92;:::i;:::-;26645:99;;26761:95;26852:3;26843:6;26761:95;:::i;:::-;26754:102;;26873:3;26866:10;;26453:429;;;;;:::o;26888:234::-;27028:34;27024:1;27016:6;27012:14;27005:58;27097:17;27092:2;27084:6;27080:15;27073:42;26888:234;:::o;27128:366::-;27270:3;27291:67;27355:2;27350:3;27291:67;:::i;:::-;27284:74;;27367:93;27456:3;27367:93;:::i;:::-;27485:2;27480:3;27476:12;27469:19;;27128:366;;;:::o;27500:419::-;27666:4;27704:2;27693:9;27689:18;27681:26;;27753:9;27747:4;27743:20;27739:1;27728:9;27724:17;27717:47;27781:131;27907:4;27781:131;:::i;:::-;27773:139;;27500:419;;;:::o;27925:269::-;28054:3;28076:92;28164:3;28155:6;28076:92;:::i;:::-;28069:99;;28185:3;28178:10;;27925:269;;;;:::o;28200:228::-;28340:34;28336:1;28328:6;28324:14;28317:58;28409:11;28404:2;28396:6;28392:15;28385:36;28200:228;:::o;28434:366::-;28576:3;28597:67;28661:2;28656:3;28597:67;:::i;:::-;28590:74;;28673:93;28762:3;28673:93;:::i;:::-;28791:2;28786:3;28782:12;28775:19;;28434:366;;;:::o;28806:419::-;28972:4;29010:2;28999:9;28995:18;28987:26;;29059:9;29053:4;29049:20;29045:1;29034:9;29030:17;29023:47;29087:131;29213:4;29087:131;:::i;:::-;29079:139;;28806:419;;;:::o;29231:180::-;29279:77;29276:1;29269:88;29376:4;29373:1;29366:15;29400:4;29397:1;29390:15;29417:180;29465:77;29462:1;29455:88;29562:4;29559:1;29552:15;29586:4;29583:1;29576:15;29603:233;29642:3;29665:24;29683:5;29665:24;:::i;:::-;29656:33;;29711:66;29704:5;29701:77;29698:103;;;29781:18;;:::i;:::-;29698:103;29828:1;29821:5;29817:13;29810:20;;29603:233;;;:::o;29842:176::-;29982:28;29978:1;29970:6;29966:14;29959:52;29842:176;:::o;30024:366::-;30166:3;30187:67;30251:2;30246:3;30187:67;:::i;:::-;30180:74;;30263:93;30352:3;30263:93;:::i;:::-;30381:2;30376:3;30372:12;30365:19;;30024:366;;;:::o;30396:419::-;30562:4;30600:2;30589:9;30585:18;30577:26;;30649:9;30643:4;30639:20;30635:1;30624:9;30620:17;30613:47;30677:131;30803:4;30677:131;:::i;:::-;30669:139;;30396:419;;;:::o;30821:225::-;30961:34;30957:1;30949:6;30945:14;30938:58;31030:8;31025:2;31017:6;31013:15;31006:33;30821:225;:::o;31052:366::-;31194:3;31215:67;31279:2;31274:3;31215:67;:::i;:::-;31208:74;;31291:93;31380:3;31291:93;:::i;:::-;31409:2;31404:3;31400:12;31393:19;;31052:366;;;:::o;31424:419::-;31590:4;31628:2;31617:9;31613:18;31605:26;;31677:9;31671:4;31667:20;31663:1;31652:9;31648:17;31641:47;31705:131;31831:4;31705:131;:::i;:::-;31697:139;;31424:419;;;:::o;31849:180::-;31897:77;31894:1;31887:88;31994:4;31991:1;31984:15;32018:4;32015:1;32008:15;32035:185;32075:1;32092:20;32110:1;32092:20;:::i;:::-;32087:25;;32126:20;32144:1;32126:20;:::i;:::-;32121:25;;32165:1;32155:35;;32170:18;;:::i;:::-;32155:35;32212:1;32209;32205:9;32200:14;;32035:185;;;;:::o;32226:191::-;32266:4;32286:20;32304:1;32286:20;:::i;:::-;32281:25;;32320:20;32338:1;32320:20;:::i;:::-;32315:25;;32359:1;32356;32353:8;32350:34;;;32364:18;;:::i;:::-;32350:34;32409:1;32406;32402:9;32394:17;;32226:191;;;;:::o;32423:176::-;32455:1;32472:20;32490:1;32472:20;:::i;:::-;32467:25;;32506:20;32524:1;32506:20;:::i;:::-;32501:25;;32545:1;32535:35;;32550:18;;:::i;:::-;32535:35;32591:1;32588;32584:9;32579:14;;32423:176;;;;:::o;32605:305::-;32645:3;32664:20;32682:1;32664:20;:::i;:::-;32659:25;;32698:20;32716:1;32698:20;:::i;:::-;32693:25;;32852:1;32784:66;32780:74;32777:1;32774:81;32771:107;;;32858:18;;:::i;:::-;32771:107;32902:1;32899;32895:9;32888:16;;32605:305;;;;:::o;32916:227::-;33056:34;33052:1;33044:6;33040:14;33033:58;33125:10;33120:2;33112:6;33108:15;33101:35;32916:227;:::o;33149:366::-;33291:3;33312:67;33376:2;33371:3;33312:67;:::i;:::-;33305:74;;33388:93;33477:3;33388:93;:::i;:::-;33506:2;33501:3;33497:12;33490:19;;33149:366;;;:::o;33521:419::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33774:9;33768:4;33764:20;33760:1;33749:9;33745:17;33738:47;33802:131;33928:4;33802:131;:::i;:::-;33794:139;;33521:419;;;:::o;33946:224::-;34086:34;34082:1;34074:6;34070:14;34063:58;34155:7;34150:2;34142:6;34138:15;34131:32;33946:224;:::o;34176:366::-;34318:3;34339:67;34403:2;34398:3;34339:67;:::i;:::-;34332:74;;34415:93;34504:3;34415:93;:::i;:::-;34533:2;34528:3;34524:12;34517:19;;34176:366;;;:::o;34548:419::-;34714:4;34752:2;34741:9;34737:18;34729:26;;34801:9;34795:4;34791:20;34787:1;34776:9;34772:17;34765:47;34829:131;34955:4;34829:131;:::i;:::-;34821:139;;34548:419;;;:::o;34973:229::-;35113:34;35109:1;35101:6;35097:14;35090:58;35182:12;35177:2;35169:6;35165:15;35158:37;34973:229;:::o;35208:366::-;35350:3;35371:67;35435:2;35430:3;35371:67;:::i;:::-;35364:74;;35447:93;35536:3;35447:93;:::i;:::-;35565:2;35560:3;35556:12;35549:19;;35208:366;;;:::o;35580:419::-;35746:4;35784:2;35773:9;35769:18;35761:26;;35833:9;35827:4;35823:20;35819:1;35808:9;35804:17;35797:47;35861:131;35987:4;35861:131;:::i;:::-;35853:139;;35580:419;;;:::o;36005:634::-;36226:4;36264:2;36253:9;36249:18;36241:26;;36313:9;36307:4;36303:20;36299:1;36288:9;36284:17;36277:47;36341:108;36444:4;36435:6;36341:108;:::i;:::-;36333:116;;36496:9;36490:4;36486:20;36481:2;36470:9;36466:18;36459:48;36524:108;36627:4;36618:6;36524:108;:::i;:::-;36516:116;;36005:634;;;;;:::o;36645:182::-;36785:34;36781:1;36773:6;36769:14;36762:58;36645:182;:::o;36833:366::-;36975:3;36996:67;37060:2;37055:3;36996:67;:::i;:::-;36989:74;;37072:93;37161:3;37072:93;:::i;:::-;37190:2;37185:3;37181:12;37174:19;;36833:366;;;:::o;37205:419::-;37371:4;37409:2;37398:9;37394:18;37386:26;;37458:9;37452:4;37448:20;37444:1;37433:9;37429:17;37422:47;37486:131;37612:4;37486:131;:::i;:::-;37478:139;;37205:419;;;:::o;37630:220::-;37770:34;37766:1;37758:6;37754:14;37747:58;37839:3;37834:2;37826:6;37822:15;37815:28;37630:220;:::o;37856:366::-;37998:3;38019:67;38083:2;38078:3;38019:67;:::i;:::-;38012:74;;38095:93;38184:3;38095:93;:::i;:::-;38213:2;38208:3;38204:12;38197:19;;37856:366;;;:::o;38228:419::-;38394:4;38432:2;38421:9;38417:18;38409:26;;38481:9;38475:4;38471:20;38467:1;38456:9;38452:17;38445:47;38509:131;38635:4;38509:131;:::i;:::-;38501:139;;38228:419;;;:::o;38653:332::-;38774:4;38812:2;38801:9;38797:18;38789:26;;38825:71;38893:1;38882:9;38878:17;38869:6;38825:71;:::i;:::-;38906:72;38974:2;38963:9;38959:18;38950:6;38906:72;:::i;:::-;38653:332;;;;;:::o;38991:228::-;39131:34;39127:1;39119:6;39115:14;39108:58;39200:11;39195:2;39187:6;39183:15;39176:36;38991:228;:::o;39225:366::-;39367:3;39388:67;39452:2;39447:3;39388:67;:::i;:::-;39381:74;;39464:93;39553:3;39464:93;:::i;:::-;39582:2;39577:3;39573:12;39566:19;;39225:366;;;:::o;39597:419::-;39763:4;39801:2;39790:9;39786:18;39778:26;;39850:9;39844:4;39840:20;39836:1;39825:9;39821:17;39814:47;39878:131;40004:4;39878:131;:::i;:::-;39870:139;;39597:419;;;:::o;40022:222::-;40162:34;40158:1;40150:6;40146:14;40139:58;40231:5;40226:2;40218:6;40214:15;40207:30;40022:222;:::o;40250:366::-;40392:3;40413:67;40477:2;40472:3;40413:67;:::i;:::-;40406:74;;40489:93;40578:3;40489:93;:::i;:::-;40607:2;40602:3;40598:12;40591:19;;40250:366;;;:::o;40622:419::-;40788:4;40826:2;40815:9;40811:18;40803:26;;40875:9;40869:4;40865:20;40861:1;40850:9;40846:17;40839:47;40903:131;41029:4;40903:131;:::i;:::-;40895:139;;40622:419;;;:::o;41047:223::-;41187:34;41183:1;41175:6;41171:14;41164:58;41256:6;41251:2;41243:6;41239:15;41232:31;41047:223;:::o;41276:366::-;41418:3;41439:67;41503:2;41498:3;41439:67;:::i;:::-;41432:74;;41515:93;41604:3;41515:93;:::i;:::-;41633:2;41628:3;41624:12;41617:19;;41276:366;;;:::o;41648:419::-;41814:4;41852:2;41841:9;41837:18;41829:26;;41901:9;41895:4;41891:20;41887:1;41876:9;41872:17;41865:47;41929:131;42055:4;41929:131;:::i;:::-;41921:139;;41648:419;;;:::o;42073:98::-;42124:6;42158:5;42152:12;42142:22;;42073:98;;;:::o;42177:168::-;42260:11;42294:6;42289:3;42282:19;42334:4;42329:3;42325:14;42310:29;;42177:168;;;;:::o;42351:360::-;42437:3;42465:38;42497:5;42465:38;:::i;:::-;42519:70;42582:6;42577:3;42519:70;:::i;:::-;42512:77;;42598:52;42643:6;42638:3;42631:4;42624:5;42620:16;42598:52;:::i;:::-;42675:29;42697:6;42675:29;:::i;:::-;42670:3;42666:39;42659:46;;42441:270;42351:360;;;;:::o;42717:1053::-;43040:4;43078:3;43067:9;43063:19;43055:27;;43092:71;43160:1;43149:9;43145:17;43136:6;43092:71;:::i;:::-;43173:72;43241:2;43230:9;43226:18;43217:6;43173:72;:::i;:::-;43292:9;43286:4;43282:20;43277:2;43266:9;43262:18;43255:48;43320:108;43423:4;43414:6;43320:108;:::i;:::-;43312:116;;43475:9;43469:4;43465:20;43460:2;43449:9;43445:18;43438:48;43503:108;43606:4;43597:6;43503:108;:::i;:::-;43495:116;;43659:9;43653:4;43649:20;43643:3;43632:9;43628:19;43621:49;43687:76;43758:4;43749:6;43687:76;:::i;:::-;43679:84;;42717:1053;;;;;;;;:::o;43776:141::-;43832:5;43863:6;43857:13;43848:22;;43879:32;43905:5;43879:32;:::i;:::-;43776:141;;;;:::o;43923:349::-;43992:6;44041:2;44029:9;44020:7;44016:23;44012:32;44009:119;;;44047:79;;:::i;:::-;44009:119;44167:1;44192:63;44247:7;44238:6;44227:9;44223:22;44192:63;:::i;:::-;44182:73;;44138:127;43923:349;;;;:::o;44278:106::-;44322:8;44371:5;44366:3;44362:15;44341:36;;44278:106;;;:::o;44390:183::-;44425:3;44463:1;44445:16;44442:23;44439:128;;;44501:1;44498;44495;44480:23;44523:34;44554:1;44548:8;44523:34;:::i;:::-;44516:41;;44439:128;44390:183;:::o;44579:711::-;44618:3;44656:4;44638:16;44635:26;44632:39;;;44664:5;;44632:39;44693:20;;:::i;:::-;44768:1;44750:16;44746:24;44743:1;44737:4;44722:49;44801:4;44795:11;44900:16;44893:4;44885:6;44881:17;44878:39;44845:18;44837:6;44834:30;44818:113;44815:146;;;44946:5;;;;44815:146;44992:6;44986:4;44982:17;45028:3;45022:10;45055:18;45047:6;45044:30;45041:43;;;45077:5;;;;;;45041:43;45125:6;45118:4;45113:3;45109:14;45105:27;45184:1;45166:16;45162:24;45156:4;45152:35;45147:3;45144:44;45141:57;;;45191:5;;;;;;;45141:57;45208;45256:6;45250:4;45246:17;45238:6;45234:30;45228:4;45208:57;:::i;:::-;45281:3;45274:10;;44622:668;;;;;44579:711;;:::o;45296:239::-;45436:34;45432:1;45424:6;45420:14;45413:58;45505:22;45500:2;45492:6;45488:15;45481:47;45296:239;:::o;45541:366::-;45683:3;45704:67;45768:2;45763:3;45704:67;:::i;:::-;45697:74;;45780:93;45869:3;45780:93;:::i;:::-;45898:2;45893:3;45889:12;45882:19;;45541:366;;;:::o;45913:419::-;46079:4;46117:2;46106:9;46102:18;46094:26;;46166:9;46160:4;46156:20;46152:1;46141:9;46137:17;46130:47;46194:131;46320:4;46194:131;:::i;:::-;46186:139;;45913:419;;;:::o;46338:227::-;46478:34;46474:1;46466:6;46462:14;46455:58;46547:10;46542:2;46534:6;46530:15;46523:35;46338:227;:::o;46571:366::-;46713:3;46734:67;46798:2;46793:3;46734:67;:::i;:::-;46727:74;;46810:93;46899:3;46810:93;:::i;:::-;46928:2;46923:3;46919:12;46912:19;;46571:366;;;:::o;46943:419::-;47109:4;47147:2;47136:9;47132:18;47124:26;;47196:9;47190:4;47186:20;47182:1;47171:9;47167:17;47160:47;47224:131;47350:4;47224:131;:::i;:::-;47216:139;;46943:419;;;:::o;47368:751::-;47591:4;47629:3;47618:9;47614:19;47606:27;;47643:71;47711:1;47700:9;47696:17;47687:6;47643:71;:::i;:::-;47724:72;47792:2;47781:9;47777:18;47768:6;47724:72;:::i;:::-;47806;47874:2;47863:9;47859:18;47850:6;47806:72;:::i;:::-;47888;47956:2;47945:9;47941:18;47932:6;47888:72;:::i;:::-;48008:9;48002:4;47998:20;47992:3;47981:9;47977:19;47970:49;48036:76;48107:4;48098:6;48036:76;:::i;:::-;48028:84;;47368:751;;;;;;;;:::o

Swarm Source

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