ETH Price: $2,461.24 (+0.89%)

Token

WhiteRabbitZero (WR0)
 

Overview

Max Total Supply

0 WR0

Holders

468

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
dabrew.eth
Balance
5 WR0
0xceeab3c79926b61c08f0b399171f498c6fdb7770
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

White Rabbit collection ZERO (765 Limited Edition) is the appearance of the White Rabbit on the Ethereum blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WhiteRabbitZero

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 12 of 12: WhiteRabbitZero.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";
import "./IERC1155.sol";

contract WhiteRabbitZero is ERC721, Ownable {
    using Address for address;
    using Strings for uint256;
    
    // metadata
    bool public metadataLocked = false;
    string public baseURI = "";

    // supply and phases
    uint256 public mintIndex;
    uint256 public availSupply = 765;
    bool public presaleEnded = false;
    bool public publicSaleEnded = false;
    bool public mintPaused = true;
    
    // price
    uint256 public pricePre = 0.06 ether;
    uint256 public priceMain = 0.08 ether;

    // limits
    uint256 public maxPerTx = 3;
    uint256 public maxPerWalletPre = 3;
    uint256 public maxPerWalletTotal = 10;
    
    // presale access
    IERC1155 public PresaleAccessToken;

    // tracking per wallet
    mapping(address => uint256) public mintedPresale;
    mapping(address => uint256) public mintedTotal;


    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection, and by setting supply caps, mint indexes, and reserves
     */
    constructor()
        ERC721("WhiteRabbitZero", "WR0")
    {}
    
    /**
     * ------------ METADATA ------------ 
     */

    /**
     * @dev Gets base metadata URI
     */
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    /**
     * @dev Sets base metadata URI, callable by owner
     */
    function setBaseUri(string memory _uri) external onlyOwner {
        require(metadataLocked == false);
        baseURI = _uri;
    }
    
    /**
     * @dev Lock metadata URI forever, callable by owner
     */
    function lockMetadata() external onlyOwner {
        require(metadataLocked == false);
        metadataLocked = true;
    }
    
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        
        string memory base = _baseURI();
        return string(abi.encodePacked(base, tokenId.toString()));
    }
    
    /**
     * ------------ SALE AND PRESALE ------------ 
     */
     
    /**
     * @dev Ends public sale forever, callable by owner
     */
    function endSaleForever() external onlyOwner {
        publicSaleEnded = true;
    }
    
    /**
     * @dev Ends the presale, callable by owner
     */
    function endPresale() external onlyOwner {
        presaleEnded = true;
    }

    /**
     * @dev Pause/unpause sale or presale
     */
    function togglePauseMinting() external onlyOwner {
        mintPaused = !mintPaused;
    }

    /**
     * ------------ CONFIGURATION ------------ 
     */

    /**
     * @dev Set presale access token address
     */
    function setPresaleAccessToken(address addr) external onlyOwner {
        PresaleAccessToken = IERC1155(addr);
    }
     
    /**
     * ------------ MINTING ------------ 
     */
    
    /**
     * @dev Mints `count` tokens to `to` address; internal
     */
    function mintInternal(address to, uint256 count) internal {
        for (uint256 i = 0; i < count; i++) {
            _mint(to, mintIndex);
            mintIndex++;
        }
    }
    
    /**
     * @dev Public minting during public sale or presale
     */
    function mint(uint256 count) public payable{
        require(!mintPaused, "Minting is currently paused");
        require(publicSaleEnded == false, "Sale ended");
        require(availSupply >= count, "Supply exceeded");
        require(count <= maxPerTx, "Too many tokens");

        if (!presaleEnded) {
            // presale checks
            uint256 presaleTokenBalance = PresaleAccessToken.balanceOf(msg.sender, 1);
            require(presaleTokenBalance > 0, "Not whitelisted");
            require(msg.value == count * pricePre, "Ether value incorrect");
            require(mintedPresale[msg.sender] + count <= maxPerWalletPre * presaleTokenBalance, "Count exceeded during presale");
            mintedPresale[msg.sender] += count;
        } else {
            require(msg.value == count * priceMain, "Ether value incorrect");
            require(mintedTotal[msg.sender] + count <= maxPerWalletTotal, "Count exceeded during public sale");
        }
        
        mintedTotal[msg.sender] += count;
        availSupply -= count;
        mintInternal(msg.sender, count);
    }

    /**
     * @dev Withdraw ether from this contract, callable by owner
     */
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

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

        uint256 size;
        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 2 of 12: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 12: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.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 4 of 12: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @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, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 5 of 12: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.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 6 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 7 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 8 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 9 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.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 11 of 12: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PresaleAccessToken","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSaleForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletPre","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePre","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setPresaleAccessToken","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":"togglePauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600660146101000a81548160ff02191690831515021790555060405180602001604052806000815250600790805190602001906200004692919062000266565b506102fd6009556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555066d529ae9e860000600b5567011c37937e080000600c556003600d556003600e55600a600f55348015620000d157600080fd5b506040518060400160405280600f81526020017f57686974655261626269745a65726f00000000000000000000000000000000008152506040518060400160405280600381526020017f575230000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200015692919062000266565b5080600190805190602001906200016f92919062000266565b50505062000192620001866200019860201b60201c565b620001a060201b60201c565b6200037b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002749062000316565b90600052602060002090601f016020900481019282620002985760008555620002e4565b82601f10620002b357805160ff1916838001178555620002e4565b82800160010185558215620002e4579182015b82811115620002e3578251825591602001919060010190620002c6565b5b509050620002f39190620002f7565b5090565b5b8082111562000312576000816000905550600101620002f8565b5090565b600060028204905060018216806200032f57607f821691505b602082108114156200034657620003456200034c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6141e3806200038b6000396000f3fe6080604052600436106102305760003560e01c806382c6ee9f1161012e578063c158fbde116100ab578063e985e9c51161006f578063e985e9c5146107d4578063f2fde38b14610811578063f74f9bfd1461083a578063f968adbe14610865578063fcbff1b61461089057610230565b8063c158fbde146106ed578063c87b56dd14610718578063cdf6d06e14610755578063e580b2b01461077e578063e92afa15146107a957610230565b8063a0712d68116100f2578063a0712d681461063f578063a0bcfc7f1461065b578063a22cb46514610684578063a43be57b146106ad578063b88d4fde146106c457610230565b806382c6ee9f146105905780638da5cb5b146105a757806395d89b41146105d2578063989bdbb6146105fd5780639f5215dd1461061457610230565b806342842e0e116101bc57806370a082311161018057806370a08231146104a9578063715018a6146104e65780637a632dc7146104fd5780637e4831d3146105285780637e75ecb11461055357610230565b806342842e0e146103c2578063508083e2146103eb5780636352211e1461041657806369d2ceb1146104535780636c0360eb1461047e57610230565b8063125e0af011610203578063125e0af014610303578063145f798f1461032e57806323b872dd1461036b5780633ccfd60b146103945780633e53afc3146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612d67565b6108bb565b604051610269919061334e565b60405180910390f35b34801561027e57600080fd5b5061028761099d565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190612e0a565b610a2f565b6040516102d191906132be565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d27565b610ab4565b005b34801561030f57600080fd5b50610318610bcc565b604051610325919061334e565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612ba4565b610bdf565b60405161036291906136a6565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612c11565b610bf7565b005b3480156103a057600080fd5b506103a9610c57565b005b3480156103b757600080fd5b506103c0610d22565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190612c11565b610dca565b005b3480156103f757600080fd5b50610400610dea565b60405161040d91906136a6565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612e0a565b610df0565b60405161044a91906132be565b60405180910390f35b34801561045f57600080fd5b50610468610ea2565b604051610475919061334e565b60405180910390f35b34801561048a57600080fd5b50610493610eb5565b6040516104a09190613384565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612ba4565b610f43565b6040516104dd91906136a6565b60405180910390f35b3480156104f257600080fd5b506104fb610ffb565b005b34801561050957600080fd5b50610512611083565b60405161051f9190613369565b60405180910390f35b34801561053457600080fd5b5061053d6110a9565b60405161054a919061334e565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190612ba4565b6110bc565b60405161058791906136a6565b60405180910390f35b34801561059c57600080fd5b506105a56110d4565b005b3480156105b357600080fd5b506105bc61116d565b6040516105c991906132be565b60405180910390f35b3480156105de57600080fd5b506105e7611197565b6040516105f49190613384565b60405180910390f35b34801561060957600080fd5b50610612611229565b005b34801561062057600080fd5b506106296112e2565b60405161063691906136a6565b60405180910390f35b61065960048036038101906106549190612e0a565b6112e8565b005b34801561066757600080fd5b50610682600480360381019061067d9190612dc1565b6117c0565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612ce7565b611876565b005b3480156106b957600080fd5b506106c261188c565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190612c64565b611925565b005b3480156106f957600080fd5b50610702611987565b60405161070f91906136a6565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190612e0a565b61198d565b60405161074c9190613384565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190612ba4565b611a15565b005b34801561078a57600080fd5b50610793611ad5565b6040516107a0919061334e565b60405180910390f35b3480156107b557600080fd5b506107be611ae8565b6040516107cb91906136a6565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f69190612bd1565b611aee565b604051610808919061334e565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612ba4565b611b82565b005b34801561084657600080fd5b5061084f611c7a565b60405161085c91906136a6565b60405180910390f35b34801561087157600080fd5b5061087a611c80565b60405161088791906136a6565b60405180910390f35b34801561089c57600080fd5b506108a5611c86565b6040516108b291906136a6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610996575061099582611c8c565b5b9050919050565b6060600080546109ac9061399e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d89061399e565b8015610a255780601f106109fa57610100808354040283529160200191610a25565b820191906000526020600020905b815481529060010190602001808311610a0857829003601f168201915b5050505050905090565b6000610a3a82611cf6565b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a70906135a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abf82610df0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613626565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4f611d62565b73ffffffffffffffffffffffffffffffffffffffff161480610b7e5750610b7d81610b78611d62565b611aee565b5b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906134c6565b60405180910390fd5b610bc78383611d6a565b505050565b600a60019054906101000a900460ff1681565b60126020528060005260406000206000915090505481565b610c08610c02611d62565b82611e23565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613666565b60405180910390fd5b610c52838383611f01565b505050565b610c5f611d62565b73ffffffffffffffffffffffffffffffffffffffff16610c7d61116d565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca906135c6565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d1e573d6000803e3d6000fd5b5050565b610d2a611d62565b73ffffffffffffffffffffffffffffffffffffffff16610d4861116d565b73ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d95906135c6565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b610de583838360405180602001604052806000815250611925565b505050565b600b5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613526565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b60078054610ec29061399e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee9061399e565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613506565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611003611d62565b73ffffffffffffffffffffffffffffffffffffffff1661102161116d565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e906135c6565b60405180910390fd5b611081600061215d565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60029054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b6110dc611d62565b73ffffffffffffffffffffffffffffffffffffffff166110fa61116d565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611147906135c6565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111a69061399e565b80601f01602080910402602001604051908101604052809291908181526020018280546111d29061399e565b801561121f5780601f106111f45761010080835404028352916020019161121f565b820191906000526020600020905b81548152906001019060200180831161120257829003601f168201915b5050505050905090565b611231611d62565b73ffffffffffffffffffffffffffffffffffffffff1661124f61116d565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906135c6565b60405180910390fd5b60001515600660149054906101000a900460ff161515146112c557600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60095481565b600a60029054906101000a900460ff1615611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613646565b60405180910390fd5b60001515600a60019054906101000a900460ff1615151461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590613606565b60405180910390fd5b8060095410156113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca906134a6565b60405180910390fd5b600d54811115611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613406565b60405180910390fd5b600a60009054906101000a900460ff16611665576000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b815260040161148b929190613325565b60206040518083038186803b1580156114a357600080fd5b505afa1580156114b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114db9190612e37565b905060008111611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906134e6565b60405180910390fd5b600b548261152e9190613812565b341461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613686565b60405180910390fd5b80600e5461157d9190613812565b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115c8919061378b565b1115611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906133a6565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611658919061378b565b9250508190555050611744565b600c54816116739190613812565b34146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613686565b60405180910390fd5b600f5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611702919061378b565b1115611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90613546565b60405180910390fd5b5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611793919061378b565b9250508190555080600960008282546117ac919061386c565b925050819055506117bd3382612223565b50565b6117c8611d62565b73ffffffffffffffffffffffffffffffffffffffff166117e661116d565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611833906135c6565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461185c57600080fd5b80600790805190602001906118729291906129a3565b5050565b611888611881611d62565b838361226a565b5050565b611894611d62565b73ffffffffffffffffffffffffffffffffffffffff166118b261116d565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906135c6565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b611936611930611d62565b83611e23565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613666565b60405180910390fd5b611981848484846123d7565b50505050565b600c5481565b606061199882611cf6565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613586565b60405180910390fd5b60006119e1612433565b9050806119ed846124c5565b6040516020016119fe92919061329a565b604051602081830303815290604052915050919050565b611a1d611d62565b73ffffffffffffffffffffffffffffffffffffffff16611a3b61116d565b73ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a88906135c6565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900460ff1681565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b8a611d62565b73ffffffffffffffffffffffffffffffffffffffff16611ba861116d565b73ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906135c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c65906133e6565b60405180910390fd5b611c778161215d565b50565b60085481565b600d5481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ddd83610df0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e2e82611cf6565b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613486565b60405180910390fd5b6000611e7883610df0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ee757508373ffffffffffffffffffffffffffffffffffffffff16611ecf84610a2f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ef85750611ef78185611aee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2182610df0565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e906135e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613446565b60405180910390fd5b611ff2838383612626565b611ffd600082611d6a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204d919061386c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a4919061378b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156122655761223a8360085461262b565b6008600081548092919061224d90613a01565b9190505550808061225d90613a01565b915050612226565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090613466565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ca919061334e565b60405180910390a3505050565b6123e2848484611f01565b6123ee848484846127f9565b61242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906133c6565b60405180910390fd5b50505050565b6060600780546124429061399e565b80601f016020809104026020016040519081016040528092919081815260200182805461246e9061399e565b80156124bb5780601f10612490576101008083540402835291602001916124bb565b820191906000526020600020905b81548152906001019060200180831161249e57829003601f168201915b5050505050905090565b6060600082141561250d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612621565b600082905060005b6000821461253f57808061252890613a01565b915050600a8261253891906137e1565b9150612515565b60008167ffffffffffffffff81111561255b5761255a613b37565b5b6040519080825280601f01601f19166020018201604052801561258d5781602001600182028036833780820191505090505b5090505b6000851461261a576001826125a6919061386c565b9150600a856125b59190613a4a565b60306125c1919061378b565b60f81b8183815181106125d7576125d6613b08565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561261391906137e1565b9450612591565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613566565b60405180910390fd5b6126a481611cf6565b156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90613426565b60405180910390fd5b6126f060008383612626565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612740919061378b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061281a8473ffffffffffffffffffffffffffffffffffffffff16612990565b15612983578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612843611d62565b8786866040518563ffffffff1660e01b815260040161286594939291906132d9565b602060405180830381600087803b15801561287f57600080fd5b505af19250505080156128b057506040513d601f19601f820116820180604052508101906128ad9190612d94565b60015b612933573d80600081146128e0576040519150601f19603f3d011682016040523d82523d6000602084013e6128e5565b606091505b5060008151141561292b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612922906133c6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612988565b600190505b949350505050565b600080823b905060008111915050919050565b8280546129af9061399e565b90600052602060002090601f0160209004810192826129d15760008555612a18565b82601f106129ea57805160ff1916838001178555612a18565b82800160010185558215612a18579182015b82811115612a175782518255916020019190600101906129fc565b5b509050612a259190612a29565b5090565b5b80821115612a42576000816000905550600101612a2a565b5090565b6000612a59612a54846136e6565b6136c1565b905082815260208101848484011115612a7557612a74613b6b565b5b612a8084828561395c565b509392505050565b6000612a9b612a9684613717565b6136c1565b905082815260208101848484011115612ab757612ab6613b6b565b5b612ac284828561395c565b509392505050565b600081359050612ad981614151565b92915050565b600081359050612aee81614168565b92915050565b600081359050612b038161417f565b92915050565b600081519050612b188161417f565b92915050565b600082601f830112612b3357612b32613b66565b5b8135612b43848260208601612a46565b91505092915050565b600082601f830112612b6157612b60613b66565b5b8135612b71848260208601612a88565b91505092915050565b600081359050612b8981614196565b92915050565b600081519050612b9e81614196565b92915050565b600060208284031215612bba57612bb9613b75565b5b6000612bc884828501612aca565b91505092915050565b60008060408385031215612be857612be7613b75565b5b6000612bf685828601612aca565b9250506020612c0785828601612aca565b9150509250929050565b600080600060608486031215612c2a57612c29613b75565b5b6000612c3886828701612aca565b9350506020612c4986828701612aca565b9250506040612c5a86828701612b7a565b9150509250925092565b60008060008060808587031215612c7e57612c7d613b75565b5b6000612c8c87828801612aca565b9450506020612c9d87828801612aca565b9350506040612cae87828801612b7a565b925050606085013567ffffffffffffffff811115612ccf57612cce613b70565b5b612cdb87828801612b1e565b91505092959194509250565b60008060408385031215612cfe57612cfd613b75565b5b6000612d0c85828601612aca565b9250506020612d1d85828601612adf565b9150509250929050565b60008060408385031215612d3e57612d3d613b75565b5b6000612d4c85828601612aca565b9250506020612d5d85828601612b7a565b9150509250929050565b600060208284031215612d7d57612d7c613b75565b5b6000612d8b84828501612af4565b91505092915050565b600060208284031215612daa57612da9613b75565b5b6000612db884828501612b09565b91505092915050565b600060208284031215612dd757612dd6613b75565b5b600082013567ffffffffffffffff811115612df557612df4613b70565b5b612e0184828501612b4c565b91505092915050565b600060208284031215612e2057612e1f613b75565b5b6000612e2e84828501612b7a565b91505092915050565b600060208284031215612e4d57612e4c613b75565b5b6000612e5b84828501612b8f565b91505092915050565b612e6d816138a0565b82525050565b612e7c816138b2565b82525050565b6000612e8d82613748565b612e97818561375e565b9350612ea781856020860161396b565b612eb081613b7a565b840191505092915050565b612ec481613914565b82525050565b612ed381613926565b82525050565b6000612ee482613753565b612eee818561376f565b9350612efe81856020860161396b565b612f0781613b7a565b840191505092915050565b6000612f1d82613753565b612f278185613780565b9350612f3781856020860161396b565b80840191505092915050565b6000612f50601d8361376f565b9150612f5b82613b8b565b602082019050919050565b6000612f7360328361376f565b9150612f7e82613bb4565b604082019050919050565b6000612f9660268361376f565b9150612fa182613c03565b604082019050919050565b6000612fb9600f8361376f565b9150612fc482613c52565b602082019050919050565b6000612fdc601c8361376f565b9150612fe782613c7b565b602082019050919050565b6000612fff60248361376f565b915061300a82613ca4565b604082019050919050565b600061302260198361376f565b915061302d82613cf3565b602082019050919050565b6000613045602c8361376f565b915061305082613d1c565b604082019050919050565b6000613068600f8361376f565b915061307382613d6b565b602082019050919050565b600061308b60388361376f565b915061309682613d94565b604082019050919050565b60006130ae600f8361376f565b91506130b982613de3565b602082019050919050565b60006130d1602a8361376f565b91506130dc82613e0c565b604082019050919050565b60006130f460298361376f565b91506130ff82613e5b565b604082019050919050565b600061311760218361376f565b915061312282613eaa565b604082019050919050565b600061313a60208361376f565b915061314582613ef9565b602082019050919050565b600061315d60318361376f565b915061316882613f22565b604082019050919050565b6000613180602c8361376f565b915061318b82613f71565b604082019050919050565b60006131a360208361376f565b91506131ae82613fc0565b602082019050919050565b60006131c660298361376f565b91506131d182613fe9565b604082019050919050565b60006131e9600a8361376f565b91506131f482614038565b602082019050919050565b600061320c60218361376f565b915061321782614061565b604082019050919050565b600061322f601b8361376f565b915061323a826140b0565b602082019050919050565b600061325260318361376f565b915061325d826140d9565b604082019050919050565b600061327560158361376f565b915061328082614128565b602082019050919050565b6132948161390a565b82525050565b60006132a68285612f12565b91506132b28284612f12565b91508190509392505050565b60006020820190506132d36000830184612e64565b92915050565b60006080820190506132ee6000830187612e64565b6132fb6020830186612e64565b613308604083018561328b565b818103606083015261331a8184612e82565b905095945050505050565b600060408201905061333a6000830185612e64565b6133476020830184612eca565b9392505050565b60006020820190506133636000830184612e73565b92915050565b600060208201905061337e6000830184612ebb565b92915050565b6000602082019050818103600083015261339e8184612ed9565b905092915050565b600060208201905081810360008301526133bf81612f43565b9050919050565b600060208201905081810360008301526133df81612f66565b9050919050565b600060208201905081810360008301526133ff81612f89565b9050919050565b6000602082019050818103600083015261341f81612fac565b9050919050565b6000602082019050818103600083015261343f81612fcf565b9050919050565b6000602082019050818103600083015261345f81612ff2565b9050919050565b6000602082019050818103600083015261347f81613015565b9050919050565b6000602082019050818103600083015261349f81613038565b9050919050565b600060208201905081810360008301526134bf8161305b565b9050919050565b600060208201905081810360008301526134df8161307e565b9050919050565b600060208201905081810360008301526134ff816130a1565b9050919050565b6000602082019050818103600083015261351f816130c4565b9050919050565b6000602082019050818103600083015261353f816130e7565b9050919050565b6000602082019050818103600083015261355f8161310a565b9050919050565b6000602082019050818103600083015261357f8161312d565b9050919050565b6000602082019050818103600083015261359f81613150565b9050919050565b600060208201905081810360008301526135bf81613173565b9050919050565b600060208201905081810360008301526135df81613196565b9050919050565b600060208201905081810360008301526135ff816131b9565b9050919050565b6000602082019050818103600083015261361f816131dc565b9050919050565b6000602082019050818103600083015261363f816131ff565b9050919050565b6000602082019050818103600083015261365f81613222565b9050919050565b6000602082019050818103600083015261367f81613245565b9050919050565b6000602082019050818103600083015261369f81613268565b9050919050565b60006020820190506136bb600083018461328b565b92915050565b60006136cb6136dc565b90506136d782826139d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561370157613700613b37565b5b61370a82613b7a565b9050602081019050919050565b600067ffffffffffffffff82111561373257613731613b37565b5b61373b82613b7a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137968261390a565b91506137a18361390a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d6576137d5613a7b565b5b828201905092915050565b60006137ec8261390a565b91506137f78361390a565b92508261380757613806613aaa565b5b828204905092915050565b600061381d8261390a565b91506138288361390a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386157613860613a7b565b5b828202905092915050565b60006138778261390a565b91506138828361390a565b92508282101561389557613894613a7b565b5b828203905092915050565b60006138ab826138ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061391f82613938565b9050919050565b60006139318261390a565b9050919050565b60006139438261394a565b9050919050565b6000613955826138ea565b9050919050565b82818337600083830152505050565b60005b8381101561398957808201518184015260208101905061396e565b83811115613998576000848401525b50505050565b600060028204905060018216806139b657607f821691505b602082108114156139ca576139c9613ad9565b5b50919050565b6139d982613b7a565b810181811067ffffffffffffffff821117156139f8576139f7613b37565b5b80604052505050565b6000613a0c8261390a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3f57613a3e613a7b565b5b600182019050919050565b6000613a558261390a565b9150613a608361390a565b925082613a7057613a6f613aaa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f436f756e7420657863656564656420647572696e672070726573616c65000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f436f756e7420657863656564656420647572696e67207075626c69632073616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61415a816138a0565b811461416557600080fd5b50565b614171816138b2565b811461417c57600080fd5b50565b614188816138be565b811461419357600080fd5b50565b61419f8161390a565b81146141aa57600080fd5b5056fea2646970667358221220662af173ff64f384cad699a2181ca88a180536b470f38d843babfa3f2dbf7e8964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102305760003560e01c806382c6ee9f1161012e578063c158fbde116100ab578063e985e9c51161006f578063e985e9c5146107d4578063f2fde38b14610811578063f74f9bfd1461083a578063f968adbe14610865578063fcbff1b61461089057610230565b8063c158fbde146106ed578063c87b56dd14610718578063cdf6d06e14610755578063e580b2b01461077e578063e92afa15146107a957610230565b8063a0712d68116100f2578063a0712d681461063f578063a0bcfc7f1461065b578063a22cb46514610684578063a43be57b146106ad578063b88d4fde146106c457610230565b806382c6ee9f146105905780638da5cb5b146105a757806395d89b41146105d2578063989bdbb6146105fd5780639f5215dd1461061457610230565b806342842e0e116101bc57806370a082311161018057806370a08231146104a9578063715018a6146104e65780637a632dc7146104fd5780637e4831d3146105285780637e75ecb11461055357610230565b806342842e0e146103c2578063508083e2146103eb5780636352211e1461041657806369d2ceb1146104535780636c0360eb1461047e57610230565b8063125e0af011610203578063125e0af014610303578063145f798f1461032e57806323b872dd1461036b5780633ccfd60b146103945780633e53afc3146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612d67565b6108bb565b604051610269919061334e565b60405180910390f35b34801561027e57600080fd5b5061028761099d565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190612e0a565b610a2f565b6040516102d191906132be565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d27565b610ab4565b005b34801561030f57600080fd5b50610318610bcc565b604051610325919061334e565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612ba4565b610bdf565b60405161036291906136a6565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612c11565b610bf7565b005b3480156103a057600080fd5b506103a9610c57565b005b3480156103b757600080fd5b506103c0610d22565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190612c11565b610dca565b005b3480156103f757600080fd5b50610400610dea565b60405161040d91906136a6565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612e0a565b610df0565b60405161044a91906132be565b60405180910390f35b34801561045f57600080fd5b50610468610ea2565b604051610475919061334e565b60405180910390f35b34801561048a57600080fd5b50610493610eb5565b6040516104a09190613384565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612ba4565b610f43565b6040516104dd91906136a6565b60405180910390f35b3480156104f257600080fd5b506104fb610ffb565b005b34801561050957600080fd5b50610512611083565b60405161051f9190613369565b60405180910390f35b34801561053457600080fd5b5061053d6110a9565b60405161054a919061334e565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190612ba4565b6110bc565b60405161058791906136a6565b60405180910390f35b34801561059c57600080fd5b506105a56110d4565b005b3480156105b357600080fd5b506105bc61116d565b6040516105c991906132be565b60405180910390f35b3480156105de57600080fd5b506105e7611197565b6040516105f49190613384565b60405180910390f35b34801561060957600080fd5b50610612611229565b005b34801561062057600080fd5b506106296112e2565b60405161063691906136a6565b60405180910390f35b61065960048036038101906106549190612e0a565b6112e8565b005b34801561066757600080fd5b50610682600480360381019061067d9190612dc1565b6117c0565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612ce7565b611876565b005b3480156106b957600080fd5b506106c261188c565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190612c64565b611925565b005b3480156106f957600080fd5b50610702611987565b60405161070f91906136a6565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190612e0a565b61198d565b60405161074c9190613384565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190612ba4565b611a15565b005b34801561078a57600080fd5b50610793611ad5565b6040516107a0919061334e565b60405180910390f35b3480156107b557600080fd5b506107be611ae8565b6040516107cb91906136a6565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f69190612bd1565b611aee565b604051610808919061334e565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612ba4565b611b82565b005b34801561084657600080fd5b5061084f611c7a565b60405161085c91906136a6565b60405180910390f35b34801561087157600080fd5b5061087a611c80565b60405161088791906136a6565b60405180910390f35b34801561089c57600080fd5b506108a5611c86565b6040516108b291906136a6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610996575061099582611c8c565b5b9050919050565b6060600080546109ac9061399e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d89061399e565b8015610a255780601f106109fa57610100808354040283529160200191610a25565b820191906000526020600020905b815481529060010190602001808311610a0857829003601f168201915b5050505050905090565b6000610a3a82611cf6565b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a70906135a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abf82610df0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613626565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4f611d62565b73ffffffffffffffffffffffffffffffffffffffff161480610b7e5750610b7d81610b78611d62565b611aee565b5b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906134c6565b60405180910390fd5b610bc78383611d6a565b505050565b600a60019054906101000a900460ff1681565b60126020528060005260406000206000915090505481565b610c08610c02611d62565b82611e23565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613666565b60405180910390fd5b610c52838383611f01565b505050565b610c5f611d62565b73ffffffffffffffffffffffffffffffffffffffff16610c7d61116d565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca906135c6565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d1e573d6000803e3d6000fd5b5050565b610d2a611d62565b73ffffffffffffffffffffffffffffffffffffffff16610d4861116d565b73ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d95906135c6565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b610de583838360405180602001604052806000815250611925565b505050565b600b5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613526565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b60078054610ec29061399e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee9061399e565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613506565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611003611d62565b73ffffffffffffffffffffffffffffffffffffffff1661102161116d565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e906135c6565b60405180910390fd5b611081600061215d565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60029054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b6110dc611d62565b73ffffffffffffffffffffffffffffffffffffffff166110fa61116d565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611147906135c6565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111a69061399e565b80601f01602080910402602001604051908101604052809291908181526020018280546111d29061399e565b801561121f5780601f106111f45761010080835404028352916020019161121f565b820191906000526020600020905b81548152906001019060200180831161120257829003601f168201915b5050505050905090565b611231611d62565b73ffffffffffffffffffffffffffffffffffffffff1661124f61116d565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906135c6565b60405180910390fd5b60001515600660149054906101000a900460ff161515146112c557600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60095481565b600a60029054906101000a900460ff1615611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613646565b60405180910390fd5b60001515600a60019054906101000a900460ff1615151461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590613606565b60405180910390fd5b8060095410156113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca906134a6565b60405180910390fd5b600d54811115611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613406565b60405180910390fd5b600a60009054906101000a900460ff16611665576000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b815260040161148b929190613325565b60206040518083038186803b1580156114a357600080fd5b505afa1580156114b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114db9190612e37565b905060008111611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906134e6565b60405180910390fd5b600b548261152e9190613812565b341461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613686565b60405180910390fd5b80600e5461157d9190613812565b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115c8919061378b565b1115611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906133a6565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611658919061378b565b9250508190555050611744565b600c54816116739190613812565b34146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613686565b60405180910390fd5b600f5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611702919061378b565b1115611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90613546565b60405180910390fd5b5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611793919061378b565b9250508190555080600960008282546117ac919061386c565b925050819055506117bd3382612223565b50565b6117c8611d62565b73ffffffffffffffffffffffffffffffffffffffff166117e661116d565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611833906135c6565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461185c57600080fd5b80600790805190602001906118729291906129a3565b5050565b611888611881611d62565b838361226a565b5050565b611894611d62565b73ffffffffffffffffffffffffffffffffffffffff166118b261116d565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906135c6565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b611936611930611d62565b83611e23565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613666565b60405180910390fd5b611981848484846123d7565b50505050565b600c5481565b606061199882611cf6565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613586565b60405180910390fd5b60006119e1612433565b9050806119ed846124c5565b6040516020016119fe92919061329a565b604051602081830303815290604052915050919050565b611a1d611d62565b73ffffffffffffffffffffffffffffffffffffffff16611a3b61116d565b73ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a88906135c6565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900460ff1681565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b8a611d62565b73ffffffffffffffffffffffffffffffffffffffff16611ba861116d565b73ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906135c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c65906133e6565b60405180910390fd5b611c778161215d565b50565b60085481565b600d5481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ddd83610df0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e2e82611cf6565b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613486565b60405180910390fd5b6000611e7883610df0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ee757508373ffffffffffffffffffffffffffffffffffffffff16611ecf84610a2f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ef85750611ef78185611aee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2182610df0565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e906135e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613446565b60405180910390fd5b611ff2838383612626565b611ffd600082611d6a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204d919061386c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a4919061378b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156122655761223a8360085461262b565b6008600081548092919061224d90613a01565b9190505550808061225d90613a01565b915050612226565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090613466565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ca919061334e565b60405180910390a3505050565b6123e2848484611f01565b6123ee848484846127f9565b61242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906133c6565b60405180910390fd5b50505050565b6060600780546124429061399e565b80601f016020809104026020016040519081016040528092919081815260200182805461246e9061399e565b80156124bb5780601f10612490576101008083540402835291602001916124bb565b820191906000526020600020905b81548152906001019060200180831161249e57829003601f168201915b5050505050905090565b6060600082141561250d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612621565b600082905060005b6000821461253f57808061252890613a01565b915050600a8261253891906137e1565b9150612515565b60008167ffffffffffffffff81111561255b5761255a613b37565b5b6040519080825280601f01601f19166020018201604052801561258d5781602001600182028036833780820191505090505b5090505b6000851461261a576001826125a6919061386c565b9150600a856125b59190613a4a565b60306125c1919061378b565b60f81b8183815181106125d7576125d6613b08565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561261391906137e1565b9450612591565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613566565b60405180910390fd5b6126a481611cf6565b156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90613426565b60405180910390fd5b6126f060008383612626565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612740919061378b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061281a8473ffffffffffffffffffffffffffffffffffffffff16612990565b15612983578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612843611d62565b8786866040518563ffffffff1660e01b815260040161286594939291906132d9565b602060405180830381600087803b15801561287f57600080fd5b505af19250505080156128b057506040513d601f19601f820116820180604052508101906128ad9190612d94565b60015b612933573d80600081146128e0576040519150601f19603f3d011682016040523d82523d6000602084013e6128e5565b606091505b5060008151141561292b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612922906133c6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612988565b600190505b949350505050565b600080823b905060008111915050919050565b8280546129af9061399e565b90600052602060002090601f0160209004810192826129d15760008555612a18565b82601f106129ea57805160ff1916838001178555612a18565b82800160010185558215612a18579182015b82811115612a175782518255916020019190600101906129fc565b5b509050612a259190612a29565b5090565b5b80821115612a42576000816000905550600101612a2a565b5090565b6000612a59612a54846136e6565b6136c1565b905082815260208101848484011115612a7557612a74613b6b565b5b612a8084828561395c565b509392505050565b6000612a9b612a9684613717565b6136c1565b905082815260208101848484011115612ab757612ab6613b6b565b5b612ac284828561395c565b509392505050565b600081359050612ad981614151565b92915050565b600081359050612aee81614168565b92915050565b600081359050612b038161417f565b92915050565b600081519050612b188161417f565b92915050565b600082601f830112612b3357612b32613b66565b5b8135612b43848260208601612a46565b91505092915050565b600082601f830112612b6157612b60613b66565b5b8135612b71848260208601612a88565b91505092915050565b600081359050612b8981614196565b92915050565b600081519050612b9e81614196565b92915050565b600060208284031215612bba57612bb9613b75565b5b6000612bc884828501612aca565b91505092915050565b60008060408385031215612be857612be7613b75565b5b6000612bf685828601612aca565b9250506020612c0785828601612aca565b9150509250929050565b600080600060608486031215612c2a57612c29613b75565b5b6000612c3886828701612aca565b9350506020612c4986828701612aca565b9250506040612c5a86828701612b7a565b9150509250925092565b60008060008060808587031215612c7e57612c7d613b75565b5b6000612c8c87828801612aca565b9450506020612c9d87828801612aca565b9350506040612cae87828801612b7a565b925050606085013567ffffffffffffffff811115612ccf57612cce613b70565b5b612cdb87828801612b1e565b91505092959194509250565b60008060408385031215612cfe57612cfd613b75565b5b6000612d0c85828601612aca565b9250506020612d1d85828601612adf565b9150509250929050565b60008060408385031215612d3e57612d3d613b75565b5b6000612d4c85828601612aca565b9250506020612d5d85828601612b7a565b9150509250929050565b600060208284031215612d7d57612d7c613b75565b5b6000612d8b84828501612af4565b91505092915050565b600060208284031215612daa57612da9613b75565b5b6000612db884828501612b09565b91505092915050565b600060208284031215612dd757612dd6613b75565b5b600082013567ffffffffffffffff811115612df557612df4613b70565b5b612e0184828501612b4c565b91505092915050565b600060208284031215612e2057612e1f613b75565b5b6000612e2e84828501612b7a565b91505092915050565b600060208284031215612e4d57612e4c613b75565b5b6000612e5b84828501612b8f565b91505092915050565b612e6d816138a0565b82525050565b612e7c816138b2565b82525050565b6000612e8d82613748565b612e97818561375e565b9350612ea781856020860161396b565b612eb081613b7a565b840191505092915050565b612ec481613914565b82525050565b612ed381613926565b82525050565b6000612ee482613753565b612eee818561376f565b9350612efe81856020860161396b565b612f0781613b7a565b840191505092915050565b6000612f1d82613753565b612f278185613780565b9350612f3781856020860161396b565b80840191505092915050565b6000612f50601d8361376f565b9150612f5b82613b8b565b602082019050919050565b6000612f7360328361376f565b9150612f7e82613bb4565b604082019050919050565b6000612f9660268361376f565b9150612fa182613c03565b604082019050919050565b6000612fb9600f8361376f565b9150612fc482613c52565b602082019050919050565b6000612fdc601c8361376f565b9150612fe782613c7b565b602082019050919050565b6000612fff60248361376f565b915061300a82613ca4565b604082019050919050565b600061302260198361376f565b915061302d82613cf3565b602082019050919050565b6000613045602c8361376f565b915061305082613d1c565b604082019050919050565b6000613068600f8361376f565b915061307382613d6b565b602082019050919050565b600061308b60388361376f565b915061309682613d94565b604082019050919050565b60006130ae600f8361376f565b91506130b982613de3565b602082019050919050565b60006130d1602a8361376f565b91506130dc82613e0c565b604082019050919050565b60006130f460298361376f565b91506130ff82613e5b565b604082019050919050565b600061311760218361376f565b915061312282613eaa565b604082019050919050565b600061313a60208361376f565b915061314582613ef9565b602082019050919050565b600061315d60318361376f565b915061316882613f22565b604082019050919050565b6000613180602c8361376f565b915061318b82613f71565b604082019050919050565b60006131a360208361376f565b91506131ae82613fc0565b602082019050919050565b60006131c660298361376f565b91506131d182613fe9565b604082019050919050565b60006131e9600a8361376f565b91506131f482614038565b602082019050919050565b600061320c60218361376f565b915061321782614061565b604082019050919050565b600061322f601b8361376f565b915061323a826140b0565b602082019050919050565b600061325260318361376f565b915061325d826140d9565b604082019050919050565b600061327560158361376f565b915061328082614128565b602082019050919050565b6132948161390a565b82525050565b60006132a68285612f12565b91506132b28284612f12565b91508190509392505050565b60006020820190506132d36000830184612e64565b92915050565b60006080820190506132ee6000830187612e64565b6132fb6020830186612e64565b613308604083018561328b565b818103606083015261331a8184612e82565b905095945050505050565b600060408201905061333a6000830185612e64565b6133476020830184612eca565b9392505050565b60006020820190506133636000830184612e73565b92915050565b600060208201905061337e6000830184612ebb565b92915050565b6000602082019050818103600083015261339e8184612ed9565b905092915050565b600060208201905081810360008301526133bf81612f43565b9050919050565b600060208201905081810360008301526133df81612f66565b9050919050565b600060208201905081810360008301526133ff81612f89565b9050919050565b6000602082019050818103600083015261341f81612fac565b9050919050565b6000602082019050818103600083015261343f81612fcf565b9050919050565b6000602082019050818103600083015261345f81612ff2565b9050919050565b6000602082019050818103600083015261347f81613015565b9050919050565b6000602082019050818103600083015261349f81613038565b9050919050565b600060208201905081810360008301526134bf8161305b565b9050919050565b600060208201905081810360008301526134df8161307e565b9050919050565b600060208201905081810360008301526134ff816130a1565b9050919050565b6000602082019050818103600083015261351f816130c4565b9050919050565b6000602082019050818103600083015261353f816130e7565b9050919050565b6000602082019050818103600083015261355f8161310a565b9050919050565b6000602082019050818103600083015261357f8161312d565b9050919050565b6000602082019050818103600083015261359f81613150565b9050919050565b600060208201905081810360008301526135bf81613173565b9050919050565b600060208201905081810360008301526135df81613196565b9050919050565b600060208201905081810360008301526135ff816131b9565b9050919050565b6000602082019050818103600083015261361f816131dc565b9050919050565b6000602082019050818103600083015261363f816131ff565b9050919050565b6000602082019050818103600083015261365f81613222565b9050919050565b6000602082019050818103600083015261367f81613245565b9050919050565b6000602082019050818103600083015261369f81613268565b9050919050565b60006020820190506136bb600083018461328b565b92915050565b60006136cb6136dc565b90506136d782826139d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561370157613700613b37565b5b61370a82613b7a565b9050602081019050919050565b600067ffffffffffffffff82111561373257613731613b37565b5b61373b82613b7a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137968261390a565b91506137a18361390a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d6576137d5613a7b565b5b828201905092915050565b60006137ec8261390a565b91506137f78361390a565b92508261380757613806613aaa565b5b828204905092915050565b600061381d8261390a565b91506138288361390a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386157613860613a7b565b5b828202905092915050565b60006138778261390a565b91506138828361390a565b92508282101561389557613894613a7b565b5b828203905092915050565b60006138ab826138ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061391f82613938565b9050919050565b60006139318261390a565b9050919050565b60006139438261394a565b9050919050565b6000613955826138ea565b9050919050565b82818337600083830152505050565b60005b8381101561398957808201518184015260208101905061396e565b83811115613998576000848401525b50505050565b600060028204905060018216806139b657607f821691505b602082108114156139ca576139c9613ad9565b5b50919050565b6139d982613b7a565b810181811067ffffffffffffffff821117156139f8576139f7613b37565b5b80604052505050565b6000613a0c8261390a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3f57613a3e613a7b565b5b600182019050919050565b6000613a558261390a565b9150613a608361390a565b925082613a7057613a6f613aaa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f436f756e7420657863656564656420647572696e672070726573616c65000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f436f756e7420657863656564656420647572696e67207075626c69632073616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61415a816138a0565b811461416557600080fd5b50565b614171816138b2565b811461417c57600080fd5b50565b614188816138be565b811461419357600080fd5b50565b61419f8161390a565b81146141aa57600080fd5b5056fea2646970667358221220662af173ff64f384cad699a2181ca88a180536b470f38d843babfa3f2dbf7e8964736f6c63430008070033

