ETH Price: $3,065.66 (+2.49%)
Gas: 4 Gwei

Token

Euro21 Football NFT (EURO21)
 

Overview

Max Total Supply

23,976 EURO21

Holders

9

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
noobsaibot21.eth
0x4e633af8b5b3549e970e61b7516ec53575dc7d94
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ERC1155OwnerCreate

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-13
*/

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

// File contracts/ERC1155OwnerCreate.sol

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

// File contracts/utils/introspection/IERC165.sol

// 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 contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

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

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

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

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

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

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

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

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must 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 contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;

/**
 * _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 contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}


// File contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File contracts/utils/Context.sol



pragma solidity ^0.8.0;

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

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


// File contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;

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


// File contracts/token/ERC1155/ERC1155.sol



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(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        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");
        _balances[id][from] = fromBalance - amount;
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, 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(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

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

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

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

        return array;
    }
}


// File contracts/access/Ownable.sol

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


// File contracts/utils/StringConcate.sol



pragma solidity ^0.8.0;

library StringConcate {
  // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
  function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) {
      bytes memory _ba = bytes(_a);
      bytes memory _bb = bytes(_b);
      bytes memory _bc = bytes(_c);
      bytes memory _bd = bytes(_d);
      bytes memory _be = bytes(_e);
      string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
      bytes memory babcde = bytes(abcde);
      uint k = 0;
      for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
      for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
      for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
      for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
      for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i];
      return string(babcde);
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
        return strConcat(_a, _b, "", "", "");
    }

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = bytes1(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }
}


// File contracts/mocks/ERC1155CreatorMock.sol



pragma solidity ^0.8.0;

contract ERC1155OwnerCreate is Ownable, ERC1155 {
    using StringConcate for string;

    mapping(uint256 => uint256) public tokenSupply;
    mapping(uint256 => string) public customUri;

    // Contract name
    string public name;
    // Contract symbol
    string public symbol;


    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri
    ) ERC1155(_uri) {
        name = _name;
        symbol = _symbol;
    }

    function exists(uint256 _id) public view virtual returns (bool) {
        return tokenSupply[_id] > 0;
    }

    function uri(uint256 _id)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(exists(_id), "ERC1155#uri: NONEXISTENT_TOKEN");
        bytes memory customUriBytes = bytes(customUri[_id]);
        if (customUriBytes.length > 0) {
            return customUri[_id];
        } else {
            return
                StringConcate.strConcat(
                    super.uri(0),
                    StringConcate.uint2str(_id)
                );
        }
    }

    function setURI(string memory newuri) public virtual onlyOwner {
        _setURI(newuri);
    }

    function setCustomURI(uint256 _tokenId, string memory _newURI)
        public
        virtual
        onlyOwner
    {
        customUri[_tokenId] = _newURI;
        emit URI(_newURI, _tokenId);
    }

    function create(
        address _initialOwner,
        uint256 _id,
        uint256 _initialSupply,
        string memory _uri,
        bytes memory _data
    ) public virtual onlyOwner returns (uint256) {
        require(!exists(_id), "token _id already exists");

        if (bytes(_uri).length > 0) {
            customUri[_id] = _uri;
            emit URI(_uri, _id);
        }

        _mint(_initialOwner, _id, _initialSupply, _data);
        tokenSupply[_id] = _initialSupply;
        return _id;
    }

    function createBatch(
        address[] calldata _owners,
        uint256[] calldata _ids,
        uint256[] calldata _initialSupplies,
        bytes calldata _data) external virtual onlyOwner {
          require(_owners.length == _ids.length && _owners.length == _initialSupplies.length, "ERC1155: lengths mismatch");
          for (uint256 i = 0; i < _owners.length; i++){
             _mint(_owners[i], _ids[i], _initialSupplies[i], _data);
             tokenSupply[_ids[i]] = _initialSupplies[i];
          }
        }

    /**
     * @dev Mints some amount of tokens to an address
     * @param _to          Address of the future owner of the token
     * @param _id          Token ID to mint
     * @param _quantity    Amount of tokens to mint
     * @param _data        Data to pass if receiver is contract
     */
    function mint(
        address _to,
        uint256 _id,
        uint256 _quantity,
        bytes memory _data
    ) public virtual onlyOwner{
        _mint(_to, _id, _quantity, _data);
        tokenSupply[_id] += _quantity;
    }

    /**
     * @dev Mint tokens for each id in _ids
     * @param _to          The address to mint tokens to
     * @param _ids         Array of ids to mint
     * @param _quantities  Array of amounts of tokens to mint per id
     * @param _data        Data to pass if receiver is contract
     */
    function batchMint(
        address _to,
        uint256[] memory _ids,
        uint256[] memory _quantities,
        bytes memory _data
    ) public virtual onlyOwner{
        require(_ids.length == _quantities.length, "ERC1155: _ids and _quantities length mismatch");
        for (uint256 i = 0; i < _ids.length; i++) {
            uint256 _id = _ids[i];
            uint256 quantity = _quantities[i];
            tokenSupply[_id] += quantity;
        }
        _mintBatch(_to, _ids, _quantities, _data);
    }

    function burn(uint256 _id, uint256 _quantity) public virtual {
      _burn(_msgSender(), _id, _quantity);
    }

    function burnBatch(uint256[] calldata _ids, uint256[] calldata _quantities) public virtual {
      _burnBatch(_msgSender(), _ids, _quantities);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","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":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_initialSupplies","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"createBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"customUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newURI","type":"string"}],"name":"setCustomURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200578e3803806200578e83398181016040528101906200003791906200027b565b8060006200004a6200013560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620000f9816200013d60201b60201c565b5082600690805190602001906200011292919062000159565b5081600790805190602001906200012b92919062000159565b505050506200044d565b600033905090565b80600390805190602001906200015592919062000159565b5050565b8280546200016790620003b9565b90600052602060002090601f0160209004810192826200018b5760008555620001d7565b82601f10620001a657805160ff1916838001178555620001d7565b82800160010185558215620001d7579182015b82811115620001d6578251825591602001919060010190620001b9565b5b509050620001e69190620001ea565b5090565b5b8082111562000205576000816000905550600101620001eb565b5090565b6000620002206200021a8462000350565b6200031c565b9050828152602081018484840111156200023957600080fd5b6200024684828562000383565b509392505050565b600082601f8301126200026057600080fd5b81516200027284826020860162000209565b91505092915050565b6000806000606084860312156200029157600080fd5b600084015167ffffffffffffffff811115620002ac57600080fd5b620002ba868287016200024e565b935050602084015167ffffffffffffffff811115620002d857600080fd5b620002e6868287016200024e565b925050604084015167ffffffffffffffff8111156200030457600080fd5b62000312868287016200024e565b9150509250925092565b6000604051905081810181811067ffffffffffffffff821117156200034657620003456200041e565b5b8060405250919050565b600067ffffffffffffffff8211156200036e576200036d6200041e565b5b601f19601f8301169050602081019050919050565b60005b83811015620003a357808201518184015260208101905062000386565b83811115620003b3576000848401525b50505050565b60006002820490506001821680620003d257607f821691505b60208210811415620003e957620003e8620003ef565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b615331806200045d6000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c8063715018a6116100c3578063a22cb4651161007c578063a22cb465146103e8578063b390c0ab14610404578063b48ab8b614610420578063e985e9c51461043c578063f242432a1461046c578063f2fde38b1461048857610157565b8063715018a61461033a578063731133e91461034457806383ca4b6f146103605780638a28a5a21461037c5780638da5cb5b146103ac57806395d89b41146103ca57610157565b80632eb2c2d6116101155780632eb2c2d61461025657806336a100d5146102725780633adf80b4146102a25780634e1273f4146102be5780634f558e79146102ee5780636cabdd3d1461031e57610157565b8062fdd58e1461015c57806301ffc9a71461018c57806302fe5305146101bc57806306fdde03146101d85780630e89341c146101f65780632693ebf214610226575b600080fd5b61017660048036038101906101719190613cd9565b6104a4565b6040516101839190614d2a565b60405180910390f35b6101a660048036038101906101a19190613fed565b61056e565b6040516101b39190614a8d565b60405180910390f35b6101d660048036038101906101d1919061403f565b610650565b005b6101e06106d8565b6040516101ed9190614aa8565b60405180910390f35b610210600480360381019061020b9190614080565b610766565b60405161021d9190614aa8565b60405180910390f35b610240600480360381019061023b9190614080565b610922565b60405161024d9190614d2a565b60405180910390f35b610270600480360381019061026b9190613aa4565b61093a565b005b61028c60048036038101906102879190613d90565b610d33565b6040516102999190614d2a565b60405180910390f35b6102bc60048036038101906102b791906140a9565b610e95565b005b6102d860048036038101906102d39190613f0c565b610f75565b6040516102e59190614a34565b60405180910390f35b61030860048036038101906103039190614080565b611126565b6040516103159190614a8d565b60405180910390f35b61033860048036038101906103339190613e37565b611145565b005b6103426113f7565b005b61035e60048036038101906103599190613d15565b611531565b005b61037a60048036038101906103759190613f78565b6115e9565b005b61039660048036038101906103919190614080565b611683565b6040516103a39190614aa8565b60405180910390f35b6103b4611723565b6040516103c19190614957565b60405180910390f35b6103d261174c565b6040516103df9190614aa8565b60405180910390f35b61040260048036038101906103fd9190613c9d565b6117da565b005b61041e600480360381019061041991906140fd565b61195b565b005b61043a60048036038101906104359190613bf2565b611971565b005b61045660048036038101906104519190613a68565b611b19565b6040516104639190614a8d565b60405180910390f35b61048660048036038101906104819190613b63565b611bad565b005b6104a2600480360381019061049d9190613a3f565b611ec8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90614b2a565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610649575061064882612071565b5b9050919050565b6106586120db565b73ffffffffffffffffffffffffffffffffffffffff16610676611723565b73ffffffffffffffffffffffffffffffffffffffff16146106cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c390614c4a565b60405180910390fd5b6106d5816120e3565b50565b600680546106e590615063565b80601f016020809104026020016040519081016040528092919081815260200182805461071190615063565b801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b505050505081565b606061077182611126565b6107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790614c6a565b60405180910390fd5b60006005600084815260200190815260200160002080546107d090615063565b80601f01602080910402602001604051908101604052809291908181526020018280546107fc90615063565b80156108495780601f1061081e57610100808354040283529160200191610849565b820191906000526020600020905b81548152906001019060200180831161082c57829003601f168201915b505050505090506000815111156108fe5760056000848152602001908152602001600020805461087890615063565b80601f01602080910402602001604051908101604052809291908181526020018280546108a490615063565b80156108f15780601f106108c6576101008083540402835291602001916108f1565b820191906000526020600020905b8154815290600101906020018083116108d457829003601f168201915b505050505091505061091d565b61091961090b60006120fd565b61091485612191565b61234d565b9150505b919050565b60046020528060005260406000206000915090505481565b815183511461097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590614cea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590614baa565b60405180910390fd5b6109f66120db565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a3c5750610a3b85610a366120db565b611b19565b5b610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7290614bca565b60405180910390fd5b6000610a856120db565b9050610a95818787878787612391565b60005b8451811015610c9e576000858281518110610adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610b21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614c2a565b60405180910390fd5b8181610bcf9190614f4f565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c839190614ec8565b9250508190555050505080610c9790615095565b9050610a98565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d15929190614a56565b60405180910390a4610d2b818787878787612399565b505050505050565b6000610d3d6120db565b73ffffffffffffffffffffffffffffffffffffffff16610d5b611723565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890614c4a565b60405180910390fd5b610dba85611126565b15610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614aea565b60405180910390fd5b600083511115610e655782600560008781526020019081526020016000209080519060200190610e2b929190613659565b50847f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b84604051610e5c9190614aa8565b60405180910390a25b610e7186868685612569565b83600460008781526020019081526020016000208190555084905095945050505050565b610e9d6120db565b73ffffffffffffffffffffffffffffffffffffffff16610ebb611723565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890614c4a565b60405180910390fd5b80600560008481526020019081526020016000209080519060200190610f38929190613659565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610f699190614aa8565b60405180910390a25050565b60608151835114610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290614cca565b60405180910390fd5b6000835167ffffffffffffffff811115610ffe577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561102c5781602001602082028036833780820191505090505b50905060005b845181101561111b576110c5858281518110611077577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106110b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104a4565b8282815181106110fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061111490615095565b9050611032565b508091505092915050565b6000806004600084815260200190815260200160002054119050919050565b61114d6120db565b73ffffffffffffffffffffffffffffffffffffffff1661116b611723565b73ffffffffffffffffffffffffffffffffffffffff16146111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890614c4a565b60405180910390fd5b85859050888890501480156111db57508383905088889050145b61121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190614c8a565b60405180910390fd5b60005b888890508110156113ec57611343898983818110611264577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906112799190613a3f565b8888848181106112b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358787858181106112f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612569565b84848281811061137c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460008989858181106113c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013581526020019081526020016000208190555080806113e490615095565b91505061121d565b505050505050505050565b6113ff6120db565b73ffffffffffffffffffffffffffffffffffffffff1661141d611723565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614c4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115396120db565b73ffffffffffffffffffffffffffffffffffffffff16611557611723565b73ffffffffffffffffffffffffffffffffffffffff16146115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490614c4a565b60405180910390fd5b6115b984848484612569565b816004600085815260200190815260200160002060008282546115dc9190614ec8565b9250508190555050505050565b61167d6115f46120db565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612700565b50505050565b600560205280600052604060002060009150905080546116a290615063565b80601f01602080910402602001604051908101604052809291908181526020018280546116ce90615063565b801561171b5780601f106116f05761010080835404028352916020019161171b565b820191906000526020600020905b8154815290600101906020018083116116fe57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007805461175990615063565b80601f016020809104026020016040519081016040528092919081815260200182805461178590615063565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff166117f96120db565b73ffffffffffffffffffffffffffffffffffffffff161415611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614caa565b60405180910390fd5b806002600061185d6120db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661190a6120db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194f9190614a8d565b60405180910390a35050565b61196d6119666120db565b8383612a08565b5050565b6119796120db565b73ffffffffffffffffffffffffffffffffffffffff16611997611723565b73ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614c4a565b60405180910390fd5b8151835114611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614bea565b60405180910390fd5b60005b8351811015611b06576000848281518110611a78577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611abd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080600460008481526020019081526020016000206000828254611aea9190614ec8565b9250508190555050508080611afe90615095565b915050611a34565b50611b1384848484612c30565b50505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1490614baa565b60405180910390fd5b611c256120db565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c6b5750611c6a85611c656120db565b611b19565b5b611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca190614b8a565b60405180910390fd5b6000611cb46120db565b9050611cd4818787611cc588612e9b565b611cce88612e9b565b87612391565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390614c2a565b60405180910390fd5b8381611d789190614f4f565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2c9190614ec8565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ea9929190614d45565b60405180910390a4611ebf828888888888612f61565b50505050505050565b611ed06120db565b73ffffffffffffffffffffffffffffffffffffffff16611eee611723565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90614c4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90614b4a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600390805190602001906120f9929190613659565b5050565b60606003805461210c90615063565b80601f016020809104026020016040519081016040528092919081815260200182805461213890615063565b80156121855780601f1061215a57610100808354040283529160200191612185565b820191906000526020600020905b81548152906001019060200180831161216857829003601f168201915b50505050509050919050565b606060008214156121d9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612348565b600082905060005b6000821461220b5780806121f490615095565b915050600a826122049190614f1e565b91506121e1565b60008167ffffffffffffffff81111561224d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561227f5781602001600182028036833780820191505090505b50905060006001836122919190614f4f565b90505b6000861461234057600a866122a991906150de565b60306122b59190614ec8565b60f81b8282806122c490615039565b9350815181106122fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a866123399190614f1e565b9550612294565b819450505050505b919050565b60606123898383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250613131565b905092915050565b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16613646565b15612561578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe959493929190614972565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190614016565b60015b6124d8576124556151e9565b80612460575061249d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124949190614aa8565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90614aca565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461255f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255690614b0a565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d090614d0a565b60405180910390fd5b60006125e36120db565b9050612604816000876125f588612e9b565b6125fe88612e9b565b87612391565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126649190614ec8565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516126e2929190614d45565b60405180910390a46126f981600087878787612f61565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790614c0a565b60405180910390fd5b80518251146127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90614cea565b60405180910390fd5b60006127be6120db565b90506127de81856000868660405180602001604052806000815250612391565b60005b8351811015612982576000848281518110612825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061286a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614b6a565b60405180910390fd5b81816129189190614f4f565b6001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061297a90615095565b9150506127e1565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516129fa929190614a56565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614c0a565b60405180910390fd5b6000612a826120db565b9050612ab281856000612a9487612e9b565b612a9d87612e9b565b60405180602001604052806000815250612391565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4190614b6a565b60405180910390fd5b8281612b569190614f4f565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612c21929190614d45565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0a565b60405180910390fd5b8151835114612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614cea565b60405180910390fd5b6000612cee6120db565b9050612cff81600087878787612391565b60005b8451811015612e0557838181518110612d44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160016000878481518110612d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612deb9190614ec8565b925050819055508080612dfd90615095565b915050612d02565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612e7d929190614a56565b60405180910390a4612e9481600087878787612399565b5050505050565b60606000600167ffffffffffffffff811115612ee0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f0e5781602001602082028036833780820191505090505b5090508281600081518110612f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612f808473ffffffffffffffffffffffffffffffffffffffff16613646565b15613129578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612fc69594939291906149da565b602060405180830381600087803b158015612fe057600080fd5b505af192505050801561301157506040513d601f19601f8201168201806040525081019061300e9190614016565b60015b6130a05761301d6151e9565b806130285750613065565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c9190614aa8565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309790614aca565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311e90614b0a565b60405180910390fd5b505b505050505050565b6060600086905060008690506000869050600086905060008690506000815183518551875189516131629190614ec8565b61316c9190614ec8565b6131769190614ec8565b6131809190614ec8565b67ffffffffffffffff8111156131bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131f15781602001600182028036833780820191505090505b50905060008190506000805b88518110156132d15788818151811061323f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061325690615095565b94508151811061328f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806132c990615095565b9150506131fd565b5060005b87518110156133a957878181518110613317577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061332e90615095565b945081518110613367577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806133a190615095565b9150506132d5565b5060005b8651811015613481578681815181106133ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061340690615095565b94508151811061343f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061347990615095565b9150506133ad565b5060005b8551811015613559578581815181106134c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8383806134de90615095565b945081518110613517577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061355190615095565b915050613485565b5060005b84518110156136315784818151811061359f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8383806135b690615095565b9450815181106135ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061362990615095565b91505061355d565b50819850505050505050505095945050505050565b600080823b905060008111915050919050565b82805461366590615063565b90600052602060002090601f01602090048101928261368757600085556136ce565b82601f106136a057805160ff19168380011785556136ce565b828001600101855582156136ce579182015b828111156136cd5782518255916020019190600101906136b2565b5b5090506136db91906136df565b5090565b5b808211156136f85760008160009055506001016136e0565b5090565b600061370f61370a84614d9f565b614d6e565b9050808382526020820190508285602086028201111561372e57600080fd5b60005b8581101561375e57816137448882613850565b845260208401935060208301925050600181019050613731565b5050509392505050565b600061377b61377684614dcb565b614d6e565b9050808382526020820190508285602086028201111561379a57600080fd5b60005b858110156137ca57816137b08882613a2a565b84526020840193506020830192505060018101905061379d565b5050509392505050565b60006137e76137e284614df7565b614d6e565b9050828152602081018484840111156137ff57600080fd5b61380a848285614ff7565b509392505050565b600061382561382084614e27565b614d6e565b90508281526020810184848401111561383d57600080fd5b613848848285614ff7565b509392505050565b60008135905061385f8161529f565b92915050565b60008083601f84011261387757600080fd5b8235905067ffffffffffffffff81111561389057600080fd5b6020830191508360208202830111156138a857600080fd5b9250929050565b600082601f8301126138c057600080fd5b81356138d08482602086016136fc565b91505092915050565b60008083601f8401126138eb57600080fd5b8235905067ffffffffffffffff81111561390457600080fd5b60208301915083602082028301111561391c57600080fd5b9250929050565b600082601f83011261393457600080fd5b8135613944848260208601613768565b91505092915050565b60008135905061395c816152b6565b92915050565b600081359050613971816152cd565b92915050565b600081519050613986816152cd565b92915050565b60008083601f84011261399e57600080fd5b8235905067ffffffffffffffff8111156139b757600080fd5b6020830191508360018202830111156139cf57600080fd5b9250929050565b600082601f8301126139e757600080fd5b81356139f78482602086016137d4565b91505092915050565b600082601f830112613a1157600080fd5b8135613a21848260208601613812565b91505092915050565b600081359050613a39816152e4565b92915050565b600060208284031215613a5157600080fd5b6000613a5f84828501613850565b91505092915050565b60008060408385031215613a7b57600080fd5b6000613a8985828601613850565b9250506020613a9a85828601613850565b9150509250929050565b600080600080600060a08688031215613abc57600080fd5b6000613aca88828901613850565b9550506020613adb88828901613850565b945050604086013567ffffffffffffffff811115613af857600080fd5b613b0488828901613923565b935050606086013567ffffffffffffffff811115613b2157600080fd5b613b2d88828901613923565b925050608086013567ffffffffffffffff811115613b4a57600080fd5b613b56888289016139d6565b9150509295509295909350565b600080600080600060a08688031215613b7b57600080fd5b6000613b8988828901613850565b9550506020613b9a88828901613850565b9450506040613bab88828901613a2a565b9350506060613bbc88828901613a2a565b925050608086013567ffffffffffffffff811115613bd957600080fd5b613be5888289016139d6565b9150509295509295909350565b60008060008060808587031215613c0857600080fd5b6000613c1687828801613850565b945050602085013567ffffffffffffffff811115613c3357600080fd5b613c3f87828801613923565b935050604085013567ffffffffffffffff811115613c5c57600080fd5b613c6887828801613923565b925050606085013567ffffffffffffffff811115613c8557600080fd5b613c91878288016139d6565b91505092959194509250565b60008060408385031215613cb057600080fd5b6000613cbe85828601613850565b9250506020613ccf8582860161394d565b9150509250929050565b60008060408385031215613cec57600080fd5b6000613cfa85828601613850565b9250506020613d0b85828601613a2a565b9150509250929050565b60008060008060808587031215613d2b57600080fd5b6000613d3987828801613850565b9450506020613d4a87828801613a2a565b9350506040613d5b87828801613a2a565b925050606085013567ffffffffffffffff811115613d7857600080fd5b613d84878288016139d6565b91505092959194509250565b600080600080600060a08688031215613da857600080fd5b6000613db688828901613850565b9550506020613dc788828901613a2a565b9450506040613dd888828901613a2a565b935050606086013567ffffffffffffffff811115613df557600080fd5b613e0188828901613a00565b925050608086013567ffffffffffffffff811115613e1e57600080fd5b613e2a888289016139d6565b9150509295509295909350565b6000806000806000806000806080898b031215613e5357600080fd5b600089013567ffffffffffffffff811115613e6d57600080fd5b613e798b828c01613865565b9850985050602089013567ffffffffffffffff811115613e9857600080fd5b613ea48b828c016138d9565b9650965050604089013567ffffffffffffffff811115613ec357600080fd5b613ecf8b828c016138d9565b9450945050606089013567ffffffffffffffff811115613eee57600080fd5b613efa8b828c0161398c565b92509250509295985092959890939650565b60008060408385031215613f1f57600080fd5b600083013567ffffffffffffffff811115613f3957600080fd5b613f45858286016138af565b925050602083013567ffffffffffffffff811115613f6257600080fd5b613f6e85828601613923565b9150509250929050565b60008060008060408587031215613f8e57600080fd5b600085013567ffffffffffffffff811115613fa857600080fd5b613fb4878288016138d9565b9450945050602085013567ffffffffffffffff811115613fd357600080fd5b613fdf878288016138d9565b925092505092959194509250565b600060208284031215613fff57600080fd5b600061400d84828501613962565b91505092915050565b60006020828403121561402857600080fd5b600061403684828501613977565b91505092915050565b60006020828403121561405157600080fd5b600082013567ffffffffffffffff81111561406b57600080fd5b61407784828501613a00565b91505092915050565b60006020828403121561409257600080fd5b60006140a084828501613a2a565b91505092915050565b600080604083850312156140bc57600080fd5b60006140ca85828601613a2a565b925050602083013567ffffffffffffffff8111156140e757600080fd5b6140f385828601613a00565b9150509250929050565b6000806040838503121561411057600080fd5b600061411e85828601613a2a565b925050602061412f85828601613a2a565b9150509250929050565b60006141458383614939565b60208301905092915050565b61415a81614f83565b82525050565b600061416b82614e67565b6141758185614e95565b935061418083614e57565b8060005b838110156141b15781516141988882614139565b97506141a383614e88565b925050600181019050614184565b5085935050505092915050565b6141c781614f95565b82525050565b60006141d882614e72565b6141e28185614ea6565b93506141f2818560208601615006565b6141fb816151cb565b840191505092915050565b600061421182614e7d565b61421b8185614eb7565b935061422b818560208601615006565b614234816151cb565b840191505092915050565b600061424c603483614eb7565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b60006142b2601883614eb7565b91507f746f6b656e205f696420616c72656164792065786973747300000000000000006000830152602082019050919050565b60006142f2602883614eb7565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614358602b83614eb7565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006143be602683614eb7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614424602483614eb7565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061448a602983614eb7565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b60006144f0602583614eb7565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614556603283614eb7565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006145bc602d83614eb7565b91507f455243313135353a205f69647320616e64205f7175616e746974696573206c6560008301527f6e677468206d69736d61746368000000000000000000000000000000000000006020830152604082019050919050565b6000614622602383614eb7565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614688602a83614eb7565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ee602083614eb7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061472e601e83614eb7565b91507f45524331313535237572693a204e4f4e4558495354454e545f544f4b454e00006000830152602082019050919050565b600061476e601983614eb7565b91507f455243313135353a206c656e67746873206d69736d61746368000000000000006000830152602082019050919050565b60006147ae602983614eb7565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000614814602983614eb7565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061487a602883614eb7565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148e0602183614eb7565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61494281614fed565b82525050565b61495181614fed565b82525050565b600060208201905061496c6000830184614151565b92915050565b600060a0820190506149876000830188614151565b6149946020830187614151565b81810360408301526149a68186614160565b905081810360608301526149ba8185614160565b905081810360808301526149ce81846141cd565b90509695505050505050565b600060a0820190506149ef6000830188614151565b6149fc6020830187614151565b614a096040830186614948565b614a166060830185614948565b8181036080830152614a2881846141cd565b90509695505050505050565b60006020820190508181036000830152614a4e8184614160565b905092915050565b60006040820190508181036000830152614a708185614160565b90508181036020830152614a848184614160565b90509392505050565b6000602082019050614aa260008301846141be565b92915050565b60006020820190508181036000830152614ac28184614206565b905092915050565b60006020820190508181036000830152614ae38161423f565b9050919050565b60006020820190508181036000830152614b03816142a5565b9050919050565b60006020820190508181036000830152614b23816142e5565b9050919050565b60006020820190508181036000830152614b438161434b565b9050919050565b60006020820190508181036000830152614b63816143b1565b9050919050565b60006020820190508181036000830152614b8381614417565b9050919050565b60006020820190508181036000830152614ba38161447d565b9050919050565b60006020820190508181036000830152614bc3816144e3565b9050919050565b60006020820190508181036000830152614be381614549565b9050919050565b60006020820190508181036000830152614c03816145af565b9050919050565b60006020820190508181036000830152614c2381614615565b9050919050565b60006020820190508181036000830152614c438161467b565b9050919050565b60006020820190508181036000830152614c63816146e1565b9050919050565b60006020820190508181036000830152614c8381614721565b9050919050565b60006020820190508181036000830152614ca381614761565b9050919050565b60006020820190508181036000830152614cc3816147a1565b9050919050565b60006020820190508181036000830152614ce381614807565b9050919050565b60006020820190508181036000830152614d038161486d565b9050919050565b60006020820190508181036000830152614d23816148d3565b9050919050565b6000602082019050614d3f6000830184614948565b92915050565b6000604082019050614d5a6000830185614948565b614d676020830184614948565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715614d9557614d9461519c565b5b8060405250919050565b600067ffffffffffffffff821115614dba57614db961519c565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614de657614de561519c565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e1257614e1161519c565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614e4257614e4161519c565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ed382614fed565b9150614ede83614fed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1357614f1261510f565b5b828201905092915050565b6000614f2982614fed565b9150614f3483614fed565b925082614f4457614f4361513e565b5b828204905092915050565b6000614f5a82614fed565b9150614f6583614fed565b925082821015614f7857614f7761510f565b5b828203905092915050565b6000614f8e82614fcd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615024578082015181840152602081019050615009565b83811115615033576000848401525b50505050565b600061504482614fed565b915060008214156150585761505761510f565b5b600182039050919050565b6000600282049050600182168061507b57607f821691505b6020821081141561508f5761508e61516d565b5b50919050565b60006150a082614fed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150d3576150d261510f565b5b600182019050919050565b60006150e982614fed565b91506150f483614fed565b9250826151045761510361513e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156151f95761529c565b60046000803e61520a6000516151dc565b6308c379a0811461521b575061529c565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156152475750505061529c565b808201805167ffffffffffffffff81111561526657505050505061529c565b8060208301013d85018111156152815750505050505061529c565b61528a826151cb565b60208401016040528296505050505050505b90565b6152a881614f83565b81146152b357600080fd5b50565b6152bf81614f95565b81146152ca57600080fd5b50565b6152d681614fa1565b81146152e157600080fd5b50565b6152ed81614fed565b81146152f857600080fd5b5056fea26469706673582212207c3ae48c4da0bf8a3b69e79f76e338994bbc30f6b8851241a64fce5c914b7e8b64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134575726f323120466f6f7462616c6c204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064555524f32310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f7777772e6575726f32316e66742e636f6d2f686f6d655f6d616c695f686f6d652f0000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101575760003560e01c8063715018a6116100c3578063a22cb4651161007c578063a22cb465146103e8578063b390c0ab14610404578063b48ab8b614610420578063e985e9c51461043c578063f242432a1461046c578063f2fde38b1461048857610157565b8063715018a61461033a578063731133e91461034457806383ca4b6f146103605780638a28a5a21461037c5780638da5cb5b146103ac57806395d89b41146103ca57610157565b80632eb2c2d6116101155780632eb2c2d61461025657806336a100d5146102725780633adf80b4146102a25780634e1273f4146102be5780634f558e79146102ee5780636cabdd3d1461031e57610157565b8062fdd58e1461015c57806301ffc9a71461018c57806302fe5305146101bc57806306fdde03146101d85780630e89341c146101f65780632693ebf214610226575b600080fd5b61017660048036038101906101719190613cd9565b6104a4565b6040516101839190614d2a565b60405180910390f35b6101a660048036038101906101a19190613fed565b61056e565b6040516101b39190614a8d565b60405180910390f35b6101d660048036038101906101d1919061403f565b610650565b005b6101e06106d8565b6040516101ed9190614aa8565b60405180910390f35b610210600480360381019061020b9190614080565b610766565b60405161021d9190614aa8565b60405180910390f35b610240600480360381019061023b9190614080565b610922565b60405161024d9190614d2a565b60405180910390f35b610270600480360381019061026b9190613aa4565b61093a565b005b61028c60048036038101906102879190613d90565b610d33565b6040516102999190614d2a565b60405180910390f35b6102bc60048036038101906102b791906140a9565b610e95565b005b6102d860048036038101906102d39190613f0c565b610f75565b6040516102e59190614a34565b60405180910390f35b61030860048036038101906103039190614080565b611126565b6040516103159190614a8d565b60405180910390f35b61033860048036038101906103339190613e37565b611145565b005b6103426113f7565b005b61035e60048036038101906103599190613d15565b611531565b005b61037a60048036038101906103759190613f78565b6115e9565b005b61039660048036038101906103919190614080565b611683565b6040516103a39190614aa8565b60405180910390f35b6103b4611723565b6040516103c19190614957565b60405180910390f35b6103d261174c565b6040516103df9190614aa8565b60405180910390f35b61040260048036038101906103fd9190613c9d565b6117da565b005b61041e600480360381019061041991906140fd565b61195b565b005b61043a60048036038101906104359190613bf2565b611971565b005b61045660048036038101906104519190613a68565b611b19565b6040516104639190614a8d565b60405180910390f35b61048660048036038101906104819190613b63565b611bad565b005b6104a2600480360381019061049d9190613a3f565b611ec8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90614b2a565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610649575061064882612071565b5b9050919050565b6106586120db565b73ffffffffffffffffffffffffffffffffffffffff16610676611723565b73ffffffffffffffffffffffffffffffffffffffff16146106cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c390614c4a565b60405180910390fd5b6106d5816120e3565b50565b600680546106e590615063565b80601f016020809104026020016040519081016040528092919081815260200182805461071190615063565b801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b505050505081565b606061077182611126565b6107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790614c6a565b60405180910390fd5b60006005600084815260200190815260200160002080546107d090615063565b80601f01602080910402602001604051908101604052809291908181526020018280546107fc90615063565b80156108495780601f1061081e57610100808354040283529160200191610849565b820191906000526020600020905b81548152906001019060200180831161082c57829003601f168201915b505050505090506000815111156108fe5760056000848152602001908152602001600020805461087890615063565b80601f01602080910402602001604051908101604052809291908181526020018280546108a490615063565b80156108f15780601f106108c6576101008083540402835291602001916108f1565b820191906000526020600020905b8154815290600101906020018083116108d457829003601f168201915b505050505091505061091d565b61091961090b60006120fd565b61091485612191565b61234d565b9150505b919050565b60046020528060005260406000206000915090505481565b815183511461097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590614cea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590614baa565b60405180910390fd5b6109f66120db565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a3c5750610a3b85610a366120db565b611b19565b5b610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7290614bca565b60405180910390fd5b6000610a856120db565b9050610a95818787878787612391565b60005b8451811015610c9e576000858281518110610adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610b21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614c2a565b60405180910390fd5b8181610bcf9190614f4f565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c839190614ec8565b9250508190555050505080610c9790615095565b9050610a98565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d15929190614a56565b60405180910390a4610d2b818787878787612399565b505050505050565b6000610d3d6120db565b73ffffffffffffffffffffffffffffffffffffffff16610d5b611723565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890614c4a565b60405180910390fd5b610dba85611126565b15610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614aea565b60405180910390fd5b600083511115610e655782600560008781526020019081526020016000209080519060200190610e2b929190613659565b50847f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b84604051610e5c9190614aa8565b60405180910390a25b610e7186868685612569565b83600460008781526020019081526020016000208190555084905095945050505050565b610e9d6120db565b73ffffffffffffffffffffffffffffffffffffffff16610ebb611723565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890614c4a565b60405180910390fd5b80600560008481526020019081526020016000209080519060200190610f38929190613659565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610f699190614aa8565b60405180910390a25050565b60608151835114610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290614cca565b60405180910390fd5b6000835167ffffffffffffffff811115610ffe577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561102c5781602001602082028036833780820191505090505b50905060005b845181101561111b576110c5858281518110611077577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106110b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104a4565b8282815181106110fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061111490615095565b9050611032565b508091505092915050565b6000806004600084815260200190815260200160002054119050919050565b61114d6120db565b73ffffffffffffffffffffffffffffffffffffffff1661116b611723565b73ffffffffffffffffffffffffffffffffffffffff16146111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890614c4a565b60405180910390fd5b85859050888890501480156111db57508383905088889050145b61121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190614c8a565b60405180910390fd5b60005b888890508110156113ec57611343898983818110611264577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906112799190613a3f565b8888848181106112b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358787858181106112f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612569565b84848281811061137c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460008989858181106113c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013581526020019081526020016000208190555080806113e490615095565b91505061121d565b505050505050505050565b6113ff6120db565b73ffffffffffffffffffffffffffffffffffffffff1661141d611723565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614c4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115396120db565b73ffffffffffffffffffffffffffffffffffffffff16611557611723565b73ffffffffffffffffffffffffffffffffffffffff16146115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490614c4a565b60405180910390fd5b6115b984848484612569565b816004600085815260200190815260200160002060008282546115dc9190614ec8565b9250508190555050505050565b61167d6115f46120db565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612700565b50505050565b600560205280600052604060002060009150905080546116a290615063565b80601f01602080910402602001604051908101604052809291908181526020018280546116ce90615063565b801561171b5780601f106116f05761010080835404028352916020019161171b565b820191906000526020600020905b8154815290600101906020018083116116fe57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007805461175990615063565b80601f016020809104026020016040519081016040528092919081815260200182805461178590615063565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff166117f96120db565b73ffffffffffffffffffffffffffffffffffffffff161415611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614caa565b60405180910390fd5b806002600061185d6120db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661190a6120db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194f9190614a8d565b60405180910390a35050565b61196d6119666120db565b8383612a08565b5050565b6119796120db565b73ffffffffffffffffffffffffffffffffffffffff16611997611723565b73ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614c4a565b60405180910390fd5b8151835114611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614bea565b60405180910390fd5b60005b8351811015611b06576000848281518110611a78577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611abd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080600460008481526020019081526020016000206000828254611aea9190614ec8565b9250508190555050508080611afe90615095565b915050611a34565b50611b1384848484612c30565b50505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1490614baa565b60405180910390fd5b611c256120db565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c6b5750611c6a85611c656120db565b611b19565b5b611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca190614b8a565b60405180910390fd5b6000611cb46120db565b9050611cd4818787611cc588612e9b565b611cce88612e9b565b87612391565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390614c2a565b60405180910390fd5b8381611d789190614f4f565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2c9190614ec8565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ea9929190614d45565b60405180910390a4611ebf828888888888612f61565b50505050505050565b611ed06120db565b73ffffffffffffffffffffffffffffffffffffffff16611eee611723565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90614c4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90614b4a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600390805190602001906120f9929190613659565b5050565b60606003805461210c90615063565b80601f016020809104026020016040519081016040528092919081815260200182805461213890615063565b80156121855780601f1061215a57610100808354040283529160200191612185565b820191906000526020600020905b81548152906001019060200180831161216857829003601f168201915b50505050509050919050565b606060008214156121d9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612348565b600082905060005b6000821461220b5780806121f490615095565b915050600a826122049190614f1e565b91506121e1565b60008167ffffffffffffffff81111561224d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561227f5781602001600182028036833780820191505090505b50905060006001836122919190614f4f565b90505b6000861461234057600a866122a991906150de565b60306122b59190614ec8565b60f81b8282806122c490615039565b9350815181106122fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a866123399190614f1e565b9550612294565b819450505050505b919050565b60606123898383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250613131565b905092915050565b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16613646565b15612561578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe959493929190614972565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190614016565b60015b6124d8576124556151e9565b80612460575061249d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124949190614aa8565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90614aca565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461255f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255690614b0a565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d090614d0a565b60405180910390fd5b60006125e36120db565b9050612604816000876125f588612e9b565b6125fe88612e9b565b87612391565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126649190614ec8565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516126e2929190614d45565b60405180910390a46126f981600087878787612f61565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790614c0a565b60405180910390fd5b80518251146127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90614cea565b60405180910390fd5b60006127be6120db565b90506127de81856000868660405180602001604052806000815250612391565b60005b8351811015612982576000848281518110612825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061286a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614b6a565b60405180910390fd5b81816129189190614f4f565b6001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061297a90615095565b9150506127e1565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516129fa929190614a56565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614c0a565b60405180910390fd5b6000612a826120db565b9050612ab281856000612a9487612e9b565b612a9d87612e9b565b60405180602001604052806000815250612391565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4190614b6a565b60405180910390fd5b8281612b569190614f4f565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612c21929190614d45565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0a565b60405180910390fd5b8151835114612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614cea565b60405180910390fd5b6000612cee6120db565b9050612cff81600087878787612391565b60005b8451811015612e0557838181518110612d44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160016000878481518110612d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612deb9190614ec8565b925050819055508080612dfd90615095565b915050612d02565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612e7d929190614a56565b60405180910390a4612e9481600087878787612399565b5050505050565b60606000600167ffffffffffffffff811115612ee0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f0e5781602001602082028036833780820191505090505b5090508281600081518110612f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612f808473ffffffffffffffffffffffffffffffffffffffff16613646565b15613129578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612fc69594939291906149da565b602060405180830381600087803b158015612fe057600080fd5b505af192505050801561301157506040513d601f19601f8201168201806040525081019061300e9190614016565b60015b6130a05761301d6151e9565b806130285750613065565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c9190614aa8565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309790614aca565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311e90614b0a565b60405180910390fd5b505b505050505050565b6060600086905060008690506000869050600086905060008690506000815183518551875189516131629190614ec8565b61316c9190614ec8565b6131769190614ec8565b6131809190614ec8565b67ffffffffffffffff8111156131bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131f15781602001600182028036833780820191505090505b50905060008190506000805b88518110156132d15788818151811061323f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061325690615095565b94508151811061328f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806132c990615095565b9150506131fd565b5060005b87518110156133a957878181518110613317577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061332e90615095565b945081518110613367577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806133a190615095565b9150506132d5565b5060005b8651811015613481578681815181106133ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b83838061340690615095565b94508151811061343f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061347990615095565b9150506133ad565b5060005b8551811015613559578581815181106134c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8383806134de90615095565b945081518110613517577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061355190615095565b915050613485565b5060005b84518110156136315784818151811061359f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8383806135b690615095565b9450815181106135ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061362990615095565b91505061355d565b50819850505050505050505095945050505050565b600080823b905060008111915050919050565b82805461366590615063565b90600052602060002090601f01602090048101928261368757600085556136ce565b82601f106136a057805160ff19168380011785556136ce565b828001600101855582156136ce579182015b828111156136cd5782518255916020019190600101906136b2565b5b5090506136db91906136df565b5090565b5b808211156136f85760008160009055506001016136e0565b5090565b600061370f61370a84614d9f565b614d6e565b9050808382526020820190508285602086028201111561372e57600080fd5b60005b8581101561375e57816137448882613850565b845260208401935060208301925050600181019050613731565b5050509392505050565b600061377b61377684614dcb565b614d6e565b9050808382526020820190508285602086028201111561379a57600080fd5b60005b858110156137ca57816137b08882613a2a565b84526020840193506020830192505060018101905061379d565b5050509392505050565b60006137e76137e284614df7565b614d6e565b9050828152602081018484840111156137ff57600080fd5b61380a848285614ff7565b509392505050565b600061382561382084614e27565b614d6e565b90508281526020810184848401111561383d57600080fd5b613848848285614ff7565b509392505050565b60008135905061385f8161529f565b92915050565b60008083601f84011261387757600080fd5b8235905067ffffffffffffffff81111561389057600080fd5b6020830191508360208202830111156138a857600080fd5b9250929050565b600082601f8301126138c057600080fd5b81356138d08482602086016136fc565b91505092915050565b60008083601f8401126138eb57600080fd5b8235905067ffffffffffffffff81111561390457600080fd5b60208301915083602082028301111561391c57600080fd5b9250929050565b600082601f83011261393457600080fd5b8135613944848260208601613768565b91505092915050565b60008135905061395c816152b6565b92915050565b600081359050613971816152cd565b92915050565b600081519050613986816152cd565b92915050565b60008083601f84011261399e57600080fd5b8235905067ffffffffffffffff8111156139b757600080fd5b6020830191508360018202830111156139cf57600080fd5b9250929050565b600082601f8301126139e757600080fd5b81356139f78482602086016137d4565b91505092915050565b600082601f830112613a1157600080fd5b8135613a21848260208601613812565b91505092915050565b600081359050613a39816152e4565b92915050565b600060208284031215613a5157600080fd5b6000613a5f84828501613850565b91505092915050565b60008060408385031215613a7b57600080fd5b6000613a8985828601613850565b9250506020613a9a85828601613850565b9150509250929050565b600080600080600060a08688031215613abc57600080fd5b6000613aca88828901613850565b9550506020613adb88828901613850565b945050604086013567ffffffffffffffff811115613af857600080fd5b613b0488828901613923565b935050606086013567ffffffffffffffff811115613b2157600080fd5b613b2d88828901613923565b925050608086013567ffffffffffffffff811115613b4a57600080fd5b613b56888289016139d6565b9150509295509295909350565b600080600080600060a08688031215613b7b57600080fd5b6000613b8988828901613850565b9550506020613b9a88828901613850565b9450506040613bab88828901613a2a565b9350506060613bbc88828901613a2a565b925050608086013567ffffffffffffffff811115613bd957600080fd5b613be5888289016139d6565b9150509295509295909350565b60008060008060808587031215613c0857600080fd5b6000613c1687828801613850565b945050602085013567ffffffffffffffff811115613c3357600080fd5b613c3f87828801613923565b935050604085013567ffffffffffffffff811115613c5c57600080fd5b613c6887828801613923565b925050606085013567ffffffffffffffff811115613c8557600080fd5b613c91878288016139d6565b91505092959194509250565b60008060408385031215613cb057600080fd5b6000613cbe85828601613850565b9250506020613ccf8582860161394d565b9150509250929050565b60008060408385031215613cec57600080fd5b6000613cfa85828601613850565b9250506020613d0b85828601613a2a565b9150509250929050565b60008060008060808587031215613d2b57600080fd5b6000613d3987828801613850565b9450506020613d4a87828801613a2a565b9350506040613d5b87828801613a2a565b925050606085013567ffffffffffffffff811115613d7857600080fd5b613d84878288016139d6565b91505092959194509250565b600080600080600060a08688031215613da857600080fd5b6000613db688828901613850565b9550506020613dc788828901613a2a565b9450506040613dd888828901613a2a565b935050606086013567ffffffffffffffff811115613df557600080fd5b613e0188828901613a00565b925050608086013567ffffffffffffffff811115613e1e57600080fd5b613e2a888289016139d6565b9150509295509295909350565b6000806000806000806000806080898b031215613e5357600080fd5b600089013567ffffffffffffffff811115613e6d57600080fd5b613e798b828c01613865565b9850985050602089013567ffffffffffffffff811115613e9857600080fd5b613ea48b828c016138d9565b9650965050604089013567ffffffffffffffff811115613ec357600080fd5b613ecf8b828c016138d9565b9450945050606089013567ffffffffffffffff811115613eee57600080fd5b613efa8b828c0161398c565b92509250509295985092959890939650565b60008060408385031215613f1f57600080fd5b600083013567ffffffffffffffff811115613f3957600080fd5b613f45858286016138af565b925050602083013567ffffffffffffffff811115613f6257600080fd5b613f6e85828601613923565b9150509250929050565b60008060008060408587031215613f8e57600080fd5b600085013567ffffffffffffffff811115613fa857600080fd5b613fb4878288016138d9565b9450945050602085013567ffffffffffffffff811115613fd357600080fd5b613fdf878288016138d9565b925092505092959194509250565b600060208284031215613fff57600080fd5b600061400d84828501613962565b91505092915050565b60006020828403121561402857600080fd5b600061403684828501613977565b91505092915050565b60006020828403121561405157600080fd5b600082013567ffffffffffffffff81111561406b57600080fd5b61407784828501613a00565b91505092915050565b60006020828403121561409257600080fd5b60006140a084828501613a2a565b91505092915050565b600080604083850312156140bc57600080fd5b60006140ca85828601613a2a565b925050602083013567ffffffffffffffff8111156140e757600080fd5b6140f385828601613a00565b9150509250929050565b6000806040838503121561411057600080fd5b600061411e85828601613a2a565b925050602061412f85828601613a2a565b9150509250929050565b60006141458383614939565b60208301905092915050565b61415a81614f83565b82525050565b600061416b82614e67565b6141758185614e95565b935061418083614e57565b8060005b838110156141b15781516141988882614139565b97506141a383614e88565b925050600181019050614184565b5085935050505092915050565b6141c781614f95565b82525050565b60006141d882614e72565b6141e28185614ea6565b93506141f2818560208601615006565b6141fb816151cb565b840191505092915050565b600061421182614e7d565b61421b8185614eb7565b935061422b818560208601615006565b614234816151cb565b840191505092915050565b600061424c603483614eb7565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b60006142b2601883614eb7565b91507f746f6b656e205f696420616c72656164792065786973747300000000000000006000830152602082019050919050565b60006142f2602883614eb7565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614358602b83614eb7565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006143be602683614eb7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614424602483614eb7565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061448a602983614eb7565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b60006144f0602583614eb7565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614556603283614eb7565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006145bc602d83614eb7565b91507f455243313135353a205f69647320616e64205f7175616e746974696573206c6560008301527f6e677468206d69736d61746368000000000000000000000000000000000000006020830152604082019050919050565b6000614622602383614eb7565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614688602a83614eb7565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ee602083614eb7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061472e601e83614eb7565b91507f45524331313535237572693a204e4f4e4558495354454e545f544f4b454e00006000830152602082019050919050565b600061476e601983614eb7565b91507f455243313135353a206c656e67746873206d69736d61746368000000000000006000830152602082019050919050565b60006147ae602983614eb7565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000614814602983614eb7565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061487a602883614eb7565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148e0602183614eb7565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61494281614fed565b82525050565b61495181614fed565b82525050565b600060208201905061496c6000830184614151565b92915050565b600060a0820190506149876000830188614151565b6149946020830187614151565b81810360408301526149a68186614160565b905081810360608301526149ba8185614160565b905081810360808301526149ce81846141cd565b90509695505050505050565b600060a0820190506149ef6000830188614151565b6149fc6020830187614151565b614a096040830186614948565b614a166060830185614948565b8181036080830152614a2881846141cd565b90509695505050505050565b60006020820190508181036000830152614a4e8184614160565b905092915050565b60006040820190508181036000830152614a708185614160565b90508181036020830152614a848184614160565b90509392505050565b6000602082019050614aa260008301846141be565b92915050565b60006020820190508181036000830152614ac28184614206565b905092915050565b60006020820190508181036000830152614ae38161423f565b9050919050565b60006020820190508181036000830152614b03816142a5565b9050919050565b60006020820190508181036000830152614b23816142e5565b9050919050565b60006020820190508181036000830152614b438161434b565b9050919050565b60006020820190508181036000830152614b63816143b1565b9050919050565b60006020820190508181036000830152614b8381614417565b9050919050565b60006020820190508181036000830152614ba38161447d565b9050919050565b60006020820190508181036000830152614bc3816144e3565b9050919050565b60006020820190508181036000830152614be381614549565b9050919050565b60006020820190508181036000830152614c03816145af565b9050919050565b60006020820190508181036000830152614c2381614615565b9050919050565b60006020820190508181036000830152614c438161467b565b9050919050565b60006020820190508181036000830152614c63816146e1565b9050919050565b60006020820190508181036000830152614c8381614721565b9050919050565b60006020820190508181036000830152614ca381614761565b9050919050565b60006020820190508181036000830152614cc3816147a1565b9050919050565b60006020820190508181036000830152614ce381614807565b9050919050565b60006020820190508181036000830152614d038161486d565b9050919050565b60006020820190508181036000830152614d23816148d3565b9050919050565b6000602082019050614d3f6000830184614948565b92915050565b6000604082019050614d5a6000830185614948565b614d676020830184614948565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715614d9557614d9461519c565b5b8060405250919050565b600067ffffffffffffffff821115614dba57614db961519c565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614de657614de561519c565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e1257614e1161519c565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614e4257614e4161519c565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ed382614fed565b9150614ede83614fed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1357614f1261510f565b5b828201905092915050565b6000614f2982614fed565b9150614f3483614fed565b925082614f4457614f4361513e565b5b828204905092915050565b6000614f5a82614fed565b9150614f6583614fed565b925082821015614f7857614f7761510f565b5b828203905092915050565b6000614f8e82614fcd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615024578082015181840152602081019050615009565b83811115615033576000848401525b50505050565b600061504482614fed565b915060008214156150585761505761510f565b5b600182039050919050565b6000600282049050600182168061507b57607f821691505b6020821081141561508f5761508e61516d565b5b50919050565b60006150a082614fed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150d3576150d261510f565b5b600182019050919050565b60006150e982614fed565b91506150f483614fed565b9250826151045761510361513e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156151f95761529c565b60046000803e61520a6000516151dc565b6308c379a0811461521b575061529c565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156152475750505061529c565b808201805167ffffffffffffffff81111561526657505050505061529c565b8060208301013d85018111156152815750505050505061529c565b61528a826151cb565b60208401016040528296505050505050505b90565b6152a881614f83565b81146152b357600080fd5b50565b6152bf81614f95565b81146152ca57600080fd5b50565b6152d681614fa1565b81146152e157600080fd5b50565b6152ed81614fed565b81146152f857600080fd5b5056fea26469706673582212207c3ae48c4da0bf8a3b69e79f76e338994bbc30f6b8851241a64fce5c914b7e8b64736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134575726f323120466f6f7462616c6c204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064555524f32310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f7777772e6575726f32316e66742e636f6d2f686f6d655f6d616c695f686f6d652f0000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Euro21 Football NFT
