ETH Price: $2,463.83 (+0.61%)
 

Overview

Max Total Supply

3,333 VILLAINS

Holders

1,538

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x09dec91d8a126baa048f2b12939259119d51dbe0
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:
HolyVillains

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/*
    ██   ██  ██████  ██      ██    ██     ██    ██ ██ ██      ██       █████  ██ ███    ██ ███████ 
    ██   ██ ██    ██ ██       ██  ██      ██    ██ ██ ██      ██      ██   ██ ██ ████   ██ ██      
    ███████ ██    ██ ██        ████       ██    ██ ██ ██      ██      ███████ ██ ██ ██  ██ ███████ 
    ██   ██ ██    ██ ██         ██         ██  ██  ██ ██      ██      ██   ██ ██ ██  ██ ██      ██ 
    ██   ██  ██████  ███████    ██          ████   ██ ███████ ███████ ██   ██ ██ ██   ████ ███████ 
    
    Holy Heroes / [email protected]
*/

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol

// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

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

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

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

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

/**
 * @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 {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

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

        emit TransferBatch(operator, from, to, ids, amounts);

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

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

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

        address operator = _msgSender();

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/HolyVillains.sol

contract HolyVillains is ERC1155, Ownable {
    string public constant name = "Holy Villains";
    string public constant symbol = "VILLAINS";

    uint32 public totalSupply = 0;
    uint256 public constant unitPrice = 0.0777 ether;

    uint32 public preSaleStart = 1641672000;
    uint32 public constant preSaleMaxSupply = 1000;
    uint32 public constant preSaleMaxPerWallet = 3;

    uint32 public publicSaleStart = 1641675600;
    uint32 public constant publicSaleMaxSupply = 3333;
    uint32 public constant publicSaleMaxPerWallet = 7;

    address signerAddress = 0xFbABC9E7651fA9eC84d85d590Cc6f14C29DD026a;

    mapping(address => uint32) public minted;

    constructor(string memory uri) ERC1155(uri) {}

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

    function setSignerAddress(address addr) external onlyOwner {
        signerAddress = addr;
    }

    function setPreSaleStart(uint32 timestamp) public onlyOwner {
        preSaleStart = timestamp;
    }

    function setPublicSaleStart(uint32 timestamp) public onlyOwner {
        publicSaleStart = timestamp;
    }

    function preSaleIsActive() public view returns (bool) {
        return
            preSaleStart <= block.timestamp &&
            publicSaleStart >= block.timestamp;
    }

    function publicSaleIsActive() public view returns (bool) {
        return publicSaleStart <= block.timestamp;
    }

    function isValidAccessMessage(
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal view returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked(msg.sender));
        return
            signerAddress ==
            ecrecover(
                keccak256(
                    abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
                ),
                v,
                r,
                s
            );
    }

    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, totalSupply, 1, "");
        }

        totalSupply += count;
    }

    function preSaleMint(
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint32 count
    ) external payable {
        require(preSaleIsActive(), "Pre-sale is not active.");
        require(isValidAccessMessage(v, r, s), "Not whitelisted.");
        require(count > 0, "Count must be greater than 0.");
        require(
            totalSupply + count <= preSaleMaxSupply,
            "Count exceeds the maximum allowed supply."
        );
        require(msg.value >= unitPrice * count, "Not enough ether.");
        require(
            minted[msg.sender] + count <= preSaleMaxPerWallet,
            "Count exceeds the maximum allowed per wallet."
        );

        mint(msg.sender, count);
        minted[msg.sender] += count;
    }

    function publicSaleMint(uint32 count) external payable {
        require(publicSaleIsActive(), "Public sale is not active.");
        require(count > 0, "Count must be greater than 0.");
        require(
            totalSupply + count <= publicSaleMaxSupply,
            "Count exceeds the maximum allowed supply."
        );
        require(msg.value >= unitPrice * count, "Not enough ether.");
        require(
            minted[msg.sender] + count <= publicSaleMaxPerWallet,
            "Count exceeds the maximum allowed per wallet."
        );

        mint(msg.sender, count);
        minted[msg.sender] += count;
    }

    function batchMint(address[] memory addresses) external onlyOwner {
        require(
            totalSupply + addresses.length <= publicSaleMaxSupply,
            "Count exceeds the maximum allowed supply."
        );

        for (uint256 i = 0; i < addresses.length; i++) {
            mint(addresses[i], 1);
        }
    }

    function withdraw() external onlyOwner {
        address[7] memory addresses = [
            0x94017Dd41fD42E6812b74E6E675ad5B48562929E,
            0xFe2E2c1206eD98e37871819FFE0156392F1fFc08,
            0x8c349e3c568f2F69a736C76b6a239280Ea1cc4C8,
            0x7FDbb61440985e094F2d2BfcC86B2aAe976e96D0,
            0xA81CfedA5Fb92FDDa1c2bb5bBd47B149a11Bd927,
            0xe8791f7dAb20B4EE60A85DEC9a3bF11b0B29aBc5,
            0x1F9fa3F21f92b5579c4e4d7232d9E412b0E89399
        ];

        uint32[7] memory shares = [
            uint32(2500),
            uint32(2500),
            uint32(2500),
            uint32(800),
            uint32(400),
            uint32(400),
            uint32(900)
        ];

        uint256 balance = address(this).balance;

        for (uint32 i = 0; i < addresses.length; i++) {
            uint256 amount = i == addresses.length - 1
                ? address(this).balance
                : (balance * shares[i]) / 10000;
            payable(addresses[i]).transfer(amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"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":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548163ffffffff021916908363ffffffff1602179055506361d9ed40600360186101000a81548163ffffffff021916908363ffffffff1602179055506361d9fb506003601c6101000a81548163ffffffff021916908363ffffffff16021790555073fbabc9e7651fa9ec84d85d590cc6f14c29dd026a600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d257600080fd5b5060405162005322380380620053228339818101604052810190620000f891906200034a565b806200010a816200013260201b60201c565b506200012b6200011f6200014e60201b60201c565b6200015660201b60201c565b506200051f565b80600290805190602001906200014a9291906200021c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000430565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002e3620002dd84620003c4565b6200039b565b905082815260208101848484011115620003025762000301620004ff565b5b6200030f848285620003fa565b509392505050565b600082601f8301126200032f576200032e620004fa565b5b815162000341848260208601620002cc565b91505092915050565b60006020828403121562000363576200036262000509565b5b600082015167ffffffffffffffff81111562000384576200038362000504565b5b620003928482850162000317565b91505092915050565b6000620003a7620003ba565b9050620003b5828262000466565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e257620003e1620004cb565b5b620003ed826200050e565b9050602081019050919050565b60005b838110156200041a578082015181840152602081019050620003fd565b838111156200042a576000848401525b50505050565b600060028204905060018216806200044957607f821691505b6020821081141562000460576200045f6200049c565b5b50919050565b62000471826200050e565b810181811067ffffffffffffffff82111715620004935762000492620004cb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614df3806200052f6000396000f3fe6080604052600436106101e25760003560e01c80634e1273f411610102578063a1dd2c0711610095578063e73faa2d11610064578063e73faa2d146106a1578063e985e9c5146106cc578063f242432a14610709578063f2fde38b14610732576101e2565b8063a1dd2c0714610608578063a22cb46514610633578063cc21f4851461065c578063d67b06c114610678576101e2565b80638da5cb5b116100d15780638da5cb5b1461055e5780639039903c1461058957806395d89b41146105b2578063a18116f1146105dd576101e2565b80634e1273f4146104c3578063715018a614610500578063745e1b3f14610517578063892f5f6f14610542576101e2565b806318160ddd1161017a5780633360caa0116101495780633360caa01461042d5780633ccfd60b1461045857806340fa89d91461046f578063472d3b1b14610498576101e2565b806318160ddd146103715780631e7269c51461039c5780631f0234d8146103d95780632eb2c2d614610404576101e2565b806306fdde03116101b657806306fdde03146102b35780630d5624b3146102de5780630e89341c146103095780630fcf2e7514610346576101e2565b8062fdd58e146101e757806301ffc9a71461022457806302fe530514610261578063046dc1661461028a575b600080fd5b3480156101f357600080fd5b5061020e6004803603810190610209919061359b565b61075b565b60405161021b91906140d7565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061369c565b610824565b6040516102589190613dd5565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906136f6565b610906565b005b34801561029657600080fd5b506102b160048036038101906102ac9190613388565b61098e565b005b3480156102bf57600080fd5b506102c8610a4e565b6040516102d59190613e35565b60405180910390f35b3480156102ea57600080fd5b506102f3610a87565b604051610300919061411b565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b919061373f565b610a9d565b60405161033d9190613e35565b60405180910390f35b34801561035257600080fd5b5061035b610b31565b6040516103689190613dd5565b60405180910390f35b34801561037d57600080fd5b50610386610b54565b604051610393919061411b565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613388565b610b6a565b6040516103d0919061411b565b60405180910390f35b3480156103e557600080fd5b506103ee610b8d565b6040516103fb9190613dd5565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906133f5565b610bd4565b005b34801561043957600080fd5b50610442610c75565b60405161044f919061411b565b60405180910390f35b34801561046457600080fd5b5061046d610c8b565b005b34801561047b57600080fd5b506104966004803603810190610491919061376c565b61108d565b005b3480156104a457600080fd5b506104ad61112d565b6040516104ba919061411b565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613624565b611132565b6040516104f79190613d7c565b60405180910390f35b34801561050c57600080fd5b5061051561124b565b005b34801561052357600080fd5b5061052c6112d3565b604051610539919061411b565b60405180910390f35b61055c6004803603810190610557919061376c565b6112d8565b005b34801561056a57600080fd5b50610573611565565b6040516105809190613c9f565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061376c565b61158f565b005b3480156105be57600080fd5b506105c761162f565b6040516105d49190613e35565b60405180910390f35b3480156105e957600080fd5b506105f2611668565b6040516105ff919061411b565b60405180910390f35b34801561061457600080fd5b5061061d61166e565b60405161062a919061411b565b60405180910390f35b34801561063f57600080fd5b5061065a6004803603810190610655919061355b565b611674565b005b61067660048036038101906106719190613799565b61168a565b005b34801561068457600080fd5b5061069f600480360381019061069a91906135db565b611964565b005b3480156106ad57600080fd5b506106b6611a97565b6040516106c391906140d7565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee91906133b5565b611aa3565b6040516107009190613dd5565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b91906134c4565b611b37565b005b34801561073e57600080fd5b5061075960048036038101906107549190613388565b611bd8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390613e97565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ef57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ff57506108fe82611cd0565b5b9050919050565b61090e611d3a565b73ffffffffffffffffffffffffffffffffffffffff1661092c611565565b73ffffffffffffffffffffffffffffffffffffffff1614610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097990614017565b60405180910390fd5b61098b81611d42565b50565b610996611d3a565b73ffffffffffffffffffffffffffffffffffffffff166109b4611565565b73ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0190614017565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600d81526020017f486f6c792056696c6c61696e730000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b606060028054610aac906144bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad8906144bd565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b60056020528060005260406000206000915054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610bcf5750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610bdc611d3a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c225750610c2185610c1c611d3a565b611aa3565b5b610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613f77565b60405180910390fd5b610c6e8585858585611d5c565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610c93611d3a565b73ffffffffffffffffffffffffffffffffffffffff16610cb1611565565b73ffffffffffffffffffffffffffffffffffffffff1614610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90614017565b60405180910390fd5b60006040518060e001604052807394017dd41fd42e6812b74e6e675ad5b48562929e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fe2e2c1206ed98e37871819ffe0156392f1ffc0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738c349e3c568f2f69a736c76b6a239280ea1cc4c873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737fdbb61440985e094f2d2bfcc86b2aae976e96d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a81cfeda5fb92fdda1c2bb5bbd47b149a11bd92773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e8791f7dab20b4ee60a85dec9a3bf11b0b29abc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e001604052806109c463ffffffff1663ffffffff1681526020016109c463ffffffff1663ffffffff1681526020016109c463ffffffff1663ffffffff16815260200161032063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161038463ffffffff1663ffffffff168152509050600047905060005b60078163ffffffff16101561108757600060016007610fbe91906143ac565b8263ffffffff161461100b57612710848363ffffffff1660078110610fe657610fe5614651565b5b602002015163ffffffff1684610ffc9190614352565b6110069190614321565b61100d565b475b9050848263ffffffff166007811061102857611027614651565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611072573d6000803e3d6000fd5b5050808061107f90614569565b915050610f9f565b50505050565b611095611d3a565b73ffffffffffffffffffffffffffffffffffffffff166110b3611565565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090614017565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b600781565b60608151835114611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90614077565b60405180910390fd5b6000835167ffffffffffffffff81111561119557611194614680565b5b6040519080825280602002602001820160405280156111c35781602001602082028036833780820191505090505b50905060005b8451811015611240576112108582815181106111e8576111e7614651565b5b602002602001015185838151811061120357611202614651565b5b602002602001015161075b565b82828151811061122357611222614651565b5b6020026020010181815250508061123990614520565b90506111c9565b508091505092915050565b611253611d3a565b73ffffffffffffffffffffffffffffffffffffffff16611271611565565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614017565b60405180910390fd5b6112d16000612070565b565b600381565b6112e0610b31565b61131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690613ef7565b60405180910390fd5b60008163ffffffff1611611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613f17565b60405180910390fd5b610d0563ffffffff1681600360149054906101000a900463ffffffff1661138f91906142e7565b63ffffffff1611156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613ff7565b60405180910390fd5b8063ffffffff166701140bbd030c40006113f09190614352565b341015611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613f37565b60405180910390fd5b600763ffffffff1681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1661149591906142e7565b63ffffffff1611156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390613fd7565b60405180910390fd5b6114e63382612136565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661154491906142e7565b92506101000a81548163ffffffff021916908363ffffffff16021790555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611597611d3a565b73ffffffffffffffffffffffffffffffffffffffff166115b5611565565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614017565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600881526020017f56494c4c41494e5300000000000000000000000000000000000000000000000081525081565b6103e881565b610d0581565b61168661167f611d3a565b8383612320565b5050565b611692610b8d565b6116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613f97565b60405180910390fd5b6116dc84848461248d565b61171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614037565b60405180910390fd5b60008163ffffffff1611611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613f17565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff1661178b91906142e7565b63ffffffff1611156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ff7565b60405180910390fd5b8063ffffffff166701140bbd030c40006117ec9190614352565b34101561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613f37565b60405180910390fd5b600363ffffffff1681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1661189191906142e7565b63ffffffff1611156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90613fd7565b60405180910390fd5b6118e23382612136565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661194091906142e7565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61196c611d3a565b73ffffffffffffffffffffffffffffffffffffffff1661198a611565565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790614017565b60405180910390fd5b610d0563ffffffff168151600360149054906101000a900463ffffffff1663ffffffff16611a0e9190614291565b1115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613ff7565b60405180910390fd5b60005b8151811015611a9357611a80828281518110611a7157611a70614651565b5b60200260200101516001612136565b8080611a8b90614520565b915050611a52565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3f611d3a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611b855750611b8485611b7f611d3a565b611aa3565b5b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613ed7565b60405180910390fd5b611bd18585858585612588565b5050505050565b611be0611d3a565b73ffffffffffffffffffffffffffffffffffffffff16611bfe611565565b73ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614017565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613eb7565b60405180910390fd5b611ccd81612070565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611d58929190613021565b5050565b8151835114611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613f57565b60405180910390fd5b6000611e1a611d3a565b9050611e2a81878787878761280a565b60005b8451811015611fdb576000858281518110611e4b57611e4a614651565b5b602002602001015190506000858381518110611e6a57611e69614651565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613fb7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc09190614291565b9250508190555050505080611fd490614520565b9050611e2d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612052929190613d9e565b60405180910390a4612068818787878787612812565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156122a85760008163ffffffff1667ffffffffffffffff81111561216757612166614680565b5b6040519080825280602002602001820160405280156121955781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156121ba576121b9614680565b5b6040519080825280602002602001820160405280156121e85781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156122855780600360149054906101000a900463ffffffff1661222091906142e7565b63ffffffff16838263ffffffff168151811061223f5761223e614651565b5b6020026020010181815250506001828263ffffffff168151811061226657612265614651565b5b602002602001018181525050808061227d90614569565b9150506121ee565b506122a1848383604051806020016040528060008152506129f9565b50506122dd565b6122dc82600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250612c17565b5b80600360148282829054906101000a900463ffffffff166122fe91906142e7565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690614057565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124809190613dd5565b60405180910390a3505050565b600080336040516020016124a19190613c5e565b6040516020818303038152906040528051906020012090506001816040516020016124cc9190613c79565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516125029493929190613df0565b6020604051602081039080840390855afa158015612524573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90613f57565b60405180910390fd5b6000612602611d3a565b905061262281878761261388612dad565b61261c88612dad565b8761280a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b090613fb7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461276e9190614291565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516127eb9291906140f2565b60405180910390a4612801828888888888612e27565b50505050505050565b505050505050565b6128318473ffffffffffffffffffffffffffffffffffffffff1661300e565b156129f1578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612877959493929190613cba565b602060405180830381600087803b15801561289157600080fd5b505af19250505080156128c257506040513d601f19601f820116820180604052508101906128bf91906136c9565b60015b612968576128ce6146af565b806308c379a0141561292b57506128e3614c86565b806128ee575061292d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129229190613e35565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90613e57565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e690613e77565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a60906140b7565b60405180910390fd5b8151835114612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614097565b60405180910390fd5b6000612ab7611d3a565b9050612ac88160008787878761280a565b60005b8451811015612b8157838181518110612ae757612ae6614651565b5b6020026020010151600080878481518110612b0557612b04614651565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b679190614291565b925050819055508080612b7990614520565b915050612acb565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612bf9929190613d9e565b60405180910390a4612c1081600087878787612812565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906140b7565b60405180910390fd5b6000612c91611d3a565b9050612cb281600087612ca388612dad565b612cac88612dad565b8761280a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d119190614291565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612d8f9291906140f2565b60405180910390a4612da681600087878787612e27565b5050505050565b60606000600167ffffffffffffffff811115612dcc57612dcb614680565b5b604051908082528060200260200182016040528015612dfa5781602001602082028036833780820191505090505b5090508281600081518110612e1257612e11614651565b5b60200260200101818152505080915050919050565b612e468473ffffffffffffffffffffffffffffffffffffffff1661300e565b15613006578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612e8c959493929190613d22565b602060405180830381600087803b158015612ea657600080fd5b505af1925050508015612ed757506040513d601f19601f82011682018060405250810190612ed491906136c9565b60015b612f7d57612ee36146af565b806308c379a01415612f405750612ef8614c86565b80612f035750612f42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f379190613e35565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7490613e57565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffb90613e77565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461302d906144bd565b90600052602060002090601f01602090048101928261304f5760008555613096565b82601f1061306857805160ff1916838001178555613096565b82800160010185558215613096579182015b8281111561309557825182559160200191906001019061307a565b5b5090506130a391906130a7565b5090565b5b808211156130c05760008160009055506001016130a8565b5090565b60006130d76130d28461415b565b614136565b905080838252602082019050828560208602820111156130fa576130f96146d6565b5b60005b8581101561312a57816131108882613228565b8452602084019350602083019250506001810190506130fd565b5050509392505050565b600061314761314284614187565b614136565b9050808382526020820190508285602086028201111561316a576131696146d6565b5b60005b8581101561319a57816131808882613349565b84526020840193506020830192505060018101905061316d565b5050509392505050565b60006131b76131b2846141b3565b614136565b9050828152602081018484840111156131d3576131d26146db565b5b6131de84828561447b565b509392505050565b60006131f96131f4846141e4565b614136565b905082815260208101848484011115613215576132146146db565b5b61322084828561447b565b509392505050565b60008135905061323781614d1c565b92915050565b600082601f830112613252576132516146d1565b5b81356132628482602086016130c4565b91505092915050565b600082601f8301126132805761327f6146d1565b5b8135613290848260208601613134565b91505092915050565b6000813590506132a881614d33565b92915050565b6000813590506132bd81614d4a565b92915050565b6000813590506132d281614d61565b92915050565b6000815190506132e781614d61565b92915050565b600082601f830112613302576133016146d1565b5b81356133128482602086016131a4565b91505092915050565b600082601f8301126133305761332f6146d1565b5b81356133408482602086016131e6565b91505092915050565b60008135905061335881614d78565b92915050565b60008135905061336d81614d8f565b92915050565b60008135905061338281614da6565b92915050565b60006020828403121561339e5761339d6146e5565b5b60006133ac84828501613228565b91505092915050565b600080604083850312156133cc576133cb6146e5565b5b60006133da85828601613228565b92505060206133eb85828601613228565b9150509250929050565b600080600080600060a08688031215613411576134106146e5565b5b600061341f88828901613228565b955050602061343088828901613228565b945050604086013567ffffffffffffffff811115613451576134506146e0565b5b61345d8882890161326b565b935050606086013567ffffffffffffffff81111561347e5761347d6146e0565b5b61348a8882890161326b565b925050608086013567ffffffffffffffff8111156134ab576134aa6146e0565b5b6134b7888289016132ed565b9150509295509295909350565b600080600080600060a086880312156134e0576134df6146e5565b5b60006134ee88828901613228565b95505060206134ff88828901613228565b945050604061351088828901613349565b935050606061352188828901613349565b925050608086013567ffffffffffffffff811115613542576135416146e0565b5b61354e888289016132ed565b9150509295509295909350565b60008060408385031215613572576135716146e5565b5b600061358085828601613228565b925050602061359185828601613299565b9150509250929050565b600080604083850312156135b2576135b16146e5565b5b60006135c085828601613228565b92505060206135d185828601613349565b9150509250929050565b6000602082840312156135f1576135f06146e5565b5b600082013567ffffffffffffffff81111561360f5761360e6146e0565b5b61361b8482850161323d565b91505092915050565b6000806040838503121561363b5761363a6146e5565b5b600083013567ffffffffffffffff811115613659576136586146e0565b5b6136658582860161323d565b925050602083013567ffffffffffffffff811115613686576136856146e0565b5b6136928582860161326b565b9150509250929050565b6000602082840312156136b2576136b16146e5565b5b60006136c0848285016132c3565b91505092915050565b6000602082840312156136df576136de6146e5565b5b60006136ed848285016132d8565b91505092915050565b60006020828403121561370c5761370b6146e5565b5b600082013567ffffffffffffffff81111561372a576137296146e0565b5b6137368482850161331b565b91505092915050565b600060208284031215613755576137546146e5565b5b600061376384828501613349565b91505092915050565b600060208284031215613782576137816146e5565b5b60006137908482850161335e565b91505092915050565b600080600080608085870312156137b3576137b26146e5565b5b60006137c187828801613373565b94505060206137d2878288016132ae565b93505060406137e3878288016132ae565b92505060606137f48782880161335e565b91505092959194509250565b600061380c8383613c22565b60208301905092915050565b613821816143e0565b82525050565b613838613833826143e0565b614596565b82525050565b600061384982614225565b6138538185614253565b935061385e83614215565b8060005b8381101561388f5781516138768882613800565b975061388183614246565b925050600181019050613862565b5085935050505092915050565b6138a5816143f2565b82525050565b6138b4816143fe565b82525050565b6138cb6138c6826143fe565b6145a8565b82525050565b60006138dc82614230565b6138e68185614264565b93506138f681856020860161448a565b6138ff816146ea565b840191505092915050565b60006139158261423b565b61391f8185614275565b935061392f81856020860161448a565b613938816146ea565b840191505092915050565b6000613950603483614275565b915061395b82614715565b604082019050919050565b6000613973602883614275565b915061397e82614764565b604082019050919050565b6000613996601c83614286565b91506139a1826147b3565b601c82019050919050565b60006139b9602b83614275565b91506139c4826147dc565b604082019050919050565b60006139dc602683614275565b91506139e78261482b565b604082019050919050565b60006139ff602983614275565b9150613a0a8261487a565b604082019050919050565b6000613a22601a83614275565b9150613a2d826148c9565b602082019050919050565b6000613a45601d83614275565b9150613a50826148f2565b602082019050919050565b6000613a68601183614275565b9150613a738261491b565b602082019050919050565b6000613a8b602583614275565b9150613a9682614944565b604082019050919050565b6000613aae603283614275565b9150613ab982614993565b604082019050919050565b6000613ad1601783614275565b9150613adc826149e2565b602082019050919050565b6000613af4602a83614275565b9150613aff82614a0b565b604082019050919050565b6000613b17602d83614275565b9150613b2282614a5a565b604082019050919050565b6000613b3a602983614275565b9150613b4582614aa9565b604082019050919050565b6000613b5d602083614275565b9150613b6882614af8565b602082019050919050565b6000613b80601083614275565b9150613b8b82614b21565b602082019050919050565b6000613ba3602983614275565b9150613bae82614b4a565b604082019050919050565b6000613bc6602983614275565b9150613bd182614b99565b604082019050919050565b6000613be9602883614275565b9150613bf482614be8565b604082019050919050565b6000613c0c602183614275565b9150613c1782614c37565b604082019050919050565b613c2b81614454565b82525050565b613c3a81614454565b82525050565b613c498161445e565b82525050565b613c588161446e565b82525050565b6000613c6a8284613827565b60148201915081905092915050565b6000613c8482613989565b9150613c9082846138ba565b60208201915081905092915050565b6000602082019050613cb46000830184613818565b92915050565b600060a082019050613ccf6000830188613818565b613cdc6020830187613818565b8181036040830152613cee818661383e565b90508181036060830152613d02818561383e565b90508181036080830152613d1681846138d1565b90509695505050505050565b600060a082019050613d376000830188613818565b613d446020830187613818565b613d516040830186613c31565b613d5e6060830185613c31565b8181036080830152613d7081846138d1565b90509695505050505050565b60006020820190508181036000830152613d96818461383e565b905092915050565b60006040820190508181036000830152613db8818561383e565b90508181036020830152613dcc818461383e565b90509392505050565b6000602082019050613dea600083018461389c565b92915050565b6000608082019050613e0560008301876138ab565b613e126020830186613c4f565b613e1f60408301856138ab565b613e2c60608301846138ab565b95945050505050565b60006020820190508181036000830152613e4f818461390a565b905092915050565b60006020820190508181036000830152613e7081613943565b9050919050565b60006020820190508181036000830152613e9081613966565b9050919050565b60006020820190508181036000830152613eb0816139ac565b9050919050565b60006020820190508181036000830152613ed0816139cf565b9050919050565b60006020820190508181036000830152613ef0816139f2565b9050919050565b60006020820190508181036000830152613f1081613a15565b9050919050565b60006020820190508181036000830152613f3081613a38565b9050919050565b60006020820190508181036000830152613f5081613a5b565b9050919050565b60006020820190508181036000830152613f7081613a7e565b9050919050565b60006020820190508181036000830152613f9081613aa1565b9050919050565b60006020820190508181036000830152613fb081613ac4565b9050919050565b60006020820190508181036000830152613fd081613ae7565b9050919050565b60006020820190508181036000830152613ff081613b0a565b9050919050565b6000602082019050818103600083015261401081613b2d565b9050919050565b6000602082019050818103600083015261403081613b50565b9050919050565b6000602082019050818103600083015261405081613b73565b9050919050565b6000602082019050818103600083015261407081613b96565b9050919050565b6000602082019050818103600083015261409081613bb9565b9050919050565b600060208201905081810360008301526140b081613bdc565b9050919050565b600060208201905081810360008301526140d081613bff565b9050919050565b60006020820190506140ec6000830184613c31565b92915050565b60006040820190506141076000830185613c31565b6141146020830184613c31565b9392505050565b60006020820190506141306000830184613c40565b92915050565b6000614140614151565b905061414c82826144ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561417657614175614680565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141a2576141a1614680565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141ce576141cd614680565b5b6141d7826146ea565b9050602081019050919050565b600067ffffffffffffffff8211156141ff576141fe614680565b5b614208826146ea565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061429c82614454565b91506142a783614454565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142dc576142db6145c4565b5b828201905092915050565b60006142f28261445e565b91506142fd8361445e565b92508263ffffffff03821115614316576143156145c4565b5b828201905092915050565b600061432c82614454565b915061433783614454565b925082614347576143466145f3565b5b828204905092915050565b600061435d82614454565b915061436883614454565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a1576143a06145c4565b5b828202905092915050565b60006143b782614454565b91506143c283614454565b9250828210156143d5576143d46145c4565b5b828203905092915050565b60006143eb82614434565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144a857808201518184015260208101905061448d565b838111156144b7576000848401525b50505050565b600060028204905060018216806144d557607f821691505b602082108114156144e9576144e8614622565b5b50919050565b6144f8826146ea565b810181811067ffffffffffffffff8211171561451757614516614680565b5b80604052505050565b600061452b82614454565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455e5761455d6145c4565b5b600182019050919050565b60006145748261445e565b915063ffffffff82141561458b5761458a6145c4565b5b600182019050919050565b60006145a1826145b2565b9050919050565b6000819050919050565b60006145bd826146fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146ce5760046000803e6146cb600051614708565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f64207065722077616c6c65742e00000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614c9657614d19565b614c9e614151565b60043d036004823e80513d602482011167ffffffffffffffff82111715614cc6575050614d19565b808201805167ffffffffffffffff811115614ce45750505050614d19565b80602083010160043d038501811115614d01575050505050614d19565b614d10826020018501866144ef565b82955050505050505b90565b614d25816143e0565b8114614d3057600080fd5b50565b614d3c816143f2565b8114614d4757600080fd5b50565b614d53816143fe565b8114614d5e57600080fd5b50565b614d6a81614408565b8114614d7557600080fd5b50565b614d8181614454565b8114614d8c57600080fd5b50565b614d988161445e565b8114614da357600080fd5b50565b614daf8161446e565b8114614dba57600080fd5b5056fea26469706673582212201de292059d6d195f08075833ba029ac12dfcdbf0cc1980b9e8e51891d3a59ce064736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005e68747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f75642f697066732f516d625261634d6777675a33615a50484a627259535344757135775863586137554b5a4368776670636153537a4b2f7b69647d2e6a736f6e0000

Deployed Bytecode

0x6080604052600436106101e25760003560e01c80634e1273f411610102578063a1dd2c0711610095578063e73faa2d11610064578063e73faa2d146106a1578063e985e9c5146106cc578063f242432a14610709578063f2fde38b14610732576101e2565b8063a1dd2c0714610608578063a22cb46514610633578063cc21f4851461065c578063d67b06c114610678576101e2565b80638da5cb5b116100d15780638da5cb5b1461055e5780639039903c1461058957806395d89b41146105b2578063a18116f1146105dd576101e2565b80634e1273f4146104c3578063715018a614610500578063745e1b3f14610517578063892f5f6f14610542576101e2565b806318160ddd1161017a5780633360caa0116101495780633360caa01461042d5780633ccfd60b1461045857806340fa89d91461046f578063472d3b1b14610498576101e2565b806318160ddd146103715780631e7269c51461039c5780631f0234d8146103d95780632eb2c2d614610404576101e2565b806306fdde03116101b657806306fdde03146102b35780630d5624b3146102de5780630e89341c146103095780630fcf2e7514610346576101e2565b8062fdd58e146101e757806301ffc9a71461022457806302fe530514610261578063046dc1661461028a575b600080fd5b3480156101f357600080fd5b5061020e6004803603810190610209919061359b565b61075b565b60405161021b91906140d7565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061369c565b610824565b6040516102589190613dd5565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906136f6565b610906565b005b34801561029657600080fd5b506102b160048036038101906102ac9190613388565b61098e565b005b3480156102bf57600080fd5b506102c8610a4e565b6040516102d59190613e35565b60405180910390f35b3480156102ea57600080fd5b506102f3610a87565b604051610300919061411b565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b919061373f565b610a9d565b60405161033d9190613e35565b60405180910390f35b34801561035257600080fd5b5061035b610b31565b6040516103689190613dd5565b60405180910390f35b34801561037d57600080fd5b50610386610b54565b604051610393919061411b565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613388565b610b6a565b6040516103d0919061411b565b60405180910390f35b3480156103e557600080fd5b506103ee610b8d565b6040516103fb9190613dd5565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906133f5565b610bd4565b005b34801561043957600080fd5b50610442610c75565b60405161044f919061411b565b60405180910390f35b34801561046457600080fd5b5061046d610c8b565b005b34801561047b57600080fd5b506104966004803603810190610491919061376c565b61108d565b005b3480156104a457600080fd5b506104ad61112d565b6040516104ba919061411b565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613624565b611132565b6040516104f79190613d7c565b60405180910390f35b34801561050c57600080fd5b5061051561124b565b005b34801561052357600080fd5b5061052c6112d3565b604051610539919061411b565b60405180910390f35b61055c6004803603810190610557919061376c565b6112d8565b005b34801561056a57600080fd5b50610573611565565b6040516105809190613c9f565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061376c565b61158f565b005b3480156105be57600080fd5b506105c761162f565b6040516105d49190613e35565b60405180910390f35b3480156105e957600080fd5b506105f2611668565b6040516105ff919061411b565b60405180910390f35b34801561061457600080fd5b5061061d61166e565b60405161062a919061411b565b60405180910390f35b34801561063f57600080fd5b5061065a6004803603810190610655919061355b565b611674565b005b61067660048036038101906106719190613799565b61168a565b005b34801561068457600080fd5b5061069f600480360381019061069a91906135db565b611964565b005b3480156106ad57600080fd5b506106b6611a97565b6040516106c391906140d7565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee91906133b5565b611aa3565b6040516107009190613dd5565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b91906134c4565b611b37565b005b34801561073e57600080fd5b5061075960048036038101906107549190613388565b611bd8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390613e97565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ef57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ff57506108fe82611cd0565b5b9050919050565b61090e611d3a565b73ffffffffffffffffffffffffffffffffffffffff1661092c611565565b73ffffffffffffffffffffffffffffffffffffffff1614610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097990614017565b60405180910390fd5b61098b81611d42565b50565b610996611d3a565b73ffffffffffffffffffffffffffffffffffffffff166109b4611565565b73ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0190614017565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600d81526020017f486f6c792056696c6c61696e730000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b606060028054610aac906144bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad8906144bd565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b60056020528060005260406000206000915054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610bcf5750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610bdc611d3a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c225750610c2185610c1c611d3a565b611aa3565b5b610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613f77565b60405180910390fd5b610c6e8585858585611d5c565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610c93611d3a565b73ffffffffffffffffffffffffffffffffffffffff16610cb1611565565b73ffffffffffffffffffffffffffffffffffffffff1614610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90614017565b60405180910390fd5b60006040518060e001604052807394017dd41fd42e6812b74e6e675ad5b48562929e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fe2e2c1206ed98e37871819ffe0156392f1ffc0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738c349e3c568f2f69a736c76b6a239280ea1cc4c873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737fdbb61440985e094f2d2bfcc86b2aae976e96d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a81cfeda5fb92fdda1c2bb5bbd47b149a11bd92773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e8791f7dab20b4ee60a85dec9a3bf11b0b29abc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e001604052806109c463ffffffff1663ffffffff1681526020016109c463ffffffff1663ffffffff1681526020016109c463ffffffff1663ffffffff16815260200161032063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161038463ffffffff1663ffffffff168152509050600047905060005b60078163ffffffff16101561108757600060016007610fbe91906143ac565b8263ffffffff161461100b57612710848363ffffffff1660078110610fe657610fe5614651565b5b602002015163ffffffff1684610ffc9190614352565b6110069190614321565b61100d565b475b9050848263ffffffff166007811061102857611027614651565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611072573d6000803e3d6000fd5b5050808061107f90614569565b915050610f9f565b50505050565b611095611d3a565b73ffffffffffffffffffffffffffffffffffffffff166110b3611565565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090614017565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b600781565b60608151835114611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90614077565b60405180910390fd5b6000835167ffffffffffffffff81111561119557611194614680565b5b6040519080825280602002602001820160405280156111c35781602001602082028036833780820191505090505b50905060005b8451811015611240576112108582815181106111e8576111e7614651565b5b602002602001015185838151811061120357611202614651565b5b602002602001015161075b565b82828151811061122357611222614651565b5b6020026020010181815250508061123990614520565b90506111c9565b508091505092915050565b611253611d3a565b73ffffffffffffffffffffffffffffffffffffffff16611271611565565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614017565b60405180910390fd5b6112d16000612070565b565b600381565b6112e0610b31565b61131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690613ef7565b60405180910390fd5b60008163ffffffff1611611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613f17565b60405180910390fd5b610d0563ffffffff1681600360149054906101000a900463ffffffff1661138f91906142e7565b63ffffffff1611156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613ff7565b60405180910390fd5b8063ffffffff166701140bbd030c40006113f09190614352565b341015611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613f37565b60405180910390fd5b600763ffffffff1681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1661149591906142e7565b63ffffffff1611156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390613fd7565b60405180910390fd5b6114e63382612136565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661154491906142e7565b92506101000a81548163ffffffff021916908363ffffffff16021790555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611597611d3a565b73ffffffffffffffffffffffffffffffffffffffff166115b5611565565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614017565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600881526020017f56494c4c41494e5300000000000000000000000000000000000000000000000081525081565b6103e881565b610d0581565b61168661167f611d3a565b8383612320565b5050565b611692610b8d565b6116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613f97565b60405180910390fd5b6116dc84848461248d565b61171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614037565b60405180910390fd5b60008163ffffffff1611611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613f17565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff1661178b91906142e7565b63ffffffff1611156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ff7565b60405180910390fd5b8063ffffffff166701140bbd030c40006117ec9190614352565b34101561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613f37565b60405180910390fd5b600363ffffffff1681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1661189191906142e7565b63ffffffff1611156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90613fd7565b60405180910390fd5b6118e23382612136565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661194091906142e7565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61196c611d3a565b73ffffffffffffffffffffffffffffffffffffffff1661198a611565565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790614017565b60405180910390fd5b610d0563ffffffff168151600360149054906101000a900463ffffffff1663ffffffff16611a0e9190614291565b1115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613ff7565b60405180910390fd5b60005b8151811015611a9357611a80828281518110611a7157611a70614651565b5b60200260200101516001612136565b8080611a8b90614520565b915050611a52565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3f611d3a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611b855750611b8485611b7f611d3a565b611aa3565b5b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613ed7565b60405180910390fd5b611bd18585858585612588565b5050505050565b611be0611d3a565b73ffffffffffffffffffffffffffffffffffffffff16611bfe611565565b73ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614017565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613eb7565b60405180910390fd5b611ccd81612070565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611d58929190613021565b5050565b8151835114611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613f57565b60405180910390fd5b6000611e1a611d3a565b9050611e2a81878787878761280a565b60005b8451811015611fdb576000858281518110611e4b57611e4a614651565b5b602002602001015190506000858381518110611e6a57611e69614651565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613fb7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc09190614291565b9250508190555050505080611fd490614520565b9050611e2d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612052929190613d9e565b60405180910390a4612068818787878787612812565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156122a85760008163ffffffff1667ffffffffffffffff81111561216757612166614680565b5b6040519080825280602002602001820160405280156121955781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156121ba576121b9614680565b5b6040519080825280602002602001820160405280156121e85781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156122855780600360149054906101000a900463ffffffff1661222091906142e7565b63ffffffff16838263ffffffff168151811061223f5761223e614651565b5b6020026020010181815250506001828263ffffffff168151811061226657612265614651565b5b602002602001018181525050808061227d90614569565b9150506121ee565b506122a1848383604051806020016040528060008152506129f9565b50506122dd565b6122dc82600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250612c17565b5b80600360148282829054906101000a900463ffffffff166122fe91906142e7565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690614057565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124809190613dd5565b60405180910390a3505050565b600080336040516020016124a19190613c5e565b6040516020818303038152906040528051906020012090506001816040516020016124cc9190613c79565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516125029493929190613df0565b6020604051602081039080840390855afa158015612524573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90613f57565b60405180910390fd5b6000612602611d3a565b905061262281878761261388612dad565b61261c88612dad565b8761280a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b090613fb7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461276e9190614291565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516127eb9291906140f2565b60405180910390a4612801828888888888612e27565b50505050505050565b505050505050565b6128318473ffffffffffffffffffffffffffffffffffffffff1661300e565b156129f1578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612877959493929190613cba565b602060405180830381600087803b15801561289157600080fd5b505af19250505080156128c257506040513d601f19601f820116820180604052508101906128bf91906136c9565b60015b612968576128ce6146af565b806308c379a0141561292b57506128e3614c86565b806128ee575061292d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129229190613e35565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90613e57565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e690613e77565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a60906140b7565b60405180910390fd5b8151835114612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614097565b60405180910390fd5b6000612ab7611d3a565b9050612ac88160008787878761280a565b60005b8451811015612b8157838181518110612ae757612ae6614651565b5b6020026020010151600080878481518110612b0557612b04614651565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b679190614291565b925050819055508080612b7990614520565b915050612acb565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612bf9929190613d9e565b60405180910390a4612c1081600087878787612812565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906140b7565b60405180910390fd5b6000612c91611d3a565b9050612cb281600087612ca388612dad565b612cac88612dad565b8761280a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d119190614291565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612d8f9291906140f2565b60405180910390a4612da681600087878787612e27565b5050505050565b60606000600167ffffffffffffffff811115612dcc57612dcb614680565b5b604051908082528060200260200182016040528015612dfa5781602001602082028036833780820191505090505b5090508281600081518110612e1257612e11614651565b5b60200260200101818152505080915050919050565b612e468473ffffffffffffffffffffffffffffffffffffffff1661300e565b15613006578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612e8c959493929190613d22565b602060405180830381600087803b158015612ea657600080fd5b505af1925050508015612ed757506040513d601f19601f82011682018060405250810190612ed491906136c9565b60015b612f7d57612ee36146af565b806308c379a01415612f405750612ef8614c86565b80612f035750612f42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f379190613e35565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7490613e57565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffb90613e77565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461302d906144bd565b90600052602060002090601f01602090048101928261304f5760008555613096565b82601f1061306857805160ff1916838001178555613096565b82800160010185558215613096579182015b8281111561309557825182559160200191906001019061307a565b5b5090506130a391906130a7565b5090565b5b808211156130c05760008160009055506001016130a8565b5090565b60006130d76130d28461415b565b614136565b905080838252602082019050828560208602820111156130fa576130f96146d6565b5b60005b8581101561312a57816131108882613228565b8452602084019350602083019250506001810190506130fd565b5050509392505050565b600061314761314284614187565b614136565b9050808382526020820190508285602086028201111561316a576131696146d6565b5b60005b8581101561319a57816131808882613349565b84526020840193506020830192505060018101905061316d565b5050509392505050565b60006131b76131b2846141b3565b614136565b9050828152602081018484840111156131d3576131d26146db565b5b6131de84828561447b565b509392505050565b60006131f96131f4846141e4565b614136565b905082815260208101848484011115613215576132146146db565b5b61322084828561447b565b509392505050565b60008135905061323781614d1c565b92915050565b600082601f830112613252576132516146d1565b5b81356132628482602086016130c4565b91505092915050565b600082601f8301126132805761327f6146d1565b5b8135613290848260208601613134565b91505092915050565b6000813590506132a881614d33565b92915050565b6000813590506132bd81614d4a565b92915050565b6000813590506132d281614d61565b92915050565b6000815190506132e781614d61565b92915050565b600082601f830112613302576133016146d1565b5b81356133128482602086016131a4565b91505092915050565b600082601f8301126133305761332f6146d1565b5b81356133408482602086016131e6565b91505092915050565b60008135905061335881614d78565b92915050565b60008135905061336d81614d8f565b92915050565b60008135905061338281614da6565b92915050565b60006020828403121561339e5761339d6146e5565b5b60006133ac84828501613228565b91505092915050565b600080604083850312156133cc576133cb6146e5565b5b60006133da85828601613228565b92505060206133eb85828601613228565b9150509250929050565b600080600080600060a08688031215613411576134106146e5565b5b600061341f88828901613228565b955050602061343088828901613228565b945050604086013567ffffffffffffffff811115613451576134506146e0565b5b61345d8882890161326b565b935050606086013567ffffffffffffffff81111561347e5761347d6146e0565b5b61348a8882890161326b565b925050608086013567ffffffffffffffff8111156134ab576134aa6146e0565b5b6134b7888289016132ed565b9150509295509295909350565b600080600080600060a086880312156134e0576134df6146e5565b5b60006134ee88828901613228565b95505060206134ff88828901613228565b945050604061351088828901613349565b935050606061352188828901613349565b925050608086013567ffffffffffffffff811115613542576135416146e0565b5b61354e888289016132ed565b9150509295509295909350565b60008060408385031215613572576135716146e5565b5b600061358085828601613228565b925050602061359185828601613299565b9150509250929050565b600080604083850312156135b2576135b16146e5565b5b60006135c085828601613228565b92505060206135d185828601613349565b9150509250929050565b6000602082840312156135f1576135f06146e5565b5b600082013567ffffffffffffffff81111561360f5761360e6146e0565b5b61361b8482850161323d565b91505092915050565b6000806040838503121561363b5761363a6146e5565b5b600083013567ffffffffffffffff811115613659576136586146e0565b5b6136658582860161323d565b925050602083013567ffffffffffffffff811115613686576136856146e0565b5b6136928582860161326b565b9150509250929050565b6000602082840312156136b2576136b16146e5565b5b60006136c0848285016132c3565b91505092915050565b6000602082840312156136df576136de6146e5565b5b60006136ed848285016132d8565b91505092915050565b60006020828403121561370c5761370b6146e5565b5b600082013567ffffffffffffffff81111561372a576137296146e0565b5b6137368482850161331b565b91505092915050565b600060208284031215613755576137546146e5565b5b600061376384828501613349565b91505092915050565b600060208284031215613782576137816146e5565b5b60006137908482850161335e565b91505092915050565b600080600080608085870312156137b3576137b26146e5565b5b60006137c187828801613373565b94505060206137d2878288016132ae565b93505060406137e3878288016132ae565b92505060606137f48782880161335e565b91505092959194509250565b600061380c8383613c22565b60208301905092915050565b613821816143e0565b82525050565b613838613833826143e0565b614596565b82525050565b600061384982614225565b6138538185614253565b935061385e83614215565b8060005b8381101561388f5781516138768882613800565b975061388183614246565b925050600181019050613862565b5085935050505092915050565b6138a5816143f2565b82525050565b6138b4816143fe565b82525050565b6138cb6138c6826143fe565b6145a8565b82525050565b60006138dc82614230565b6138e68185614264565b93506138f681856020860161448a565b6138ff816146ea565b840191505092915050565b60006139158261423b565b61391f8185614275565b935061392f81856020860161448a565b613938816146ea565b840191505092915050565b6000613950603483614275565b915061395b82614715565b604082019050919050565b6000613973602883614275565b915061397e82614764565b604082019050919050565b6000613996601c83614286565b91506139a1826147b3565b601c82019050919050565b60006139b9602b83614275565b91506139c4826147dc565b604082019050919050565b60006139dc602683614275565b91506139e78261482b565b604082019050919050565b60006139ff602983614275565b9150613a0a8261487a565b604082019050919050565b6000613a22601a83614275565b9150613a2d826148c9565b602082019050919050565b6000613a45601d83614275565b9150613a50826148f2565b602082019050919050565b6000613a68601183614275565b9150613a738261491b565b602082019050919050565b6000613a8b602583614275565b9150613a9682614944565b604082019050919050565b6000613aae603283614275565b9150613ab982614993565b604082019050919050565b6000613ad1601783614275565b9150613adc826149e2565b602082019050919050565b6000613af4602a83614275565b9150613aff82614a0b565b604082019050919050565b6000613b17602d83614275565b9150613b2282614a5a565b604082019050919050565b6000613b3a602983614275565b9150613b4582614aa9565b604082019050919050565b6000613b5d602083614275565b9150613b6882614af8565b602082019050919050565b6000613b80601083614275565b9150613b8b82614b21565b602082019050919050565b6000613ba3602983614275565b9150613bae82614b4a565b604082019050919050565b6000613bc6602983614275565b9150613bd182614b99565b604082019050919050565b6000613be9602883614275565b9150613bf482614be8565b604082019050919050565b6000613c0c602183614275565b9150613c1782614c37565b604082019050919050565b613c2b81614454565b82525050565b613c3a81614454565b82525050565b613c498161445e565b82525050565b613c588161446e565b82525050565b6000613c6a8284613827565b60148201915081905092915050565b6000613c8482613989565b9150613c9082846138ba565b60208201915081905092915050565b6000602082019050613cb46000830184613818565b92915050565b600060a082019050613ccf6000830188613818565b613cdc6020830187613818565b8181036040830152613cee818661383e565b90508181036060830152613d02818561383e565b90508181036080830152613d1681846138d1565b90509695505050505050565b600060a082019050613d376000830188613818565b613d446020830187613818565b613d516040830186613c31565b613d5e6060830185613c31565b8181036080830152613d7081846138d1565b90509695505050505050565b60006020820190508181036000830152613d96818461383e565b905092915050565b60006040820190508181036000830152613db8818561383e565b90508181036020830152613dcc818461383e565b90509392505050565b6000602082019050613dea600083018461389c565b92915050565b6000608082019050613e0560008301876138ab565b613e126020830186613c4f565b613e1f60408301856138ab565b613e2c60608301846138ab565b95945050505050565b60006020820190508181036000830152613e4f818461390a565b905092915050565b60006020820190508181036000830152613e7081613943565b9050919050565b60006020820190508181036000830152613e9081613966565b9050919050565b60006020820190508181036000830152613eb0816139ac565b9050919050565b60006020820190508181036000830152613ed0816139cf565b9050919050565b60006020820190508181036000830152613ef0816139f2565b9050919050565b60006020820190508181036000830152613f1081613a15565b9050919050565b60006020820190508181036000830152613f3081613a38565b9050919050565b60006020820190508181036000830152613f5081613a5b565b9050919050565b60006020820190508181036000830152613f7081613a7e565b9050919050565b60006020820190508181036000830152613f9081613aa1565b9050919050565b60006020820190508181036000830152613fb081613ac4565b9050919050565b60006020820190508181036000830152613fd081613ae7565b9050919050565b60006020820190508181036000830152613ff081613b0a565b9050919050565b6000602082019050818103600083015261401081613b2d565b9050919050565b6000602082019050818103600083015261403081613b50565b9050919050565b6000602082019050818103600083015261405081613b73565b9050919050565b6000602082019050818103600083015261407081613b96565b9050919050565b6000602082019050818103600083015261409081613bb9565b9050919050565b600060208201905081810360008301526140b081613bdc565b9050919050565b600060208201905081810360008301526140d081613bff565b9050919050565b60006020820190506140ec6000830184613c31565b92915050565b60006040820190506141076000830185613c31565b6141146020830184613c31565b9392505050565b60006020820190506141306000830184613c40565b92915050565b6000614140614151565b905061414c82826144ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561417657614175614680565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141a2576141a1614680565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141ce576141cd614680565b5b6141d7826146ea565b9050602081019050919050565b600067ffffffffffffffff8211156141ff576141fe614680565b5b614208826146ea565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061429c82614454565b91506142a783614454565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142dc576142db6145c4565b5b828201905092915050565b60006142f28261445e565b91506142fd8361445e565b92508263ffffffff03821115614316576143156145c4565b5b828201905092915050565b600061432c82614454565b915061433783614454565b925082614347576143466145f3565b5b828204905092915050565b600061435d82614454565b915061436883614454565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a1576143a06145c4565b5b828202905092915050565b60006143b782614454565b91506143c283614454565b9250828210156143d5576143d46145c4565b5b828203905092915050565b60006143eb82614434565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144a857808201518184015260208101905061448d565b838111156144b7576000848401525b50505050565b600060028204905060018216806144d557607f821691505b602082108114156144e9576144e8614622565b5b50919050565b6144f8826146ea565b810181811067ffffffffffffffff8211171561451757614516614680565b5b80604052505050565b600061452b82614454565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455e5761455d6145c4565b5b600182019050919050565b60006145748261445e565b915063ffffffff82141561458b5761458a6145c4565b5b600182019050919050565b60006145a1826145b2565b9050919050565b6000819050919050565b60006145bd826146fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146ce5760046000803e6146cb600051614708565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f64207065722077616c6c65742e00000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614c9657614d19565b614c9e614151565b60043d036004823e80513d602482011167ffffffffffffffff82111715614cc6575050614d19565b808201805167ffffffffffffffff811115614ce45750505050614d19565b80602083010160043d038501811115614d01575050505050614d19565b614d10826020018501866144ef565b82955050505050505b90565b614d25816143e0565b8114614d3057600080fd5b50565b614d3c816143f2565b8114614d4757600080fd5b50565b614d53816143fe565b8114614d5e57600080fd5b50565b614d6a81614408565b8114614d7557600080fd5b50565b614d8181614454565b8114614d8c57600080fd5b50565b614d988161445e565b8114614da357600080fd5b50565b614daf8161446e565b8114614dba57600080fd5b5056fea26469706673582212201de292059d6d195f08075833ba029ac12dfcdbf0cc1980b9e8e51891d3a59ce064736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005e68747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f75642f697066732f516d625261634d6777675a33615a50484a627259535344757135775863586137554b5a4368776670636153537a4b2f7b69647d2e6a736f6e0000

-----Decoded View---------------
Arg [0] : uri (string): https://holyverse.mypinata.cloud/ipfs/QmbRacMgwgZ3aZPHJbrYSSDuq5wXcXa7UKZChwfpcaSSzK/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005e
Arg [2] : 68747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f7564
Arg [3] : 2f697066732f516d625261634d6777675a33615a50484a627259535344757135
Arg [4] : 775863586137554b5a4368776670636153537a4b2f7b69647d2e6a736f6e0000


Deployed Bytecode Sourcemap

37308:5308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23766:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22789:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38048:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38139:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37357:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37553:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23510:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38656:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37460:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37945:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38473:175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25705:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37707:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41558:1055;;;;;;;;;;;;;:::i;:::-;;38245:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37812:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24163:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3617:103;;;;;;;;;;;;;:::i;:::-;;37652:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40564:642;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38356:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37409:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37599:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37756:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24760:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39786:770;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41214:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37496:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24987:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3875:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23766:231;23852:7;23899:1;23880:21;;:7;:21;;;;23872:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23967:9;:13;23977:2;23967:13;;;;;;;;;;;:22;23981:7;23967:22;;;;;;;;;;;;;;;;23960:29;;23766:231;;;;:::o;22789:310::-;22891:4;22943:26;22928:41;;;:11;:41;;;;:110;;;;23001:37;22986:52;;;:11;:52;;;;22928:110;:163;;;;23055:36;23079:11;23055:23;:36::i;:::-;22928:163;22908:183;;22789:310;;;:::o;38048:83::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38111:12:::1;38119:3;38111:7;:12::i;:::-;38048:83:::0;:::o;38139:98::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38225:4:::1;38209:13;;:20;;;;;;;;;;;;;;;;;;38139:98:::0;:::o;37357:45::-;;;;;;;;;;;;;;;;;;;:::o;37553:39::-;;;;;;;;;;;;;:::o;23510:105::-;23570:13;23603:4;23596:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23510:105;;;:::o;38656:117::-;38707:4;38750:15;38731;;;;;;;;;;;:34;;;;38724:41;;38656:117;:::o;37460:29::-;;;;;;;;;;;;;:::o;37945:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;38473:175::-;38521:4;38574:15;38558:12;;;;;;;;;;;:31;;;;:82;;;;;38625:15;38606;;;;;;;;;;;:34;;;;38558:82;38538:102;;38473:175;:::o;25705:442::-;25946:12;:10;:12::i;:::-;25938:20;;:4;:20;;;:60;;;;25962:36;25979:4;25985:12;:10;:12::i;:::-;25962:16;:36::i;:::-;25938:60;25916:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26087:52;26110:4;26116:2;26120:3;26125:7;26134:4;26087:22;:52::i;:::-;25705:442;;;;;:::o;37707:42::-;;;;;;;;;;;;;:::o;41558:1055::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41608:27:::1;:440;;;;;;;;41653:42;41608:440;;;;;;;;41710:42;41608:440;;;;;;;;41767:42;41608:440;;;;;;;;41824:42;41608:440;;;;;;;;41881:42;41608:440;;;;;;;;41938:42;41608:440;;;;;;;;41995:42;41608:440;;;;;;::::0;::::1;;42061:23;:222;;;;;;;;42109:4;42061:222;;;;;;;;42136:4;42061:222;;;;;;;;42163:4;42061:222;;;;;;;;42190:3;42061:222;;;;;;;;42216:3;42061:222;;;;;;;;42242:3;42061:222;;;;;;;;42268:3;42061:222;;;;;;::::0;::::1;;42296:15;42314:21;42296:39;;42353:8;42348:258;42371:16;42367:1;:20;;;42348:258;;;42409:14;42450:1;42431:16;:20;;;;:::i;:::-;42426:1;:25;;;:115;;42536:5;42523:6;42530:1;42523:9;;;;;;;;;:::i;:::-;;;;;;42513:19;;:7;:19;;;;:::i;:::-;42512:29;;;;:::i;:::-;42426:115;;;42471:21;42426:115;42409:132;;42564:9;42574:1;42564:12;;;;;;;;;:::i;:::-;;;;;;42556:30;;:38;42587:6;42556:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42394:212;42389:3;;;;;:::i;:::-;;;;42348:258;;;;41597:1016;;;41558:1055::o:0;38245:103::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38331:9:::1;38316:12;;:24;;;;;;;;;;;;;;;;;;38245:103:::0;:::o;37812:49::-;37860:1;37812:49;:::o;24163:524::-;24319:16;24380:3;:10;24361:8;:15;:29;24353:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24449:30;24496:8;:15;24482:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24449:63;;24530:9;24525:122;24549:8;:15;24545:1;:19;24525:122;;;24605:30;24615:8;24624:1;24615:11;;;;;;;;:::i;:::-;;;;;;;;24628:3;24632:1;24628:6;;;;;;;;:::i;:::-;;;;;;;;24605:9;:30::i;:::-;24586:13;24600:1;24586:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24566:3;;;;:::i;:::-;;;24525:122;;;;24666:13;24659:20;;;24163:524;;;;:::o;3617:103::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3682:30:::1;3709:1;3682:18;:30::i;:::-;3617:103::o:0;37652:46::-;37697:1;37652:46;:::o;40564:642::-;40638:20;:18;:20::i;:::-;40630:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40716:1;40708:5;:9;;;40700:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37801:4;40784:42;;40798:5;40784:11;;;;;;;;;;;:19;;;;:::i;:::-;:42;;;;40762:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;40939:5;40927:17;;37532:12;40927:17;;;;:::i;:::-;40914:9;:30;;40906:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37860:1;40999:52;;41020:5;40999:6;:18;41006:10;40999:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:52;;;;40977:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;41137:23;41142:10;41154:5;41137:4;:23::i;:::-;41193:5;41171:6;:18;41178:10;41171:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40564:642;:::o;2966:87::-;3012:7;3039:6;;;;;;;;;;;3032:13;;2966:87;:::o;38356:109::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38448:9:::1;38430:15;;:27;;;;;;;;;;;;;;;;;;38356:109:::0;:::o;37409:42::-;;;;;;;;;;;;;;;;;;;:::o;37599:46::-;37641:4;37599:46;:::o;37756:49::-;37801:4;37756:49;:::o;24760:155::-;24855:52;24874:12;:10;:12::i;:::-;24888:8;24898;24855:18;:52::i;:::-;24760:155;;:::o;39786:770::-;39931:17;:15;:17::i;:::-;39923:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39995:29;40016:1;40019;40022;39995:20;:29::i;:::-;39987:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40072:1;40064:5;:9;;;40056:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37641:4;40140:39;;40154:5;40140:11;;;;;;;;;;;:19;;;;:::i;:::-;:39;;;;40118:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;40292:5;40280:17;;37532:12;40280:17;;;;:::i;:::-;40267:9;:30;;40259:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37697:1;40352:49;;40373:5;40352:6;:18;40359:10;40352:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:49;;;;40330:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;40487:23;40492:10;40504:5;40487:4;:23::i;:::-;40543:5;40521:6;:18;40528:10;40521:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39786:770;;;;:::o;41214:336::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37801:4:::1;41313:53;;41327:9;:16;41313:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:53;;41291:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;41453:9;41448:95;41472:9;:16;41468:1;:20;41448:95;;;41510:21;41515:9;41525:1;41515:12;;;;;;;;:::i;:::-;;;;;;;;41529:1;41510:4;:21::i;:::-;41490:3;;;;;:::i;:::-;;;;41448:95;;;;41214:336:::0;:::o;37496:48::-;37532:12;37496:48;:::o;24987:168::-;25086:4;25110:18;:27;25129:7;25110:27;;;;;;;;;;;;;;;:37;25138:8;25110:37;;;;;;;;;;;;;;;;;;;;;;;;;25103:44;;24987:168;;;;:::o;25227:401::-;25443:12;:10;:12::i;:::-;25435:20;;:4;:20;;;:60;;;;25459:36;25476:4;25482:12;:10;:12::i;:::-;25459:16;:36::i;:::-;25435:60;25413:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25575:45;25593:4;25599:2;25603;25607:6;25615:4;25575:17;:45::i;:::-;25227:401;;;;;:::o;3875:201::-;3197:12;:10;:12::i;:::-;3186:23;;:7;:5;:7::i;:::-;:23;;;3178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3984:1:::1;3964:22;;:8;:22;;;;3956:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4040:28;4059:8;4040:18;:28::i;:::-;3875:201:::0;:::o;14278:157::-;14363:4;14402:25;14387:40;;;:11;:40;;;;14380:47;;14278:157;;;:::o;1721:98::-;1774:7;1801:10;1794:17;;1721:98;:::o;29707:88::-;29781:6;29774:4;:13;;;;;;;;;;;;:::i;:::-;;29707:88;:::o;27789:1074::-;28016:7;:14;28002:3;:10;:28;27994:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28108:1;28094:16;;:2;:16;;;;28086:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28165:16;28184:12;:10;:12::i;:::-;28165:31;;28209:60;28230:8;28240:4;28246:2;28250:3;28255:7;28264:4;28209:20;:60::i;:::-;28287:9;28282:421;28306:3;:10;28302:1;:14;28282:421;;;28338:10;28351:3;28355:1;28351:6;;;;;;;;:::i;:::-;;;;;;;;28338:19;;28372:14;28389:7;28397:1;28389:10;;;;;;;;:::i;:::-;;;;;;;;28372:27;;28416:19;28438:9;:13;28448:2;28438:13;;;;;;;;;;;:19;28452:4;28438:19;;;;;;;;;;;;;;;;28416:41;;28495:6;28480:11;:21;;28472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28628:6;28614:11;:20;28592:9;:13;28602:2;28592:13;;;;;;;;;;;:19;28606:4;28592:19;;;;;;;;;;;;;;;:42;;;;28685:6;28664:9;:13;28674:2;28664:13;;;;;;;;;;;:17;28678:2;28664:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28323:380;;;28318:3;;;;:::i;:::-;;;28282:421;;;;28750:2;28720:47;;28744:4;28720:47;;28734:8;28720:47;;;28754:3;28759:7;28720:47;;;;;;;:::i;:::-;;;;;;;;28780:75;28816:8;28826:4;28832:2;28836:3;28841:7;28850:4;28780:35;:75::i;:::-;27983:880;27789:1074;;;;;:::o;4236:191::-;4310:16;4329:6;;;;;;;;;;;4310:25;;4355:8;4346:6;;:17;;;;;;;;;;;;;;;;;;4410:8;4379:40;;4400:8;4379:40;;;;;;;;;;;;4299:128;4236:191;:::o;39259:519::-;39331:1;39323:5;:9;;;39319:419;;;39349:20;39394:5;39386:14;;39372:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39349:52;;39416:24;39465:5;39457:14;;39443:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39416:56;;39494:8;39489:127;39512:5;39508:9;;:1;:9;;;39489:127;;;39566:1;39552:11;;;;;;;;;;;:15;;;;:::i;:::-;39543:24;;:3;39547:1;39543:6;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;;39599:1;39586:7;39594:1;39586:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;39519:3;;;;;:::i;:::-;;;;39489:127;;;;39632:32;39643:2;39647:3;39652:7;39632:32;;;;;;;;;;;;:10;:32::i;:::-;39334:342;;39319:419;;;39697:29;39703:2;39707:11;;;;;;;;;;;39697:29;;39720:1;39697:29;;;;;;;;;;;;:5;:29::i;:::-;39319:419;39765:5;39750:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39259:519;;:::o;33975:331::-;34130:8;34121:17;;:5;:17;;;;34113:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:8;34195:18;:25;34214:5;34195:25;;;;;;;;;;;;;;;:35;34221:8;34195:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34279:8;34257:41;;34272:5;34257:41;;;34289:8;34257:41;;;;;;:::i;:::-;;;;;;;;33975:331;;;:::o;38781:470::-;38899:4;38916:12;38958:10;38941:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;38931:39;;;;;;38916:54;;39031:212;39144:4;39091:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;39059:109;;;;;;39187:1;39207;39227;39031:212;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39001:242;;:13;;;;;;;;;;;:242;;;38981:262;;;38781:470;;;;;:::o;26611:820::-;26813:1;26799:16;;:2;:16;;;;26791:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26870:16;26889:12;:10;:12::i;:::-;26870:31;;26914:96;26935:8;26945:4;26951:2;26955:21;26973:2;26955:17;:21::i;:::-;26978:25;26996:6;26978:17;:25::i;:::-;27005:4;26914:20;:96::i;:::-;27023:19;27045:9;:13;27055:2;27045:13;;;;;;;;;;;:19;27059:4;27045:19;;;;;;;;;;;;;;;;27023:41;;27098:6;27083:11;:21;;27075:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27223:6;27209:11;:20;27187:9;:13;27197:2;27187:13;;;;;;;;;;;:19;27201:4;27187:19;;;;;;;;;;;;;;;:42;;;;27272:6;27251:9;:13;27261:2;27251:13;;;;;;;;;;;:17;27265:2;27251:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27327:2;27296:46;;27321:4;27296:46;;27311:8;27296:46;;;27331:2;27335:6;27296:46;;;;;;;:::i;:::-;;;;;;;;27355:68;27386:8;27396:4;27402:2;27406;27410:6;27418:4;27355:30;:68::i;:::-;26780:651;;26611:820;;;;;:::o;35262:221::-;;;;;;;:::o;36243:813::-;36483:15;:2;:13;;;:15::i;:::-;36479:570;;;36536:2;36519:43;;;36563:8;36573:4;36579:3;36584:7;36593:4;36519:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36515:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36911:6;36904:14;;;;;;;;;;;:::i;:::-;;;;;;;;36515:523;;;36960:62;;;;;;;;;;:::i;:::-;;;;;;;;36515:523;36692:48;;;36680:60;;;:8;:60;;;;36676:159;;36765:50;;;;;;;;;;:::i;:::-;;;;;;;;36676:159;36599:251;36479:570;36243:813;;;;;;:::o;31106:735::-;31298:1;31284:16;;:2;:16;;;;31276:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31371:7;:14;31357:3;:10;:28;31349:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31443:16;31462:12;:10;:12::i;:::-;31443:31;;31487:66;31508:8;31526:1;31530:2;31534:3;31539:7;31548:4;31487:20;:66::i;:::-;31571:9;31566:103;31590:3;:10;31586:1;:14;31566:103;;;31647:7;31655:1;31647:10;;;;;;;;:::i;:::-;;;;;;;;31622:9;:17;31632:3;31636:1;31632:6;;;;;;;;:::i;:::-;;;;;;;;31622:17;;;;;;;;;;;:21;31640:2;31622:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31602:3;;;;;:::i;:::-;;;;31566:103;;;;31722:2;31686:53;;31718:1;31686:53;;31700:8;31686:53;;;31726:3;31731:7;31686:53;;;;;;;:::i;:::-;;;;;;;;31752:81;31788:8;31806:1;31810:2;31814:3;31819:7;31828:4;31752:35;:81::i;:::-;31265:576;31106:735;;;;:::o;30181:569::-;30348:1;30334:16;;:2;:16;;;;30326:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30401:16;30420:12;:10;:12::i;:::-;30401:31;;30445:102;30466:8;30484:1;30488:2;30492:21;30510:2;30492:17;:21::i;:::-;30515:25;30533:6;30515:17;:25::i;:::-;30542:4;30445:20;:102::i;:::-;30581:6;30560:9;:13;30570:2;30560:13;;;;;;;;;;;:17;30574:2;30560:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30640:2;30603:52;;30636:1;30603:52;;30618:8;30603:52;;;30644:2;30648:6;30603:52;;;;;;;:::i;:::-;;;;;;;;30668:74;30699:8;30717:1;30721:2;30725;30729:6;30737:4;30668:30;:74::i;:::-;30315:435;30181:569;;;;:::o;37064:198::-;37130:16;37159:22;37198:1;37184:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37159:41;;37222:7;37211:5;37217:1;37211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37249:5;37242:12;;;37064:198;;;:::o;35491:744::-;35706:15;:2;:13;;;:15::i;:::-;35702:526;;;35759:2;35742:38;;;35781:8;35791:4;35797:2;35801:6;35809:4;35742:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35738:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36090:6;36083:14;;;;;;;;;;;:::i;:::-;;;;;;;;35738:479;;;36139:62;;;;;;;;;;:::i;:::-;;;;;;;;35738:479;35876:43;;;35864:55;;;:8;:55;;;;35860:154;;35944:50;;;;;;;;;;:::i;:::-;;;;;;;;35860:154;35815:214;35702:526;35491:744;;;;;;:::o;5225:387::-;5285:4;5493:12;5560:7;5548:20;5540:28;;5603:1;5596:4;:8;5589:15;;;5225:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:137::-;4743:5;4781:6;4768:20;4759:29;;4797:32;4823:5;4797:32;:::i;:::-;4698:137;;;;:::o;4841:135::-;4885:5;4923:6;4910:20;4901:29;;4939:31;4964:5;4939:31;:::i;:::-;4841:135;;;;:::o;4982:329::-;5041:6;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;4982:329;;;;:::o;5317:474::-;5385:6;5393;5442:2;5430:9;5421:7;5417:23;5413:32;5410:119;;;5448:79;;:::i;:::-;5410:119;5568:1;5593:53;5638:7;5629:6;5618:9;5614:22;5593:53;:::i;:::-;5583:63;;5539:117;5695:2;5721:53;5766:7;5757:6;5746:9;5742:22;5721:53;:::i;:::-;5711:63;;5666:118;5317:474;;;;;:::o;5797:1509::-;5951:6;5959;5967;5975;5983;6032:3;6020:9;6011:7;6007:23;6003:33;6000:120;;;6039:79;;:::i;:::-;6000:120;6159:1;6184:53;6229:7;6220:6;6209:9;6205:22;6184:53;:::i;:::-;6174:63;;6130:117;6286:2;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;:::i;:::-;6302:63;;6257:118;6442:2;6431:9;6427:18;6414:32;6473:18;6465:6;6462:30;6459:117;;;6495:79;;:::i;:::-;6459:117;6600:78;6670:7;6661:6;6650:9;6646:22;6600:78;:::i;:::-;6590:88;;6385:303;6755:2;6744:9;6740:18;6727:32;6786:18;6778:6;6775:30;6772:117;;;6808:79;;:::i;:::-;6772:117;6913:78;6983:7;6974:6;6963:9;6959:22;6913:78;:::i;:::-;6903:88;;6698:303;7068:3;7057:9;7053:19;7040:33;7100:18;7092:6;7089:30;7086:117;;;7122:79;;:::i;:::-;7086:117;7227:62;7281:7;7272:6;7261:9;7257:22;7227:62;:::i;:::-;7217:72;;7011:288;5797:1509;;;;;;;;:::o;7312:1089::-;7416:6;7424;7432;7440;7448;7497:3;7485:9;7476:7;7472:23;7468:33;7465:120;;;7504:79;;:::i;:::-;7465:120;7624:1;7649:53;7694:7;7685:6;7674:9;7670:22;7649:53;:::i;:::-;7639:63;;7595:117;7751:2;7777:53;7822:7;7813:6;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;7722:118;7879:2;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7850:118;8007:2;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7978:118;8163:3;8152:9;8148:19;8135:33;8195:18;8187:6;8184:30;8181:117;;;8217:79;;:::i;:::-;8181:117;8322:62;8376:7;8367:6;8356:9;8352:22;8322:62;:::i;:::-;8312:72;;8106:288;7312:1089;;;;;;;;:::o;8407:468::-;8472:6;8480;8529:2;8517:9;8508:7;8504:23;8500:32;8497:119;;;8535:79;;:::i;:::-;8497:119;8655:1;8680:53;8725:7;8716:6;8705:9;8701:22;8680:53;:::i;:::-;8670:63;;8626:117;8782:2;8808:50;8850:7;8841:6;8830:9;8826:22;8808:50;:::i;:::-;8798:60;;8753:115;8407:468;;;;;:::o;8881:474::-;8949:6;8957;9006:2;8994:9;8985:7;8981:23;8977:32;8974:119;;;9012:79;;:::i;:::-;8974:119;9132:1;9157:53;9202:7;9193:6;9182:9;9178:22;9157:53;:::i;:::-;9147:63;;9103:117;9259:2;9285:53;9330:7;9321:6;9310:9;9306:22;9285:53;:::i;:::-;9275:63;;9230:118;8881:474;;;;;:::o;9361:539::-;9445:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:119;;;9500:79;;:::i;:::-;9462:119;9648:1;9637:9;9633:17;9620:31;9678:18;9670:6;9667:30;9664:117;;;9700:79;;:::i;:::-;9664:117;9805:78;9875:7;9866:6;9855:9;9851:22;9805:78;:::i;:::-;9795:88;;9591:302;9361:539;;;;:::o;9906:894::-;10024:6;10032;10081:2;10069:9;10060:7;10056:23;10052:32;10049:119;;;10087:79;;:::i;:::-;10049:119;10235:1;10224:9;10220:17;10207:31;10265:18;10257:6;10254:30;10251:117;;;10287:79;;:::i;:::-;10251:117;10392:78;10462:7;10453:6;10442:9;10438:22;10392:78;:::i;:::-;10382:88;;10178:302;10547:2;10536:9;10532:18;10519:32;10578:18;10570:6;10567:30;10564:117;;;10600:79;;:::i;:::-;10564:117;10705:78;10775:7;10766:6;10755:9;10751:22;10705:78;:::i;:::-;10695:88;;10490:303;9906:894;;;;;:::o;10806:327::-;10864:6;10913:2;10901:9;10892:7;10888:23;10884:32;10881:119;;;10919:79;;:::i;:::-;10881:119;11039:1;11064:52;11108:7;11099:6;11088:9;11084:22;11064:52;:::i;:::-;11054:62;;11010:116;10806:327;;;;:::o;11139:349::-;11208:6;11257:2;11245:9;11236:7;11232:23;11228:32;11225:119;;;11263:79;;:::i;:::-;11225:119;11383:1;11408:63;11463:7;11454:6;11443:9;11439:22;11408:63;:::i;:::-;11398:73;;11354:127;11139:349;;;;:::o;11494:509::-;11563:6;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11766:1;11755:9;11751:17;11738:31;11796:18;11788:6;11785:30;11782:117;;;11818:79;;:::i;:::-;11782:117;11923:63;11978:7;11969:6;11958:9;11954:22;11923:63;:::i;:::-;11913:73;;11709:287;11494:509;;;;:::o;12009:329::-;12068:6;12117:2;12105:9;12096:7;12092:23;12088:32;12085:119;;;12123:79;;:::i;:::-;12085:119;12243:1;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12214:117;12009:329;;;;:::o;12344:327::-;12402:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12577:1;12602:52;12646:7;12637:6;12626:9;12622:22;12602:52;:::i;:::-;12592:62;;12548:116;12344:327;;;;:::o;12677:759::-;12760:6;12768;12776;12784;12833:3;12821:9;12812:7;12808:23;12804:33;12801:120;;;12840:79;;:::i;:::-;12801:120;12960:1;12985:51;13028:7;13019:6;13008:9;13004:22;12985:51;:::i;:::-;12975:61;;12931:115;13085:2;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13056:118;13213:2;13239:53;13284:7;13275:6;13264:9;13260:22;13239:53;:::i;:::-;13229:63;;13184:118;13341:2;13367:52;13411:7;13402:6;13391:9;13387:22;13367:52;:::i;:::-;13357:62;;13312:117;12677:759;;;;;;;:::o;13442:179::-;13511:10;13532:46;13574:3;13566:6;13532:46;:::i;:::-;13610:4;13605:3;13601:14;13587:28;;13442:179;;;;:::o;13627:118::-;13714:24;13732:5;13714:24;:::i;:::-;13709:3;13702:37;13627:118;;:::o;13751:157::-;13856:45;13876:24;13894:5;13876:24;:::i;:::-;13856:45;:::i;:::-;13851:3;13844:58;13751:157;;:::o;13944:732::-;14063:3;14092:54;14140:5;14092:54;:::i;:::-;14162:86;14241:6;14236:3;14162:86;:::i;:::-;14155:93;;14272:56;14322:5;14272:56;:::i;:::-;14351:7;14382:1;14367:284;14392:6;14389:1;14386:13;14367:284;;;14468:6;14462:13;14495:63;14554:3;14539:13;14495:63;:::i;:::-;14488:70;;14581:60;14634:6;14581:60;:::i;:::-;14571:70;;14427:224;14414:1;14411;14407:9;14402:14;;14367:284;;;14371:14;14667:3;14660:10;;14068:608;;;13944:732;;;;:::o;14682:109::-;14763:21;14778:5;14763:21;:::i;:::-;14758:3;14751:34;14682:109;;:::o;14797:118::-;14884:24;14902:5;14884:24;:::i;:::-;14879:3;14872:37;14797:118;;:::o;14921:157::-;15026:45;15046:24;15064:5;15046:24;:::i;:::-;15026:45;:::i;:::-;15021:3;15014:58;14921:157;;:::o;15084:360::-;15170:3;15198:38;15230:5;15198:38;:::i;:::-;15252:70;15315:6;15310:3;15252:70;:::i;:::-;15245:77;;15331:52;15376:6;15371:3;15364:4;15357:5;15353:16;15331:52;:::i;:::-;15408:29;15430:6;15408:29;:::i;:::-;15403:3;15399:39;15392:46;;15174:270;15084:360;;;;:::o;15450:364::-;15538:3;15566:39;15599:5;15566:39;:::i;:::-;15621:71;15685:6;15680:3;15621:71;:::i;:::-;15614:78;;15701:52;15746:6;15741:3;15734:4;15727:5;15723:16;15701:52;:::i;:::-;15778:29;15800:6;15778:29;:::i;:::-;15773:3;15769:39;15762:46;;15542:272;15450:364;;;;:::o;15820:366::-;15962:3;15983:67;16047:2;16042:3;15983:67;:::i;:::-;15976:74;;16059:93;16148:3;16059:93;:::i;:::-;16177:2;16172:3;16168:12;16161:19;;15820:366;;;:::o;16192:::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:402::-;16724:3;16745:85;16827:2;16822:3;16745:85;:::i;:::-;16738:92;;16839:93;16928:3;16839:93;:::i;:::-;16957:2;16952:3;16948:12;16941:19;;16564:402;;;:::o;16972:366::-;17114:3;17135:67;17199:2;17194:3;17135:67;:::i;:::-;17128:74;;17211:93;17300:3;17211:93;:::i;:::-;17329:2;17324:3;17320:12;17313:19;;16972:366;;;:::o;17344:::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17344:366;;;:::o;17716:::-;17858:3;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17955:93;18044:3;17955:93;:::i;:::-;18073:2;18068:3;18064:12;18057:19;;17716:366;;;:::o;18088:::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18088:366;;;:::o;18460:::-;18602:3;18623:67;18687:2;18682:3;18623:67;:::i;:::-;18616:74;;18699:93;18788:3;18699:93;:::i;:::-;18817:2;18812:3;18808:12;18801:19;;18460:366;;;:::o;18832:::-;18974:3;18995:67;19059:2;19054:3;18995:67;:::i;:::-;18988:74;;19071:93;19160:3;19071:93;:::i;:::-;19189:2;19184:3;19180:12;19173:19;;18832:366;;;:::o;19204:::-;19346:3;19367:67;19431:2;19426:3;19367:67;:::i;:::-;19360:74;;19443:93;19532:3;19443:93;:::i;:::-;19561:2;19556:3;19552:12;19545:19;;19204:366;;;:::o;19576:::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19576:366;;;:::o;19948:::-;20090:3;20111:67;20175:2;20170:3;20111:67;:::i;:::-;20104:74;;20187:93;20276:3;20187:93;:::i;:::-;20305:2;20300:3;20296:12;20289:19;;19948:366;;;:::o;20320:::-;20462:3;20483:67;20547:2;20542:3;20483:67;:::i;:::-;20476:74;;20559:93;20648:3;20559:93;:::i;:::-;20677:2;20672:3;20668:12;20661:19;;20320:366;;;:::o;20692:::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20692:366;;;:::o;21064:::-;21206:3;21227:67;21291:2;21286:3;21227:67;:::i;:::-;21220:74;;21303:93;21392:3;21303:93;:::i;:::-;21421:2;21416:3;21412:12;21405:19;;21064:366;;;:::o;21436:::-;21578:3;21599:67;21663:2;21658:3;21599:67;:::i;:::-;21592:74;;21675:93;21764:3;21675:93;:::i;:::-;21793:2;21788:3;21784:12;21777:19;;21436:366;;;:::o;21808:::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:::-;23438:3;23459:67;23523:2;23518:3;23459:67;:::i;:::-;23452:74;;23535:93;23624:3;23535:93;:::i;:::-;23653:2;23648:3;23644:12;23637:19;;23296:366;;;:::o;23668:108::-;23745:24;23763:5;23745:24;:::i;:::-;23740:3;23733:37;23668:108;;:::o;23782:118::-;23869:24;23887:5;23869:24;:::i;:::-;23864:3;23857:37;23782:118;;:::o;23906:115::-;23991:23;24008:5;23991:23;:::i;:::-;23986:3;23979:36;23906:115;;:::o;24027:112::-;24110:22;24126:5;24110:22;:::i;:::-;24105:3;24098:35;24027:112;;:::o;24145:256::-;24257:3;24272:75;24343:3;24334:6;24272:75;:::i;:::-;24372:2;24367:3;24363:12;24356:19;;24392:3;24385:10;;24145:256;;;;:::o;24407:522::-;24620:3;24642:148;24786:3;24642:148;:::i;:::-;24635:155;;24800:75;24871:3;24862:6;24800:75;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24920:3;24913:10;;24407:522;;;;:::o;24935:222::-;25028:4;25066:2;25055:9;25051:18;25043:26;;25079:71;25147:1;25136:9;25132:17;25123:6;25079:71;:::i;:::-;24935:222;;;;:::o;25163:1053::-;25486:4;25524:3;25513:9;25509:19;25501:27;;25538:71;25606:1;25595:9;25591:17;25582:6;25538:71;:::i;:::-;25619:72;25687:2;25676:9;25672:18;25663:6;25619:72;:::i;:::-;25738:9;25732:4;25728:20;25723:2;25712:9;25708:18;25701:48;25766:108;25869:4;25860:6;25766:108;:::i;:::-;25758:116;;25921:9;25915:4;25911:20;25906:2;25895:9;25891:18;25884:48;25949:108;26052:4;26043:6;25949:108;:::i;:::-;25941:116;;26105:9;26099:4;26095:20;26089:3;26078:9;26074:19;26067:49;26133:76;26204:4;26195:6;26133:76;:::i;:::-;26125:84;;25163:1053;;;;;;;;:::o;26222:751::-;26445:4;26483:3;26472:9;26468:19;26460:27;;26497:71;26565:1;26554:9;26550:17;26541:6;26497:71;:::i;:::-;26578:72;26646:2;26635:9;26631:18;26622:6;26578:72;:::i;:::-;26660;26728:2;26717:9;26713:18;26704:6;26660:72;:::i;:::-;26742;26810:2;26799:9;26795:18;26786:6;26742:72;:::i;:::-;26862:9;26856:4;26852:20;26846:3;26835:9;26831:19;26824:49;26890:76;26961:4;26952:6;26890:76;:::i;:::-;26882:84;;26222:751;;;;;;;;:::o;26979:373::-;27122:4;27160:2;27149:9;27145:18;27137:26;;27209:9;27203:4;27199:20;27195:1;27184:9;27180:17;27173:47;27237:108;27340:4;27331:6;27237:108;:::i;:::-;27229:116;;26979:373;;;;:::o;27358:634::-;27579:4;27617:2;27606:9;27602:18;27594:26;;27666:9;27660:4;27656:20;27652:1;27641:9;27637:17;27630:47;27694:108;27797:4;27788:6;27694:108;:::i;:::-;27686:116;;27849:9;27843:4;27839:20;27834:2;27823:9;27819:18;27812:48;27877:108;27980:4;27971:6;27877:108;:::i;:::-;27869:116;;27358:634;;;;;:::o;27998:210::-;28085:4;28123:2;28112:9;28108:18;28100:26;;28136:65;28198:1;28187:9;28183:17;28174:6;28136:65;:::i;:::-;27998:210;;;;:::o;28214:545::-;28387:4;28425:3;28414:9;28410:19;28402:27;;28439:71;28507:1;28496:9;28492:17;28483:6;28439:71;:::i;:::-;28520:68;28584:2;28573:9;28569:18;28560:6;28520:68;:::i;:::-;28598:72;28666:2;28655:9;28651:18;28642:6;28598:72;:::i;:::-;28680;28748:2;28737:9;28733:18;28724:6;28680:72;:::i;:::-;28214:545;;;;;;;:::o;28765:313::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28965:9;28959:4;28955:20;28951:1;28940:9;28936:17;28929:47;28993:78;29066:4;29057:6;28993:78;:::i;:::-;28985:86;;28765:313;;;;:::o;29084:419::-;29250:4;29288:2;29277:9;29273:18;29265:26;;29337:9;29331:4;29327:20;29323:1;29312:9;29308:17;29301:47;29365:131;29491:4;29365:131;:::i;:::-;29357:139;;29084:419;;;:::o;29509:::-;29675:4;29713:2;29702:9;29698:18;29690:26;;29762:9;29756:4;29752:20;29748:1;29737:9;29733:17;29726:47;29790:131;29916:4;29790:131;:::i;:::-;29782:139;;29509:419;;;:::o;29934:::-;30100:4;30138:2;30127:9;30123:18;30115:26;;30187:9;30181:4;30177:20;30173:1;30162:9;30158:17;30151:47;30215:131;30341:4;30215:131;:::i;:::-;30207:139;;29934:419;;;:::o;30359:::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:::-;30950:4;30988:2;30977:9;30973:18;30965:26;;31037:9;31031:4;31027:20;31023:1;31012:9;31008:17;31001:47;31065:131;31191:4;31065:131;:::i;:::-;31057:139;;30784:419;;;:::o;31209:::-;31375:4;31413:2;31402:9;31398:18;31390:26;;31462:9;31456:4;31452:20;31448:1;31437:9;31433:17;31426:47;31490:131;31616:4;31490:131;:::i;:::-;31482:139;;31209:419;;;:::o;31634:::-;31800:4;31838:2;31827:9;31823:18;31815:26;;31887:9;31881:4;31877:20;31873:1;31862:9;31858:17;31851:47;31915:131;32041:4;31915:131;:::i;:::-;31907:139;;31634:419;;;:::o;32059:::-;32225:4;32263:2;32252:9;32248:18;32240:26;;32312:9;32306:4;32302:20;32298:1;32287:9;32283:17;32276:47;32340:131;32466:4;32340:131;:::i;:::-;32332:139;;32059:419;;;:::o;32484:::-;32650:4;32688:2;32677:9;32673:18;32665:26;;32737:9;32731:4;32727:20;32723:1;32712:9;32708:17;32701:47;32765:131;32891:4;32765:131;:::i;:::-;32757:139;;32484:419;;;:::o;32909:::-;33075:4;33113:2;33102:9;33098:18;33090:26;;33162:9;33156:4;33152:20;33148:1;33137:9;33133:17;33126:47;33190:131;33316:4;33190:131;:::i;:::-;33182:139;;32909:419;;;:::o;33334:::-;33500:4;33538:2;33527:9;33523:18;33515:26;;33587:9;33581:4;33577:20;33573:1;33562:9;33558:17;33551:47;33615:131;33741:4;33615:131;:::i;:::-;33607:139;;33334:419;;;:::o;33759:::-;33925:4;33963:2;33952:9;33948:18;33940:26;;34012:9;34006:4;34002:20;33998:1;33987:9;33983:17;33976:47;34040:131;34166:4;34040:131;:::i;:::-;34032:139;;33759:419;;;:::o;34184:::-;34350:4;34388:2;34377:9;34373:18;34365:26;;34437:9;34431:4;34427:20;34423:1;34412:9;34408:17;34401:47;34465:131;34591:4;34465:131;:::i;:::-;34457:139;;34184:419;;;:::o;34609:::-;34775:4;34813:2;34802:9;34798:18;34790:26;;34862:9;34856:4;34852:20;34848:1;34837:9;34833:17;34826:47;34890:131;35016:4;34890:131;:::i;:::-;34882:139;;34609:419;;;:::o;35034:::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:::-;35625:4;35663:2;35652:9;35648:18;35640:26;;35712:9;35706:4;35702:20;35698:1;35687:9;35683:17;35676:47;35740:131;35866:4;35740:131;:::i;:::-;35732:139;;35459:419;;;:::o;35884:::-;36050:4;36088:2;36077:9;36073:18;36065:26;;36137:9;36131:4;36127:20;36123:1;36112:9;36108:17;36101:47;36165:131;36291:4;36165:131;:::i;:::-;36157:139;;35884:419;;;:::o;36309:::-;36475:4;36513:2;36502:9;36498:18;36490:26;;36562:9;36556:4;36552:20;36548:1;36537:9;36533:17;36526:47;36590:131;36716:4;36590:131;:::i;:::-;36582:139;;36309:419;;;:::o;36734:::-;36900:4;36938:2;36927:9;36923:18;36915:26;;36987:9;36981:4;36977:20;36973:1;36962:9;36958:17;36951:47;37015:131;37141:4;37015:131;:::i;:::-;37007:139;;36734:419;;;:::o;37159:::-;37325:4;37363:2;37352:9;37348:18;37340:26;;37412:9;37406:4;37402:20;37398:1;37387:9;37383:17;37376:47;37440:131;37566:4;37440:131;:::i;:::-;37432:139;;37159:419;;;:::o;37584:222::-;37677:4;37715:2;37704:9;37700:18;37692:26;;37728:71;37796:1;37785:9;37781:17;37772:6;37728:71;:::i;:::-;37584:222;;;;:::o;37812:332::-;37933:4;37971:2;37960:9;37956:18;37948:26;;37984:71;38052:1;38041:9;38037:17;38028:6;37984:71;:::i;:::-;38065:72;38133:2;38122:9;38118:18;38109:6;38065:72;:::i;:::-;37812:332;;;;;:::o;38150:218::-;38241:4;38279:2;38268:9;38264:18;38256:26;;38292:69;38358:1;38347:9;38343:17;38334:6;38292:69;:::i;:::-;38150:218;;;;:::o;38374:129::-;38408:6;38435:20;;:::i;:::-;38425:30;;38464:33;38492:4;38484:6;38464:33;:::i;:::-;38374:129;;;:::o;38509:75::-;38542:6;38575:2;38569:9;38559:19;;38509:75;:::o;38590:311::-;38667:4;38757:18;38749:6;38746:30;38743:56;;;38779:18;;:::i;:::-;38743:56;38829:4;38821:6;38817:17;38809:25;;38889:4;38883;38879:15;38871:23;;38590:311;;;:::o;38907:::-;38984:4;39074:18;39066:6;39063:30;39060:56;;;39096:18;;:::i;:::-;39060:56;39146:4;39138:6;39134:17;39126:25;;39206:4;39200;39196:15;39188:23;;38907:311;;;:::o;39224:307::-;39285:4;39375:18;39367:6;39364:30;39361:56;;;39397:18;;:::i;:::-;39361:56;39435:29;39457:6;39435:29;:::i;:::-;39427:37;;39519:4;39513;39509:15;39501:23;;39224:307;;;:::o;39537:308::-;39599:4;39689:18;39681:6;39678:30;39675:56;;;39711:18;;:::i;:::-;39675:56;39749:29;39771:6;39749:29;:::i;:::-;39741:37;;39833:4;39827;39823:15;39815:23;;39537:308;;;:::o;39851:132::-;39918:4;39941:3;39933:11;;39971:4;39966:3;39962:14;39954:22;;39851:132;;;:::o;39989:114::-;40056:6;40090:5;40084:12;40074:22;;39989:114;;;:::o;40109:98::-;40160:6;40194:5;40188:12;40178:22;;40109:98;;;:::o;40213:99::-;40265:6;40299:5;40293:12;40283:22;;40213:99;;;:::o;40318:113::-;40388:4;40420;40415:3;40411:14;40403:22;;40318:113;;;:::o;40437:184::-;40536:11;40570:6;40565:3;40558:19;40610:4;40605:3;40601:14;40586:29;;40437:184;;;;:::o;40627:168::-;40710:11;40744:6;40739:3;40732:19;40784:4;40779:3;40775:14;40760:29;;40627:168;;;;:::o;40801:169::-;40885:11;40919:6;40914:3;40907:19;40959:4;40954:3;40950:14;40935:29;;40801:169;;;;:::o;40976:148::-;41078:11;41115:3;41100:18;;40976:148;;;;:::o;41130:305::-;41170:3;41189:20;41207:1;41189:20;:::i;:::-;41184:25;;41223:20;41241:1;41223:20;:::i;:::-;41218:25;;41377:1;41309:66;41305:74;41302:1;41299:81;41296:107;;;41383:18;;:::i;:::-;41296:107;41427:1;41424;41420:9;41413:16;;41130:305;;;;:::o;41441:246::-;41480:3;41499:19;41516:1;41499:19;:::i;:::-;41494:24;;41532:19;41549:1;41532:19;:::i;:::-;41527:24;;41629:1;41617:10;41613:18;41610:1;41607:25;41604:51;;;41635:18;;:::i;:::-;41604:51;41679:1;41676;41672:9;41665:16;;41441:246;;;;:::o;41693:185::-;41733:1;41750:20;41768:1;41750:20;:::i;:::-;41745:25;;41784:20;41802:1;41784:20;:::i;:::-;41779:25;;41823:1;41813:35;;41828:18;;:::i;:::-;41813:35;41870:1;41867;41863:9;41858:14;;41693:185;;;;:::o;41884:348::-;41924:7;41947:20;41965:1;41947:20;:::i;:::-;41942:25;;41981:20;41999:1;41981:20;:::i;:::-;41976:25;;42169:1;42101:66;42097:74;42094:1;42091:81;42086:1;42079:9;42072:17;42068:105;42065:131;;;42176:18;;:::i;:::-;42065:131;42224:1;42221;42217:9;42206:20;;41884:348;;;;:::o;42238:191::-;42278:4;42298:20;42316:1;42298:20;:::i;:::-;42293:25;;42332:20;42350:1;42332:20;:::i;:::-;42327:25;;42371:1;42368;42365:8;42362:34;;;42376:18;;:::i;:::-;42362:34;42421:1;42418;42414:9;42406:17;;42238:191;;;;:::o;42435:96::-;42472:7;42501:24;42519:5;42501:24;:::i;:::-;42490:35;;42435:96;;;:::o;42537:90::-;42571:7;42614:5;42607:13;42600:21;42589:32;;42537:90;;;:::o;42633:77::-;42670:7;42699:5;42688:16;;42633:77;;;:::o;42716:149::-;42752:7;42792:66;42785:5;42781:78;42770:89;;42716:149;;;:::o;42871:126::-;42908:7;42948:42;42941:5;42937:54;42926:65;;42871:126;;;:::o;43003:77::-;43040:7;43069:5;43058:16;;43003:77;;;:::o;43086:93::-;43122:7;43162:10;43155:5;43151:22;43140:33;;43086:93;;;:::o;43185:86::-;43220:7;43260:4;43253:5;43249:16;43238:27;;43185:86;;;:::o;43277:154::-;43361:6;43356:3;43351;43338:30;43423:1;43414:6;43409:3;43405:16;43398:27;43277:154;;;:::o;43437:307::-;43505:1;43515:113;43529:6;43526:1;43523:13;43515:113;;;43614:1;43609:3;43605:11;43599:18;43595:1;43590:3;43586:11;43579:39;43551:2;43548:1;43544:10;43539:15;;43515:113;;;43646:6;43643:1;43640:13;43637:101;;;43726:1;43717:6;43712:3;43708:16;43701:27;43637:101;43486:258;43437:307;;;:::o;43750:320::-;43794:6;43831:1;43825:4;43821:12;43811:22;;43878:1;43872:4;43868:12;43899:18;43889:81;;43955:4;43947:6;43943:17;43933:27;;43889:81;44017:2;44009:6;44006:14;43986:18;43983:38;43980:84;;;44036:18;;:::i;:::-;43980:84;43801:269;43750:320;;;:::o;44076:281::-;44159:27;44181:4;44159:27;:::i;:::-;44151:6;44147:40;44289:6;44277:10;44274:22;44253:18;44241:10;44238:34;44235:62;44232:88;;;44300:18;;:::i;:::-;44232:88;44340:10;44336:2;44329:22;44119:238;44076:281;;:::o;44363:233::-;44402:3;44425:24;44443:5;44425:24;:::i;:::-;44416:33;;44471:66;44464:5;44461:77;44458:103;;;44541:18;;:::i;:::-;44458:103;44588:1;44581:5;44577:13;44570:20;;44363:233;;;:::o;44602:175::-;44640:3;44663:23;44680:5;44663:23;:::i;:::-;44654:32;;44708:10;44701:5;44698:21;44695:47;;;44722:18;;:::i;:::-;44695:47;44769:1;44762:5;44758:13;44751:20;;44602:175;;;:::o;44783:100::-;44822:7;44851:26;44871:5;44851:26;:::i;:::-;44840:37;;44783:100;;;:::o;44889:79::-;44928:7;44957:5;44946:16;;44889:79;;;:::o;44974:94::-;45013:7;45042:20;45056:5;45042:20;:::i;:::-;45031:31;;44974:94;;;:::o;45074:180::-;45122:77;45119:1;45112:88;45219:4;45216:1;45209:15;45243:4;45240:1;45233:15;45260:180;45308:77;45305:1;45298:88;45405:4;45402:1;45395:15;45429:4;45426:1;45419:15;45446:180;45494:77;45491:1;45484:88;45591:4;45588:1;45581:15;45615:4;45612:1;45605:15;45632:180;45680:77;45677:1;45670:88;45777:4;45774:1;45767:15;45801:4;45798:1;45791:15;45818:180;45866:77;45863:1;45856:88;45963:4;45960:1;45953:15;45987:4;45984:1;45977:15;46004:183;46039:3;46077:1;46059:16;46056:23;46053:128;;;46115:1;46112;46109;46094:23;46137:34;46168:1;46162:8;46137:34;:::i;:::-;46130:41;;46053:128;46004:183;:::o;46193:117::-;46302:1;46299;46292:12;46316:117;46425:1;46422;46415:12;46439:117;46548:1;46545;46538:12;46562:117;46671:1;46668;46661:12;46685:117;46794:1;46791;46784:12;46808:102;46849:6;46900:2;46896:7;46891:2;46884:5;46880:14;46876:28;46866:38;;46808:102;;;:::o;46916:94::-;46949:8;46997:5;46993:2;46989:14;46968:35;;46916:94;;;:::o;47016:106::-;47060:8;47109:5;47104:3;47100:15;47079:36;;47016:106;;;:::o;47128:239::-;47268:34;47264:1;47256:6;47252:14;47245:58;47337:22;47332:2;47324:6;47320:15;47313:47;47128:239;:::o;47373:227::-;47513:34;47509:1;47501:6;47497:14;47490:58;47582:10;47577:2;47569:6;47565:15;47558:35;47373:227;:::o;47606:214::-;47746:66;47742:1;47734:6;47730:14;47723:90;47606:214;:::o;47826:230::-;47966:34;47962:1;47954:6;47950:14;47943:58;48035:13;48030:2;48022:6;48018:15;48011:38;47826:230;:::o;48062:225::-;48202:34;48198:1;48190:6;48186:14;48179:58;48271:8;48266:2;48258:6;48254:15;48247:33;48062:225;:::o;48293:228::-;48433:34;48429:1;48421:6;48417:14;48410:58;48502:11;48497:2;48489:6;48485:15;48478:36;48293:228;:::o;48527:176::-;48667:28;48663:1;48655:6;48651:14;48644:52;48527:176;:::o;48709:179::-;48849:31;48845:1;48837:6;48833:14;48826:55;48709:179;:::o;48894:167::-;49034:19;49030:1;49022:6;49018:14;49011:43;48894:167;:::o;49067:224::-;49207:34;49203:1;49195:6;49191:14;49184:58;49276:7;49271:2;49263:6;49259:15;49252:32;49067:224;:::o;49297:237::-;49437:34;49433:1;49425:6;49421:14;49414:58;49506:20;49501:2;49493:6;49489:15;49482:45;49297:237;:::o;49540:173::-;49680:25;49676:1;49668:6;49664:14;49657:49;49540:173;:::o;49719:229::-;49859:34;49855:1;49847:6;49843:14;49836:58;49928:12;49923:2;49915:6;49911:15;49904:37;49719:229;:::o;49954:232::-;50094:34;50090:1;50082:6;50078:14;50071:58;50163:15;50158:2;50150:6;50146:15;50139:40;49954:232;:::o;50192:228::-;50332:34;50328:1;50320:6;50316:14;50309:58;50401:11;50396:2;50388:6;50384:15;50377:36;50192:228;:::o;50426:182::-;50566:34;50562:1;50554:6;50550:14;50543:58;50426:182;:::o;50614:166::-;50754:18;50750:1;50742:6;50738:14;50731:42;50614:166;:::o;50786:228::-;50926:34;50922:1;50914:6;50910:14;50903:58;50995:11;50990:2;50982:6;50978:15;50971:36;50786:228;:::o;51020:::-;51160:34;51156:1;51148:6;51144:14;51137:58;51229:11;51224:2;51216:6;51212:15;51205:36;51020:228;:::o;51254:227::-;51394:34;51390:1;51382:6;51378:14;51371:58;51463:10;51458:2;51450:6;51446:15;51439:35;51254:227;:::o;51487:220::-;51627:34;51623:1;51615:6;51611:14;51604:58;51696:3;51691:2;51683:6;51679:15;51672:28;51487:220;:::o;51713:711::-;51752:3;51790:4;51772:16;51769:26;51766:39;;;51798:5;;51766:39;51827:20;;:::i;:::-;51902:1;51884:16;51880:24;51877:1;51871:4;51856:49;51935:4;51929:11;52034:16;52027:4;52019:6;52015:17;52012:39;51979:18;51971:6;51968:30;51952:113;51949:146;;;52080:5;;;;51949:146;52126:6;52120:4;52116:17;52162:3;52156:10;52189:18;52181:6;52178:30;52175:43;;;52211:5;;;;;;52175:43;52259:6;52252:4;52247:3;52243:14;52239:27;52318:1;52300:16;52296:24;52290:4;52286:35;52281:3;52278:44;52275:57;;;52325:5;;;;;;;52275:57;52342;52390:6;52384:4;52380:17;52372:6;52368:30;52362:4;52342:57;:::i;:::-;52415:3;52408:10;;51756:668;;;;;51713:711;;:::o;52430:122::-;52503:24;52521:5;52503:24;:::i;:::-;52496:5;52493:35;52483:63;;52542:1;52539;52532:12;52483:63;52430:122;:::o;52558:116::-;52628:21;52643:5;52628:21;:::i;:::-;52621:5;52618:32;52608:60;;52664:1;52661;52654:12;52608:60;52558:116;:::o;52680:122::-;52753:24;52771:5;52753:24;:::i;:::-;52746:5;52743:35;52733:63;;52792:1;52789;52782:12;52733:63;52680:122;:::o;52808:120::-;52880:23;52897:5;52880:23;:::i;:::-;52873:5;52870:34;52860:62;;52918:1;52915;52908:12;52860:62;52808:120;:::o;52934:122::-;53007:24;53025:5;53007:24;:::i;:::-;53000:5;52997:35;52987:63;;53046:1;53043;53036:12;52987:63;52934:122;:::o;53062:120::-;53134:23;53151:5;53134:23;:::i;:::-;53127:5;53124:34;53114:62;;53172:1;53169;53162:12;53114:62;53062:120;:::o;53188:118::-;53259:22;53275:5;53259:22;:::i;:::-;53252:5;53249:33;53239:61;;53296:1;53293;53286:12;53239:61;53188:118;:::o

Swarm Source

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