Deployed Bytecode Sourcemap

139:4767:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:300:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3919:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;488:35:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;964:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4646:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4758:145:11;;;;;;;;;;;;;:::i;:::-;;2776:92;;;;;;;;;;;;;:::i;:::-;;5042:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;586:36:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2111:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;277:34:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;318:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1849:205:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;838:34:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;530:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;909:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2463:86;;;;;;;;;;;;;:::i;:::-;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2570:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1793:126:11;;;;;;;;;;;;;:::i;:::-;;410:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3558:1108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1570:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4203:153:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2628:79:11;;;;;;;;;;;;;:::i;:::-;;5287:320:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;629:37:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1994:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3009:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;449:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;724:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;379:24:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;690:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;765:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1490:300:3;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;2408:98::-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;488:35:11:-;;;;;;;;;;;;;:::o;964:46::-;;;;;;;;;;;;;;;;;:::o;4646:330:3:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;4758:145:11:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4808:15:11::1;4826:21;4808:39;;4866:10;4858:28;;:37;4887:7;4858:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4797:106;4758:145::o:0;2776:92::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2850:10:11::1;;;;;;;;;;;2849:11;2836:10;;:24;;;;;;;;;;;;;;;;;;2776:92::o:0;5042:179:3:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;586:36:11:-;;;;:::o;2111:235:3:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;277:34:11:-;;;;;;;;;;;;;:::o;318:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1849:205:3:-;1921:7;1965:1;1948:19;;:5;:19;;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;838:34:11:-;;;;;;;;;;;;;:::o;530:29::-;;;;;;;;;;;;;:::o;909:48::-;;;;;;;;;;;;;;;;;:::o;2463:86::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2537:4:11::1;2519:15;;:22;;;;;;;;;;;;;;;;;;2463:86::o:0;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2570:102:3:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;1793:126:11:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1873:5:11::1;1855:23;;:14;;;;;;;;;;;:23;;;1847:32;;;::::0;::::1;;1907:4;1890:14;;:21;;;;;;;;;;;;;;;;;;1793:126::o:0;410:32::-;;;;:::o;3558:1108::-;3621:10;;;;;;;;;;;3620:11;3612:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;3701:5;3682:24;;:15;;;;;;;;;;;:24;;;3674:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;3755:5;3740:11;;:20;;3732:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3808:8;;3799:5;:17;;3791:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;3854:12;;;;;;;;;;;3849:684;;3914:27;3944:18;;;;;;;;;;;:28;;;3973:10;3985:1;3944:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3914:73;;4032:1;4010:19;:23;4002:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;4097:8;;4089:5;:16;;;;:::i;:::-;4076:9;:29;4068:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4209:19;4191:15;;:37;;;;:::i;:::-;4182:5;4154:13;:25;4168:10;4154:25;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;:74;;4146:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4306:5;4277:13;:25;4291:10;4277:25;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;3868:455;3849:684;;;4373:9;;4365:5;:17;;;;:::i;:::-;4352:9;:30;4344:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4466:17;;4457:5;4431:11;:23;4443:10;4431:23;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:52;;4423:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;3849:684;4580:5;4553:11;:23;4565:10;4553:23;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;4611:5;4596:11;;:20;;;;;;;:::i;:::-;;;;;;;;4627:31;4640:10;4652:5;4627:12;:31::i;:::-;3558:1108;:::o;1570:135::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1666:5:11::1;1648:23;;:14;;;;;;;;;;;:23;;;1640:32;;;::::0;::::1;;1693:4;1683:7;:14;;;;;;;;;;;;:::i;:::-;;1570:135:::0;:::o;4203:153:3:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;2628:79:11:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2695:4:11::1;2680:12;;:19;;;;;;;;;;;;;;;;;;2628:79::o:0;5287:320:3:-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;629:37:11:-;;;;:::o;1994:305::-;2067:13;2101:16;2109:7;2101;:16::i;:::-;2093:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2192:18;2213:10;:8;:10::i;:::-;2192:31;;2265:4;2271:18;:7;:16;:18::i;:::-;2248:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2234:57;;;1994:305;;;:::o;3009:118::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3114:4:11::1;3084:18;;:35;;;;;;;;;;;;;;;;;;3009:118:::0;:::o;449:32::-;;;;;;;;;;;;;:::o;724:34::-;;;;:::o;4422:162:3:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;379:24:11:-;;;;:::o;690:27::-;;;;:::o;765:37::-;;;;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7079:125:3:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;10930:171:3:-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;7362:344::-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;3285:185:11:-;3359:9;3354:109;3378:5;3374:1;:9;3354:109;;;3405:20;3411:2;3415:9;;3405:5;:20::i;:::-;3440:9;;:11;;;;;;;;;:::i;:::-;;;;;;3385:3;;;;;:::i;:::-;;;;3354:109;;;;3285:185;;:::o;11236:307:3:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;1385:100:11:-;1437:13;1470:7;1463:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:100;:::o;328:703:10:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;13430:122:3:-;;;;:::o;8998:372::-;9091:1;9077:16;;:2;:16;;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;12096:778::-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:118::-;7751:24;7769:5;7751:24;:::i;:::-;7746:3;7739:37;7664:118;;:::o;7788:109::-;7869:21;7884:5;7869:21;:::i;:::-;7864:3;7857:34;7788:109;;:::o;7903:360::-;7989:3;8017:38;8049:5;8017:38;:::i;:::-;8071:70;8134:6;8129:3;8071:70;:::i;:::-;8064:77;;8150:52;8195:6;8190:3;8183:4;8176:5;8172:16;8150:52;:::i;:::-;8227:29;8249:6;8227:29;:::i;:::-;8222:3;8218:39;8211:46;;7993:270;7903:360;;;;:::o;8269:165::-;8373:54;8421:5;8373:54;:::i;:::-;8368:3;8361:67;8269:165;;:::o;8440:147::-;8535:45;8574:5;8535:45;:::i;:::-;8530:3;8523:58;8440:147;;:::o;8593:364::-;8681:3;8709:39;8742:5;8709:39;:::i;:::-;8764:71;8828:6;8823:3;8764:71;:::i;:::-;8757:78;;8844:52;8889:6;8884:3;8877:4;8870:5;8866:16;8844:52;:::i;:::-;8921:29;8943:6;8921:29;:::i;:::-;8916:3;8912:39;8905:46;;8685:272;8593:364;;;;:::o;8963:377::-;9069:3;9097:39;9130:5;9097:39;:::i;:::-;9152:89;9234:6;9229:3;9152:89;:::i;:::-;9145:96;;9250:52;9295:6;9290:3;9283:4;9276:5;9272:16;9250:52;:::i;:::-;9327:6;9322:3;9318:16;9311:23;;9073:267;8963:377;;;;:::o;9346:366::-;9488:3;9509:67;9573:2;9568:3;9509:67;:::i;:::-;9502:74;;9585:93;9674:3;9585:93;:::i;:::-;9703:2;9698:3;9694:12;9687:19;;9346:366;;;:::o;9718:::-;9860:3;9881:67;9945:2;9940:3;9881:67;:::i;:::-;9874:74;;9957:93;10046:3;9957:93;:::i;:::-;10075:2;10070:3;10066:12;10059:19;;9718:366;;;:::o;10090:::-;10232:3;10253:67;10317:2;10312:3;10253:67;:::i;:::-;10246:74;;10329:93;10418:3;10329:93;:::i;:::-;10447:2;10442:3;10438:12;10431:19;;10090:366;;;:::o;10462:::-;10604:3;10625:67;10689:2;10684:3;10625:67;:::i;:::-;10618:74;;10701:93;10790:3;10701:93;:::i;:::-;10819:2;10814:3;10810:12;10803:19;;10462:366;;;:::o;10834:::-;10976:3;10997:67;11061:2;11056:3;10997:67;:::i;:::-;10990:74;;11073:93;11162:3;11073:93;:::i;:::-;11191:2;11186:3;11182:12;11175:19;;10834:366;;;:::o;11206:::-;11348:3;11369:67;11433:2;11428:3;11369:67;:::i;:::-;11362:74;;11445:93;11534:3;11445:93;:::i;:::-;11563:2;11558:3;11554:12;11547:19;;11206:366;;;:::o;11578:::-;11720:3;11741:67;11805:2;11800:3;11741:67;:::i;:::-;11734:74;;11817:93;11906:3;11817:93;:::i;:::-;11935:2;11930:3;11926:12;11919:19;;11578:366;;;:::o;11950:::-;12092:3;12113:67;12177:2;12172:3;12113:67;:::i;:::-;12106:74;;12189:93;12278:3;12189:93;:::i;:::-;12307:2;12302:3;12298:12;12291:19;;11950:366;;;:::o;12322:::-;12464:3;12485:67;12549:2;12544:3;12485:67;:::i;:::-;12478:74;;12561:93;12650:3;12561:93;:::i;:::-;12679:2;12674:3;12670:12;12663:19;;12322:366;;;:::o;12694:::-;12836:3;12857:67;12921:2;12916:3;12857:67;:::i;:::-;12850:74;;12933:93;13022:3;12933:93;:::i;:::-;13051:2;13046:3;13042:12;13035:19;;12694:366;;;:::o;13066:::-;13208:3;13229:67;13293:2;13288:3;13229:67;:::i;:::-;13222:74;;13305:93;13394:3;13305:93;:::i;:::-;13423:2;13418:3;13414:12;13407:19;;13066:366;;;:::o;13438:::-;13580:3;13601:67;13665:2;13660:3;13601:67;:::i;:::-;13594:74;;13677:93;13766:3;13677:93;:::i;:::-;13795:2;13790:3;13786:12;13779:19;;13438:366;;;:::o;13810:::-;13952:3;13973:67;14037:2;14032:3;13973:67;:::i;:::-;13966:74;;14049:93;14138:3;14049:93;:::i;:::-;14167:2;14162:3;14158:12;14151:19;;13810:366;;;:::o;14182:::-;14324:3;14345:67;14409:2;14404:3;14345:67;:::i;:::-;14338:74;;14421:93;14510:3;14421:93;:::i;:::-;14539:2;14534:3;14530:12;14523:19;;14182:366;;;:::o;14554:::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:::-;15068:3;15089:67;15153:2;15148:3;15089:67;:::i;:::-;15082:74;;15165:93;15254:3;15165:93;:::i;:::-;15283:2;15278:3;15274:12;15267:19;;14926:366;;;:::o;15298:::-;15440:3;15461:67;15525:2;15520:3;15461:67;:::i;:::-;15454:74;;15537:93;15626:3;15537:93;:::i;:::-;15655:2;15650:3;15646:12;15639:19;;15298:366;;;:::o;15670:::-;15812:3;15833:67;15897:2;15892:3;15833:67;:::i;:::-;15826:74;;15909:93;15998:3;15909:93;:::i;:::-;16027:2;16022:3;16018:12;16011:19;;15670:366;;;:::o;16042:::-;16184:3;16205:67;16269:2;16264:3;16205:67;:::i;:::-;16198:74;;16281:93;16370:3;16281:93;:::i;:::-;16399:2;16394:3;16390:12;16383:19;;16042:366;;;:::o;16414:::-;16556:3;16577:67;16641:2;16636:3;16577:67;:::i;:::-;16570:74;;16653:93;16742:3;16653:93;:::i;:::-;16771:2;16766:3;16762:12;16755:19;;16414:366;;;:::o;16786:::-;16928:3;16949:67;17013:2;17008:3;16949:67;:::i;:::-;16942:74;;17025:93;17114:3;17025:93;:::i;:::-;17143:2;17138:3;17134:12;17127:19;;16786:366;;;:::o;17158:::-;17300:3;17321:67;17385:2;17380:3;17321:67;:::i;:::-;17314:74;;17397:93;17486:3;17397:93;:::i;:::-;17515:2;17510:3;17506:12;17499:19;;17158:366;;;:::o;17530:::-;17672:3;17693:67;17757:2;17752:3;17693:67;:::i;:::-;17686:74;;17769:93;17858:3;17769:93;:::i;:::-;17887:2;17882:3;17878:12;17871:19;;17530:366;;;:::o;17902:::-;18044:3;18065:67;18129:2;18124:3;18065:67;:::i;:::-;18058:74;;18141:93;18230:3;18141:93;:::i;:::-;18259:2;18254:3;18250:12;18243:19;;17902:366;;;:::o;18274:118::-;18361:24;18379:5;18361:24;:::i;:::-;18356:3;18349:37;18274:118;;:::o;18398:435::-;18578:3;18600:95;18691:3;18682:6;18600:95;:::i;:::-;18593:102;;18712:95;18803:3;18794:6;18712:95;:::i;:::-;18705:102;;18824:3;18817:10;;18398:435;;;;;:::o;18839:222::-;18932:4;18970:2;18959:9;18955:18;18947:26;;18983:71;19051:1;19040:9;19036:17;19027:6;18983:71;:::i;:::-;18839:222;;;;:::o;19067:640::-;19262:4;19300:3;19289:9;19285:19;19277:27;;19314:71;19382:1;19371:9;19367:17;19358:6;19314:71;:::i;:::-;19395:72;19463:2;19452:9;19448:18;19439:6;19395:72;:::i;:::-;19477;19545:2;19534:9;19530:18;19521:6;19477:72;:::i;:::-;19596:9;19590:4;19586:20;19581:2;19570:9;19566:18;19559:48;19624:76;19695:4;19686:6;19624:76;:::i;:::-;19616:84;;19067:640;;;;;;;:::o;19713:348::-;19842:4;19880:2;19869:9;19865:18;19857:26;;19893:71;19961:1;19950:9;19946:17;19937:6;19893:71;:::i;:::-;19974:80;20050:2;20039:9;20035:18;20026:6;19974:80;:::i;:::-;19713:348;;;;;:::o;20067:210::-;20154:4;20192:2;20181:9;20177:18;20169:26;;20205:65;20267:1;20256:9;20252:17;20243:6;20205:65;:::i;:::-;20067:210;;;;:::o;20283:256::-;20393:4;20431:2;20420:9;20416:18;20408:26;;20444:88;20529:1;20518:9;20514:17;20505:6;20444:88;:::i;:::-;20283:256;;;;:::o;20545:313::-;20658:4;20696:2;20685:9;20681:18;20673:26;;20745:9;20739:4;20735:20;20731:1;20720:9;20716:17;20709:47;20773:78;20846:4;20837:6;20773:78;:::i;:::-;20765:86;;20545:313;;;;:::o;20864:419::-;21030:4;21068:2;21057:9;21053:18;21045:26;;21117:9;21111:4;21107:20;21103:1;21092:9;21088:17;21081:47;21145:131;21271:4;21145:131;:::i;:::-;21137:139;;20864:419;;;:::o;21289:::-;21455:4;21493:2;21482:9;21478:18;21470:26;;21542:9;21536:4;21532:20;21528:1;21517:9;21513:17;21506:47;21570:131;21696:4;21570:131;:::i;:::-;21562:139;;21289:419;;;:::o;21714:::-;21880:4;21918:2;21907:9;21903:18;21895:26;;21967:9;21961:4;21957:20;21953:1;21942:9;21938:17;21931:47;21995:131;22121:4;21995:131;:::i;:::-;21987:139;;21714:419;;;:::o;22139:::-;22305:4;22343:2;22332:9;22328:18;22320:26;;22392:9;22386:4;22382:20;22378:1;22367:9;22363:17;22356:47;22420:131;22546:4;22420:131;:::i;:::-;22412:139;;22139:419;;;:::o;22564:::-;22730:4;22768:2;22757:9;22753:18;22745:26;;22817:9;22811:4;22807:20;22803:1;22792:9;22788:17;22781:47;22845:131;22971:4;22845:131;:::i;:::-;22837:139;;22564:419;;;:::o;22989:::-;23155:4;23193:2;23182:9;23178:18;23170:26;;23242:9;23236:4;23232:20;23228:1;23217:9;23213:17;23206:47;23270:131;23396:4;23270:131;:::i;:::-;23262:139;;22989:419;;;:::o;23414:::-;23580:4;23618:2;23607:9;23603:18;23595:26;;23667:9;23661:4;23657:20;23653:1;23642:9;23638:17;23631:47;23695:131;23821:4;23695:131;:::i;:::-;23687:139;;23414:419;;;:::o;23839:::-;24005:4;24043:2;24032:9;24028:18;24020:26;;24092:9;24086:4;24082:20;24078:1;24067:9;24063:17;24056:47;24120:131;24246:4;24120:131;:::i;:::-;24112:139;;23839:419;;;:::o;24264:::-;24430:4;24468:2;24457:9;24453:18;24445:26;;24517:9;24511:4;24507:20;24503:1;24492:9;24488:17;24481:47;24545:131;24671:4;24545:131;:::i;:::-;24537:139;;24264:419;;;:::o;24689:::-;24855:4;24893:2;24882:9;24878:18;24870:26;;24942:9;24936:4;24932:20;24928:1;24917:9;24913:17;24906:47;24970:131;25096:4;24970:131;:::i;:::-;24962:139;;24689:419;;;:::o;25114:::-;25280:4;25318:2;25307:9;25303:18;25295:26;;25367:9;25361:4;25357:20;25353:1;25342:9;25338:17;25331:47;25395:131;25521:4;25395:131;:::i;:::-;25387:139;;25114:419;;;:::o;25539:::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:::-;26130:4;26168:2;26157:9;26153:18;26145:26;;26217:9;26211:4;26207:20;26203:1;26192:9;26188:17;26181:47;26245:131;26371:4;26245:131;:::i;:::-;26237:139;;25964:419;;;:::o;26389:::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:::-;26980:4;27018:2;27007:9;27003:18;26995:26;;27067:9;27061:4;27057:20;27053:1;27042:9;27038:17;27031:47;27095:131;27221:4;27095:131;:::i;:::-;27087:139;;26814:419;;;:::o;27239:::-;27405:4;27443:2;27432:9;27428:18;27420:26;;27492:9;27486:4;27482:20;27478:1;27467:9;27463:17;27456:47;27520:131;27646:4;27520:131;:::i;:::-;27512:139;;27239:419;;;:::o;27664:::-;27830:4;27868:2;27857:9;27853:18;27845:26;;27917:9;27911:4;27907:20;27903:1;27892:9;27888:17;27881:47;27945:131;28071:4;27945:131;:::i;:::-;27937:139;;27664:419;;;:::o;28089:::-;28255:4;28293:2;28282:9;28278:18;28270:26;;28342:9;28336:4;28332:20;28328:1;28317:9;28313:17;28306:47;28370:131;28496:4;28370:131;:::i;:::-;28362:139;;28089:419;;;:::o;28514:::-;28680:4;28718:2;28707:9;28703:18;28695:26;;28767:9;28761:4;28757:20;28753:1;28742:9;28738:17;28731:47;28795:131;28921:4;28795:131;:::i;:::-;28787:139;;28514:419;;;:::o;28939:::-;29105:4;29143:2;29132:9;29128:18;29120:26;;29192:9;29186:4;29182:20;29178:1;29167:9;29163:17;29156:47;29220:131;29346:4;29220:131;:::i;:::-;29212:139;;28939:419;;;:::o;29364:::-;29530:4;29568:2;29557:9;29553:18;29545:26;;29617:9;29611:4;29607:20;29603:1;29592:9;29588:17;29581:47;29645:131;29771:4;29645:131;:::i;:::-;29637:139;;29364:419;;;:::o;29789:::-;29955:4;29993:2;29982:9;29978:18;29970:26;;30042:9;30036:4;30032:20;30028:1;30017:9;30013:17;30006:47;30070:131;30196:4;30070:131;:::i;:::-;30062:139;;29789:419;;;:::o;30214:::-;30380:4;30418:2;30407:9;30403:18;30395:26;;30467:9;30461:4;30457:20;30453:1;30442:9;30438:17;30431:47;30495:131;30621:4;30495:131;:::i;:::-;30487:139;;30214:419;;;:::o;30639:::-;30805:4;30843:2;30832:9;30828:18;30820:26;;30892:9;30886:4;30882:20;30878:1;30867:9;30863:17;30856:47;30920:131;31046:4;30920:131;:::i;:::-;30912:139;;30639:419;;;:::o;31064:222::-;31157:4;31195:2;31184:9;31180:18;31172:26;;31208:71;31276:1;31265:9;31261:17;31252:6;31208:71;:::i;:::-;31064:222;;;;:::o;31292:129::-;31326:6;31353:20;;:::i;:::-;31343:30;;31382:33;31410:4;31402:6;31382:33;:::i;:::-;31292:129;;;:::o;31427:75::-;31460:6;31493:2;31487:9;31477:19;;31427:75;:::o;31508:307::-;31569:4;31659:18;31651:6;31648:30;31645:56;;;31681:18;;:::i;:::-;31645:56;31719:29;31741:6;31719:29;:::i;:::-;31711:37;;31803:4;31797;31793:15;31785:23;;31508:307;;;:::o;31821:308::-;31883:4;31973:18;31965:6;31962:30;31959:56;;;31995:18;;:::i;:::-;31959:56;32033:29;32055:6;32033:29;:::i;:::-;32025:37;;32117:4;32111;32107:15;32099:23;;31821:308;;;:::o;32135:98::-;32186:6;32220:5;32214:12;32204:22;;32135:98;;;:::o;32239:99::-;32291:6;32325:5;32319:12;32309:22;;32239:99;;;:::o;32344:168::-;32427:11;32461:6;32456:3;32449:19;32501:4;32496:3;32492:14;32477:29;;32344:168;;;;:::o;32518:169::-;32602:11;32636:6;32631:3;32624:19;32676:4;32671:3;32667:14;32652:29;;32518:169;;;;:::o;32693:148::-;32795:11;32832:3;32817:18;;32693:148;;;;:::o;32847:305::-;32887:3;32906:20;32924:1;32906:20;:::i;:::-;32901:25;;32940:20;32958:1;32940:20;:::i;:::-;32935:25;;33094:1;33026:66;33022:74;33019:1;33016:81;33013:107;;;33100:18;;:::i;:::-;33013:107;33144:1;33141;33137:9;33130:16;;32847:305;;;;:::o;33158:185::-;33198:1;33215:20;33233:1;33215:20;:::i;:::-;33210:25;;33249:20;33267:1;33249:20;:::i;:::-;33244:25;;33288:1;33278:35;;33293:18;;:::i;:::-;33278:35;33335:1;33332;33328:9;33323:14;;33158:185;;;;:::o;33349:348::-;33389:7;33412:20;33430:1;33412:20;:::i;:::-;33407:25;;33446:20;33464:1;33446:20;:::i;:::-;33441:25;;33634:1;33566:66;33562:74;33559:1;33556:81;33551:1;33544:9;33537:17;33533:105;33530:131;;;33641:18;;:::i;:::-;33530:131;33689:1;33686;33682:9;33671:20;;33349:348;;;;:::o;33703:191::-;33743:4;33763:20;33781:1;33763:20;:::i;:::-;33758:25;;33797:20;33815:1;33797:20;:::i;:::-;33792:25;;33836:1;33833;33830:8;33827:34;;;33841:18;;:::i;:::-;33827:34;33886:1;33883;33879:9;33871:17;;33703:191;;;;:::o;33900:96::-;33937:7;33966:24;33984:5;33966:24;:::i;:::-;33955:35;;33900:96;;;:::o;34002:90::-;34036:7;34079:5;34072:13;34065:21;34054:32;;34002:90;;;:::o;34098:149::-;34134:7;34174:66;34167:5;34163:78;34152:89;;34098:149;;;:::o;34253:126::-;34290:7;34330:42;34323:5;34319:54;34308:65;;34253:126;;;:::o;34385:77::-;34422:7;34451:5;34440:16;;34385:77;;;:::o;34468:143::-;34535:9;34568:37;34599:5;34568:37;:::i;:::-;34555:50;;34468:143;;;:::o;34617:121::-;34675:9;34708:24;34726:5;34708:24;:::i;:::-;34695:37;;34617:121;;;:::o;34744:126::-;34794:9;34827:37;34858:5;34827:37;:::i;:::-;34814:50;;34744:126;;;:::o;34876:113::-;34926:9;34959:24;34977:5;34959:24;:::i;:::-;34946:37;;34876:113;;;:::o;34995:154::-;35079:6;35074:3;35069;35056:30;35141:1;35132:6;35127:3;35123:16;35116:27;34995:154;;;:::o;35155:307::-;35223:1;35233:113;35247:6;35244:1;35241:13;35233:113;;;35332:1;35327:3;35323:11;35317:18;35313:1;35308:3;35304:11;35297:39;35269:2;35266:1;35262:10;35257:15;;35233:113;;;35364:6;35361:1;35358:13;35355:101;;;35444:1;35435:6;35430:3;35426:16;35419:27;35355:101;35204:258;35155:307;;;:::o;35468:320::-;35512:6;35549:1;35543:4;35539:12;35529:22;;35596:1;35590:4;35586:12;35617:18;35607:81;;35673:4;35665:6;35661:17;35651:27;;35607:81;35735:2;35727:6;35724:14;35704:18;35701:38;35698:84;;;35754:18;;:::i;:::-;35698:84;35519:269;35468:320;;;:::o;35794:281::-;35877:27;35899:4;35877:27;:::i;:::-;35869:6;35865:40;36007:6;35995:10;35992:22;35971:18;35959:10;35956:34;35953:62;35950:88;;;36018:18;;:::i;:::-;35950:88;36058:10;36054:2;36047:22;35837:238;35794:281;;:::o;36081:233::-;36120:3;36143:24;36161:5;36143:24;:::i;:::-;36134:33;;36189:66;36182:5;36179:77;36176:103;;;36259:18;;:::i;:::-;36176:103;36306:1;36299:5;36295:13;36288:20;;36081:233;;;:::o;36320:176::-;36352:1;36369:20;36387:1;36369:20;:::i;:::-;36364:25;;36403:20;36421:1;36403:20;:::i;:::-;36398:25;;36442:1;36432:35;;36447:18;;:::i;:::-;36432:35;36488:1;36485;36481:9;36476:14;;36320:176;;;;:::o;36502:180::-;36550:77;36547:1;36540:88;36647:4;36644:1;36637:15;36671:4;36668:1;36661:15;36688:180;36736:77;36733:1;36726:88;36833:4;36830:1;36823:15;36857:4;36854:1;36847:15;36874:180;36922:77;36919:1;36912:88;37019:4;37016:1;37009:15;37043:4;37040:1;37033:15;37060:180;37108:77;37105:1;37098:88;37205:4;37202:1;37195:15;37229:4;37226:1;37219:15;37246:180;37294:77;37291:1;37284:88;37391:4;37388:1;37381:15;37415:4;37412:1;37405:15;37432:117;37541:1;37538;37531:12;37555:117;37664:1;37661;37654:12;37678:117;37787:1;37784;37777:12;37801:117;37910:1;37907;37900:12;37924:102;37965:6;38016:2;38012:7;38007:2;38000:5;37996:14;37992:28;37982:38;;37924:102;;;:::o;38032:179::-;38172:31;38168:1;38160:6;38156:14;38149:55;38032:179;:::o;38217:237::-;38357:34;38353:1;38345:6;38341:14;38334:58;38426:20;38421:2;38413:6;38409:15;38402:45;38217:237;:::o;38460:225::-;38600:34;38596:1;38588:6;38584:14;38577:58;38669:8;38664:2;38656:6;38652:15;38645:33;38460:225;:::o;38691:165::-;38831:17;38827:1;38819:6;38815:14;38808:41;38691:165;:::o;38862:178::-;39002:30;38998:1;38990:6;38986:14;38979:54;38862:178;:::o;39046:223::-;39186:34;39182:1;39174:6;39170:14;39163:58;39255:6;39250:2;39242:6;39238:15;39231:31;39046:223;:::o;39275:175::-;39415:27;39411:1;39403:6;39399:14;39392:51;39275:175;:::o;39456:231::-;39596:34;39592:1;39584:6;39580:14;39573:58;39665:14;39660:2;39652:6;39648:15;39641:39;39456:231;:::o;39693:165::-;39833:17;39829:1;39821:6;39817:14;39810:41;39693:165;:::o;39864:243::-;40004:34;40000:1;39992:6;39988:14;39981:58;40073:26;40068:2;40060:6;40056:15;40049:51;39864:243;:::o;40113:165::-;40253:17;40249:1;40241:6;40237:14;40230:41;40113:165;:::o;40284:229::-;40424:34;40420:1;40412:6;40408:14;40401:58;40493:12;40488:2;40480:6;40476:15;40469:37;40284:229;:::o;40519:228::-;40659:34;40655:1;40647:6;40643:14;40636:58;40728:11;40723:2;40715:6;40711:15;40704:36;40519:228;:::o;40753:220::-;40893:34;40889:1;40881:6;40877:14;40870:58;40962:3;40957:2;40949:6;40945:15;40938:28;40753:220;:::o;40979:182::-;41119:34;41115:1;41107:6;41103:14;41096:58;40979:182;:::o;41167:236::-;41307:34;41303:1;41295:6;41291:14;41284:58;41376:19;41371:2;41363:6;41359:15;41352:44;41167:236;:::o;41409:231::-;41549:34;41545:1;41537:6;41533:14;41526:58;41618:14;41613:2;41605:6;41601:15;41594:39;41409:231;:::o;41646:182::-;41786:34;41782:1;41774:6;41770:14;41763:58;41646:182;:::o;41834:228::-;41974:34;41970:1;41962:6;41958:14;41951:58;42043:11;42038:2;42030:6;42026:15;42019:36;41834:228;:::o;42068:160::-;42208:12;42204:1;42196:6;42192:14;42185:36;42068:160;:::o;42234:220::-;42374:34;42370:1;42362:6;42358:14;42351:58;42443:3;42438:2;42430:6;42426:15;42419:28;42234:220;:::o;42460:177::-;42600:29;42596:1;42588:6;42584:14;42577:53;42460:177;:::o;42643:236::-;42783:34;42779:1;42771:6;42767:14;42760:58;42852:19;42847:2;42839:6;42835:15;42828:44;42643:236;:::o;42885:171::-;43025:23;43021:1;43013:6;43009:14;43002:47;42885:171;:::o;43062:122::-;43135:24;43153:5;43135:24;:::i;:::-;43128:5;43125:35;43115:63;;43174:1;43171;43164:12;43115:63;43062:122;:::o;43190:116::-;43260:21;43275:5;43260:21;:::i;:::-;43253:5;43250:32;43240:60;;43296:1;43293;43286:12;43240:60;43190:116;:::o;43312:120::-;43384:23;43401:5;43384:23;:::i;:::-;43377:5;43374:34;43364:62;;43422:1;43419;43412:12;43364:62;43312:120;:::o;43438:122::-;43511:24;43529:5;43511:24;:::i;:::-;43504:5;43501:35;43491:63;;43550:1;43547;43540:12;43491:63;43438:122;:::o

Swarm Source

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