ETH Price: $3,246.67 (+2.57%)
Gas: 2 Gwei

Token

Mavion Gems ()
 

Overview

Max Total Supply

398

Holders

345

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x52954a8e52d14225fdad9f10388e48e4a5ed54bf
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MAVION Gems give holders preferred access to mint upcoming collections as well as access to exclusive events and collaborations.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Airdrop

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-27
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

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]



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 be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

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


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



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.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

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


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



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]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



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]



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: balance query for the zero address");
        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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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: transfer caller is not 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();

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

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

        _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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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);

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

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

        emit TransferSingle(operator, account, address(0), id, amount);
    }

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

        address operator = _msgSender();

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

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

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

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @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 `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 _beforeTokenTransfer(
        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]



pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]



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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

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


// File contracts/Airdrop.sol


pragma solidity ^0.8.4;



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

    string public baseURI;
    event SetBaseURI(string indexed _baseURI);

    constructor(string memory _baseURI) ERC1155(_baseURI) {
        baseURI = _baseURI;
    }

    function airdrop(uint256 _id, address[] memory _addresses) external onlyOwner {
        for(uint256 i = 0; i < _addresses.length; i++) {
            _mint(_addresses[i], _id, 1, "");
        }
    }

    function airdropMultipleToAddress(uint256 _id, uint256 _amount, address _address) external onlyOwner {
        _mint(_address, _id, _amount, "");
    }

    function uri(uint256 typeId)
        public
        view                
        override
        returns (string memory)
    {
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }

    function setBaseURI(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(_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":"_id","type":"uint256"},{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"airdropMultipleToAddress","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620039c0380380620039c08339818101604052810190620000379190620002a2565b8062000049816200008a60201b60201c565b506200006a6200005e620000a660201b60201c565b620000ae60201b60201c565b80600490805190602001906200008292919062000174565b505062000477565b8060029080519060200190620000a292919062000174565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001829062000388565b90600052602060002090601f016020900481019282620001a65760008555620001f2565b82601f10620001c157805160ff1916838001178555620001f2565b82800160010185558215620001f2579182015b82811115620001f1578251825591602001919060010190620001d4565b5b50905062000201919062000205565b5090565b5b808211156200022057600081600090555060010162000206565b5090565b60006200023b62000235846200031c565b620002f3565b9050828152602081018484840111156200025a576200025962000457565b5b6200026784828562000352565b509392505050565b600082601f83011262000287576200028662000452565b5b81516200029984826020860162000224565b91505092915050565b600060208284031215620002bb57620002ba62000461565b5b600082015167ffffffffffffffff811115620002dc57620002db6200045c565b5b620002ea848285016200026f565b91505092915050565b6000620002ff62000312565b90506200030d8282620003be565b919050565b6000604051905090565b600067ffffffffffffffff8211156200033a576200033962000423565b5b620003458262000466565b9050602081019050919050565b60005b838110156200037257808201518184015260208101905062000355565b8381111562000382576000848401525b50505050565b60006002820490506001821680620003a157607f821691505b60208210811415620003b857620003b7620003f4565b5b50919050565b620003c98262000466565b810181811067ffffffffffffffff82111715620003eb57620003ea62000423565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61353980620004876000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80636c0360eb11610097578063bdf7a8e611610066578063bdf7a8e61461026f578063e985e9c51461028b578063f242432a146102bb578063f2fde38b146102d7576100f4565b80636c0360eb1461020d578063715018a61461022b5780638da5cb5b14610235578063a22cb46514610253576100f4565b80632eb2c2d6116100d35780632eb2c2d6146101895780634e1273f4146101a557806355f804b3146101d557806363b88f95146101f1576100f4565b8062fdd58e146100f957806301ffc9a7146101295780630e89341c14610159575b600080fd5b610113600480360381019061010e91906121ce565b6102f3565b6040516101209190612aee565b60405180910390f35b610143600480360381019061013e9190612286565b6103bc565b6040516101509190612911565b60405180910390f35b610173600480360381019061016e9190612329565b61049e565b604051610180919061292c565b60405180910390f35b6101a3600480360381019061019e9190612028565b610579565b005b6101bf60048036038101906101ba919061220e565b61061a565b6040516101cc91906128b8565b60405180910390f35b6101ef60048036038101906101ea91906122e0565b610733565b005b61020b600480360381019061020691906123b2565b61080b565b005b6102156108a7565b604051610222919061292c565b60405180910390f35b610233610935565b005b61023d6109bd565b60405161024a91906127db565b60405180910390f35b61026d6004803603810190610268919061218e565b6109e7565b005b61028960048036038101906102849190612356565b610b68565b005b6102a560048036038101906102a09190611fe8565b610c3e565b6040516102b29190612911565b60405180910390f35b6102d560048036038101906102d091906120f7565b610cd2565b005b6102f160048036038101906102ec9190611fbb565b610d73565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035b9061298e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610497575061049682610e6b565b5b9050919050565b60606000600480546104af90612e13565b90501161054657600480546104c390612e13565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef90612e13565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050505050610572565b600461055183610ed5565b6040516020016105629291906127b7565b6040516020818303038152906040525b9050919050565b610581611036565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105c757506105c6856105c1611036565b610c3e565b5b610606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fd90612a0e565b60405180910390fd5b610613858585858561103e565b5050505050565b60608151835114610660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065790612a8e565b60405180910390fd5b6000835167ffffffffffffffff81111561067d5761067c612fac565b5b6040519080825280602002602001820160405280156106ab5781602001602082028036833780820191505090505b50905060005b8451811015610728576106f88582815181106106d0576106cf612f7d565b5b60200260200101518583815181106106eb576106ea612f7d565b5b60200260200101516102f3565b82828151811061070b5761070a612f7d565b5b6020026020010181815250508061072190612e76565b90506106b1565b508091505092915050565b61073b611036565b73ffffffffffffffffffffffffffffffffffffffff166107596109bd565b73ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612a4e565b60405180910390fd5b80600490805190602001906107c5929190611c93565b50806040516107d491906127a0565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b610813611036565b73ffffffffffffffffffffffffffffffffffffffff166108316109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90612a4e565b60405180910390fd5b6108a281848460405180602001604052806000815250611352565b505050565b600480546108b490612e13565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090612e13565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b505050505081565b61093d611036565b73ffffffffffffffffffffffffffffffffffffffff1661095b6109bd565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890612a4e565b60405180910390fd5b6109bb60006114e8565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610a06611036565b73ffffffffffffffffffffffffffffffffffffffff161415610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5490612a6e565b60405180910390fd5b8060016000610a6a611036565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b17611036565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b5c9190612911565b60405180910390a35050565b610b70611036565b73ffffffffffffffffffffffffffffffffffffffff16610b8e6109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612a4e565b60405180910390fd5b60005b8151811015610c3957610c26828281518110610c0657610c05612f7d565b5b602002602001015184600160405180602001604052806000815250611352565b8080610c3190612e76565b915050610be7565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cda611036565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d205750610d1f85610d1a611036565b610c3e565b5b610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906129ce565b60405180910390fd5b610d6c85858585856115ae565b5050505050565b610d7b611036565b73ffffffffffffffffffffffffffffffffffffffff16610d996109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612a4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906129ae565b60405180910390fd5b610e68816114e8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610f1d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611031565b600082905060005b60008214610f4f578080610f3890612e76565b915050600a82610f489190612cf8565b9150610f25565b60008167ffffffffffffffff811115610f6b57610f6a612fac565b5b6040519080825280601f01601f191660200182016040528015610f9d5781602001600182028036833780820191505090505b5090505b6000851461102a57600182610fb69190612d29565b9150600a85610fc59190612ebf565b6030610fd19190612ca2565b60f81b818381518110610fe757610fe6612f7d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856110239190612cf8565b9450610fa1565b8093505050505b919050565b600033905090565b8151835114611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612aae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906129ee565b60405180910390fd5b60006110fc611036565b905061110c818787878787611830565b60005b84518110156112bd57600085828151811061112d5761112c612f7d565b5b60200260200101519050600085838151811061114c5761114b612f7d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490612a2e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112a29190612ca2565b92505081905550505050806112b690612e76565b905061110f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113349291906128da565b60405180910390a461134a818787878787611838565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612ace565b60405180910390fd5b60006113cc611036565b90506113ed816000876113de88611a1f565b6113e788611a1f565b87611830565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c9190612ca2565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516114ca929190612b09565b60405180910390a46114e181600087878787611a99565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906129ee565b60405180910390fd5b6000611628611036565b905061164881878761163988611a1f565b61164288611a1f565b87611830565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612a2e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117949190612ca2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611811929190612b09565b60405180910390a4611827828888888888611a99565b50505050505050565b505050505050565b6118578473ffffffffffffffffffffffffffffffffffffffff16611c80565b15611a17578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161189d9594939291906127f6565b602060405180830381600087803b1580156118b757600080fd5b505af19250505080156118e857506040513d601f19601f820116820180604052508101906118e591906122b3565b60015b61198e576118f4612fdb565b806308c379a014156119515750611909613411565b806119145750611953565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948919061292c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119859061294e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c9061296e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611a3e57611a3d612fac565b5b604051908082528060200260200182016040528015611a6c5781602001602082028036833780820191505090505b5090508281600081518110611a8457611a83612f7d565b5b60200260200101818152505080915050919050565b611ab88473ffffffffffffffffffffffffffffffffffffffff16611c80565b15611c78578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611afe95949392919061285e565b602060405180830381600087803b158015611b1857600080fd5b505af1925050508015611b4957506040513d601f19601f82011682018060405250810190611b4691906122b3565b60015b611bef57611b55612fdb565b806308c379a01415611bb25750611b6a613411565b80611b755750611bb4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9919061292c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061294e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d9061296e565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611c9f90612e13565b90600052602060002090601f016020900481019282611cc15760008555611d08565b82601f10611cda57805160ff1916838001178555611d08565b82800160010185558215611d08579182015b82811115611d07578251825591602001919060010190611cec565b5b509050611d159190611d19565b5090565b5b80821115611d32576000816000905550600101611d1a565b5090565b6000611d49611d4484612b57565b612b32565b90508083825260208201905082856020860282011115611d6c57611d6b613002565b5b60005b85811015611d9c5781611d828882611e9a565b845260208401935060208301925050600181019050611d6f565b5050509392505050565b6000611db9611db484612b83565b612b32565b90508083825260208201905082856020860282011115611ddc57611ddb613002565b5b60005b85811015611e0c5781611df28882611fa6565b845260208401935060208301925050600181019050611ddf565b5050509392505050565b6000611e29611e2484612baf565b612b32565b905082815260208101848484011115611e4557611e44613007565b5b611e50848285612dd1565b509392505050565b6000611e6b611e6684612be0565b612b32565b905082815260208101848484011115611e8757611e86613007565b5b611e92848285612dd1565b509392505050565b600081359050611ea9816134a7565b92915050565b600082601f830112611ec457611ec3612ffd565b5b8135611ed4848260208601611d36565b91505092915050565b600082601f830112611ef257611ef1612ffd565b5b8135611f02848260208601611da6565b91505092915050565b600081359050611f1a816134be565b92915050565b600081359050611f2f816134d5565b92915050565b600081519050611f44816134d5565b92915050565b600082601f830112611f5f57611f5e612ffd565b5b8135611f6f848260208601611e16565b91505092915050565b600082601f830112611f8d57611f8c612ffd565b5b8135611f9d848260208601611e58565b91505092915050565b600081359050611fb5816134ec565b92915050565b600060208284031215611fd157611fd0613011565b5b6000611fdf84828501611e9a565b91505092915050565b60008060408385031215611fff57611ffe613011565b5b600061200d85828601611e9a565b925050602061201e85828601611e9a565b9150509250929050565b600080600080600060a0868803121561204457612043613011565b5b600061205288828901611e9a565b955050602061206388828901611e9a565b945050604086013567ffffffffffffffff8111156120845761208361300c565b5b61209088828901611edd565b935050606086013567ffffffffffffffff8111156120b1576120b061300c565b5b6120bd88828901611edd565b925050608086013567ffffffffffffffff8111156120de576120dd61300c565b5b6120ea88828901611f4a565b9150509295509295909350565b600080600080600060a0868803121561211357612112613011565b5b600061212188828901611e9a565b955050602061213288828901611e9a565b945050604061214388828901611fa6565b935050606061215488828901611fa6565b925050608086013567ffffffffffffffff8111156121755761217461300c565b5b61218188828901611f4a565b9150509295509295909350565b600080604083850312156121a5576121a4613011565b5b60006121b385828601611e9a565b92505060206121c485828601611f0b565b9150509250929050565b600080604083850312156121e5576121e4613011565b5b60006121f385828601611e9a565b925050602061220485828601611fa6565b9150509250929050565b6000806040838503121561222557612224613011565b5b600083013567ffffffffffffffff8111156122435761224261300c565b5b61224f85828601611eaf565b925050602083013567ffffffffffffffff8111156122705761226f61300c565b5b61227c85828601611edd565b9150509250929050565b60006020828403121561229c5761229b613011565b5b60006122aa84828501611f20565b91505092915050565b6000602082840312156122c9576122c8613011565b5b60006122d784828501611f35565b91505092915050565b6000602082840312156122f6576122f5613011565b5b600082013567ffffffffffffffff8111156123145761231361300c565b5b61232084828501611f78565b91505092915050565b60006020828403121561233f5761233e613011565b5b600061234d84828501611fa6565b91505092915050565b6000806040838503121561236d5761236c613011565b5b600061237b85828601611fa6565b925050602083013567ffffffffffffffff81111561239c5761239b61300c565b5b6123a885828601611eaf565b9150509250929050565b6000806000606084860312156123cb576123ca613011565b5b60006123d986828701611fa6565b93505060206123ea86828701611fa6565b92505060406123fb86828701611e9a565b9150509250925092565b60006124118383612782565b60208301905092915050565b61242681612d5d565b82525050565b600061243782612c36565b6124418185612c64565b935061244c83612c11565b8060005b8381101561247d5781516124648882612405565b975061246f83612c57565b925050600181019050612450565b5085935050505092915050565b61249381612d6f565b82525050565b60006124a482612c41565b6124ae8185612c75565b93506124be818560208601612de0565b6124c781613016565b840191505092915050565b60006124dd82612c4c565b6124e78185612c86565b93506124f7818560208601612de0565b61250081613016565b840191505092915050565b600061251682612c4c565b6125208185612c97565b9350612530818560208601612de0565b80840191505092915050565b6000815461254981612e13565b6125538186612c97565b9450600182166000811461256e576001811461257f576125b2565b60ff198316865281860193506125b2565b61258885612c21565b60005b838110156125aa5781548189015260018201915060208101905061258b565b838801955050505b50505092915050565b60006125c8603483612c86565b91506125d382613034565b604082019050919050565b60006125eb602883612c86565b91506125f682613083565b604082019050919050565b600061260e602b83612c86565b9150612619826130d2565b604082019050919050565b6000612631602683612c86565b915061263c82613121565b604082019050919050565b6000612654602983612c86565b915061265f82613170565b604082019050919050565b6000612677602583612c86565b9150612682826131bf565b604082019050919050565b600061269a603283612c86565b91506126a58261320e565b604082019050919050565b60006126bd602a83612c86565b91506126c88261325d565b604082019050919050565b60006126e0602083612c86565b91506126eb826132ac565b602082019050919050565b6000612703602983612c86565b915061270e826132d5565b604082019050919050565b6000612726602983612c86565b915061273182613324565b604082019050919050565b6000612749602883612c86565b915061275482613373565b604082019050919050565b600061276c602183612c86565b9150612777826133c2565b604082019050919050565b61278b81612dc7565b82525050565b61279a81612dc7565b82525050565b60006127ac828461250b565b915081905092915050565b60006127c3828561253c565b91506127cf828461250b565b91508190509392505050565b60006020820190506127f0600083018461241d565b92915050565b600060a08201905061280b600083018861241d565b612818602083018761241d565b818103604083015261282a818661242c565b9050818103606083015261283e818561242c565b905081810360808301526128528184612499565b90509695505050505050565b600060a082019050612873600083018861241d565b612880602083018761241d565b61288d6040830186612791565b61289a6060830185612791565b81810360808301526128ac8184612499565b90509695505050505050565b600060208201905081810360008301526128d2818461242c565b905092915050565b600060408201905081810360008301526128f4818561242c565b90508181036020830152612908818461242c565b90509392505050565b6000602082019050612926600083018461248a565b92915050565b6000602082019050818103600083015261294681846124d2565b905092915050565b60006020820190508181036000830152612967816125bb565b9050919050565b60006020820190508181036000830152612987816125de565b9050919050565b600060208201905081810360008301526129a781612601565b9050919050565b600060208201905081810360008301526129c781612624565b9050919050565b600060208201905081810360008301526129e781612647565b9050919050565b60006020820190508181036000830152612a078161266a565b9050919050565b60006020820190508181036000830152612a278161268d565b9050919050565b60006020820190508181036000830152612a47816126b0565b9050919050565b60006020820190508181036000830152612a67816126d3565b9050919050565b60006020820190508181036000830152612a87816126f6565b9050919050565b60006020820190508181036000830152612aa781612719565b9050919050565b60006020820190508181036000830152612ac78161273c565b9050919050565b60006020820190508181036000830152612ae78161275f565b9050919050565b6000602082019050612b036000830184612791565b92915050565b6000604082019050612b1e6000830185612791565b612b2b6020830184612791565b9392505050565b6000612b3c612b4d565b9050612b488282612e45565b919050565b6000604051905090565b600067ffffffffffffffff821115612b7257612b71612fac565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b9e57612b9d612fac565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612bca57612bc9612fac565b5b612bd382613016565b9050602081019050919050565b600067ffffffffffffffff821115612bfb57612bfa612fac565b5b612c0482613016565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cad82612dc7565b9150612cb883612dc7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ced57612cec612ef0565b5b828201905092915050565b6000612d0382612dc7565b9150612d0e83612dc7565b925082612d1e57612d1d612f1f565b5b828204905092915050565b6000612d3482612dc7565b9150612d3f83612dc7565b925082821015612d5257612d51612ef0565b5b828203905092915050565b6000612d6882612da7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612dfe578082015181840152602081019050612de3565b83811115612e0d576000848401525b50505050565b60006002820490506001821680612e2b57607f821691505b60208210811415612e3f57612e3e612f4e565b5b50919050565b612e4e82613016565b810181811067ffffffffffffffff82111715612e6d57612e6c612fac565b5b80604052505050565b6000612e8182612dc7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eb457612eb3612ef0565b5b600182019050919050565b6000612eca82612dc7565b9150612ed583612dc7565b925082612ee557612ee4612f1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612ffa5760046000803e612ff7600051613027565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613421576134a4565b613429612b4d565b60043d036004823e80513d602482011167ffffffffffffffff821117156134515750506134a4565b808201805167ffffffffffffffff81111561346f57505050506134a4565b80602083010160043d03850181111561348c5750505050506134a4565b61349b82602001850186612e45565b82955050505050505b90565b6134b081612d5d565b81146134bb57600080fd5b50565b6134c781612d6f565b81146134d257600080fd5b50565b6134de81612d7b565b81146134e957600080fd5b50565b6134f581612dc7565b811461350057600080fd5b5056fea2646970667358221220006a90dd87bb3a7b67def50ae6ee8f36f5e0685009e50c9bbf6175a71c68239264736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f6261667962656967656b776475637167766469713363796264357a796964687561783669367633356c377a65707561667161706334686b6971786d2f000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c80636c0360eb11610097578063bdf7a8e611610066578063bdf7a8e61461026f578063e985e9c51461028b578063f242432a146102bb578063f2fde38b146102d7576100f4565b80636c0360eb1461020d578063715018a61461022b5780638da5cb5b14610235578063a22cb46514610253576100f4565b80632eb2c2d6116100d35780632eb2c2d6146101895780634e1273f4146101a557806355f804b3146101d557806363b88f95146101f1576100f4565b8062fdd58e146100f957806301ffc9a7146101295780630e89341c14610159575b600080fd5b610113600480360381019061010e91906121ce565b6102f3565b6040516101209190612aee565b60405180910390f35b610143600480360381019061013e9190612286565b6103bc565b6040516101509190612911565b60405180910390f35b610173600480360381019061016e9190612329565b61049e565b604051610180919061292c565b60405180910390f35b6101a3600480360381019061019e9190612028565b610579565b005b6101bf60048036038101906101ba919061220e565b61061a565b6040516101cc91906128b8565b60405180910390f35b6101ef60048036038101906101ea91906122e0565b610733565b005b61020b600480360381019061020691906123b2565b61080b565b005b6102156108a7565b604051610222919061292c565b60405180910390f35b610233610935565b005b61023d6109bd565b60405161024a91906127db565b60405180910390f35b61026d6004803603810190610268919061218e565b6109e7565b005b61028960048036038101906102849190612356565b610b68565b005b6102a560048036038101906102a09190611fe8565b610c3e565b6040516102b29190612911565b60405180910390f35b6102d560048036038101906102d091906120f7565b610cd2565b005b6102f160048036038101906102ec9190611fbb565b610d73565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035b9061298e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610497575061049682610e6b565b5b9050919050565b60606000600480546104af90612e13565b90501161054657600480546104c390612e13565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef90612e13565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050505050610572565b600461055183610ed5565b6040516020016105629291906127b7565b6040516020818303038152906040525b9050919050565b610581611036565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105c757506105c6856105c1611036565b610c3e565b5b610606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fd90612a0e565b60405180910390fd5b610613858585858561103e565b5050505050565b60608151835114610660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065790612a8e565b60405180910390fd5b6000835167ffffffffffffffff81111561067d5761067c612fac565b5b6040519080825280602002602001820160405280156106ab5781602001602082028036833780820191505090505b50905060005b8451811015610728576106f88582815181106106d0576106cf612f7d565b5b60200260200101518583815181106106eb576106ea612f7d565b5b60200260200101516102f3565b82828151811061070b5761070a612f7d565b5b6020026020010181815250508061072190612e76565b90506106b1565b508091505092915050565b61073b611036565b73ffffffffffffffffffffffffffffffffffffffff166107596109bd565b73ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612a4e565b60405180910390fd5b80600490805190602001906107c5929190611c93565b50806040516107d491906127a0565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b610813611036565b73ffffffffffffffffffffffffffffffffffffffff166108316109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90612a4e565b60405180910390fd5b6108a281848460405180602001604052806000815250611352565b505050565b600480546108b490612e13565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090612e13565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b505050505081565b61093d611036565b73ffffffffffffffffffffffffffffffffffffffff1661095b6109bd565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890612a4e565b60405180910390fd5b6109bb60006114e8565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610a06611036565b73ffffffffffffffffffffffffffffffffffffffff161415610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5490612a6e565b60405180910390fd5b8060016000610a6a611036565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b17611036565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b5c9190612911565b60405180910390a35050565b610b70611036565b73ffffffffffffffffffffffffffffffffffffffff16610b8e6109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612a4e565b60405180910390fd5b60005b8151811015610c3957610c26828281518110610c0657610c05612f7d565b5b602002602001015184600160405180602001604052806000815250611352565b8080610c3190612e76565b915050610be7565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cda611036565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d205750610d1f85610d1a611036565b610c3e565b5b610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906129ce565b60405180910390fd5b610d6c85858585856115ae565b5050505050565b610d7b611036565b73ffffffffffffffffffffffffffffffffffffffff16610d996109bd565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612a4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906129ae565b60405180910390fd5b610e68816114e8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610f1d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611031565b600082905060005b60008214610f4f578080610f3890612e76565b915050600a82610f489190612cf8565b9150610f25565b60008167ffffffffffffffff811115610f6b57610f6a612fac565b5b6040519080825280601f01601f191660200182016040528015610f9d5781602001600182028036833780820191505090505b5090505b6000851461102a57600182610fb69190612d29565b9150600a85610fc59190612ebf565b6030610fd19190612ca2565b60f81b818381518110610fe757610fe6612f7d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856110239190612cf8565b9450610fa1565b8093505050505b919050565b600033905090565b8151835114611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612aae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906129ee565b60405180910390fd5b60006110fc611036565b905061110c818787878787611830565b60005b84518110156112bd57600085828151811061112d5761112c612f7d565b5b60200260200101519050600085838151811061114c5761114b612f7d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490612a2e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112a29190612ca2565b92505081905550505050806112b690612e76565b905061110f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113349291906128da565b60405180910390a461134a818787878787611838565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612ace565b60405180910390fd5b60006113cc611036565b90506113ed816000876113de88611a1f565b6113e788611a1f565b87611830565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c9190612ca2565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516114ca929190612b09565b60405180910390a46114e181600087878787611a99565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906129ee565b60405180910390fd5b6000611628611036565b905061164881878761163988611a1f565b61164288611a1f565b87611830565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612a2e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117949190612ca2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611811929190612b09565b60405180910390a4611827828888888888611a99565b50505050505050565b505050505050565b6118578473ffffffffffffffffffffffffffffffffffffffff16611c80565b15611a17578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161189d9594939291906127f6565b602060405180830381600087803b1580156118b757600080fd5b505af19250505080156118e857506040513d601f19601f820116820180604052508101906118e591906122b3565b60015b61198e576118f4612fdb565b806308c379a014156119515750611909613411565b806119145750611953565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948919061292c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119859061294e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c9061296e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611a3e57611a3d612fac565b5b604051908082528060200260200182016040528015611a6c5781602001602082028036833780820191505090505b5090508281600081518110611a8457611a83612f7d565b5b60200260200101818152505080915050919050565b611ab88473ffffffffffffffffffffffffffffffffffffffff16611c80565b15611c78578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611afe95949392919061285e565b602060405180830381600087803b158015611b1857600080fd5b505af1925050508015611b4957506040513d601f19601f82011682018060405250810190611b4691906122b3565b60015b611bef57611b55612fdb565b806308c379a01415611bb25750611b6a613411565b80611b755750611bb4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9919061292c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061294e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d9061296e565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611c9f90612e13565b90600052602060002090601f016020900481019282611cc15760008555611d08565b82601f10611cda57805160ff1916838001178555611d08565b82800160010185558215611d08579182015b82811115611d07578251825591602001919060010190611cec565b5b509050611d159190611d19565b5090565b5b80821115611d32576000816000905550600101611d1a565b5090565b6000611d49611d4484612b57565b612b32565b90508083825260208201905082856020860282011115611d6c57611d6b613002565b5b60005b85811015611d9c5781611d828882611e9a565b845260208401935060208301925050600181019050611d6f565b5050509392505050565b6000611db9611db484612b83565b612b32565b90508083825260208201905082856020860282011115611ddc57611ddb613002565b5b60005b85811015611e0c5781611df28882611fa6565b845260208401935060208301925050600181019050611ddf565b5050509392505050565b6000611e29611e2484612baf565b612b32565b905082815260208101848484011115611e4557611e44613007565b5b611e50848285612dd1565b509392505050565b6000611e6b611e6684612be0565b612b32565b905082815260208101848484011115611e8757611e86613007565b5b611e92848285612dd1565b509392505050565b600081359050611ea9816134a7565b92915050565b600082601f830112611ec457611ec3612ffd565b5b8135611ed4848260208601611d36565b91505092915050565b600082601f830112611ef257611ef1612ffd565b5b8135611f02848260208601611da6565b91505092915050565b600081359050611f1a816134be565b92915050565b600081359050611f2f816134d5565b92915050565b600081519050611f44816134d5565b92915050565b600082601f830112611f5f57611f5e612ffd565b5b8135611f6f848260208601611e16565b91505092915050565b600082601f830112611f8d57611f8c612ffd565b5b8135611f9d848260208601611e58565b91505092915050565b600081359050611fb5816134ec565b92915050565b600060208284031215611fd157611fd0613011565b5b6000611fdf84828501611e9a565b91505092915050565b60008060408385031215611fff57611ffe613011565b5b600061200d85828601611e9a565b925050602061201e85828601611e9a565b9150509250929050565b600080600080600060a0868803121561204457612043613011565b5b600061205288828901611e9a565b955050602061206388828901611e9a565b945050604086013567ffffffffffffffff8111156120845761208361300c565b5b61209088828901611edd565b935050606086013567ffffffffffffffff8111156120b1576120b061300c565b5b6120bd88828901611edd565b925050608086013567ffffffffffffffff8111156120de576120dd61300c565b5b6120ea88828901611f4a565b9150509295509295909350565b600080600080600060a0868803121561211357612112613011565b5b600061212188828901611e9a565b955050602061213288828901611e9a565b945050604061214388828901611fa6565b935050606061215488828901611fa6565b925050608086013567ffffffffffffffff8111156121755761217461300c565b5b61218188828901611f4a565b9150509295509295909350565b600080604083850312156121a5576121a4613011565b5b60006121b385828601611e9a565b92505060206121c485828601611f0b565b9150509250929050565b600080604083850312156121e5576121e4613011565b5b60006121f385828601611e9a565b925050602061220485828601611fa6565b9150509250929050565b6000806040838503121561222557612224613011565b5b600083013567ffffffffffffffff8111156122435761224261300c565b5b61224f85828601611eaf565b925050602083013567ffffffffffffffff8111156122705761226f61300c565b5b61227c85828601611edd565b9150509250929050565b60006020828403121561229c5761229b613011565b5b60006122aa84828501611f20565b91505092915050565b6000602082840312156122c9576122c8613011565b5b60006122d784828501611f35565b91505092915050565b6000602082840312156122f6576122f5613011565b5b600082013567ffffffffffffffff8111156123145761231361300c565b5b61232084828501611f78565b91505092915050565b60006020828403121561233f5761233e613011565b5b600061234d84828501611fa6565b91505092915050565b6000806040838503121561236d5761236c613011565b5b600061237b85828601611fa6565b925050602083013567ffffffffffffffff81111561239c5761239b61300c565b5b6123a885828601611eaf565b9150509250929050565b6000806000606084860312156123cb576123ca613011565b5b60006123d986828701611fa6565b93505060206123ea86828701611fa6565b92505060406123fb86828701611e9a565b9150509250925092565b60006124118383612782565b60208301905092915050565b61242681612d5d565b82525050565b600061243782612c36565b6124418185612c64565b935061244c83612c11565b8060005b8381101561247d5781516124648882612405565b975061246f83612c57565b925050600181019050612450565b5085935050505092915050565b61249381612d6f565b82525050565b60006124a482612c41565b6124ae8185612c75565b93506124be818560208601612de0565b6124c781613016565b840191505092915050565b60006124dd82612c4c565b6124e78185612c86565b93506124f7818560208601612de0565b61250081613016565b840191505092915050565b600061251682612c4c565b6125208185612c97565b9350612530818560208601612de0565b80840191505092915050565b6000815461254981612e13565b6125538186612c97565b9450600182166000811461256e576001811461257f576125b2565b60ff198316865281860193506125b2565b61258885612c21565b60005b838110156125aa5781548189015260018201915060208101905061258b565b838801955050505b50505092915050565b60006125c8603483612c86565b91506125d382613034565b604082019050919050565b60006125eb602883612c86565b91506125f682613083565b604082019050919050565b600061260e602b83612c86565b9150612619826130d2565b604082019050919050565b6000612631602683612c86565b915061263c82613121565b604082019050919050565b6000612654602983612c86565b915061265f82613170565b604082019050919050565b6000612677602583612c86565b9150612682826131bf565b604082019050919050565b600061269a603283612c86565b91506126a58261320e565b604082019050919050565b60006126bd602a83612c86565b91506126c88261325d565b604082019050919050565b60006126e0602083612c86565b91506126eb826132ac565b602082019050919050565b6000612703602983612c86565b915061270e826132d5565b604082019050919050565b6000612726602983612c86565b915061273182613324565b604082019050919050565b6000612749602883612c86565b915061275482613373565b604082019050919050565b600061276c602183612c86565b9150612777826133c2565b604082019050919050565b61278b81612dc7565b82525050565b61279a81612dc7565b82525050565b60006127ac828461250b565b915081905092915050565b60006127c3828561253c565b91506127cf828461250b565b91508190509392505050565b60006020820190506127f0600083018461241d565b92915050565b600060a08201905061280b600083018861241d565b612818602083018761241d565b818103604083015261282a818661242c565b9050818103606083015261283e818561242c565b905081810360808301526128528184612499565b90509695505050505050565b600060a082019050612873600083018861241d565b612880602083018761241d565b61288d6040830186612791565b61289a6060830185612791565b81810360808301526128ac8184612499565b90509695505050505050565b600060208201905081810360008301526128d2818461242c565b905092915050565b600060408201905081810360008301526128f4818561242c565b90508181036020830152612908818461242c565b90509392505050565b6000602082019050612926600083018461248a565b92915050565b6000602082019050818103600083015261294681846124d2565b905092915050565b60006020820190508181036000830152612967816125bb565b9050919050565b60006020820190508181036000830152612987816125de565b9050919050565b600060208201905081810360008301526129a781612601565b9050919050565b600060208201905081810360008301526129c781612624565b9050919050565b600060208201905081810360008301526129e781612647565b9050919050565b60006020820190508181036000830152612a078161266a565b9050919050565b60006020820190508181036000830152612a278161268d565b9050919050565b60006020820190508181036000830152612a47816126b0565b9050919050565b60006020820190508181036000830152612a67816126d3565b9050919050565b60006020820190508181036000830152612a87816126f6565b9050919050565b60006020820190508181036000830152612aa781612719565b9050919050565b60006020820190508181036000830152612ac78161273c565b9050919050565b60006020820190508181036000830152612ae78161275f565b9050919050565b6000602082019050612b036000830184612791565b92915050565b6000604082019050612b1e6000830185612791565b612b2b6020830184612791565b9392505050565b6000612b3c612b4d565b9050612b488282612e45565b919050565b6000604051905090565b600067ffffffffffffffff821115612b7257612b71612fac565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b9e57612b9d612fac565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612bca57612bc9612fac565b5b612bd382613016565b9050602081019050919050565b600067ffffffffffffffff821115612bfb57612bfa612fac565b5b612c0482613016565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cad82612dc7565b9150612cb883612dc7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ced57612cec612ef0565b5b828201905092915050565b6000612d0382612dc7565b9150612d0e83612dc7565b925082612d1e57612d1d612f1f565b5b828204905092915050565b6000612d3482612dc7565b9150612d3f83612dc7565b925082821015612d5257612d51612ef0565b5b828203905092915050565b6000612d6882612da7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612dfe578082015181840152602081019050612de3565b83811115612e0d576000848401525b50505050565b60006002820490506001821680612e2b57607f821691505b60208210811415612e3f57612e3e612f4e565b5b50919050565b612e4e82613016565b810181811067ffffffffffffffff82111715612e6d57612e6c612fac565b5b80604052505050565b6000612e8182612dc7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eb457612eb3612ef0565b5b600182019050919050565b6000612eca82612dc7565b9150612ed583612dc7565b925082612ee557612ee4612f1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612ffa5760046000803e612ff7600051613027565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613421576134a4565b613429612b4d565b60043d036004823e80513d602482011167ffffffffffffffff821117156134515750506134a4565b808201805167ffffffffffffffff81111561346f57505050506134a4565b80602083010160043d03850181111561348c5750505050506134a4565b61349b82602001850186612e45565b82955050505050505b90565b6134b081612d5d565b81146134bb57600080fd5b50565b6134c781612d6f565b81146134d257600080fd5b50565b6134de81612d7b565b81146134e957600080fd5b50565b6134f581612dc7565b811461350057600080fd5b5056fea2646970667358221220006a90dd87bb3a7b67def50ae6ee8f36f5e0685009e50c9bbf6175a71c68239264736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f6261667962656967656b776475637167766469713363796264357a796964687561783669367633356c377a65707561667161706334686b6971786d2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://ipfs.io/ipfs/bafybeigekwducqgvdiq3cybd5zyidhuax6i6v35l7zepuafqapc4hkiqxm/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f6261667962656967656b77
Arg [3] : 6475637167766469713363796264357a796964687561783669367633356c377a
Arg [4] : 65707561667161706334686b6971786d2f000000000000000000000000000000


Deployed Bytecode Sourcemap

37795:1067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20071:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19094:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38421:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22166:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20468:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38723:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38260:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37873:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37098:94;;;:::i;:::-;;36447:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38050:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21448:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21688:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37347:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20071:231;20157:7;20204:1;20185:21;;:7;:21;;;;20177:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20272:9;:13;20282:2;20272:13;;;;;;;;;;;:22;20286:7;20272:22;;;;;;;;;;;;;;;;20265:29;;20071:231;;;;:::o;19094:310::-;19196:4;19248:26;19233:41;;;:11;:41;;;;:110;;;;19306:37;19291:52;;;:11;:52;;;;19233:110;:163;;;;19360:36;19384:11;19360:23;:36::i;:::-;19233:163;19213:183;;19094:310;;;:::o;38421:294::-;38532:13;38607:1;38589:7;38583:21;;;;;:::i;:::-;;;:25;:124;;38700:7;38583:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38652:7;38661:17;:6;:15;:17::i;:::-;38635:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38583:124;38563:144;;38421:294;;;:::o;22166:442::-;22407:12;:10;:12::i;:::-;22399:20;;:4;:20;;;:60;;;;22423:36;22440:4;22446:12;:10;:12::i;:::-;22423:16;:36::i;:::-;22399:60;22377:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:52;22571:4;22577:2;22581:3;22586:7;22595:4;22548:22;:52::i;:::-;22166:442;;;;;:::o;20468:524::-;20624:16;20685:3;:10;20666:8;:15;:29;20658:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20754:30;20801:8;:15;20787:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20754:63;;20835:9;20830:122;20854:8;:15;20850:1;:19;20830:122;;;20910:30;20920:8;20929:1;20920:11;;;;;;;;:::i;:::-;;;;;;;;20933:3;20937:1;20933:6;;;;;;;;:::i;:::-;;;;;;;;20910:9;:30::i;:::-;20891:13;20905:1;20891:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20871:3;;;;:::i;:::-;;;20830:122;;;;20971:13;20964:20;;;20468:524;;;;:::o;38723:136::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38807:8:::1;38797:7;:18;;;;;;;;;;;;:::i;:::-;;38842:8;38831:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;38723:136:::0;:::o;38260:153::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38372:33:::1;38378:8;38388:3;38393:7;38372:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;38260:153:::0;;;:::o;37873:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37098:94::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37163:21:::1;37181:1;37163:9;:21::i;:::-;37098:94::o:0;36447:87::-;36493:7;36520:6;;;;;;;;;;;36513:13;;36447:87;:::o;21065:311::-;21184:8;21168:24;;:12;:10;:12::i;:::-;:24;;;;21160:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;21296:8;21251:18;:32;21270:12;:10;:12::i;:::-;21251:32;;;;;;;;;;;;;;;:42;21284:8;21251:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21349:8;21320:48;;21335:12;:10;:12::i;:::-;21320:48;;;21359:8;21320:48;;;;;;:::i;:::-;;;;;;;;21065:311;;:::o;38050:202::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38143:9:::1;38139:106;38162:10;:17;38158:1;:21;38139:106;;;38201:32;38207:10;38218:1;38207:13;;;;;;;;:::i;:::-;;;;;;;;38222:3;38227:1;38201:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;38181:3;;;;;:::i;:::-;;;;38139:106;;;;38050:202:::0;;:::o;21448:168::-;21547:4;21571:18;:27;21590:7;21571:27;;;;;;;;;;;;;;;:37;21599:8;21571:37;;;;;;;;;;;;;;;;;;;;;;;;;21564:44;;21448:168;;;;:::o;21688:401::-;21904:12;:10;:12::i;:::-;21896:20;;:4;:20;;;:60;;;;21920:36;21937:4;21943:12;:10;:12::i;:::-;21920:16;:36::i;:::-;21896:60;21874:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:45;22054:4;22060:2;22064;22068:6;22076:4;22036:17;:45::i;:::-;21688:401;;;;;:::o;37347:192::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37456:1:::1;37436:22;;:8;:22;;;;37428:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37512:19;37522:8;37512:9;:19::i;:::-;37347:192:::0;:::o;17909:157::-;17994:4;18033:25;18018:40;;;:11;:40;;;;18011:47;;17909:157;;;:::o;33684:723::-;33740:13;33970:1;33961:5;:10;33957:53;;;33988:10;;;;;;;;;;;;;;;;;;;;;33957:53;34020:12;34035:5;34020:20;;34051:14;34076:78;34091:1;34083:4;:9;34076:78;;34109:8;;;;;:::i;:::-;;;;34140:2;34132:10;;;;;:::i;:::-;;;34076:78;;;34164:19;34196:6;34186:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34164:39;;34214:154;34230:1;34221:5;:10;34214:154;;34258:1;34248:11;;;;;:::i;:::-;;;34325:2;34317:5;:10;;;;:::i;:::-;34304:2;:24;;;;:::i;:::-;34291:39;;34274:6;34281;34274:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;34354:2;34345:11;;;;;:::i;:::-;;;34214:154;;;34392:6;34378:21;;;;;33684:723;;;;:::o;16891:98::-;16944:7;16971:10;16964:17;;16891:98;:::o;24250:1074::-;24477:7;:14;24463:3;:10;:28;24455:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24569:1;24555:16;;:2;:16;;;;24547:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24626:16;24645:12;:10;:12::i;:::-;24626:31;;24670:60;24691:8;24701:4;24707:2;24711:3;24716:7;24725:4;24670:20;:60::i;:::-;24748:9;24743:421;24767:3;:10;24763:1;:14;24743:421;;;24799:10;24812:3;24816:1;24812:6;;;;;;;;:::i;:::-;;;;;;;;24799:19;;24833:14;24850:7;24858:1;24850:10;;;;;;;;:::i;:::-;;;;;;;;24833:27;;24877:19;24899:9;:13;24909:2;24899:13;;;;;;;;;;;:19;24913:4;24899:19;;;;;;;;;;;;;;;;24877:41;;24956:6;24941:11;:21;;24933:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25089:6;25075:11;:20;25053:9;:13;25063:2;25053:13;;;;;;;;;;;:19;25067:4;25053:19;;;;;;;;;;;;;;;:42;;;;25146:6;25125:9;:13;25135:2;25125:13;;;;;;;;;;;:17;25139:2;25125:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24784:380;;;24779:3;;;;:::i;:::-;;;24743:421;;;;25211:2;25181:47;;25205:4;25181:47;;25195:8;25181:47;;;25215:3;25220:7;25181:47;;;;;;;:::i;:::-;;;;;;;;25241:75;25277:8;25287:4;25293:2;25297:3;25302:7;25311:4;25241:35;:75::i;:::-;24444:880;24250:1074;;;;;:::o;26657:599::-;26834:1;26815:21;;:7;:21;;;;26807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26887:16;26906:12;:10;:12::i;:::-;26887:31;;26931:107;26952:8;26970:1;26974:7;26983:21;27001:2;26983:17;:21::i;:::-;27006:25;27024:6;27006:17;:25::i;:::-;27033:4;26931:20;:107::i;:::-;27077:6;27051:9;:13;27061:2;27051:13;;;;;;;;;;;:22;27065:7;27051:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27136:7;27099:57;;27132:1;27099:57;;27114:8;27099:57;;;27145:2;27149:6;27099:57;;;;;;;:::i;:::-;;;;;;;;27169:79;27200:8;27218:1;27222:7;27231:2;27235:6;27243:4;27169:30;:79::i;:::-;26796:460;26657:599;;;;:::o;37547:173::-;37603:16;37622:6;;;;;;;;;;;37603:25;;37648:8;37639:6;;:17;;;;;;;;;;;;;;;;;;37703:8;37672:40;;37693:8;37672:40;;;;;;;;;;;;37592:128;37547:173;:::o;23072:820::-;23274:1;23260:16;;:2;:16;;;;23252:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:16;23350:12;:10;:12::i;:::-;23331:31;;23375:96;23396:8;23406:4;23412:2;23416:21;23434:2;23416:17;:21::i;:::-;23439:25;23457:6;23439:17;:25::i;:::-;23466:4;23375:20;:96::i;:::-;23484:19;23506:9;:13;23516:2;23506:13;;;;;;;;;;;:19;23520:4;23506:19;;;;;;;;;;;;;;;;23484:41;;23559:6;23544:11;:21;;23536:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23684:6;23670:11;:20;23648:9;:13;23658:2;23648:13;;;;;;;;;;;:19;23662:4;23648:19;;;;;;;;;;;;;;;:42;;;;23733:6;23712:9;:13;23722:2;23712:13;;;;;;;;;;;:17;23726:2;23712:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23788:2;23757:46;;23782:4;23757:46;;23772:8;23757:46;;;23792:2;23796:6;23757:46;;;;;;;:::i;:::-;;;;;;;;23816:68;23847:8;23857:4;23863:2;23867;23871:6;23879:4;23816:30;:68::i;:::-;23241:651;;23072:820;;;;;:::o;31358:221::-;;;;;;;:::o;32339:813::-;32579:15;:2;:13;;;:15::i;:::-;32575:570;;;32632:2;32615:43;;;32659:8;32669:4;32675:3;32680:7;32689:4;32615:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32611:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33007:6;33000:14;;;;;;;;;;;:::i;:::-;;;;;;;;32611:523;;;33056:62;;;;;;;;;;:::i;:::-;;;;;;;;32611:523;32788:48;;;32776:60;;;:8;:60;;;;32772:159;;32861:50;;;;;;;;;;:::i;:::-;;;;;;;;32772:159;32695:251;32575:570;32339:813;;;;;;:::o;33160:198::-;33226:16;33255:22;33294:1;33280:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33255:41;;33318:7;33307:5;33313:1;33307:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;33345:5;33338:12;;;33160:198;;;:::o;31587:744::-;31802:15;:2;:13;;;:15::i;:::-;31798:526;;;31855:2;31838:38;;;31877:8;31887:4;31893:2;31897:6;31905:4;31838:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31834:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32186:6;32179:14;;;;;;;;;;;:::i;:::-;;;;;;;;31834:479;;;32235:62;;;;;;;;;;:::i;:::-;;;;;;;;31834:479;31972:43;;;31960:55;;;:8;:55;;;;31956:154;;32040:50;;;;;;;;;;:::i;:::-;;;;;;;;31956:154;31911:214;31798:526;31587:744;;;;;;:::o;8927:387::-;8987:4;9195:12;9262:7;9250:20;9242:28;;9305:1;9298:4;:8;9291:15;;;8927:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:327::-;9890:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:119;;;9945:79;;:::i;:::-;9907:119;10065:1;10090:52;10134:7;10125:6;10114:9;10110:22;10090:52;:::i;:::-;10080:62;;10036:116;9832:327;;;;:::o;10165:349::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:119;;;10289:79;;:::i;:::-;10251:119;10409:1;10434:63;10489:7;10480:6;10469:9;10465:22;10434:63;:::i;:::-;10424:73;;10380:127;10165:349;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:329::-;11094:6;11143:2;11131:9;11122:7;11118:23;11114:32;11111:119;;;11149:79;;:::i;:::-;11111:119;11269:1;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11240:117;11035:329;;;;:::o;11370:684::-;11463:6;11471;11520:2;11508:9;11499:7;11495:23;11491:32;11488:119;;;11526:79;;:::i;:::-;11488:119;11646:1;11671:53;11716:7;11707:6;11696:9;11692:22;11671:53;:::i;:::-;11661:63;;11617:117;11801:2;11790:9;11786:18;11773:32;11832:18;11824:6;11821:30;11818:117;;;11854:79;;:::i;:::-;11818:117;11959:78;12029:7;12020:6;12009:9;12005:22;11959:78;:::i;:::-;11949:88;;11744:303;11370:684;;;;;:::o;12060:619::-;12137:6;12145;12153;12202:2;12190:9;12181:7;12177:23;12173:32;12170:119;;;12208:79;;:::i;:::-;12170:119;12328:1;12353:53;12398:7;12389:6;12378:9;12374:22;12353:53;:::i;:::-;12343:63;;12299:117;12455:2;12481:53;12526:7;12517:6;12506:9;12502:22;12481:53;:::i;:::-;12471:63;;12426:118;12583:2;12609:53;12654:7;12645:6;12634:9;12630:22;12609:53;:::i;:::-;12599:63;;12554:118;12060:619;;;;;:::o;12685:179::-;12754:10;12775:46;12817:3;12809:6;12775:46;:::i;:::-;12853:4;12848:3;12844:14;12830:28;;12685:179;;;;:::o;12870:118::-;12957:24;12975:5;12957:24;:::i;:::-;12952:3;12945:37;12870:118;;:::o;13024:732::-;13143:3;13172:54;13220:5;13172:54;:::i;:::-;13242:86;13321:6;13316:3;13242:86;:::i;:::-;13235:93;;13352:56;13402:5;13352:56;:::i;:::-;13431:7;13462:1;13447:284;13472:6;13469:1;13466:13;13447:284;;;13548:6;13542:13;13575:63;13634:3;13619:13;13575:63;:::i;:::-;13568:70;;13661:60;13714:6;13661:60;:::i;:::-;13651:70;;13507:224;13494:1;13491;13487:9;13482:14;;13447:284;;;13451:14;13747:3;13740:10;;13148:608;;;13024:732;;;;:::o;13762:109::-;13843:21;13858:5;13843:21;:::i;:::-;13838:3;13831:34;13762:109;;:::o;13877:360::-;13963:3;13991:38;14023:5;13991:38;:::i;:::-;14045:70;14108:6;14103:3;14045:70;:::i;:::-;14038:77;;14124:52;14169:6;14164:3;14157:4;14150:5;14146:16;14124:52;:::i;:::-;14201:29;14223:6;14201:29;:::i;:::-;14196:3;14192:39;14185:46;;13967:270;13877:360;;;;:::o;14243:364::-;14331:3;14359:39;14392:5;14359:39;:::i;:::-;14414:71;14478:6;14473:3;14414:71;:::i;:::-;14407:78;;14494:52;14539:6;14534:3;14527:4;14520:5;14516:16;14494:52;:::i;:::-;14571:29;14593:6;14571:29;:::i;:::-;14566:3;14562:39;14555:46;;14335:272;14243:364;;;;:::o;14613:377::-;14719:3;14747:39;14780:5;14747:39;:::i;:::-;14802:89;14884:6;14879:3;14802:89;:::i;:::-;14795:96;;14900:52;14945:6;14940:3;14933:4;14926:5;14922:16;14900:52;:::i;:::-;14977:6;14972:3;14968:16;14961:23;;14723:267;14613:377;;;;:::o;15020:845::-;15123:3;15160:5;15154:12;15189:36;15215:9;15189:36;:::i;:::-;15241:89;15323:6;15318:3;15241:89;:::i;:::-;15234:96;;15361:1;15350:9;15346:17;15377:1;15372:137;;;;15523:1;15518:341;;;;15339:520;;15372:137;15456:4;15452:9;15441;15437:25;15432:3;15425:38;15492:6;15487:3;15483:16;15476:23;;15372:137;;15518:341;15585:38;15617:5;15585:38;:::i;:::-;15645:1;15659:154;15673:6;15670:1;15667:13;15659:154;;;15747:7;15741:14;15737:1;15732:3;15728:11;15721:35;15797:1;15788:7;15784:15;15773:26;;15695:4;15692:1;15688:12;15683:17;;15659:154;;;15842:6;15837:3;15833:16;15826:23;;15525:334;;15339:520;;15127:738;;15020:845;;;;:::o;15871:366::-;16013:3;16034:67;16098:2;16093:3;16034:67;:::i;:::-;16027:74;;16110:93;16199:3;16110:93;:::i;:::-;16228:2;16223:3;16219:12;16212:19;;15871:366;;;:::o;16243:::-;16385:3;16406:67;16470:2;16465:3;16406:67;:::i;:::-;16399:74;;16482:93;16571:3;16482:93;:::i;:::-;16600:2;16595:3;16591:12;16584:19;;16243:366;;;:::o;16615:::-;16757:3;16778:67;16842:2;16837:3;16778:67;:::i;:::-;16771:74;;16854:93;16943:3;16854:93;:::i;:::-;16972:2;16967:3;16963:12;16956:19;;16615:366;;;:::o;16987:::-;17129:3;17150:67;17214:2;17209:3;17150:67;:::i;:::-;17143:74;;17226:93;17315:3;17226:93;:::i;:::-;17344:2;17339:3;17335:12;17328:19;;16987:366;;;:::o;17359:::-;17501:3;17522:67;17586:2;17581:3;17522:67;:::i;:::-;17515:74;;17598:93;17687:3;17598:93;:::i;:::-;17716:2;17711:3;17707:12;17700:19;;17359:366;;;:::o;17731:::-;17873:3;17894:67;17958:2;17953:3;17894:67;:::i;:::-;17887:74;;17970:93;18059:3;17970:93;:::i;:::-;18088:2;18083:3;18079:12;18072:19;;17731:366;;;:::o;18103:::-;18245:3;18266:67;18330:2;18325:3;18266:67;:::i;:::-;18259:74;;18342:93;18431:3;18342:93;:::i;:::-;18460:2;18455:3;18451:12;18444:19;;18103:366;;;:::o;18475:::-;18617:3;18638:67;18702:2;18697:3;18638:67;:::i;:::-;18631:74;;18714:93;18803:3;18714:93;:::i;:::-;18832:2;18827:3;18823:12;18816:19;;18475:366;;;:::o;18847:::-;18989:3;19010:67;19074:2;19069:3;19010:67;:::i;:::-;19003:74;;19086:93;19175:3;19086:93;:::i;:::-;19204:2;19199:3;19195:12;19188:19;;18847:366;;;:::o;19219:::-;19361:3;19382:67;19446:2;19441:3;19382:67;:::i;:::-;19375:74;;19458:93;19547:3;19458:93;:::i;:::-;19576:2;19571:3;19567:12;19560:19;;19219:366;;;:::o;19591:::-;19733:3;19754:67;19818:2;19813:3;19754:67;:::i;:::-;19747:74;;19830:93;19919:3;19830:93;:::i;:::-;19948:2;19943:3;19939:12;19932:19;;19591:366;;;:::o;19963:::-;20105:3;20126:67;20190:2;20185:3;20126:67;:::i;:::-;20119:74;;20202:93;20291:3;20202:93;:::i;:::-;20320:2;20315:3;20311:12;20304:19;;19963:366;;;:::o;20335:::-;20477:3;20498:67;20562:2;20557:3;20498:67;:::i;:::-;20491:74;;20574:93;20663:3;20574:93;:::i;:::-;20692:2;20687:3;20683:12;20676:19;;20335:366;;;:::o;20707:108::-;20784:24;20802:5;20784:24;:::i;:::-;20779:3;20772:37;20707:108;;:::o;20821:118::-;20908:24;20926:5;20908:24;:::i;:::-;20903:3;20896:37;20821:118;;:::o;20945:275::-;21077:3;21099:95;21190:3;21181:6;21099:95;:::i;:::-;21092:102;;21211:3;21204:10;;20945:275;;;;:::o;21226:429::-;21403:3;21425:92;21513:3;21504:6;21425:92;:::i;:::-;21418:99;;21534:95;21625:3;21616:6;21534:95;:::i;:::-;21527:102;;21646:3;21639:10;;21226:429;;;;;:::o;21661:222::-;21754:4;21792:2;21781:9;21777:18;21769:26;;21805:71;21873:1;21862:9;21858:17;21849:6;21805:71;:::i;:::-;21661:222;;;;:::o;21889:1053::-;22212:4;22250:3;22239:9;22235:19;22227:27;;22264:71;22332:1;22321:9;22317:17;22308:6;22264:71;:::i;:::-;22345:72;22413:2;22402:9;22398:18;22389:6;22345:72;:::i;:::-;22464:9;22458:4;22454:20;22449:2;22438:9;22434:18;22427:48;22492:108;22595:4;22586:6;22492:108;:::i;:::-;22484:116;;22647:9;22641:4;22637:20;22632:2;22621:9;22617:18;22610:48;22675:108;22778:4;22769:6;22675:108;:::i;:::-;22667:116;;22831:9;22825:4;22821:20;22815:3;22804:9;22800:19;22793:49;22859:76;22930:4;22921:6;22859:76;:::i;:::-;22851:84;;21889:1053;;;;;;;;:::o;22948:751::-;23171:4;23209:3;23198:9;23194:19;23186:27;;23223:71;23291:1;23280:9;23276:17;23267:6;23223:71;:::i;:::-;23304:72;23372:2;23361:9;23357:18;23348:6;23304:72;:::i;:::-;23386;23454:2;23443:9;23439:18;23430:6;23386:72;:::i;:::-;23468;23536:2;23525:9;23521:18;23512:6;23468:72;:::i;:::-;23588:9;23582:4;23578:20;23572:3;23561:9;23557:19;23550:49;23616:76;23687:4;23678:6;23616:76;:::i;:::-;23608:84;;22948:751;;;;;;;;:::o;23705:373::-;23848:4;23886:2;23875:9;23871:18;23863:26;;23935:9;23929:4;23925:20;23921:1;23910:9;23906:17;23899:47;23963:108;24066:4;24057:6;23963:108;:::i;:::-;23955:116;;23705:373;;;;:::o;24084:634::-;24305:4;24343:2;24332:9;24328:18;24320:26;;24392:9;24386:4;24382:20;24378:1;24367:9;24363:17;24356:47;24420:108;24523:4;24514:6;24420:108;:::i;:::-;24412:116;;24575:9;24569:4;24565:20;24560:2;24549:9;24545:18;24538:48;24603:108;24706:4;24697:6;24603:108;:::i;:::-;24595:116;;24084:634;;;;;:::o;24724:210::-;24811:4;24849:2;24838:9;24834:18;24826:26;;24862:65;24924:1;24913:9;24909:17;24900:6;24862:65;:::i;:::-;24724:210;;;;:::o;24940:313::-;25053:4;25091:2;25080:9;25076:18;25068:26;;25140:9;25134:4;25130:20;25126:1;25115:9;25111:17;25104:47;25168:78;25241:4;25232:6;25168:78;:::i;:::-;25160:86;;24940:313;;;;:::o;25259:419::-;25425:4;25463:2;25452:9;25448:18;25440:26;;25512:9;25506:4;25502:20;25498:1;25487:9;25483:17;25476:47;25540:131;25666:4;25540:131;:::i;:::-;25532:139;;25259:419;;;:::o;25684:::-;25850:4;25888:2;25877:9;25873:18;25865:26;;25937:9;25931:4;25927:20;25923:1;25912:9;25908:17;25901:47;25965:131;26091:4;25965:131;:::i;:::-;25957:139;;25684:419;;;:::o;26109:::-;26275:4;26313:2;26302:9;26298:18;26290:26;;26362:9;26356:4;26352:20;26348:1;26337:9;26333:17;26326:47;26390:131;26516:4;26390:131;:::i;:::-;26382:139;;26109:419;;;:::o;26534:::-;26700:4;26738:2;26727:9;26723:18;26715:26;;26787:9;26781:4;26777:20;26773:1;26762:9;26758:17;26751:47;26815:131;26941:4;26815:131;:::i;:::-;26807:139;;26534:419;;;:::o;26959:::-;27125:4;27163:2;27152:9;27148:18;27140:26;;27212:9;27206:4;27202:20;27198:1;27187:9;27183:17;27176:47;27240:131;27366:4;27240:131;:::i;:::-;27232:139;;26959:419;;;:::o;27384:::-;27550:4;27588:2;27577:9;27573:18;27565:26;;27637:9;27631:4;27627:20;27623:1;27612:9;27608:17;27601:47;27665:131;27791:4;27665:131;:::i;:::-;27657:139;;27384:419;;;:::o;27809:::-;27975:4;28013:2;28002:9;27998:18;27990:26;;28062:9;28056:4;28052:20;28048:1;28037:9;28033:17;28026:47;28090:131;28216:4;28090:131;:::i;:::-;28082:139;;27809:419;;;:::o;28234:::-;28400:4;28438:2;28427:9;28423:18;28415:26;;28487:9;28481:4;28477:20;28473:1;28462:9;28458:17;28451:47;28515:131;28641:4;28515:131;:::i;:::-;28507:139;;28234:419;;;:::o;28659:::-;28825:4;28863:2;28852:9;28848:18;28840:26;;28912:9;28906:4;28902:20;28898:1;28887:9;28883:17;28876:47;28940:131;29066:4;28940:131;:::i;:::-;28932:139;;28659:419;;;:::o;29084:::-;29250:4;29288:2;29277:9;29273:18;29265:26;;29337:9;29331:4;29327:20;29323:1;29312:9;29308:17;29301:47;29365:131;29491:4;29365:131;:::i;:::-;29357:139;;29084:419;;;:::o;29509:::-;29675:4;29713:2;29702:9;29698:18;29690:26;;29762:9;29756:4;29752:20;29748:1;29737:9;29733:17;29726:47;29790:131;29916:4;29790:131;:::i;:::-;29782:139;;29509:419;;;:::o;29934:::-;30100:4;30138:2;30127:9;30123:18;30115:26;;30187:9;30181:4;30177:20;30173:1;30162:9;30158:17;30151:47;30215:131;30341:4;30215:131;:::i;:::-;30207:139;;29934:419;;;:::o;30359:::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:222::-;30877:4;30915:2;30904:9;30900:18;30892:26;;30928:71;30996:1;30985:9;30981:17;30972:6;30928:71;:::i;:::-;30784:222;;;;:::o;31012:332::-;31133:4;31171:2;31160:9;31156:18;31148:26;;31184:71;31252:1;31241:9;31237:17;31228:6;31184:71;:::i;:::-;31265:72;31333:2;31322:9;31318:18;31309:6;31265:72;:::i;:::-;31012:332;;;;;:::o;31350:129::-;31384:6;31411:20;;:::i;:::-;31401:30;;31440:33;31468:4;31460:6;31440:33;:::i;:::-;31350:129;;;:::o;31485:75::-;31518:6;31551:2;31545:9;31535:19;;31485:75;:::o;31566:311::-;31643:4;31733:18;31725:6;31722:30;31719:56;;;31755:18;;:::i;:::-;31719:56;31805:4;31797:6;31793:17;31785:25;;31865:4;31859;31855:15;31847:23;;31566:311;;;:::o;31883:::-;31960:4;32050:18;32042:6;32039:30;32036:56;;;32072:18;;:::i;:::-;32036:56;32122:4;32114:6;32110:17;32102:25;;32182:4;32176;32172:15;32164:23;;31883:311;;;:::o;32200:307::-;32261:4;32351:18;32343:6;32340:30;32337:56;;;32373:18;;:::i;:::-;32337:56;32411:29;32433:6;32411:29;:::i;:::-;32403:37;;32495:4;32489;32485:15;32477:23;;32200:307;;;:::o;32513:308::-;32575:4;32665:18;32657:6;32654:30;32651:56;;;32687:18;;:::i;:::-;32651:56;32725:29;32747:6;32725:29;:::i;:::-;32717:37;;32809:4;32803;32799:15;32791:23;;32513:308;;;:::o;32827:132::-;32894:4;32917:3;32909:11;;32947:4;32942:3;32938:14;32930:22;;32827:132;;;:::o;32965:141::-;33014:4;33037:3;33029:11;;33060:3;33057:1;33050:14;33094:4;33091:1;33081:18;33073:26;;32965:141;;;:::o;33112:114::-;33179:6;33213:5;33207:12;33197:22;;33112:114;;;:::o;33232:98::-;33283:6;33317:5;33311:12;33301:22;;33232:98;;;:::o;33336:99::-;33388:6;33422:5;33416:12;33406:22;;33336:99;;;:::o;33441:113::-;33511:4;33543;33538:3;33534:14;33526:22;;33441:113;;;:::o;33560:184::-;33659:11;33693:6;33688:3;33681:19;33733:4;33728:3;33724:14;33709:29;;33560:184;;;;:::o;33750:168::-;33833:11;33867:6;33862:3;33855:19;33907:4;33902:3;33898:14;33883:29;;33750:168;;;;:::o;33924:169::-;34008:11;34042:6;34037:3;34030:19;34082:4;34077:3;34073:14;34058:29;;33924:169;;;;:::o;34099:148::-;34201:11;34238:3;34223:18;;34099:148;;;;:::o;34253:305::-;34293:3;34312:20;34330:1;34312:20;:::i;:::-;34307:25;;34346:20;34364:1;34346:20;:::i;:::-;34341:25;;34500:1;34432:66;34428:74;34425:1;34422:81;34419:107;;;34506:18;;:::i;:::-;34419:107;34550:1;34547;34543:9;34536:16;;34253:305;;;;:::o;34564:185::-;34604:1;34621:20;34639:1;34621:20;:::i;:::-;34616:25;;34655:20;34673:1;34655:20;:::i;:::-;34650:25;;34694:1;34684:35;;34699:18;;:::i;:::-;34684:35;34741:1;34738;34734:9;34729:14;;34564:185;;;;:::o;34755:191::-;34795:4;34815:20;34833:1;34815:20;:::i;:::-;34810:25;;34849:20;34867:1;34849:20;:::i;:::-;34844:25;;34888:1;34885;34882:8;34879:34;;;34893:18;;:::i;:::-;34879:34;34938:1;34935;34931:9;34923:17;;34755:191;;;;:::o;34952:96::-;34989:7;35018:24;35036:5;35018:24;:::i;:::-;35007:35;;34952:96;;;:::o;35054:90::-;35088:7;35131:5;35124:13;35117:21;35106:32;;35054:90;;;:::o;35150:149::-;35186:7;35226:66;35219:5;35215:78;35204:89;;35150:149;;;:::o;35305:126::-;35342:7;35382:42;35375:5;35371:54;35360:65;;35305:126;;;:::o;35437:77::-;35474:7;35503:5;35492:16;;35437:77;;;:::o;35520:154::-;35604:6;35599:3;35594;35581:30;35666:1;35657:6;35652:3;35648:16;35641:27;35520:154;;;:::o;35680:307::-;35748:1;35758:113;35772:6;35769:1;35766:13;35758:113;;;35857:1;35852:3;35848:11;35842:18;35838:1;35833:3;35829:11;35822:39;35794:2;35791:1;35787:10;35782:15;;35758:113;;;35889:6;35886:1;35883:13;35880:101;;;35969:1;35960:6;35955:3;35951:16;35944:27;35880:101;35729:258;35680:307;;;:::o;35993:320::-;36037:6;36074:1;36068:4;36064:12;36054:22;;36121:1;36115:4;36111:12;36142:18;36132:81;;36198:4;36190:6;36186:17;36176:27;;36132:81;36260:2;36252:6;36249:14;36229:18;36226:38;36223:84;;;36279:18;;:::i;:::-;36223:84;36044:269;35993:320;;;:::o;36319:281::-;36402:27;36424:4;36402:27;:::i;:::-;36394:6;36390:40;36532:6;36520:10;36517:22;36496:18;36484:10;36481:34;36478:62;36475:88;;;36543:18;;:::i;:::-;36475:88;36583:10;36579:2;36572:22;36362:238;36319:281;;:::o;36606:233::-;36645:3;36668:24;36686:5;36668:24;:::i;:::-;36659:33;;36714:66;36707:5;36704:77;36701:103;;;36784:18;;:::i;:::-;36701:103;36831:1;36824:5;36820:13;36813:20;;36606:233;;;:::o;36845:176::-;36877:1;36894:20;36912:1;36894:20;:::i;:::-;36889:25;;36928:20;36946:1;36928:20;:::i;:::-;36923:25;;36967:1;36957:35;;36972:18;;:::i;:::-;36957:35;37013:1;37010;37006:9;37001:14;;36845:176;;;;:::o;37027:180::-;37075:77;37072:1;37065:88;37172:4;37169:1;37162:15;37196:4;37193:1;37186:15;37213:180;37261:77;37258:1;37251:88;37358:4;37355:1;37348:15;37382:4;37379:1;37372:15;37399:180;37447:77;37444:1;37437:88;37544:4;37541:1;37534:15;37568:4;37565:1;37558:15;37585:180;37633:77;37630:1;37623:88;37730:4;37727:1;37720:15;37754:4;37751:1;37744:15;37771:180;37819:77;37816:1;37809:88;37916:4;37913:1;37906:15;37940:4;37937:1;37930:15;37957:183;37992:3;38030:1;38012:16;38009:23;38006:128;;;38068:1;38065;38062;38047:23;38090:34;38121:1;38115:8;38090:34;:::i;:::-;38083:41;;38006:128;37957:183;:::o;38146:117::-;38255:1;38252;38245:12;38269:117;38378:1;38375;38368:12;38392:117;38501:1;38498;38491:12;38515:117;38624:1;38621;38614:12;38638:117;38747:1;38744;38737:12;38761:102;38802:6;38853:2;38849:7;38844:2;38837:5;38833:14;38829:28;38819:38;;38761:102;;;:::o;38869:106::-;38913:8;38962:5;38957:3;38953:15;38932:36;;38869:106;;;:::o;38981:239::-;39121:34;39117:1;39109:6;39105:14;39098:58;39190:22;39185:2;39177:6;39173:15;39166:47;38981:239;:::o;39226:227::-;39366:34;39362:1;39354:6;39350:14;39343:58;39435:10;39430:2;39422:6;39418:15;39411:35;39226:227;:::o;39459:230::-;39599:34;39595:1;39587:6;39583:14;39576:58;39668:13;39663:2;39655:6;39651:15;39644:38;39459:230;:::o;39695:225::-;39835:34;39831:1;39823:6;39819:14;39812:58;39904:8;39899:2;39891:6;39887:15;39880:33;39695:225;:::o;39926:228::-;40066:34;40062:1;40054:6;40050:14;40043:58;40135:11;40130:2;40122:6;40118:15;40111:36;39926:228;:::o;40160:224::-;40300:34;40296:1;40288:6;40284:14;40277:58;40369:7;40364:2;40356:6;40352:15;40345:32;40160:224;:::o;40390:237::-;40530:34;40526:1;40518:6;40514:14;40507:58;40599:20;40594:2;40586:6;40582:15;40575:45;40390:237;:::o;40633:229::-;40773:34;40769:1;40761:6;40757:14;40750:58;40842:12;40837:2;40829:6;40825:15;40818:37;40633:229;:::o;40868:182::-;41008:34;41004:1;40996:6;40992:14;40985:58;40868:182;:::o;41056:228::-;41196:34;41192:1;41184:6;41180:14;41173:58;41265:11;41260:2;41252:6;41248:15;41241:36;41056:228;:::o;41290:::-;41430:34;41426:1;41418:6;41414:14;41407:58;41499:11;41494:2;41486:6;41482:15;41475:36;41290:228;:::o;41524:227::-;41664:34;41660:1;41652:6;41648:14;41641:58;41733:10;41728:2;41720:6;41716:15;41709:35;41524:227;:::o;41757:220::-;41897:34;41893:1;41885:6;41881:14;41874:58;41966:3;41961:2;41953:6;41949:15;41942:28;41757:220;:::o;41983:711::-;42022:3;42060:4;42042:16;42039:26;42036:39;;;42068:5;;42036:39;42097:20;;:::i;:::-;42172:1;42154:16;42150:24;42147:1;42141:4;42126:49;42205:4;42199:11;42304:16;42297:4;42289:6;42285:17;42282:39;42249:18;42241:6;42238:30;42222:113;42219:146;;;42350:5;;;;42219:146;42396:6;42390:4;42386:17;42432:3;42426:10;42459:18;42451:6;42448:30;42445:43;;;42481:5;;;;;;42445:43;42529:6;42522:4;42517:3;42513:14;42509:27;42588:1;42570:16;42566:24;42560:4;42556:35;42551:3;42548:44;42545:57;;;42595:5;;;;;;;42545:57;42612;42660:6;42654:4;42650:17;42642:6;42638:30;42632:4;42612:57;:::i;:::-;42685:3;42678:10;;42026:668;;;;;41983:711;;:::o;42700:122::-;42773:24;42791:5;42773:24;:::i;:::-;42766:5;42763:35;42753:63;;42812:1;42809;42802:12;42753:63;42700:122;:::o;42828:116::-;42898:21;42913:5;42898:21;:::i;:::-;42891:5;42888:32;42878:60;;42934:1;42931;42924:12;42878:60;42828:116;:::o;42950:120::-;43022:23;43039:5;43022:23;:::i;:::-;43015:5;43012:34;43002:62;;43060:1;43057;43050:12;43002:62;42950:120;:::o;43076:122::-;43149:24;43167:5;43149:24;:::i;:::-;43142:5;43139:35;43129:63;;43188:1;43185;43178:12;43129:63;43076:122;:::o

Swarm Source

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