Arg [1] : _symbol (string): EURO21
Arg [2] : _uri (string): https://www.euro21nft.com/home_mali_home/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 4575726f323120466f6f7462616c6c204e465400000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4555524f32310000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [8] : 68747470733a2f2f7777772e6575726f32316e66742e636f6d2f686f6d655f6d
Arg [9] : 616c695f686f6d652f0000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36131:4212:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19914:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18950:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37285:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36352:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36740:537;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36225:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22617:1239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37604:527;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37390:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20311:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36622:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38139:532;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33413:148;;;:::i;:::-;;38984:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40189:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36278:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32762:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36401:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20933:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40068:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39535:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21316:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21556:984;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19914:231;20000:7;20047:1;20028:21;;:7;:21;;;;20020:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20115:9;:13;20125:2;20115:13;;;;;;;;;;;:22;20129:7;20115:22;;;;;;;;;;;;;;;;20108:29;;19914:231;;;;:::o;18950:297::-;19052:4;19091:26;19076:41;;;:11;:41;;;;:110;;;;19149:37;19134:52;;;:11;:52;;;;19076:110;:163;;;;19203:36;19227:11;19203:23;:36::i;:::-;19076:163;19069:170;;18950:297;;;:::o;37285:97::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37359:15:::1;37367:6;37359:7;:15::i;:::-;37285:97:::0;:::o;36352:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36740:537::-;36849:13;36888:11;36895:3;36888:6;:11::i;:::-;36880:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36945:27;36981:9;:14;36991:3;36981:14;;;;;;;;;;;36945:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37035:1;37011:14;:21;:25;37007:263;;;37060:9;:14;37070:3;37060:14;;;;;;;;;;;37053:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37007:263;37131:127;37177:12;37187:1;37177:9;:12::i;:::-;37212:27;37235:3;37212:22;:27::i;:::-;37131:23;:127::i;:::-;37107:151;;;36740:537;;;;:::o;36225:46::-;;;;;;;;;;;;;;;;;:::o;22617:1239::-;22882:7;:14;22868:3;:10;:28;22860:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22974:1;22960:16;;:2;:16;;;;22952:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:12;:10;:12::i;:::-;23051:20;;:4;:20;;;:60;;;;23075:36;23092:4;23098:12;:10;:12::i;:::-;23075:16;:36::i;:::-;23051:60;23029:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23202:16;23221:12;:10;:12::i;:::-;23202:31;;23246:60;23267:8;23277:4;23283:2;23287:3;23292:7;23301:4;23246:20;:60::i;:::-;23324:9;23319:377;23343:3;:10;23339:1;:14;23319:377;;;23375:10;23388:3;23392:1;23388:6;;;;;;;;;;;;;;;;;;;;;;23375:19;;23409:14;23426:7;23434:1;23426:10;;;;;;;;;;;;;;;;;;;;;;23409:27;;23453:19;23475:9;:13;23485:2;23475:13;;;;;;;;;;;:19;23489:4;23475:19;;;;;;;;;;;;;;;;23453:41;;23532:6;23517:11;:21;;23509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:6;23622:11;:20;;;;:::i;:::-;23600:9;:13;23610:2;23600:13;;;;;;;;;;;:19;23614:4;23600:19;;;;;;;;;;;;;;;:42;;;;23678:6;23657:9;:13;23667:2;23657:13;;;;;;;;;;;:17;23671:2;23657:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23319:377;;;23355:3;;;;:::i;:::-;;;23319:377;;;;23743:2;23713:47;;23737:4;23713:47;;23727:8;23713:47;;;23747:3;23752:7;23713:47;;;;;;;:::i;:::-;;;;;;;;23773:75;23809:8;23819:4;23825:2;23829:3;23834:7;23843:4;23773:35;:75::i;:::-;22617:1239;;;;;;:::o;37604:527::-;37806:7;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37835:11:::1;37842:3;37835:6;:11::i;:::-;37834:12;37826:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37913:1;37898:4;37892:18;:22;37888:110;;;37948:4;37931:9;:14;37941:3;37931:14;;;;;;;;;;;:21;;;;;;;;;;;;:::i;:::-;;37982:3;37972:14;37976:4;37972:14;;;;;;:::i;:::-;;;;;;;;37888:110;38010:48;38016:13;38031:3;38036:14;38052:5;38010;:48::i;:::-;38088:14;38069:11;:16;38081:3;38069:16;;;;;;;;;;;:33;;;;38120:3;38113:10;;37604:527:::0;;;;;;;:::o;37390:206::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37543:7:::1;37521:9;:19;37531:8;37521:19;;;;;;;;;;;:29;;;;;;;;;;;;:::i;:::-;;37579:8;37566:22;37570:7;37566:22;;;;;;:::i;:::-;;;;;;;;37390:206:::0;;:::o;20311:549::-;20492:16;20553:3;:10;20534:8;:15;:29;20526:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20622:30;20669:8;:15;20655:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20622:63;;20703:9;20698:122;20722:8;:15;20718:1;:19;20698:122;;;20778:30;20788:8;20797:1;20788:11;;;;;;;;;;;;;;;;;;;;;;20801:3;20805:1;20801:6;;;;;;;;;;;;;;;;;;;;;;20778:9;:30::i;:::-;20759:13;20773:1;20759:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;20739:3;;;;:::i;:::-;;;20698:122;;;;20839:13;20832:20;;;20311:549;;;;:::o;36622:110::-;36680:4;36723:1;36704:11;:16;36716:3;36704:16;;;;;;;;;;;;:20;36697:27;;36622:110;;;:::o;38139:532::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38375:4:::1;;:11;;38357:7;;:14;;:29;:74;;;;;38408:16;;:23;;38390:7;;:14;;:41;38357:74;38349:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;38479:9;38474:186;38498:7;;:14;;38494:1;:18;38474:186;;;38534:54;38540:7;;38548:1;38540:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38552:4;;38557:1;38552:7;;;;;;;;;;;;;;;;;;;;;38561:16;;38578:1;38561:19;;;;;;;;;;;;;;;;;;;;;38582:5;;38534:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:54::i;:::-;38627:16;;38644:1;38627:19;;;;;;;;;;;;;;;;;;;;;38604:11;:20;38616:4;;38621:1;38616:7;;;;;;;;;;;;;;;;;;;;;38604:20;;;;;;;;;;;:42;;;;38514:3;;;;;:::i;:::-;;;;38474:186;;;;38139:532:::0;;;;;;;;:::o;33413:148::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33520:1:::1;33483:40;;33504:6;::::0;::::1;;;;;;;;33483:40;;;;;;;;;;;;33551:1;33534:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;33413:148::o:0;38984:238::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39141:33:::1;39147:3;39152;39157:9;39168:5;39141;:33::i;:::-;39205:9;39185:11;:16;39197:3;39185:16;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;38984:238:::0;;;;:::o;40189:151::-;40289:43;40300:12;:10;:12::i;:::-;40314:4;;40289:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40320:11;;40289:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:43::i;:::-;40189:151;;;;:::o;36278:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32762:87::-;32808:7;32835:6;;;;;;;;;;;32828:13;;32762:87;:::o;36401:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20933:311::-;21052:8;21036:24;;:12;:10;:12::i;:::-;:24;;;;21028:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;21164:8;21119:18;:32;21138:12;:10;:12::i;:::-;21119:32;;;;;;;;;;;;;;;:42;21152:8;21119:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21217:8;21188:48;;21203:12;:10;:12::i;:::-;21188:48;;;21227:8;21188:48;;;;;;:::i;:::-;;;;;;;;20933:311;;:::o;40068:113::-;40138:35;40144:12;:10;:12::i;:::-;40158:3;40163:9;40138:5;:35::i;:::-;40068:113;;:::o;39535:525::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39741:11:::1;:18;39726:4;:11;:33;39718:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39825:9;39820:181;39844:4;:11;39840:1;:15;39820:181;;;39877:11;39891:4;39896:1;39891:7;;;;;;;;;;;;;;;;;;;;;;39877:21;;39913:16;39932:11;39944:1;39932:14;;;;;;;;;;;;;;;;;;;;;;39913:33;;39981:8;39961:11;:16;39973:3;39961:16;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;39820:181;;39857:3;;;;;:::i;:::-;;;;39820:181;;;;40011:41;40022:3;40027:4;40033:11;40046:5;40011:10;:41::i;:::-;39535:525:::0;;;;:::o;21316:168::-;21415:4;21439:18;:27;21458:7;21439:27;;;;;;;;;;;;;;;:37;21467:8;21439:37;;;;;;;;;;;;;;;;;;;;;;;;;21432:44;;21316:168;;;;:::o;21556:984::-;21796:1;21782:16;;:2;:16;;;;21774:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21881:12;:10;:12::i;:::-;21873:20;;:4;:20;;;:60;;;;21897:36;21914:4;21920:12;:10;:12::i;:::-;21897:16;:36::i;:::-;21873:60;21851:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22015:16;22034:12;:10;:12::i;:::-;22015:31;;22059:96;22080:8;22090:4;22096:2;22100:21;22118:2;22100:17;:21::i;:::-;22123:25;22141:6;22123:17;:25::i;:::-;22150:4;22059:20;:96::i;:::-;22168:19;22190:9;:13;22200:2;22190:13;;;;;;;;;;;:19;22204:4;22190:19;;;;;;;;;;;;;;;;22168:41;;22243:6;22228:11;:21;;22220:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22343:6;22329:11;:20;;;;:::i;:::-;22307:9;:13;22317:2;22307:13;;;;;;;;;;;:19;22321:4;22307:19;;;;;;;;;;;;;;;:42;;;;22381:6;22360:9;:13;22370:2;22360:13;;;;;;;;;;;:17;22374:2;22360:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;22436:2;22405:46;;22430:4;22405:46;;22420:8;22405:46;;;22440:2;22444:6;22405:46;;;;;;;:::i;:::-;;;;;;;;22464:68;22495:8;22505:4;22511:2;22515;22519:6;22527:4;22464:30;:68::i;:::-;21556:984;;;;;;;:::o;33716:244::-;32993:12;:10;:12::i;:::-;32982:23;;:7;:5;:7::i;:::-;:23;;;32974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33825:1:::1;33805:22;;:8;:22;;;;33797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33915:8;33886:38;;33907:6;::::0;::::1;;;;;;;;33886:38;;;;;;;;;;;;33944:8;33935:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;33716:244:::0;:::o;17779:157::-;17864:4;17903:25;17888:40;;;:11;:40;;;;17881:47;;17779:157;;;:::o;16648:98::-;16701:7;16728:10;16721:17;;16648:98;:::o;24700:88::-;24774:6;24767:4;:13;;;;;;;;;;;;:::i;:::-;;24700:88;:::o;19658:105::-;19718:13;19751:4;19744:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19658:105;;;:::o;35557:484::-;35607:27;35657:1;35651:2;:7;35647:50;;;35675:10;;;;;;;;;;;;;;;;;;;;;35647:50;35707:6;35716:2;35707:11;;35729:8;35748:69;35760:1;35755;:6;35748:69;;35778:5;;;;;:::i;:::-;;;;35803:2;35798:7;;;;;:::i;:::-;;;35748:69;;;35827:17;35857:3;35847:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35827:34;;35872:6;35887:1;35881:3;:7;;;;:::i;:::-;35872:16;;35899:105;35912:1;35906:2;:7;35899:105;;35965:2;35960;:7;;;;:::i;:::-;35955:2;:12;;;;:::i;:::-;35942:27;;35930:4;35935:3;;;;;:::i;:::-;;;35930:9;;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;35990:2;35984:8;;;;;:::i;:::-;;;35899:105;;;36028:4;36014:19;;;;;;35557:484;;;;:::o;35401:148::-;35479:13;35512:29;35522:2;35526;35512:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;35505:36;;35401:148;;;;:::o;29650:245::-;;;;;;;:::o;30673:799::-;30927:15;:2;:13;;;:15::i;:::-;30923:542;;;30980:2;30963:43;;;31007:8;31017:4;31023:3;31028:7;31037:4;30963:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30959:495;;;;:::i;:::-;;;;;;;;31327:6;31320:14;;;;;;;;;;;:::i;:::-;;;;;;;;30959:495;31376:62;;;;;;;;;;:::i;:::-;;;;;;;;30959:495;31104:52;;;31092:64;;;:8;:64;;;;31088:163;;31181:50;;;;;;;;;;:::i;:::-;;;;;;;;31088:163;31043:223;30923:542;30673:799;;;;;;:::o;25189:556::-;25323:1;25304:21;;:7;:21;;;;25296:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25376:16;25395:12;:10;:12::i;:::-;25376:31;;25420:107;25441:8;25459:1;25463:7;25472:21;25490:2;25472:17;:21::i;:::-;25495:25;25513:6;25495:17;:25::i;:::-;25522:4;25420:20;:107::i;:::-;25566:6;25540:9;:13;25550:2;25540:13;;;;;;;;;;;:22;25554:7;25540:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;25625:7;25588:57;;25621:1;25588:57;;25603:8;25588:57;;;25634:2;25638:6;25588:57;;;;;;;:::i;:::-;;;;;;;;25658:79;25689:8;25707:1;25711:7;25720:2;25724:6;25732:4;25658:30;:79::i;:::-;25189:556;;;;;:::o;27857:837::-;27997:1;27978:21;;:7;:21;;;;27970:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28072:7;:14;28058:3;:10;:28;28050:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28144:16;28163:12;:10;:12::i;:::-;28144:31;;28188:69;28209:8;28219:7;28236:1;28240:3;28245:7;28188:69;;;;;;;;;;;;:20;:69::i;:::-;28275:6;28270:341;28291:3;:10;28287:1;:14;28270:341;;;28323:10;28336:3;28340:1;28336:6;;;;;;;;;;;;;;;;;;;;;;28323:19;;28357:14;28374:7;28382:1;28374:10;;;;;;;;;;;;;;;;;;;;;;28357:27;;28401:22;28426:9;:13;28436:2;28426:13;;;;;;;;;;;:22;28440:7;28426:22;;;;;;;;;;;;;;;;28401:47;;28489:6;28471:14;:24;;28463:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28593:6;28576:14;:23;;;;:::i;:::-;28551:9;:13;28561:2;28551:13;;;;;;;;;;;:22;28565:7;28551:22;;;;;;;;;;;;;;;:48;;;;28270:341;;;28303:3;;;;;:::i;:::-;;;;28270:341;;;;28669:1;28628:58;;28652:7;28628:58;;28642:8;28628:58;;;28673:3;28678:7;28628:58;;;;;;;:::i;:::-;;;;;;;;27857:837;;;;:::o;27049:605::-;27164:1;27145:21;;:7;:21;;;;27137:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27219:16;27238:12;:10;:12::i;:::-;27219:31;;27263:105;27284:8;27294:7;27311:1;27315:21;27333:2;27315:17;:21::i;:::-;27338:25;27356:6;27338:17;:25::i;:::-;27263:105;;;;;;;;;;;;:20;:105::i;:::-;27381:22;27406:9;:13;27416:2;27406:13;;;;;;;;;;;:22;27420:7;27406:22;;;;;;;;;;;;;;;;27381:47;;27465:6;27447:14;:24;;27439:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27565:6;27548:14;:23;;;;:::i;:::-;27523:9;:13;27533:2;27523:13;;;;;;;;;;;:22;27537:7;27523:22;;;;;;;;;;;;;;;:48;;;;27631:1;27589:57;;27614:7;27589:57;;27604:8;27589:57;;;27635:2;27639:6;27589:57;;;;;;;:::i;:::-;;;;;;;;27049:605;;;;;:::o;26101:689::-;26250:1;26236:16;;:2;:16;;;;26228:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26323:7;:14;26309:3;:10;:28;26301:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26395:16;26414:12;:10;:12::i;:::-;26395:31;;26439:66;26460:8;26478:1;26482:2;26486:3;26491:7;26500:4;26439:20;:66::i;:::-;26523:6;26518:100;26539:3;:10;26535:1;:14;26518:100;;;26596:7;26604:1;26596:10;;;;;;;;;;;;;;;;;;;;;;26571:9;:17;26581:3;26585:1;26581:6;;;;;;;;;;;;;;;;;;;;;;26571:17;;;;;;;;;;;:21;26589:2;26571:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;26551:3;;;;;:::i;:::-;;;;26518:100;;;;26671:2;26635:53;;26667:1;26635:53;;26649:8;26635:53;;;26675:3;26680:7;26635:53;;;;;;;:::i;:::-;;;;;;;;26701:81;26737:8;26755:1;26759:2;26763:3;26768:7;26777:4;26701:35;:81::i;:::-;26101:689;;;;;:::o;31480:198::-;31546:16;31575:22;31614:1;31600:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31575:41;;31638:7;31627:5;31633:1;31627:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;31665:5;31658:12;;;31480:198;;;:::o;29903:762::-;30132:15;:2;:13;;;:15::i;:::-;30128:530;;;30185:2;30168:38;;;30207:8;30217:4;30223:2;30227:6;30235:4;30168:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30164:483;;;;:::i;:::-;;;;;;;;30520:6;30513:14;;;;;;;;;;;:::i;:::-;;;;;;;;30164:483;30569:62;;;;;;;;;;:::i;:::-;;;;;;;;30164:483;30302:47;;;30290:59;;;:8;:59;;;;30286:158;;30374:50;;;;;;;;;;:::i;:::-;;;;;;;;30286:158;30241:218;30128:530;29903:762;;;;;;:::o;34155:872::-;34287:13;34311:16;34336:2;34311:28;;34348:16;34373:2;34348:28;;34385:16;34410:2;34385:28;;34422:16;34447:2;34422:28;;34459:16;34484:2;34459:28;;34496:19;34581:3;:10;34568:3;:10;34555:3;:10;34542:3;:10;34529:3;:10;:23;;;;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;34518:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34496:96;;34601:19;34629:5;34601:34;;34644:6;34668;34663:58;34684:3;:10;34680:1;:14;34663:58;;;34715:3;34719:1;34715:6;;;;;;;;;;;;;;;;;;;;;;;;34701;34708:3;;;;;:::i;:::-;;;34701:11;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34696:3;;;;;:::i;:::-;;;;34663:58;;;;34735:6;34730:58;34751:3;:10;34747:1;:14;34730:58;;;34782:3;34786:1;34782:6;;;;;;;;;;;;;;;;;;;;;;;;34768;34775:3;;;;;:::i;:::-;;;34768:11;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34763:3;;;;;:::i;:::-;;;;34730:58;;;;34802:6;34797:58;34818:3;:10;34814:1;:14;34797:58;;;34849:3;34853:1;34849:6;;;;;;;;;;;;;;;;;;;;;;;;34835;34842:3;;;;;:::i;:::-;;;34835:11;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34830:3;;;;;:::i;:::-;;;;34797:58;;;;34869:6;34864:58;34885:3;:10;34881:1;:14;34864:58;;;34916:3;34920:1;34916:6;;;;;;;;;;;;;;;;;;;;;;;;34902;34909:3;;;;;:::i;:::-;;;34902:11;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34897:3;;;;;:::i;:::-;;;;34864:58;;;;34936:6;34931:58;34952:3;:10;34948:1;:14;34931:58;;;34983:3;34987:1;34983:6;;;;;;;;;;;;;;;;;;;;;;;;34969;34976:3;;;;;:::i;:::-;;;34969:11;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34964:3;;;;;:::i;:::-;;;;34931:58;;;;35012:6;34998:21;;;;;;;;;;34155:872;;;;;;;:::o;8778:422::-;8838:4;9046:12;9157:7;9145:20;9137:28;;9191:1;9184:4;:8;9177:15;;;8778:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:367::-;;;2290:3;2283:4;2275:6;2271:17;2267:27;2257:2;;2308:1;2305;2298:12;2257:2;2344:6;2331:20;2321:30;;2374:18;2366:6;2363:30;2360:2;;;2406:1;2403;2396:12;2360:2;2443:4;2435:6;2431:17;2419:29;;2497:3;2489:4;2481:6;2477:17;2467:8;2463:32;2460:41;2457:2;;;2514:1;2511;2504:12;2457:2;2247:277;;;;;:::o;2547:303::-;;2667:3;2660:4;2652:6;2648:17;2644:27;2634:2;;2685:1;2682;2675:12;2634:2;2725:6;2712:20;2750:94;2840:3;2832:6;2825:4;2817:6;2813:17;2750:94;:::i;:::-;2741:103;;2624:226;;;;;:::o;2873:367::-;;;3006:3;2999:4;2991:6;2987:17;2983:27;2973:2;;3024:1;3021;3014:12;2973:2;3060:6;3047:20;3037:30;;3090:18;3082:6;3079:30;3076:2;;;3122:1;3119;3112:12;3076:2;3159:4;3151:6;3147:17;3135:29;;3213:3;3205:4;3197:6;3193:17;3183:8;3179:32;3176:41;3173:2;;;3230:1;3227;3220:12;3173:2;2963:277;;;;;:::o;3263:303::-;;3383:3;3376:4;3368:6;3364:17;3360:27;3350:2;;3401:1;3398;3391:12;3350:2;3441:6;3428:20;3466:94;3556:3;3548:6;3541:4;3533:6;3529:17;3466:94;:::i;:::-;3457:103;;3340:226;;;;;:::o;3572:133::-;;3653:6;3640:20;3631:29;;3669:30;3693:5;3669:30;:::i;:::-;3621:84;;;;:::o;3711:137::-;;3794:6;3781:20;3772:29;;3810:32;3836:5;3810:32;:::i;:::-;3762:86;;;;:::o;3854:141::-;;3941:6;3935:13;3926:22;;3957:32;3983:5;3957:32;:::i;:::-;3916:79;;;;:::o;4014:351::-;;;4131:3;4124:4;4116:6;4112:17;4108:27;4098:2;;4149:1;4146;4139:12;4098:2;4185:6;4172:20;4162:30;;4215:18;4207:6;4204:30;4201:2;;;4247:1;4244;4237:12;4201:2;4284:4;4276:6;4272:17;4260:29;;4338:3;4330:4;4322:6;4318:17;4308:8;4304:32;4301:41;4298:2;;;4355:1;4352;4345:12;4298:2;4088:277;;;;;:::o;4384:271::-;;4488:3;4481:4;4473:6;4469:17;4465:27;4455:2;;4506:1;4503;4496:12;4455:2;4546:6;4533:20;4571:78;4645:3;4637:6;4630:4;4622:6;4618:17;4571:78;:::i;:::-;4562:87;;4445:210;;;;;:::o;4675:273::-;;4780:3;4773:4;4765:6;4761:17;4757:27;4747:2;;4798:1;4795;4788:12;4747:2;4838:6;4825:20;4863:79;4938:3;4930:6;4923:4;4915:6;4911:17;4863:79;:::i;:::-;4854:88;;4737:211;;;;;:::o;4954:139::-;;5038:6;5025:20;5016:29;;5054:33;5081:5;5054:33;:::i;:::-;5006:87;;;;:::o;5099:262::-;;5207:2;5195:9;5186:7;5182:23;5178:32;5175:2;;;5223:1;5220;5213:12;5175:2;5266:1;5291:53;5336:7;5327:6;5316:9;5312:22;5291:53;:::i;:::-;5281:63;;5237:117;5165:196;;;;:::o;5367:407::-;;;5492:2;5480:9;5471:7;5467:23;5463:32;5460:2;;;5508:1;5505;5498:12;5460:2;5551:1;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5522:117;5678:2;5704:53;5749:7;5740:6;5729:9;5725:22;5704:53;:::i;:::-;5694:63;;5649:118;5450:324;;;;;:::o;5780:1241::-;;;;;;6015:3;6003:9;5994:7;5990:23;5986:33;5983:2;;;6032:1;6029;6022:12;5983:2;6075:1;6100:53;6145:7;6136:6;6125:9;6121:22;6100:53;:::i;:::-;6090:63;;6046:117;6202:2;6228:53;6273:7;6264:6;6253:9;6249:22;6228:53;:::i;:::-;6218:63;;6173:118;6358:2;6347:9;6343:18;6330:32;6389:18;6381:6;6378:30;6375:2;;;6421:1;6418;6411:12;6375:2;6449:78;6519:7;6510:6;6499:9;6495:22;6449:78;:::i;:::-;6439:88;;6301:236;6604:2;6593:9;6589:18;6576:32;6635:18;6627:6;6624:30;6621:2;;;6667:1;6664;6657:12;6621:2;6695:78;6765:7;6756:6;6745:9;6741:22;6695:78;:::i;:::-;6685:88;;6547:236;6850:3;6839:9;6835:19;6822:33;6882:18;6874:6;6871:30;6868:2;;;6914:1;6911;6904:12;6868:2;6942:62;6996:7;6987:6;6976:9;6972:22;6942:62;:::i;:::-;6932:72;;6793:221;5973:1048;;;;;;;;:::o;7027:955::-;;;;;;7212:3;7200:9;7191:7;7187:23;7183:33;7180:2;;;7229:1;7226;7219:12;7180:2;7272:1;7297:53;7342:7;7333:6;7322:9;7318:22;7297:53;:::i;:::-;7287:63;;7243:117;7399:2;7425:53;7470:7;7461:6;7450:9;7446:22;7425:53;:::i;:::-;7415:63;;7370:118;7527:2;7553:53;7598:7;7589:6;7578:9;7574:22;7553:53;:::i;:::-;7543:63;;7498:118;7655:2;7681:53;7726:7;7717:6;7706:9;7702:22;7681:53;:::i;:::-;7671:63;;7626:118;7811:3;7800:9;7796:19;7783:33;7843:18;7835:6;7832:30;7829:2;;;7875:1;7872;7865:12;7829:2;7903:62;7957:7;7948:6;7937:9;7933:22;7903:62;:::i;:::-;7893:72;;7754:221;7170:812;;;;;;;;:::o;7988:1095::-;;;;;8206:3;8194:9;8185:7;8181:23;8177:33;8174:2;;;8223:1;8220;8213:12;8174:2;8266:1;8291:53;8336:7;8327:6;8316:9;8312:22;8291:53;:::i;:::-;8281:63;;8237:117;8421:2;8410:9;8406:18;8393:32;8452:18;8444:6;8441:30;8438:2;;;8484:1;8481;8474:12;8438:2;8512:78;8582:7;8573:6;8562:9;8558:22;8512:78;:::i;:::-;8502:88;;8364:236;8667:2;8656:9;8652:18;8639:32;8698:18;8690:6;8687:30;8684:2;;;8730:1;8727;8720:12;8684:2;8758:78;8828:7;8819:6;8808:9;8804:22;8758:78;:::i;:::-;8748:88;;8610:236;8913:2;8902:9;8898:18;8885:32;8944:18;8936:6;8933:30;8930:2;;;8976:1;8973;8966:12;8930:2;9004:62;9058:7;9049:6;9038:9;9034:22;9004:62;:::i;:::-;8994:72;;8856:220;8164:919;;;;;;;:::o;9089:401::-;;;9211:2;9199:9;9190:7;9186:23;9182:32;9179:2;;;9227:1;9224;9217:12;9179:2;9270:1;9295:53;9340:7;9331:6;9320:9;9316:22;9295:53;:::i;:::-;9285:63;;9241:117;9397:2;9423:50;9465:7;9456:6;9445:9;9441:22;9423:50;:::i;:::-;9413:60;;9368:115;9169:321;;;;;:::o;9496:407::-;;;9621:2;9609:9;9600:7;9596:23;9592:32;9589:2;;;9637:1;9634;9627:12;9589:2;9680:1;9705:53;9750:7;9741:6;9730:9;9726:22;9705:53;:::i;:::-;9695:63;;9651:117;9807:2;9833:53;9878:7;9869:6;9858:9;9854:22;9833:53;:::i;:::-;9823:63;;9778:118;9579:324;;;;;:::o;9909:809::-;;;;;10077:3;10065:9;10056:7;10052:23;10048:33;10045:2;;;10094:1;10091;10084:12;10045:2;10137:1;10162:53;10207:7;10198:6;10187:9;10183:22;10162:53;:::i;:::-;10152:63;;10108:117;10264:2;10290:53;10335:7;10326:6;10315:9;10311:22;10290:53;:::i;:::-;10280:63;;10235:118;10392:2;10418:53;10463:7;10454:6;10443:9;10439:22;10418:53;:::i;:::-;10408:63;;10363:118;10548:2;10537:9;10533:18;10520:32;10579:18;10571:6;10568:30;10565:2;;;10611:1;10608;10601:12;10565:2;10639:62;10693:7;10684:6;10673:9;10669:22;10639:62;:::i;:::-;10629:72;;10491:220;10035:683;;;;;;;:::o;10724:1068::-;;;;;;10919:3;10907:9;10898:7;10894:23;10890:33;10887:2;;;10936:1;10933;10926:12;10887:2;10979:1;11004:53;11049:7;11040:6;11029:9;11025:22;11004:53;:::i;:::-;10994:63;;10950:117;11106:2;11132:53;11177:7;11168:6;11157:9;11153:22;11132:53;:::i;:::-;11122:63;;11077:118;11234:2;11260:53;11305:7;11296:6;11285:9;11281:22;11260:53;:::i;:::-;11250:63;;11205:118;11390:2;11379:9;11375:18;11362:32;11421:18;11413:6;11410:30;11407:2;;;11453:1;11450;11443:12;11407:2;11481:63;11536:7;11527:6;11516:9;11512:22;11481:63;:::i;:::-;11471:73;;11333:221;11621:3;11610:9;11606:19;11593:33;11653:18;11645:6;11642:30;11639:2;;;11685:1;11682;11675:12;11639:2;11713:62;11767:7;11758:6;11747:9;11743:22;11713:62;:::i;:::-;11703:72;;11564:221;10877:915;;;;;;;;:::o;11798:1318::-;;;;;;;;;12081:3;12069:9;12060:7;12056:23;12052:33;12049:2;;;12098:1;12095;12088:12;12049:2;12169:1;12158:9;12154:17;12141:31;12199:18;12191:6;12188:30;12185:2;;;12231:1;12228;12221:12;12185:2;12267:80;12339:7;12330:6;12319:9;12315:22;12267:80;:::i;:::-;12249:98;;;;12112:245;12424:2;12413:9;12409:18;12396:32;12455:18;12447:6;12444:30;12441:2;;;12487:1;12484;12477:12;12441:2;12523:80;12595:7;12586:6;12575:9;12571:22;12523:80;:::i;:::-;12505:98;;;;12367:246;12680:2;12669:9;12665:18;12652:32;12711:18;12703:6;12700:30;12697:2;;;12743:1;12740;12733:12;12697:2;12779:80;12851:7;12842:6;12831:9;12827:22;12779:80;:::i;:::-;12761:98;;;;12623:246;12936:2;12925:9;12921:18;12908:32;12967:18;12959:6;12956:30;12953:2;;;12999:1;12996;12989:12;12953:2;13035:64;13091:7;13082:6;13071:9;13067:22;13035:64;:::i;:::-;13017:82;;;;12879:230;12039:1077;;;;;;;;;;;:::o;13122:693::-;;;13297:2;13285:9;13276:7;13272:23;13268:32;13265:2;;;13313:1;13310;13303:12;13265:2;13384:1;13373:9;13369:17;13356:31;13414:18;13406:6;13403:30;13400:2;;;13446:1;13443;13436:12;13400:2;13474:78;13544:7;13535:6;13524:9;13520:22;13474:78;:::i;:::-;13464:88;;13327:235;13629:2;13618:9;13614:18;13601:32;13660:18;13652:6;13649:30;13646:2;;;13692:1;13689;13682:12;13646:2;13720:78;13790:7;13781:6;13770:9;13766:22;13720:78;:::i;:::-;13710:88;;13572:236;13255:560;;;;;:::o;13821:733::-;;;;;14016:2;14004:9;13995:7;13991:23;13987:32;13984:2;;;14032:1;14029;14022:12;13984:2;14103:1;14092:9;14088:17;14075:31;14133:18;14125:6;14122:30;14119:2;;;14165:1;14162;14155:12;14119:2;14201:80;14273:7;14264:6;14253:9;14249:22;14201:80;:::i;:::-;14183:98;;;;14046:245;14358:2;14347:9;14343:18;14330:32;14389:18;14381:6;14378:30;14375:2;;;14421:1;14418;14411:12;14375:2;14457:80;14529:7;14520:6;14509:9;14505:22;14457:80;:::i;:::-;14439:98;;;;14301:246;13974:580;;;;;;;:::o;14560:260::-;;14667:2;14655:9;14646:7;14642:23;14638:32;14635:2;;;14683:1;14680;14673:12;14635:2;14726:1;14751:52;14795:7;14786:6;14775:9;14771:22;14751:52;:::i;:::-;14741:62;;14697:116;14625:195;;;;:::o;14826:282::-;;14944:2;14932:9;14923:7;14919:23;14915:32;14912:2;;;14960:1;14957;14950:12;14912:2;15003:1;15028:63;15083:7;15074:6;15063:9;15059:22;15028:63;:::i;:::-;15018:73;;14974:127;14902:206;;;;:::o;15114:375::-;;15232:2;15220:9;15211:7;15207:23;15203:32;15200:2;;;15248:1;15245;15238:12;15200:2;15319:1;15308:9;15304:17;15291:31;15349:18;15341:6;15338:30;15335:2;;;15381:1;15378;15371:12;15335:2;15409:63;15464:7;15455:6;15444:9;15440:22;15409:63;:::i;:::-;15399:73;;15262:220;15190:299;;;;:::o;15495:262::-;;15603:2;15591:9;15582:7;15578:23;15574:32;15571:2;;;15619:1;15616;15609:12;15571:2;15662:1;15687:53;15732:7;15723:6;15712:9;15708:22;15687:53;:::i;:::-;15677:63;;15633:117;15561:196;;;;:::o;15763:520::-;;;15898:2;15886:9;15877:7;15873:23;15869:32;15866:2;;;15914:1;15911;15904:12;15866:2;15957:1;15982:53;16027:7;16018:6;16007:9;16003:22;15982:53;:::i;:::-;15972:63;;15928:117;16112:2;16101:9;16097:18;16084:32;16143:18;16135:6;16132:30;16129:2;;;16175:1;16172;16165:12;16129:2;16203:63;16258:7;16249:6;16238:9;16234:22;16203:63;:::i;:::-;16193:73;;16055:221;15856:427;;;;;:::o;16289:407::-;;;16414:2;16402:9;16393:7;16389:23;16385:32;16382:2;;;16430:1;16427;16420:12;16382:2;16473:1;16498:53;16543:7;16534:6;16523:9;16519:22;16498:53;:::i;:::-;16488:63;;16444:117;16600:2;16626:53;16671:7;16662:6;16651:9;16647:22;16626:53;:::i;:::-;16616:63;;16571:118;16372:324;;;;;:::o;16702:179::-;;16792:46;16834:3;16826:6;16792:46;:::i;:::-;16870:4;16865:3;16861:14;16847:28;;16782:99;;;;:::o;16887:118::-;16974:24;16992:5;16974:24;:::i;:::-;16969:3;16962:37;16952:53;;:::o;17041:732::-;;17189:54;17237:5;17189:54;:::i;:::-;17259:86;17338:6;17333:3;17259:86;:::i;:::-;17252:93;;17369:56;17419:5;17369:56;:::i;:::-;17448:7;17479:1;17464:284;17489:6;17486:1;17483:13;17464:284;;;17565:6;17559:13;17592:63;17651:3;17636:13;17592:63;:::i;:::-;17585:70;;17678:60;17731:6;17678:60;:::i;:::-;17668:70;;17524:224;17511:1;17508;17504:9;17499:14;;17464:284;;;17468:14;17764:3;17757:10;;17165:608;;;;;;;:::o;17779:109::-;17860:21;17875:5;17860:21;:::i;:::-;17855:3;17848:34;17838:50;;:::o;17894:360::-;;18008:38;18040:5;18008:38;:::i;:::-;18062:70;18125:6;18120:3;18062:70;:::i;:::-;18055:77;;18141:52;18186:6;18181:3;18174:4;18167:5;18163:16;18141:52;:::i;:::-;18218:29;18240:6;18218:29;:::i;:::-;18213:3;18209:39;18202:46;;17984:270;;;;;:::o;18260:364::-;;18376:39;18409:5;18376:39;:::i;:::-;18431:71;18495:6;18490:3;18431:71;:::i;:::-;18424:78;;18511:52;18556:6;18551:3;18544:4;18537:5;18533:16;18511:52;:::i;:::-;18588:29;18610:6;18588:29;:::i;:::-;18583:3;18579:39;18572:46;;18352:272;;;;;:::o;18630:384::-;;18793:67;18857:2;18852:3;18793:67;:::i;:::-;18786:74;;18890:34;18886:1;18881:3;18877:11;18870:55;18956:22;18951:2;18946:3;18942:12;18935:44;19005:2;19000:3;18996:12;18989:19;;18776:238;;;:::o;19020:322::-;;19183:67;19247:2;19242:3;19183:67;:::i;:::-;19176:74;;19280:26;19276:1;19271:3;19267:11;19260:47;19333:2;19328:3;19324:12;19317:19;;19166:176;;;:::o;19348:372::-;;19511:67;19575:2;19570:3;19511:67;:::i;:::-;19504:74;;19608:34;19604:1;19599:3;19595:11;19588:55;19674:10;19669:2;19664:3;19660:12;19653:32;19711:2;19706:3;19702:12;19695:19;;19494:226;;;:::o;19726:375::-;;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19986:34;19982:1;19977:3;19973:11;19966:55;20052:13;20047:2;20042:3;20038:12;20031:35;20092:2;20087:3;20083:12;20076:19;;19872:229;;;:::o;20107:370::-;;20270:67;20334:2;20329:3;20270:67;:::i;:::-;20263:74;;20367:34;20363:1;20358:3;20354:11;20347:55;20433:8;20428:2;20423:3;20419:12;20412:30;20468:2;20463:3;20459:12;20452:19;;20253:224;;;:::o;20483:368::-;;20646:67;20710:2;20705:3;20646:67;:::i;:::-;20639:74;;20743:34;20739:1;20734:3;20730:11;20723:55;20809:6;20804:2;20799:3;20795:12;20788:28;20842:2;20837:3;20833:12;20826:19;;20629:222;;;:::o;20857:373::-;;21020:67;21084:2;21079:3;21020:67;:::i;:::-;21013:74;;21117:34;21113:1;21108:3;21104:11;21097:55;21183:11;21178:2;21173:3;21169:12;21162:33;21221:2;21216:3;21212:12;21205:19;;21003:227;;;:::o;21236:369::-;;21399:67;21463:2;21458:3;21399:67;:::i;:::-;21392:74;;21496:34;21492:1;21487:3;21483:11;21476:55;21562:7;21557:2;21552:3;21548:12;21541:29;21596:2;21591:3;21587:12;21580:19;;21382:223;;;:::o;21611:382::-;;21774:67;21838:2;21833:3;21774:67;:::i;:::-;21767:74;;21871:34;21867:1;21862:3;21858:11;21851:55;21937:20;21932:2;21927:3;21923:12;21916:42;21984:2;21979:3;21975:12;21968:19;;21757:236;;;:::o;21999:377::-;;22162:67;22226:2;22221:3;22162:67;:::i;:::-;22155:74;;22259:34;22255:1;22250:3;22246:11;22239:55;22325:15;22320:2;22315:3;22311:12;22304:37;22367:2;22362:3;22358:12;22351:19;;22145:231;;;:::o;22382:367::-;;22545:67;22609:2;22604:3;22545:67;:::i;:::-;22538:74;;22642:34;22638:1;22633:3;22629:11;22622:55;22708:5;22703:2;22698:3;22694:12;22687:27;22740:2;22735:3;22731:12;22724:19;;22528:221;;;:::o;22755:374::-;;22918:67;22982:2;22977:3;22918:67;:::i;:::-;22911:74;;23015:34;23011:1;23006:3;23002:11;22995:55;23081:12;23076:2;23071:3;23067:12;23060:34;23120:2;23115:3;23111:12;23104:19;;22901:228;;;:::o;23135:330::-;;23298:67;23362:2;23357:3;23298:67;:::i;:::-;23291:74;;23395:34;23391:1;23386:3;23382:11;23375:55;23456:2;23451:3;23447:12;23440:19;;23281:184;;;:::o;23471:328::-;;23634:67;23698:2;23693:3;23634:67;:::i;:::-;23627:74;;23731:32;23727:1;23722:3;23718:11;23711:53;23790:2;23785:3;23781:12;23774:19;;23617:182;;;:::o;23805:323::-;;23968:67;24032:2;24027:3;23968:67;:::i;:::-;23961:74;;24065:27;24061:1;24056:3;24052:11;24045:48;24119:2;24114:3;24110:12;24103:19;;23951:177;;;:::o;24134:373::-;;24297:67;24361:2;24356:3;24297:67;:::i;:::-;24290:74;;24394:34;24390:1;24385:3;24381:11;24374:55;24460:11;24455:2;24450:3;24446:12;24439:33;24498:2;24493:3;24489:12;24482:19;;24280:227;;;:::o;24513:373::-;;24676:67;24740:2;24735:3;24676:67;:::i;:::-;24669:74;;24773:34;24769:1;24764:3;24760:11;24753:55;24839:11;24834:2;24829:3;24825:12;24818:33;24877:2;24872:3;24868:12;24861:19;;24659:227;;;:::o;24892:372::-;;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25152:34;25148:1;25143:3;25139:11;25132:55;25218:10;25213:2;25208:3;25204:12;25197:32;25255:2;25250:3;25246:12;25239:19;;25038:226;;;:::o;25270:365::-;;25433:67;25497:2;25492:3;25433:67;:::i;:::-;25426:74;;25530:34;25526:1;25521:3;25517:11;25510:55;25596:3;25591:2;25586:3;25582:12;25575:25;25626:2;25621:3;25617:12;25610:19;;25416:219;;;:::o;25641:108::-;25718:24;25736:5;25718:24;:::i;:::-;25713:3;25706:37;25696:53;;:::o;25755:118::-;25842:24;25860:5;25842:24;:::i;:::-;25837:3;25830:37;25820:53;;:::o;25879:222::-;;26010:2;25999:9;25995:18;25987:26;;26023:71;26091:1;26080:9;26076:17;26067:6;26023:71;:::i;:::-;25977:124;;;;:::o;26107:1053::-;;26468:3;26457:9;26453:19;26445:27;;26482:71;26550:1;26539:9;26535:17;26526:6;26482:71;:::i;:::-;26563:72;26631:2;26620:9;26616:18;26607:6;26563:72;:::i;:::-;26682:9;26676:4;26672:20;26667:2;26656:9;26652:18;26645:48;26710:108;26813:4;26804:6;26710:108;:::i;:::-;26702:116;;26865:9;26859:4;26855:20;26850:2;26839:9;26835:18;26828:48;26893:108;26996:4;26987:6;26893:108;:::i;:::-;26885:116;;27049:9;27043:4;27039:20;27033:3;27022:9;27018:19;27011:49;27077:76;27148:4;27139:6;27077:76;:::i;:::-;27069:84;;26435:725;;;;;;;;:::o;27166:751::-;;27427:3;27416:9;27412:19;27404:27;;27441:71;27509:1;27498:9;27494:17;27485:6;27441:71;:::i;:::-;27522:72;27590:2;27579:9;27575:18;27566:6;27522:72;:::i;:::-;27604;27672:2;27661:9;27657:18;27648:6;27604:72;:::i;:::-;27686;27754:2;27743:9;27739:18;27730:6;27686:72;:::i;:::-;27806:9;27800:4;27796:20;27790:3;27779:9;27775:19;27768:49;27834:76;27905:4;27896:6;27834:76;:::i;:::-;27826:84;;27394:523;;;;;;;;:::o;27923:373::-;;28104:2;28093:9;28089:18;28081:26;;28153:9;28147:4;28143:20;28139:1;28128:9;28124:17;28117:47;28181:108;28284:4;28275:6;28181:108;:::i;:::-;28173:116;;28071:225;;;;:::o;28302:634::-;;28561:2;28550:9;28546:18;28538:26;;28610:9;28604:4;28600:20;28596:1;28585:9;28581:17;28574:47;28638:108;28741:4;28732:6;28638:108;:::i;:::-;28630:116;;28793:9;28787:4;28783:20;28778:2;28767:9;28763:18;28756:48;28821:108;28924:4;28915:6;28821:108;:::i;:::-;28813:116;;28528:408;;;;;:::o;28942:210::-;;29067:2;29056:9;29052:18;29044:26;;29080:65;29142:1;29131:9;29127:17;29118:6;29080:65;:::i;:::-;29034:118;;;;:::o;29158:313::-;;29309:2;29298:9;29294:18;29286:26;;29358:9;29352:4;29348:20;29344:1;29333:9;29329:17;29322:47;29386:78;29459:4;29450:6;29386:78;:::i;:::-;29378:86;;29276:195;;;;:::o;29477:419::-;;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29648:248;;;:::o;29902:419::-;;30106:2;30095:9;30091:18;30083:26;;30155:9;30149:4;30145:20;30141:1;30130:9;30126:17;30119:47;30183:131;30309:4;30183:131;:::i;:::-;30175:139;;30073:248;;;:::o;30327:419::-;;30531:2;30520:9;30516:18;30508:26;;30580:9;30574:4;30570:20;30566:1;30555:9;30551:17;30544:47;30608:131;30734:4;30608:131;:::i;:::-;30600:139;;30498:248;;;:::o;30752:419::-;;30956:2;30945:9;30941:18;30933:26;;31005:9;30999:4;30995:20;30991:1;30980:9;30976:17;30969:47;31033:131;31159:4;31033:131;:::i;:::-;31025:139;;30923:248;;;:::o;31177:419::-;;31381:2;31370:9;31366:18;31358:26;;31430:9;31424:4;31420:20;31416:1;31405:9;31401:17;31394:47;31458:131;31584:4;31458:131;:::i;:::-;31450:139;;31348:248;;;:::o;31602:419::-;;31806:2;31795:9;31791:18;31783:26;;31855:9;31849:4;31845:20;31841:1;31830:9;31826:17;31819:47;31883:131;32009:4;31883:131;:::i;:::-;31875:139;;31773:248;;;:::o;32027:419::-;;32231:2;32220:9;32216:18;32208:26;;32280:9;32274:4;32270:20;32266:1;32255:9;32251:17;32244:47;32308:131;32434:4;32308:131;:::i;:::-;32300:139;;32198:248;;;:::o;32452:419::-;;32656:2;32645:9;32641:18;32633:26;;32705:9;32699:4;32695:20;32691:1;32680:9;32676:17;32669:47;32733:131;32859:4;32733:131;:::i;:::-;32725:139;;32623:248;;;:::o;32877:419::-;;33081:2;33070:9;33066:18;33058:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33158:131;33284:4;33158:131;:::i;:::-;33150:139;;33048:248;;;:::o;33302:419::-;;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33473:248;;;:::o;33727:419::-;;33931:2;33920:9;33916:18;33908:26;;33980:9;33974:4;33970:20;33966:1;33955:9;33951:17;33944:47;34008:131;34134:4;34008:131;:::i;:::-;34000:139;;33898:248;;;:::o;34152:419::-;;34356:2;34345:9;34341:18;34333:26;;34405:9;34399:4;34395:20;34391:1;34380:9;34376:17;34369:47;34433:131;34559:4;34433:131;:::i;:::-;34425:139;;34323:248;;;:::o;34577:419::-;;34781:2;34770:9;34766:18;34758:26;;34830:9;34824:4;34820:20;34816:1;34805:9;34801:17;34794:47;34858:131;34984:4;34858:131;:::i;:::-;34850:139;;34748:248;;;:::o;35002:419::-;;35206:2;35195:9;35191:18;35183:26;;35255:9;35249:4;35245:20;35241:1;35230:9;35226:17;35219:47;35283:131;35409:4;35283:131;:::i;:::-;35275:139;;35173:248;;;:::o;35427:419::-;;35631:2;35620:9;35616:18;35608:26;;35680:9;35674:4;35670:20;35666:1;35655:9;35651:17;35644:47;35708:131;35834:4;35708:131;:::i;:::-;35700:139;;35598:248;;;:::o;35852:419::-;;36056:2;36045:9;36041:18;36033:26;;36105:9;36099:4;36095:20;36091:1;36080:9;36076:17;36069:47;36133:131;36259:4;36133:131;:::i;:::-;36125:139;;36023:248;;;:::o;36277:419::-;;36481:2;36470:9;36466:18;36458:26;;36530:9;36524:4;36520:20;36516:1;36505:9;36501:17;36494:47;36558:131;36684:4;36558:131;:::i;:::-;36550:139;;36448:248;;;:::o;36702:419::-;;36906:2;36895:9;36891:18;36883:26;;36955:9;36949:4;36945:20;36941:1;36930:9;36926:17;36919:47;36983:131;37109:4;36983:131;:::i;:::-;36975:139;;36873:248;;;:::o;37127:419::-;;37331:2;37320:9;37316:18;37308:26;;37380:9;37374:4;37370:20;37366:1;37355:9;37351:17;37344:47;37408:131;37534:4;37408:131;:::i;:::-;37400:139;;37298:248;;;:::o;37552:222::-;;37683:2;37672:9;37668:18;37660:26;;37696:71;37764:1;37753:9;37749:17;37740:6;37696:71;:::i;:::-;37650:124;;;;:::o;37780:332::-;;37939:2;37928:9;37924:18;37916:26;;37952:71;38020:1;38009:9;38005:17;37996:6;37952:71;:::i;:::-;38033:72;38101:2;38090:9;38086:18;38077:6;38033:72;:::i;:::-;37906:206;;;;;:::o;38118:283::-;;38184:2;38178:9;38168:19;;38226:4;38218:6;38214:17;38333:6;38321:10;38318:22;38297:18;38285:10;38282:34;38279:62;38276:2;;;38344:18;;:::i;:::-;38276:2;38384:10;38380:2;38373:22;38158:243;;;;:::o;38407:311::-;;38574:18;38566:6;38563:30;38560:2;;;38596:18;;:::i;:::-;38560:2;38646:4;38638:6;38634:17;38626:25;;38706:4;38700;38696:15;38688:23;;38489:229;;;:::o;38724:311::-;;38891:18;38883:6;38880:30;38877:2;;;38913:18;;:::i;:::-;38877:2;38963:4;38955:6;38951:17;38943:25;;39023:4;39017;39013:15;39005:23;;38806:229;;;:::o;39041:331::-;;39192:18;39184:6;39181:30;39178:2;;;39214:18;;:::i;:::-;39178:2;39299:4;39295:9;39288:4;39280:6;39276:17;39272:33;39264:41;;39360:4;39354;39350:15;39342:23;;39107:265;;;:::o;39378:332::-;;39530:18;39522:6;39519:30;39516:2;;;39552:18;;:::i;:::-;39516:2;39637:4;39633:9;39626:4;39618:6;39614:17;39610:33;39602:41;;39698:4;39692;39688:15;39680:23;;39445:265;;;:::o;39716:132::-;;39806:3;39798:11;;39836:4;39831:3;39827:14;39819:22;;39788:60;;;:::o;39854:114::-;;39955:5;39949:12;39939:22;;39928:40;;;:::o;39974:98::-;;40059:5;40053:12;40043:22;;40032:40;;;:::o;40078:99::-;;40164:5;40158:12;40148:22;;40137:40;;;:::o;40183:113::-;;40285:4;40280:3;40276:14;40268:22;;40258:38;;;:::o;40302:184::-;;40435:6;40430:3;40423:19;40475:4;40470:3;40466:14;40451:29;;40413:73;;;;:::o;40492:168::-;;40609:6;40604:3;40597:19;40649:4;40644:3;40640:14;40625:29;;40587:73;;;;:::o;40666:169::-;;40784:6;40779:3;40772:19;40824:4;40819:3;40815:14;40800:29;;40762:73;;;;:::o;40841:305::-;;40900:20;40918:1;40900:20;:::i;:::-;40895:25;;40934:20;40952:1;40934:20;:::i;:::-;40929:25;;41088:1;41020:66;41016:74;41013:1;41010:81;41007:2;;;41094:18;;:::i;:::-;41007:2;41138:1;41135;41131:9;41124:16;;40885:261;;;;:::o;41152:185::-;;41209:20;41227:1;41209:20;:::i;:::-;41204:25;;41243:20;41261:1;41243:20;:::i;:::-;41238:25;;41282:1;41272:2;;41287:18;;:::i;:::-;41272:2;41329:1;41326;41322:9;41317:14;;41194:143;;;;:::o;41343:191::-;;41403:20;41421:1;41403:20;:::i;:::-;41398:25;;41437:20;41455:1;41437:20;:::i;:::-;41432:25;;41476:1;41473;41470:8;41467:2;;;41481:18;;:::i;:::-;41467:2;41526:1;41523;41519:9;41511:17;;41388:146;;;;:::o;41540:96::-;;41606:24;41624:5;41606:24;:::i;:::-;41595:35;;41585:51;;;:::o;41642:90::-;;41719:5;41712:13;41705:21;41694:32;;41684:48;;;:::o;41738:149::-;;41814:66;41807:5;41803:78;41792:89;;41782:105;;;:::o;41893:126::-;;41970:42;41963:5;41959:54;41948:65;;41938:81;;;:::o;42025:77::-;;42091:5;42080:16;;42070:32;;;:::o;42108:154::-;42192:6;42187:3;42182;42169:30;42254:1;42245:6;42240:3;42236:16;42229:27;42159:103;;;:::o;42268:307::-;42336:1;42346:113;42360:6;42357:1;42354:13;42346:113;;;42445:1;42440:3;42436:11;42430:18;42426:1;42421:3;42417:11;42410:39;42382:2;42379:1;42375:10;42370:15;;42346:113;;;42477:6;42474:1;42471:13;42468:2;;;42557:1;42548:6;42543:3;42539:16;42532:27;42468:2;42317:258;;;;:::o;42581:171::-;;42643:24;42661:5;42643:24;:::i;:::-;42634:33;;42689:4;42682:5;42679:15;42676:2;;;42697:18;;:::i;:::-;42676:2;42744:1;42737:5;42733:13;42726:20;;42624:128;;;:::o;42758:320::-;;42839:1;42833:4;42829:12;42819:22;;42886:1;42880:4;42876:12;42907:18;42897:2;;42963:4;42955:6;42951:17;42941:27;;42897:2;43025;43017:6;43014:14;42994:18;42991:38;42988:2;;;43044:18;;:::i;:::-;42988:2;42809:269;;;;:::o;43084:233::-;;43146:24;43164:5;43146:24;:::i;:::-;43137:33;;43192:66;43185:5;43182:77;43179:2;;;43262:18;;:::i;:::-;43179:2;43309:1;43302:5;43298:13;43291:20;;43127:190;;;:::o;43323:176::-;;43372:20;43390:1;43372:20;:::i;:::-;43367:25;;43406:20;43424:1;43406:20;:::i;:::-;43401:25;;43445:1;43435:2;;43450:18;;:::i;:::-;43435:2;43491:1;43488;43484:9;43479:14;;43357:142;;;;:::o;43505:180::-;43553:77;43550:1;43543:88;43650:4;43647:1;43640:15;43674:4;43671:1;43664:15;43691:180;43739:77;43736:1;43729:88;43836:4;43833:1;43826:15;43860:4;43857:1;43850:15;43877:180;43925:77;43922:1;43915:88;44022:4;44019:1;44012:15;44046:4;44043:1;44036:15;44063:180;44111:77;44108:1;44101:88;44208:4;44205:1;44198:15;44232:4;44229:1;44222:15;44249:102;;44341:2;44337:7;44332:2;44325:5;44321:14;44317:28;44307:38;;44297:54;;;:::o;44357:106::-;;44450:5;44445:3;44441:15;44420:36;;44410:53;;;:::o;44469:833::-;;44546:4;44528:16;44525:26;44522:2;;;44554:5;;44522:2;44592:1;44589;44586;44571:23;44614:34;44645:1;44639:8;44614:34;:::i;:::-;44675:10;44670:3;44667:19;44657:2;;44690:5;;;44657:2;44725;44719:9;44783:1;44765:16;44761:24;44758:1;44752:4;44737:49;44816:4;44810:11;44915:16;44908:4;44900:6;44896:17;44893:39;44860:18;44852:6;44849:30;44833:113;44830:2;;;44961:5;;;;;44830:2;45007:6;45001:4;44997:17;45043:3;45037:10;45070:18;45062:6;45059:30;45056:2;;;45092:5;;;;;;;45056:2;45140:6;45133:4;45128:3;45124:14;45120:27;45177:16;45171:4;45167:27;45162:3;45159:36;45156:2;;;45198:5;;;;;;;;45156:2;45246:29;45268:6;45246:29;:::i;:::-;45239:4;45234:3;45230:14;45226:50;45222:2;45215:62;45293:3;45286:10;;44512:790;;;;;;;;:::o;45308:122::-;45381:24;45399:5;45381:24;:::i;:::-;45374:5;45371:35;45361:2;;45420:1;45417;45410:12;45361:2;45351:79;:::o;45436:116::-;45506:21;45521:5;45506:21;:::i;:::-;45499:5;45496:32;45486:2;;45542:1;45539;45532:12;45486:2;45476:76;:::o;45558:120::-;45630:23;45647:5;45630:23;:::i;:::-;45623:5;45620:34;45610:2;;45668:1;45665;45658:12;45610:2;45600:78;:::o;45684:122::-;45757:24;45775:5;45757:24;:::i;:::-;45750:5;45747:35;45737:2;;45796:1;45793;45786:12;45737:2;45727:79;:::o

Swarm Source

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