ETH Price: $3,424.33 (+5.18%)
Gas: 6 Gwei

Token

Boobles (BNFT)
 

Overview

Max Total Supply

5,000 BNFT

Holders

1,287

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 BNFT
0x20fe10b966708b772e912458932a1206aa8d7e40
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Booble

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2021-11-03
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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`.
    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;
}

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract Booble is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // 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;
    
    // Specific Functionality
    bool public mintActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public pricePublic;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public reservedTokens;
    uint256 public discountPrice;
    uint256 public freeMinted;
    bool public sendOnContract;

    address contractor      = payable(0x2E07cd18E675c921E8c523E36D79788734E94f88); //5
    address toronto         = payable(0x9618AA6B6BF62a3DBEC457e8792C372673a3c5c3); //15
    address doxxed          = payable(0xC1FDc68dc63d3316F32420d4d2c3DeA43091bCDD); //80

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Boobles";
        _symbol = "BNFT";
        _baseURI = "https://boobles.io/metadata/";
        _hideTokens = true;
        
        totalTokens = 8008; // 0-9999   
        price = 15 * (10 ** 15);
        maxPerTxn = 50;
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == Booble.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;

        bool success;
        (success, ) = contractor.call{value: ((sendAmount * 5)/100)}("");
        require(success, "Transaction Unsuccessful");
        
        (success, ) = toronto.call{value: ((sendAmount * 15)/100)}("");
        require(success, "Transaction Unsuccessful");
        
        (success, ) = doxxed.call{value: ((sendAmount * 80)/100)}("");
        require(success, "Transaction Unsuccessful");
        
     }
    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) < totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }

    /*Function to mint token with 0 ETH price utpo 499*/

    function FreeMint() external reentryLock {
        require(mintActive, "Mint is not Active");
        require(freeMinted < 250, "Free Mints Sold Out");
        require(numberMinted < totalTokens, "Collection Sold Out");

        uint256 mintSeedValue = numberMinted;
        numberMinted += 1;
        freeMinted += 1;

        _safeMint(_msgSender(), mintSeedValue );
    }

    /* 0.015 for everyone */
    
    function publicMint(uint256 qty) external payable reentryLock {
        require(totalTokens >= qty + numberMinted, "sold out");
        require(qty <= maxPerTxn, "max 50 per txn");
        require(mintActive, "Mint is not Active");
        require(msg.value == qty * price, "Wrong Eth Amount");
        
        uint256 mintSeedValue = numberMinted;
        numberMinted += qty;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
        }
       
    }
     
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function setDiscountPrice(uint256 newPrice) external onlyOwner {
        discountPrice = newPrice;
    }

    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

    /**
     * @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 {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "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 {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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(msg.sender, 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(msg.sender, 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 = 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 = 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(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(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @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(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                sendOnContract = true;
                return retval == IERC721Receiver(to).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;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @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) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @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 {}

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json")); /// 0.json 135.json
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"discountPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","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":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTokens","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":[],"name":"sendOnContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setDiscountPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff021916908315150217905550732e07cd18e675c921e8c523e36d79788734e94f88601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739618aa6b6bf62a3dbec457e8792c372673a3c5c3601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c1fdc68dc63d3316f32420d4d2c3dea43091bcdd601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012a57600080fd5b506200014b6200013f6200027560201b60201c565b6200027d60201b60201c565b6040518060400160405280600781526020017f426f6f626c657300000000000000000000000000000000000000000000000000815250600190805190602001906200019892919062000341565b506040518060400160405280600481526020017f424e46540000000000000000000000000000000000000000000000000000000081525060029080519060200190620001e692919062000341565b506040518060400160405280601c81526020017f68747470733a2f2f626f6f626c65732e696f2f6d657461646174612f00000000815250600390805190602001906200023492919062000341565b506001600860016101000a81548160ff021916908315150217905550611f48600b8190555066354a6ba7a180006009819055506032600d8190555062000456565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200034f90620003f1565b90600052602060002090601f016020900481019282620003735760008555620003bf565b82601f106200038e57805160ff1916838001178555620003bf565b82800160010185558215620003bf579182015b82811115620003be578251825591602001919060010190620003a1565b5b509050620003ce9190620003d2565b5090565b5b80821115620003ed576000816000905550600101620003d3565b5090565b600060028204905060018216806200040a57607f821691505b6020821081141562000421576200042062000427565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61486580620004666000396000f3fe6080604052600436106102555760003560e01c8063715018a611610139578063b5b3e214116100b6578063d10a1a2b1161007a578063d10a1a2b1461083b578063e8695ff414610866578063e8a3d4851461087d578063e985e9c5146108a8578063f2fde38b146108e5578063f8b2cb4f1461090e5761025c565b8063b5b3e2141461077c578063b88d4fde14610793578063bf29ce98146107bc578063c87b56dd146107e7578063c91c0462146108245761025c565b806391b7f5ed116100fd57806391b7f5ed146106ab57806395d89b41146106d4578063a035b1fe146106ff578063a22cb4651461072a578063b0b92263146107535761025c565b8063715018a6146105ea5780637e1c0c091461060157806384ad8e8f1461062c5780638b78c116146106575780638da5cb5b146106805761025c565b80632db11544116101d257806342842e0e1161019657806342842e0e146104ca578063484b973c146104f357806349a772b51461051c57806355f804b3146105475780636352211e1461057057806370a08231146105ad5761025c565b80632db115441461043e5780632e56f71e1461045a5780633ba5939d146104715780633cb51994146104885780633ccfd60b146104b35761025c565b8063150b7a0211610219578063150b7a021461035757806315a553471461039457806318160ddd146103bf57806323b872dd146103ea57806325fd90f3146104135761025c565b806301ffc9a71461025e57806306fdde031461029b578063081812fc146102c6578063095ea7b314610303578063102e766d1461032c5761025c565b3661025c57005b005b34801561026a57600080fd5b50610285600480360381019061028091906131a7565b61094b565b60405161029291906138de565b60405180910390f35b3480156102a757600080fd5b506102b0610ad4565b6040516102bd9190613914565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061324a565b610b66565b6040516102fa9190613877565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613167565b610beb565b005b34801561033857600080fd5b50610341610cf5565b60405161034e9190613c76565b60405180910390f35b34801561036357600080fd5b5061037e6004803603810190610379919061301c565b610cfb565b60405161038b91906138f9565b60405180910390f35b3480156103a057600080fd5b506103a9610d10565b6040516103b69190613c76565b60405180910390f35b3480156103cb57600080fd5b506103d4610d16565b6040516103e19190613c76565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612fc9565b610d20565b005b34801561041f57600080fd5b50610428610d79565b60405161043591906138de565b60405180910390f35b6104586004803603810190610453919061324a565b610d8c565b005b34801561046657600080fd5b5061046f610fa5565b005b34801561047d57600080fd5b5061048661103e565b005b34801561049457600080fd5b5061049d6110d7565b6040516104aa9190613c76565b60405180910390f35b3480156104bf57600080fd5b506104c86110dd565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612fc9565b611416565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190613167565b611436565b005b34801561052857600080fd5b506105316115ac565b60405161053e9190613c76565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613201565b6115b2565b005b34801561057c57600080fd5b506105976004803603810190610592919061324a565b611648565b6040516105a49190613877565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190612f5c565b6116fa565b6040516105e19190613c76565b60405180910390f35b3480156105f657600080fd5b506105ff6117b2565b005b34801561060d57600080fd5b5061061661183a565b6040516106239190613c76565b60405180910390f35b34801561063857600080fd5b50610641611840565b60405161064e9190613c76565b60405180910390f35b34801561066357600080fd5b5061067e6004803603810190610679919061324a565b611846565b005b34801561068c57600080fd5b506106956118cc565b6040516106a29190613877565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd919061324a565b6118f5565b005b3480156106e057600080fd5b506106e961197b565b6040516106f69190613914565b60405180910390f35b34801561070b57600080fd5b50610714611a0d565b6040516107219190613c76565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613127565b611a13565b005b34801561075f57600080fd5b5061077a6004803603810190610775919061324a565b611b7f565b005b34801561078857600080fd5b50610791611c05565b005b34801561079f57600080fd5b506107ba60048036038101906107b591906130a4565b611c9e565b005b3480156107c857600080fd5b506107d1611cf9565b6040516107de91906138de565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061324a565b611d0c565b60405161081b9190613914565b60405180910390f35b34801561083057600080fd5b50610839611dcc565b005b34801561084757600080fd5b50610850611e65565b60405161085d9190613c76565b60405180910390f35b34801561087257600080fd5b5061087b611e6b565b005b34801561088957600080fd5b50610892612019565b60405161089f9190613914565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190612f89565b612041565b6040516108dc91906138de565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190612f5c565b6120d5565b005b34801561091a57600080fd5b5061093560048036038101906109309190612f5c565b6121cd565b6040516109429190613c76565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610acd575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610ae390613f46565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90613f46565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182612228565b610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613b96565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf682611648565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613c16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ca75750610ca68133612041565b5b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90613af6565b60405180910390fd5b610cf08383612294565b505050565b600a5481565b600063150b7a0260e01b905095945050505050565b600e5481565b6000600c54905090565b610d2a338261234d565b610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613c36565b60405180910390fd5b610d7483838361242b565b505050565b600860009054906101000a900460ff1681565b600060149054906101000a900460ff1615610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390613ad6565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c5481610e059190613d7b565b600b541015610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613a96565b60405180910390fd5b600d54811115610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613ab6565b60405180910390fd5b600860009054906101000a900460ff16610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906139f6565b60405180910390fd5b60095481610eeb9190613e02565b3414610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613936565b60405180910390fd5b6000600c54905081600c6000828254610f459190613d7b565b9250508190555060005b82811015610f8657610f73610f62612687565b8284610f6e9190613d7b565b61268f565b8080610f7e90613fa9565b915050610f4f565b505060008060146101000a81548160ff02191690831515021790555050565b610fad612687565b73ffffffffffffffffffffffffffffffffffffffff16610fcb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613bb6565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611046612687565b73ffffffffffffffffffffffffffffffffffffffff166110646118cc565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190613bb6565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b600d5481565b6110e5612687565b73ffffffffffffffffffffffffffffffffffffffff166111036118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613bb6565b60405180910390fd5b60004790506000601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646005846111a89190613e02565b6111b29190613dd1565b6040516111be90613862565b60006040518083038185875af1925050503d80600081146111fb576040519150601f19603f3d011682016040523d82523d6000602084013e611200565b606091505b50508091505080611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d906139d6565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600f8461128e9190613e02565b6112989190613dd1565b6040516112a490613862565b60006040518083038185875af1925050503d80600081146112e1576040519150601f19603f3d011682016040523d82523d6000602084013e6112e6565b606091505b5050809150508061132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906139d6565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646050846113749190613e02565b61137e9190613dd1565b60405161138a90613862565b60006040518083038185875af1925050503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50508091505080611412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611409906139d6565b60405180910390fd5b5050565b61143183838360405180602001604052806000815250611c9e565b505050565b61143e612687565b73ffffffffffffffffffffffffffffffffffffffff1661145c6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613bb6565b60405180910390fd5b600c5481600c546114c39190613d7b565b11611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c56565b60405180910390fd5b600b5481600c546115149190613d7b565b10611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90613b56565b60405180910390fd5b6000600c54905060005b828110156115a65761157b8482846115769190613d7b565b61268f565b600c600081548092919061158e90613fa9565b9190505550808061159e90613fa9565b91505061155e565b50505050565b600c5481565b6115ba612687565b73ffffffffffffffffffffffffffffffffffffffff166115d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590613bb6565b60405180910390fd5b8060039080519060200190611644929190612d1a565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290613b16565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117ba612687565b73ffffffffffffffffffffffffffffffffffffffff166117d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613bb6565b60405180910390fd5b61183860006126ad565b565b600b5481565b600f5481565b61184e612687565b73ffffffffffffffffffffffffffffffffffffffff1661186c6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613bb6565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118fd612687565b73ffffffffffffffffffffffffffffffffffffffff1661191b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890613bb6565b60405180910390fd5b8060098190555050565b60606002805461198a90613f46565b80601f01602080910402602001604051908101604052809291908181526020018280546119b690613f46565b8015611a035780601f106119d857610100808354040283529160200191611a03565b820191906000526020600020905b8154815290600101906020018083116119e657829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613a36565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7391906138de565b60405180910390a35050565b611b87612687565b73ffffffffffffffffffffffffffffffffffffffff16611ba56118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613bb6565b60405180910390fd5b80600b8190555050565b611c0d612687565b73ffffffffffffffffffffffffffffffffffffffff16611c2b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890613bb6565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611ca8338361234d565b611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613c36565b60405180910390fd5b611cf384848484612771565b50505050565b601160009054906101000a900460ff1681565b6060611d1782612228565b611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613bf6565b60405180910390fd5b6060600860019054906101000a900460ff1615611d95576003604051602001611d7f9190613840565b6040516020818303038152906040529050611dc3565b6003611da0846127cd565b604051602001611db19291906137ef565b60405160208183030381529060405290505b80915050919050565b611dd4612687565b73ffffffffffffffffffffffffffffffffffffffff16611df26118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613bb6565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60105481565b600060149054906101000a900460ff1615611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613ad6565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906139f6565b60405180910390fd5b60fa60105410611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613a56565b60405180910390fd5b600b54600c5410611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613956565b60405180910390fd5b6000600c5490506001600c6000828254611fca9190613d7b565b92505081905550600160106000828254611fe49190613d7b565b92505081905550611ffc611ff6612687565b8261268f565b5060008060146101000a81548160ff021916908315150217905550565b6060600360405160200161202d919061381e565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120dd612687565b73ffffffffffffffffffffffffffffffffffffffff166120fb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890613bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b890613996565b60405180910390fd5b6121ca816126ad565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122219190613dd1565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661230783611648565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061235882612228565b612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613a76565b60405180910390fd5b60006123a283611648565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061241157508373ffffffffffffffffffffffffffffffffffffffff166123f984610b66565b73ffffffffffffffffffffffffffffffffffffffff16145b8061242257506124218185612041565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661244b82611648565b73ffffffffffffffffffffffffffffffffffffffff16146124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890613a16565b60405180910390fd5b61251c83838361292e565b612527600082612294565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125779190613e5c565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ce9190613d7b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b6126a9828260405180602001604052806000815250612933565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61277c84848461242b565b6127888484848461298e565b6127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90613976565b60405180910390fd5b50505050565b60606000821415612815576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612929565b600082905060005b6000821461284757808061283090613fa9565b915050600a826128409190613dd1565b915061281d565b60008167ffffffffffffffff811115612863576128626140df565b5b6040519080825280601f01601f1916602001820160405280156128955781602001600182028036833780820191505090505b5090505b60008514612922576001826128ae9190613e5c565b9150600a856128bd9190613ff2565b60306128c99190613d7b565b60f81b8183815181106128df576128de6140b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291b9190613dd1565b9450612899565b8093505050505b919050565b505050565b61293d8383612b39565b61294a600084848461298e565b612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090613976565b60405180910390fd5b505050565b60006129af8473ffffffffffffffffffffffffffffffffffffffff16612d07565b15612b2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016129f39493929190613892565b602060405180830381600087803b158015612a0d57600080fd5b505af1925050508015612a3e57506040513d601f19601f82011682018060405250810190612a3b91906131d4565b60015b612ac1573d8060008114612a6e576040519150601f19603f3d011682016040523d82523d6000602084013e612a73565b606091505b50600081511415612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090613976565b60405180910390fd5b805181602001fd5b6001601160006101000a81548160ff02191690831515021790555063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b31565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090613b76565b60405180910390fd5b612bb281612228565b15612bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be9906139b6565b60405180910390fd5b612bfe6000838361292e565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4e9190613d7b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d2690613f46565b90600052602060002090601f016020900481019282612d485760008555612d8f565b82601f10612d6157805160ff1916838001178555612d8f565b82800160010185558215612d8f579182015b82811115612d8e578251825591602001919060010190612d73565b5b509050612d9c9190612da0565b5090565b5b80821115612db9576000816000905550600101612da1565b5090565b6000612dd0612dcb84613cb6565b613c91565b905082815260208101848484011115612dec57612deb61411d565b5b612df7848285613f04565b509392505050565b6000612e12612e0d84613ce7565b613c91565b905082815260208101848484011115612e2e57612e2d61411d565b5b612e39848285613f04565b509392505050565b600081359050612e50816147d3565b92915050565b600081359050612e65816147ea565b92915050565b600081359050612e7a81614801565b92915050565b600081519050612e8f81614801565b92915050565b60008083601f840112612eab57612eaa614113565b5b8235905067ffffffffffffffff811115612ec857612ec761410e565b5b602083019150836001820283011115612ee457612ee3614118565b5b9250929050565b600082601f830112612f0057612eff614113565b5b8135612f10848260208601612dbd565b91505092915050565b600082601f830112612f2e57612f2d614113565b5b8135612f3e848260208601612dff565b91505092915050565b600081359050612f5681614818565b92915050565b600060208284031215612f7257612f71614127565b5b6000612f8084828501612e41565b91505092915050565b60008060408385031215612fa057612f9f614127565b5b6000612fae85828601612e41565b9250506020612fbf85828601612e41565b9150509250929050565b600080600060608486031215612fe257612fe1614127565b5b6000612ff086828701612e41565b935050602061300186828701612e41565b925050604061301286828701612f47565b9150509250925092565b60008060008060006080868803121561303857613037614127565b5b600061304688828901612e41565b955050602061305788828901612e41565b945050604061306888828901612f47565b935050606086013567ffffffffffffffff81111561308957613088614122565b5b61309588828901612e95565b92509250509295509295909350565b600080600080608085870312156130be576130bd614127565b5b60006130cc87828801612e41565b94505060206130dd87828801612e41565b93505060406130ee87828801612f47565b925050606085013567ffffffffffffffff81111561310f5761310e614122565b5b61311b87828801612eeb565b91505092959194509250565b6000806040838503121561313e5761313d614127565b5b600061314c85828601612e41565b925050602061315d85828601612e56565b9150509250929050565b6000806040838503121561317e5761317d614127565b5b600061318c85828601612e41565b925050602061319d85828601612f47565b9150509250929050565b6000602082840312156131bd576131bc614127565b5b60006131cb84828501612e6b565b91505092915050565b6000602082840312156131ea576131e9614127565b5b60006131f884828501612e80565b91505092915050565b60006020828403121561321757613216614127565b5b600082013567ffffffffffffffff81111561323557613234614122565b5b61324184828501612f19565b91505092915050565b6000602082840312156132605761325f614127565b5b600061326e84828501612f47565b91505092915050565b61328081613e90565b82525050565b61328f81613ea2565b82525050565b61329e81613eae565b82525050565b60006132af82613d2d565b6132b98185613d43565b93506132c9818560208601613f13565b6132d28161412c565b840191505092915050565b60006132e882613d38565b6132f28185613d5f565b9350613302818560208601613f13565b61330b8161412c565b840191505092915050565b600061332182613d38565b61332b8185613d70565b935061333b818560208601613f13565b80840191505092915050565b6000815461335481613f46565b61335e8186613d70565b94506001821660008114613379576001811461338a576133bd565b60ff198316865281860193506133bd565b61339385613d18565b60005b838110156133b557815481890152600182019150602081019050613396565b838801955050505b50505092915050565b60006133d3601083613d5f565b91506133de8261413d565b602082019050919050565b60006133f6601383613d5f565b915061340182614166565b602082019050919050565b6000613419600d83613d70565b91506134248261418f565b600d82019050919050565b600061343c603283613d5f565b9150613447826141b8565b604082019050919050565b600061345f602683613d5f565b915061346a82614207565b604082019050919050565b6000613482601c83613d5f565b915061348d82614256565b602082019050919050565b60006134a5601883613d5f565b91506134b08261427f565b602082019050919050565b60006134c8601283613d5f565b91506134d3826142a8565b602082019050919050565b60006134eb602483613d5f565b91506134f6826142d1565b604082019050919050565b600061350e601983613d5f565b915061351982614320565b602082019050919050565b6000613531600c83613d70565b915061353c82614349565b600c82019050919050565b6000613554601383613d5f565b915061355f82614372565b602082019050919050565b6000613577602c83613d5f565b91506135828261439b565b604082019050919050565b600061359a600883613d5f565b91506135a5826143ea565b602082019050919050565b60006135bd600e83613d5f565b91506135c882614413565b602082019050919050565b60006135e0602483613d5f565b91506135eb8261443c565b604082019050919050565b6000613603603883613d5f565b915061360e8261448b565b604082019050919050565b6000613626602a83613d5f565b9150613631826144da565b604082019050919050565b6000613649602983613d5f565b915061365482614529565b604082019050919050565b600061366c601183613d5f565b915061367782614578565b602082019050919050565b600061368f602083613d5f565b915061369a826145a1565b602082019050919050565b60006136b2602c83613d5f565b91506136bd826145ca565b604082019050919050565b60006136d5600583613d70565b91506136e082614619565b600582019050919050565b60006136f8602083613d5f565b915061370382614642565b602082019050919050565b600061371b602983613d5f565b91506137268261466b565b604082019050919050565b600061373e602f83613d5f565b9150613749826146ba565b604082019050919050565b6000613761602183613d5f565b915061376c82614709565b604082019050919050565b6000613784600083613d54565b915061378f82614758565b600082019050919050565b60006137a7603183613d5f565b91506137b28261475b565b604082019050919050565b60006137ca601383613d5f565b91506137d5826147aa565b602082019050919050565b6137e981613efa565b82525050565b60006137fb8285613347565b91506138078284613316565b9150613812826136c8565b91508190509392505050565b600061382a8284613347565b91506138358261340c565b915081905092915050565b600061384c8284613347565b915061385782613524565b915081905092915050565b600061386d82613777565b9150819050919050565b600060208201905061388c6000830184613277565b92915050565b60006080820190506138a76000830187613277565b6138b46020830186613277565b6138c160408301856137e0565b81810360608301526138d381846132a4565b905095945050505050565b60006020820190506138f36000830184613286565b92915050565b600060208201905061390e6000830184613295565b92915050565b6000602082019050818103600083015261392e81846132dd565b905092915050565b6000602082019050818103600083015261394f816133c6565b9050919050565b6000602082019050818103600083015261396f816133e9565b9050919050565b6000602082019050818103600083015261398f8161342f565b9050919050565b600060208201905081810360008301526139af81613452565b9050919050565b600060208201905081810360008301526139cf81613475565b9050919050565b600060208201905081810360008301526139ef81613498565b9050919050565b60006020820190508181036000830152613a0f816134bb565b9050919050565b60006020820190508181036000830152613a2f816134de565b9050919050565b60006020820190508181036000830152613a4f81613501565b9050919050565b60006020820190508181036000830152613a6f81613547565b9050919050565b60006020820190508181036000830152613a8f8161356a565b9050919050565b60006020820190508181036000830152613aaf8161358d565b9050919050565b60006020820190508181036000830152613acf816135b0565b9050919050565b60006020820190508181036000830152613aef816135d3565b9050919050565b60006020820190508181036000830152613b0f816135f6565b9050919050565b60006020820190508181036000830152613b2f81613619565b9050919050565b60006020820190508181036000830152613b4f8161363c565b9050919050565b60006020820190508181036000830152613b6f8161365f565b9050919050565b60006020820190508181036000830152613b8f81613682565b9050919050565b60006020820190508181036000830152613baf816136a5565b9050919050565b60006020820190508181036000830152613bcf816136eb565b9050919050565b60006020820190508181036000830152613bef8161370e565b9050919050565b60006020820190508181036000830152613c0f81613731565b9050919050565b60006020820190508181036000830152613c2f81613754565b9050919050565b60006020820190508181036000830152613c4f8161379a565b9050919050565b60006020820190508181036000830152613c6f816137bd565b9050919050565b6000602082019050613c8b60008301846137e0565b92915050565b6000613c9b613cac565b9050613ca78282613f78565b919050565b6000604051905090565b600067ffffffffffffffff821115613cd157613cd06140df565b5b613cda8261412c565b9050602081019050919050565b600067ffffffffffffffff821115613d0257613d016140df565b5b613d0b8261412c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8682613efa565b9150613d9183613efa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc657613dc5614023565b5b828201905092915050565b6000613ddc82613efa565b9150613de783613efa565b925082613df757613df6614052565b5b828204905092915050565b6000613e0d82613efa565b9150613e1883613efa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5157613e50614023565b5b828202905092915050565b6000613e6782613efa565b9150613e7283613efa565b925082821015613e8557613e84614023565b5b828203905092915050565b6000613e9b82613eda565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f31578082015181840152602081019050613f16565b83811115613f40576000848401525b50505050565b60006002820490506001821680613f5e57607f821691505b60208210811415613f7257613f71614081565b5b50919050565b613f818261412c565b810181811067ffffffffffffffff82111715613fa057613f9f6140df565b5b80604052505050565b6000613fb482613efa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fe757613fe6614023565b5b600182019050919050565b6000613ffd82613efa565b915061400883613efa565b92508261401857614017614052565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f436f6c6c656374696f6e20536f6c64204f757400000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4d696e74206973206e6f74204163746976650000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f46726565204d696e747320536f6c64204f757400000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f6d6178203530207065722074786e000000000000000000000000000000000000600082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147dc81613e90565b81146147e757600080fd5b50565b6147f381613ea2565b81146147fe57600080fd5b50565b61480a81613eae565b811461481557600080fd5b50565b61482181613efa565b811461482c57600080fd5b5056fea26469706673582212207729855bec2b2fb6c4e74aa85b2f7a489fab86e6876004036ff1eda06836fcf464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102555760003560e01c8063715018a611610139578063b5b3e214116100b6578063d10a1a2b1161007a578063d10a1a2b1461083b578063e8695ff414610866578063e8a3d4851461087d578063e985e9c5146108a8578063f2fde38b146108e5578063f8b2cb4f1461090e5761025c565b8063b5b3e2141461077c578063b88d4fde14610793578063bf29ce98146107bc578063c87b56dd146107e7578063c91c0462146108245761025c565b806391b7f5ed116100fd57806391b7f5ed146106ab57806395d89b41146106d4578063a035b1fe146106ff578063a22cb4651461072a578063b0b92263146107535761025c565b8063715018a6146105ea5780637e1c0c091461060157806384ad8e8f1461062c5780638b78c116146106575780638da5cb5b146106805761025c565b80632db11544116101d257806342842e0e1161019657806342842e0e146104ca578063484b973c146104f357806349a772b51461051c57806355f804b3146105475780636352211e1461057057806370a08231146105ad5761025c565b80632db115441461043e5780632e56f71e1461045a5780633ba5939d146104715780633cb51994146104885780633ccfd60b146104b35761025c565b8063150b7a0211610219578063150b7a021461035757806315a553471461039457806318160ddd146103bf57806323b872dd146103ea57806325fd90f3146104135761025c565b806301ffc9a71461025e57806306fdde031461029b578063081812fc146102c6578063095ea7b314610303578063102e766d1461032c5761025c565b3661025c57005b005b34801561026a57600080fd5b50610285600480360381019061028091906131a7565b61094b565b60405161029291906138de565b60405180910390f35b3480156102a757600080fd5b506102b0610ad4565b6040516102bd9190613914565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061324a565b610b66565b6040516102fa9190613877565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613167565b610beb565b005b34801561033857600080fd5b50610341610cf5565b60405161034e9190613c76565b60405180910390f35b34801561036357600080fd5b5061037e6004803603810190610379919061301c565b610cfb565b60405161038b91906138f9565b60405180910390f35b3480156103a057600080fd5b506103a9610d10565b6040516103b69190613c76565b60405180910390f35b3480156103cb57600080fd5b506103d4610d16565b6040516103e19190613c76565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612fc9565b610d20565b005b34801561041f57600080fd5b50610428610d79565b60405161043591906138de565b60405180910390f35b6104586004803603810190610453919061324a565b610d8c565b005b34801561046657600080fd5b5061046f610fa5565b005b34801561047d57600080fd5b5061048661103e565b005b34801561049457600080fd5b5061049d6110d7565b6040516104aa9190613c76565b60405180910390f35b3480156104bf57600080fd5b506104c86110dd565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612fc9565b611416565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190613167565b611436565b005b34801561052857600080fd5b506105316115ac565b60405161053e9190613c76565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613201565b6115b2565b005b34801561057c57600080fd5b506105976004803603810190610592919061324a565b611648565b6040516105a49190613877565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190612f5c565b6116fa565b6040516105e19190613c76565b60405180910390f35b3480156105f657600080fd5b506105ff6117b2565b005b34801561060d57600080fd5b5061061661183a565b6040516106239190613c76565b60405180910390f35b34801561063857600080fd5b50610641611840565b60405161064e9190613c76565b60405180910390f35b34801561066357600080fd5b5061067e6004803603810190610679919061324a565b611846565b005b34801561068c57600080fd5b506106956118cc565b6040516106a29190613877565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd919061324a565b6118f5565b005b3480156106e057600080fd5b506106e961197b565b6040516106f69190613914565b60405180910390f35b34801561070b57600080fd5b50610714611a0d565b6040516107219190613c76565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613127565b611a13565b005b34801561075f57600080fd5b5061077a6004803603810190610775919061324a565b611b7f565b005b34801561078857600080fd5b50610791611c05565b005b34801561079f57600080fd5b506107ba60048036038101906107b591906130a4565b611c9e565b005b3480156107c857600080fd5b506107d1611cf9565b6040516107de91906138de565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061324a565b611d0c565b60405161081b9190613914565b60405180910390f35b34801561083057600080fd5b50610839611dcc565b005b34801561084757600080fd5b50610850611e65565b60405161085d9190613c76565b60405180910390f35b34801561087257600080fd5b5061087b611e6b565b005b34801561088957600080fd5b50610892612019565b60405161089f9190613914565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190612f89565b612041565b6040516108dc91906138de565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190612f5c565b6120d5565b005b34801561091a57600080fd5b5061093560048036038101906109309190612f5c565b6121cd565b6040516109429190613c76565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610acd575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610ae390613f46565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90613f46565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182612228565b610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613b96565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf682611648565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613c16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ca75750610ca68133612041565b5b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90613af6565b60405180910390fd5b610cf08383612294565b505050565b600a5481565b600063150b7a0260e01b905095945050505050565b600e5481565b6000600c54905090565b610d2a338261234d565b610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613c36565b60405180910390fd5b610d7483838361242b565b505050565b600860009054906101000a900460ff1681565b600060149054906101000a900460ff1615610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390613ad6565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c5481610e059190613d7b565b600b541015610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613a96565b60405180910390fd5b600d54811115610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613ab6565b60405180910390fd5b600860009054906101000a900460ff16610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906139f6565b60405180910390fd5b60095481610eeb9190613e02565b3414610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613936565b60405180910390fd5b6000600c54905081600c6000828254610f459190613d7b565b9250508190555060005b82811015610f8657610f73610f62612687565b8284610f6e9190613d7b565b61268f565b8080610f7e90613fa9565b915050610f4f565b505060008060146101000a81548160ff02191690831515021790555050565b610fad612687565b73ffffffffffffffffffffffffffffffffffffffff16610fcb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613bb6565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611046612687565b73ffffffffffffffffffffffffffffffffffffffff166110646118cc565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190613bb6565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b600d5481565b6110e5612687565b73ffffffffffffffffffffffffffffffffffffffff166111036118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613bb6565b60405180910390fd5b60004790506000601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646005846111a89190613e02565b6111b29190613dd1565b6040516111be90613862565b60006040518083038185875af1925050503d80600081146111fb576040519150601f19603f3d011682016040523d82523d6000602084013e611200565b606091505b50508091505080611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d906139d6565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600f8461128e9190613e02565b6112989190613dd1565b6040516112a490613862565b60006040518083038185875af1925050503d80600081146112e1576040519150601f19603f3d011682016040523d82523d6000602084013e6112e6565b606091505b5050809150508061132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906139d6565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646050846113749190613e02565b61137e9190613dd1565b60405161138a90613862565b60006040518083038185875af1925050503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50508091505080611412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611409906139d6565b60405180910390fd5b5050565b61143183838360405180602001604052806000815250611c9e565b505050565b61143e612687565b73ffffffffffffffffffffffffffffffffffffffff1661145c6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613bb6565b60405180910390fd5b600c5481600c546114c39190613d7b565b11611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c56565b60405180910390fd5b600b5481600c546115149190613d7b565b10611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90613b56565b60405180910390fd5b6000600c54905060005b828110156115a65761157b8482846115769190613d7b565b61268f565b600c600081548092919061158e90613fa9565b9190505550808061159e90613fa9565b91505061155e565b50505050565b600c5481565b6115ba612687565b73ffffffffffffffffffffffffffffffffffffffff166115d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590613bb6565b60405180910390fd5b8060039080519060200190611644929190612d1a565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290613b16565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117ba612687565b73ffffffffffffffffffffffffffffffffffffffff166117d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613bb6565b60405180910390fd5b61183860006126ad565b565b600b5481565b600f5481565b61184e612687565b73ffffffffffffffffffffffffffffffffffffffff1661186c6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613bb6565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118fd612687565b73ffffffffffffffffffffffffffffffffffffffff1661191b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890613bb6565b60405180910390fd5b8060098190555050565b60606002805461198a90613f46565b80601f01602080910402602001604051908101604052809291908181526020018280546119b690613f46565b8015611a035780601f106119d857610100808354040283529160200191611a03565b820191906000526020600020905b8154815290600101906020018083116119e657829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613a36565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7391906138de565b60405180910390a35050565b611b87612687565b73ffffffffffffffffffffffffffffffffffffffff16611ba56118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613bb6565b60405180910390fd5b80600b8190555050565b611c0d612687565b73ffffffffffffffffffffffffffffffffffffffff16611c2b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890613bb6565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611ca8338361234d565b611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613c36565b60405180910390fd5b611cf384848484612771565b50505050565b601160009054906101000a900460ff1681565b6060611d1782612228565b611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613bf6565b60405180910390fd5b6060600860019054906101000a900460ff1615611d95576003604051602001611d7f9190613840565b6040516020818303038152906040529050611dc3565b6003611da0846127cd565b604051602001611db19291906137ef565b60405160208183030381529060405290505b80915050919050565b611dd4612687565b73ffffffffffffffffffffffffffffffffffffffff16611df26118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613bb6565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60105481565b600060149054906101000a900460ff1615611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613ad6565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906139f6565b60405180910390fd5b60fa60105410611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613a56565b60405180910390fd5b600b54600c5410611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613956565b60405180910390fd5b6000600c5490506001600c6000828254611fca9190613d7b565b92505081905550600160106000828254611fe49190613d7b565b92505081905550611ffc611ff6612687565b8261268f565b5060008060146101000a81548160ff021916908315150217905550565b6060600360405160200161202d919061381e565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120dd612687565b73ffffffffffffffffffffffffffffffffffffffff166120fb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890613bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b890613996565b60405180910390fd5b6121ca816126ad565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122219190613dd1565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661230783611648565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061235882612228565b612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613a76565b60405180910390fd5b60006123a283611648565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061241157508373ffffffffffffffffffffffffffffffffffffffff166123f984610b66565b73ffffffffffffffffffffffffffffffffffffffff16145b8061242257506124218185612041565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661244b82611648565b73ffffffffffffffffffffffffffffffffffffffff16146124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890613a16565b60405180910390fd5b61251c83838361292e565b612527600082612294565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125779190613e5c565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ce9190613d7b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b6126a9828260405180602001604052806000815250612933565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61277c84848461242b565b6127888484848461298e565b6127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90613976565b60405180910390fd5b50505050565b60606000821415612815576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612929565b600082905060005b6000821461284757808061283090613fa9565b915050600a826128409190613dd1565b915061281d565b60008167ffffffffffffffff811115612863576128626140df565b5b6040519080825280601f01601f1916602001820160405280156128955781602001600182028036833780820191505090505b5090505b60008514612922576001826128ae9190613e5c565b9150600a856128bd9190613ff2565b60306128c99190613d7b565b60f81b8183815181106128df576128de6140b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291b9190613dd1565b9450612899565b8093505050505b919050565b505050565b61293d8383612b39565b61294a600084848461298e565b612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090613976565b60405180910390fd5b505050565b60006129af8473ffffffffffffffffffffffffffffffffffffffff16612d07565b15612b2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016129f39493929190613892565b602060405180830381600087803b158015612a0d57600080fd5b505af1925050508015612a3e57506040513d601f19601f82011682018060405250810190612a3b91906131d4565b60015b612ac1573d8060008114612a6e576040519150601f19603f3d011682016040523d82523d6000602084013e612a73565b606091505b50600081511415612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090613976565b60405180910390fd5b805181602001fd5b6001601160006101000a81548160ff02191690831515021790555063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b31565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090613b76565b60405180910390fd5b612bb281612228565b15612bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be9906139b6565b60405180910390fd5b612bfe6000838361292e565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4e9190613d7b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d2690613f46565b90600052602060002090601f016020900481019282612d485760008555612d8f565b82601f10612d6157805160ff1916838001178555612d8f565b82800160010185558215612d8f579182015b82811115612d8e578251825591602001919060010190612d73565b5b509050612d9c9190612da0565b5090565b5b80821115612db9576000816000905550600101612da1565b5090565b6000612dd0612dcb84613cb6565b613c91565b905082815260208101848484011115612dec57612deb61411d565b5b612df7848285613f04565b509392505050565b6000612e12612e0d84613ce7565b613c91565b905082815260208101848484011115612e2e57612e2d61411d565b5b612e39848285613f04565b509392505050565b600081359050612e50816147d3565b92915050565b600081359050612e65816147ea565b92915050565b600081359050612e7a81614801565b92915050565b600081519050612e8f81614801565b92915050565b60008083601f840112612eab57612eaa614113565b5b8235905067ffffffffffffffff811115612ec857612ec761410e565b5b602083019150836001820283011115612ee457612ee3614118565b5b9250929050565b600082601f830112612f0057612eff614113565b5b8135612f10848260208601612dbd565b91505092915050565b600082601f830112612f2e57612f2d614113565b5b8135612f3e848260208601612dff565b91505092915050565b600081359050612f5681614818565b92915050565b600060208284031215612f7257612f71614127565b5b6000612f8084828501612e41565b91505092915050565b60008060408385031215612fa057612f9f614127565b5b6000612fae85828601612e41565b9250506020612fbf85828601612e41565b9150509250929050565b600080600060608486031215612fe257612fe1614127565b5b6000612ff086828701612e41565b935050602061300186828701612e41565b925050604061301286828701612f47565b9150509250925092565b60008060008060006080868803121561303857613037614127565b5b600061304688828901612e41565b955050602061305788828901612e41565b945050604061306888828901612f47565b935050606086013567ffffffffffffffff81111561308957613088614122565b5b61309588828901612e95565b92509250509295509295909350565b600080600080608085870312156130be576130bd614127565b5b60006130cc87828801612e41565b94505060206130dd87828801612e41565b93505060406130ee87828801612f47565b925050606085013567ffffffffffffffff81111561310f5761310e614122565b5b61311b87828801612eeb565b91505092959194509250565b6000806040838503121561313e5761313d614127565b5b600061314c85828601612e41565b925050602061315d85828601612e56565b9150509250929050565b6000806040838503121561317e5761317d614127565b5b600061318c85828601612e41565b925050602061319d85828601612f47565b9150509250929050565b6000602082840312156131bd576131bc614127565b5b60006131cb84828501612e6b565b91505092915050565b6000602082840312156131ea576131e9614127565b5b60006131f884828501612e80565b91505092915050565b60006020828403121561321757613216614127565b5b600082013567ffffffffffffffff81111561323557613234614122565b5b61324184828501612f19565b91505092915050565b6000602082840312156132605761325f614127565b5b600061326e84828501612f47565b91505092915050565b61328081613e90565b82525050565b61328f81613ea2565b82525050565b61329e81613eae565b82525050565b60006132af82613d2d565b6132b98185613d43565b93506132c9818560208601613f13565b6132d28161412c565b840191505092915050565b60006132e882613d38565b6132f28185613d5f565b9350613302818560208601613f13565b61330b8161412c565b840191505092915050565b600061332182613d38565b61332b8185613d70565b935061333b818560208601613f13565b80840191505092915050565b6000815461335481613f46565b61335e8186613d70565b94506001821660008114613379576001811461338a576133bd565b60ff198316865281860193506133bd565b61339385613d18565b60005b838110156133b557815481890152600182019150602081019050613396565b838801955050505b50505092915050565b60006133d3601083613d5f565b91506133de8261413d565b602082019050919050565b60006133f6601383613d5f565b915061340182614166565b602082019050919050565b6000613419600d83613d70565b91506134248261418f565b600d82019050919050565b600061343c603283613d5f565b9150613447826141b8565b604082019050919050565b600061345f602683613d5f565b915061346a82614207565b604082019050919050565b6000613482601c83613d5f565b915061348d82614256565b602082019050919050565b60006134a5601883613d5f565b91506134b08261427f565b602082019050919050565b60006134c8601283613d5f565b91506134d3826142a8565b602082019050919050565b60006134eb602483613d5f565b91506134f6826142d1565b604082019050919050565b600061350e601983613d5f565b915061351982614320565b602082019050919050565b6000613531600c83613d70565b915061353c82614349565b600c82019050919050565b6000613554601383613d5f565b915061355f82614372565b602082019050919050565b6000613577602c83613d5f565b91506135828261439b565b604082019050919050565b600061359a600883613d5f565b91506135a5826143ea565b602082019050919050565b60006135bd600e83613d5f565b91506135c882614413565b602082019050919050565b60006135e0602483613d5f565b91506135eb8261443c565b604082019050919050565b6000613603603883613d5f565b915061360e8261448b565b604082019050919050565b6000613626602a83613d5f565b9150613631826144da565b604082019050919050565b6000613649602983613d5f565b915061365482614529565b604082019050919050565b600061366c601183613d5f565b915061367782614578565b602082019050919050565b600061368f602083613d5f565b915061369a826145a1565b602082019050919050565b60006136b2602c83613d5f565b91506136bd826145ca565b604082019050919050565b60006136d5600583613d70565b91506136e082614619565b600582019050919050565b60006136f8602083613d5f565b915061370382614642565b602082019050919050565b600061371b602983613d5f565b91506137268261466b565b604082019050919050565b600061373e602f83613d5f565b9150613749826146ba565b604082019050919050565b6000613761602183613d5f565b915061376c82614709565b604082019050919050565b6000613784600083613d54565b915061378f82614758565b600082019050919050565b60006137a7603183613d5f565b91506137b28261475b565b604082019050919050565b60006137ca601383613d5f565b91506137d5826147aa565b602082019050919050565b6137e981613efa565b82525050565b60006137fb8285613347565b91506138078284613316565b9150613812826136c8565b91508190509392505050565b600061382a8284613347565b91506138358261340c565b915081905092915050565b600061384c8284613347565b915061385782613524565b915081905092915050565b600061386d82613777565b9150819050919050565b600060208201905061388c6000830184613277565b92915050565b60006080820190506138a76000830187613277565b6138b46020830186613277565b6138c160408301856137e0565b81810360608301526138d381846132a4565b905095945050505050565b60006020820190506138f36000830184613286565b92915050565b600060208201905061390e6000830184613295565b92915050565b6000602082019050818103600083015261392e81846132dd565b905092915050565b6000602082019050818103600083015261394f816133c6565b9050919050565b6000602082019050818103600083015261396f816133e9565b9050919050565b6000602082019050818103600083015261398f8161342f565b9050919050565b600060208201905081810360008301526139af81613452565b9050919050565b600060208201905081810360008301526139cf81613475565b9050919050565b600060208201905081810360008301526139ef81613498565b9050919050565b60006020820190508181036000830152613a0f816134bb565b9050919050565b60006020820190508181036000830152613a2f816134de565b9050919050565b60006020820190508181036000830152613a4f81613501565b9050919050565b60006020820190508181036000830152613a6f81613547565b9050919050565b60006020820190508181036000830152613a8f8161356a565b9050919050565b60006020820190508181036000830152613aaf8161358d565b9050919050565b60006020820190508181036000830152613acf816135b0565b9050919050565b60006020820190508181036000830152613aef816135d3565b9050919050565b60006020820190508181036000830152613b0f816135f6565b9050919050565b60006020820190508181036000830152613b2f81613619565b9050919050565b60006020820190508181036000830152613b4f8161363c565b9050919050565b60006020820190508181036000830152613b6f8161365f565b9050919050565b60006020820190508181036000830152613b8f81613682565b9050919050565b60006020820190508181036000830152613baf816136a5565b9050919050565b60006020820190508181036000830152613bcf816136eb565b9050919050565b60006020820190508181036000830152613bef8161370e565b9050919050565b60006020820190508181036000830152613c0f81613731565b9050919050565b60006020820190508181036000830152613c2f81613754565b9050919050565b60006020820190508181036000830152613c4f8161379a565b9050919050565b60006020820190508181036000830152613c6f816137bd565b9050919050565b6000602082019050613c8b60008301846137e0565b92915050565b6000613c9b613cac565b9050613ca78282613f78565b919050565b6000604051905090565b600067ffffffffffffffff821115613cd157613cd06140df565b5b613cda8261412c565b9050602081019050919050565b600067ffffffffffffffff821115613d0257613d016140df565b5b613d0b8261412c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8682613efa565b9150613d9183613efa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc657613dc5614023565b5b828201905092915050565b6000613ddc82613efa565b9150613de783613efa565b925082613df757613df6614052565b5b828204905092915050565b6000613e0d82613efa565b9150613e1883613efa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5157613e50614023565b5b828202905092915050565b6000613e6782613efa565b9150613e7283613efa565b925082821015613e8557613e84614023565b5b828203905092915050565b6000613e9b82613eda565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f31578082015181840152602081019050613f16565b83811115613f40576000848401525b50505050565b60006002820490506001821680613f5e57607f821691505b60208210811415613f7257613f71614081565b5b50919050565b613f818261412c565b810181811067ffffffffffffffff82111715613fa057613f9f6140df565b5b80604052505050565b6000613fb482613efa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fe757613fe6614023565b5b600182019050919050565b6000613ffd82613efa565b915061400883613efa565b92508261401857614017614052565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f436f6c6c656374696f6e20536f6c64204f757400000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4d696e74206973206e6f74204163746976650000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f46726565204d696e747320536f6c64204f757400000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f6d6178203530207065722074786e000000000000000000000000000000000000600082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147dc81613e90565b81146147e757600080fd5b50565b6147f381613ea2565b81146147fe57600080fd5b50565b61480a81613eae565b811461481557600080fd5b50565b61482181613efa565b811461482c57600080fd5b5056fea26469706673582212207729855bec2b2fb6c4e74aa85b2f7a489fab86e6876004036ff1eda06836fcf464736f6c63430008070033

Deployed Bytecode Sourcemap

16726:18707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18591:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34202:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23174:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17578:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33146:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17709:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21959:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24524:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17470:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20601:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21657:80;;;;;;;;;;;;;:::i;:::-;;22187:81;;;;;;;;;;;;;:::i;:::-;;17678:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19029:541;;;;;;;;;;;;;:::i;:::-;;24932:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19582:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17644:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21461:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22873:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22603:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14904:94;;;;;;;;;;;;;:::i;:::-;;17611:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17745:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21347:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14253:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21749:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34343;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17551:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23933:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21849:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22097:78;;;;;;;;;;;;;:::i;:::-;;25188:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17812:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34518:594;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21568:77;;;;;;;;;;;;;:::i;:::-;;17780:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20173:384;;;;;;;;;;;;;:::i;:::-;;35124:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24293:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15153:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22280:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18591:356;18676:4;18716:25;18701:40;;;:11;:40;;;;:109;;;;18777:33;18762:48;;;:11;:48;;;;18701:109;:170;;;;18846:25;18831:40;;;:11;:40;;;;18701:170;:238;;;;18907:32;;;18892:47;;;:11;:47;;;;18701:238;18693:246;;18591:356;;;:::o;34202:84::-;34241:13;34273:5;34266:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34202:84;:::o;23640:221::-;23716:7;23744:16;23752:7;23744;:16::i;:::-;23736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23829:15;:24;23845:7;23829:24;;;;;;;;;;;;;;;;;;;;;23822:31;;23640:221;;;:::o;23174:400::-;23255:13;23271:16;23279:7;23271;:16::i;:::-;23255:32;;23312:5;23306:11;;:2;:11;;;;23298:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23404:5;23390:19;;:10;:19;;;:58;;;;23413:35;23430:5;23437:10;23413:16;:35::i;:::-;23390:58;23368:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;23545:21;23554:2;23558:7;23545:8;:21::i;:::-;23244:330;23174:400;;:::o;17578:26::-;;;;:::o;33146:215::-;33263:6;33323:30;;;33316:37;;33146:215;;;;;;;:::o;17709:29::-;;;;:::o;21959:126::-;22005:7;22032:12;;22025:19;;21959:126;:::o;24524:337::-;24719:39;24738:10;24750:7;24719:18;:39::i;:::-;24711:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24825:28;24835:4;24841:2;24845:7;24825:9;:28::i;:::-;24524:337;;;:::o;17470:22::-;;;;;;;;;;;;;:::o;20601:523::-;16193:11;;;;;;;;;;;16192:12;16184:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16270:4;16256:11;;:18;;;;;;;;;;;;;;;;;;20703:12:::1;;20697:3;:18;;;;:::i;:::-;20682:11;;:33;;20674:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20754:9;;20747:3;:16;;20739:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20801:10;;;;;;;;;;;20793:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20872:5;;20866:3;:11;;;;:::i;:::-;20853:9;:24;20845:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;20919:21;20943:12;;20919:36;;20982:3;20966:12;;:19;;;;;;;:::i;:::-;;;;;;;;21010:9;21006:102;21029:3;21025:1;:7;21006:102;;;21054:42;21064:12;:10;:12::i;:::-;21094:1;21078:13;:17;;;;:::i;:::-;21054:9;:42::i;:::-;21034:3;;;;;:::i;:::-;;;;21006:102;;;;20663:461;16311:5:::0;16297:11;;:19;;;;;;;;;;;;;;;;;;20601:523;:::o;21657:80::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21724:5:::1;21711:10;;:18;;;;;;;;;;;;;;;;;;21657:80::o:0;22187:81::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22255:5:::1;22241:11;;:19;;;;;;;;;;;;;;;;;;22187:81::o:0;17678:24::-;;;;:::o;19029:541::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:18:::1;19100:21;19079:42;;19134:12;19171:10;;;;;;;;;;;:15;;19212:3;19209:1;19196:10;:14;;;;:::i;:::-;19195:20;;;;:::i;:::-;19171:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19157:64;;;;;19240:7;19232:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19311:7;;;;;;;;;;;:12;;19350:3;19346:2;19333:10;:15;;;;:::i;:::-;19332:21;;;;:::i;:::-;19311:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19297:62;;;;;19378:7;19370:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19449:6;;;;;;;;;;;:11;;19487:3;19483:2;19470:10;:15;;;;:::i;:::-;19469:21;;;;:::i;:::-;19449:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19435:61;;;;;19515:7;19507:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19068:502;;19029:541::o:0;24932:185::-;25070:39;25087:4;25093:2;25097:7;25070:39;;;;;;;;;;;;:16;:39::i;:::-;24932:185;;;:::o;19582:523::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19688:12:::1;;19681:3;19666:12;;:18;;;;:::i;:::-;19665:35;19657:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19766:11;;19759:3;19744:12;;:18;;;;:::i;:::-;19743:34;19735:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19820:21;19844:12;;19820:36;;19926:9;19922:176;19945:3;19941:1;:7;19922:176;;;19970:33;19980:3;20001:1;19985:13;:17;;;;:::i;:::-;19970:9;:33::i;:::-;20018:12;;:15;;;;;;;;;:::i;:::-;;;;;;19950:3;;;;;:::i;:::-;;;;19922:176;;;;19646:459;19582:523:::0;;:::o;17644:27::-;;;;:::o;21461:95::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21542:6:::1;21531:8;:17;;;;;;;;;;;;:::i;:::-;;21461:95:::0;:::o;22873:239::-;22945:7;22965:13;22981:7;:16;22989:7;22981:16;;;;;;;;;;;;;;;;;;;;;22965:32;;23033:1;23016:19;;:5;:19;;;;23008:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23099:5;23092:12;;;22873:239;;;:::o;22603:208::-;22675:7;22720:1;22703:19;;:5;:19;;;;22695:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22787:9;:16;22797:5;22787:16;;;;;;;;;;;;;;;;22780:23;;22603:208;;;:::o;14904:94::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14969:21:::1;14987:1;14969:9;:21::i;:::-;14904:94::o:0;17611:26::-;;;;:::o;17745:28::-;;;;:::o;21347:106::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21437:8:::1;21421:13;:24;;;;21347:106:::0;:::o;14253:87::-;14299:7;14326:6;;;;;;;;;;;14319:13;;14253:87;:::o;21749:88::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21821:8:::1;21813:5;:16;;;;21749:88:::0;:::o;34343:::-;34384:13;34416:7;34409:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34343:88;:::o;17551:20::-;;;;:::o;23933:289::-;24048:10;24036:22;;:8;:22;;;;24028:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24144:8;24101:18;:30;24120:10;24101:30;;;;;;;;;;;;;;;:40;24132:8;24101:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;24195:8;24168:46;;24183:10;24168:46;;;24205:8;24168:46;;;;;;:::i;:::-;;;;;;;;23933:289;;:::o;21849:102::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21934:9:::1;21920:11;:23;;;;21849:102:::0;:::o;22097:78::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22163:4:::1;22149:11;;:18;;;;;;;;;;;;;;;;;;22097:78::o:0;25188:326::-;25363:39;25382:10;25394:7;25363:18;:39::i;:::-;25355:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;25467:39;25481:4;25487:2;25491:7;25500:5;25467:13;:39::i;:::-;25188:326;;;;:::o;17812:26::-;;;;;;;;;;;;;:::o;34518:594::-;34576:13;34609:16;34617:7;34609;:16::i;:::-;34601:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34698:22;34745:11;;;;;;;;;;;34741:328;;;34847:8;34830:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;34812:61;;34741:328;;;34999:8;35009:17;35018:7;35009:8;:17::i;:::-;34982:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34964:73;;34741:328;35096:8;35089:15;;;34518:594;;;:::o;21568:77::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21633:4:::1;21620:10;;:17;;;;;;;;;;;;;;;;;;21568:77::o:0;17780:25::-;;;;:::o;20173:384::-;16193:11;;;;;;;;;;;16192:12;16184:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16270:4;16256:11;;:18;;;;;;;;;;;;;;;;;;20233:10:::1;;;;;;;;;;;20225:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20298:3;20285:10;;:16;20277:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20359:11;;20344:12;;:26;20336:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20407:21;20431:12;;20407:36;;20470:1;20454:12;;:17;;;;;;;:::i;:::-;;;;;;;;20496:1;20482:10;;:15;;;;;;;:::i;:::-;;;;;;;;20510:39;20520:12;:10;:12::i;:::-;20534:13;20510:9;:39::i;:::-;20214:343;16311:5:::0;16297:11;;:19;;;;;;;;;;;;;;;;;;20173:384::o;35124:139::-;35168:13;35229:8;35212:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35198:57;;35124:139;:::o;24293:164::-;24390:4;24414:18;:25;24433:5;24414:25;;;;;;;;;;;;;;;:35;24440:8;24414:35;;;;;;;;;;;;;;;;;;;;;;;;;24407:42;;24293:164;;;;:::o;15153:192::-;14484:12;:10;:12::i;:::-;14473:23;;:7;:5;:7::i;:::-;:23;;;14465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15262:1:::1;15242:22;;:8;:22;;;;15234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15318:19;15328:8;15318:9;:19::i;:::-;15153:192:::0;:::o;22280:259::-;22345:7;22487:6;22460:9;:23;22470:12;22460:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;22453:41;;22280:259;;;:::o;27024:127::-;27089:4;27141:1;27113:30;;:7;:16;27121:7;27113:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27106:37;;27024:127;;;:::o;30985:167::-;31087:2;31060:15;:24;31076:7;31060:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31136:7;31132:2;31105:39;;31114:16;31122:7;31114;:16::i;:::-;31105:39;;;;;;;;;;;;30985:167;;:::o;27318:341::-;27411:4;27436:16;27444:7;27436;:16::i;:::-;27428:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27512:13;27528:16;27536:7;27528;:16::i;:::-;27512:32;;27574:5;27563:16;;:7;:16;;;:51;;;;27607:7;27583:31;;:20;27595:7;27583:11;:20::i;:::-;:31;;;27563:51;:87;;;;27618:32;27635:5;27642:7;27618:16;:32::i;:::-;27563:87;27555:96;;;27318:341;;;;:::o;30296:571::-;30448:4;30428:24;;:16;30436:7;30428;:16::i;:::-;:24;;;30420:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;30531:1;30517:16;;:2;:16;;;;30509:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30587:39;30608:4;30614:2;30618:7;30587:20;:39::i;:::-;30691:29;30708:1;30712:7;30691:8;:29::i;:::-;30752:1;30733:9;:15;30743:4;30733:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30781:1;30764:9;:13;30774:2;30764:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30812:2;30793:7;:16;30801:7;30793:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30851:7;30847:2;30832:27;;30841:4;30832:27;;;;;;;;;;;;30296:571;;;:::o;13636:98::-;13689:7;13716:10;13709:17;;13636:98;:::o;28001:110::-;28077:26;28087:2;28091:7;28077:26;;;;;;;;;;;;:9;:26::i;:::-;28001:110;;:::o;15353:173::-;15409:16;15428:6;;;;;;;;;;;15409:25;;15454:8;15445:6;;:17;;;;;;;;;;;;;;;;;;15509:8;15478:40;;15499:8;15478:40;;;;;;;;;;;;15398:128;15353:173;:::o;26396:315::-;26553:28;26563:4;26569:2;26573:7;26553:9;:28::i;:::-;26600:48;26623:4;26629:2;26633:7;26642:5;26600:22;:48::i;:::-;26592:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26396:315;;;;:::o;15569:532::-;15625:13;15664:1;15655:5;:10;15651:53;;;15682:10;;;;;;;;;;;;;;;;;;;;;15651:53;15714:12;15729:5;15714:20;;15745:14;15770:78;15785:1;15777:4;:9;15770:78;;15803:8;;;;;:::i;:::-;;;;15834:2;15826:10;;;;;:::i;:::-;;;15770:78;;;15858:19;15890:6;15880:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15858:39;;15908:154;15924:1;15915:5;:10;15908:154;;15952:1;15942:11;;;;;:::i;:::-;;;16019:2;16011:5;:10;;;;:::i;:::-;15998:2;:24;;;;:::i;:::-;15985:39;;15968:6;15975;15968:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16048:2;16039:11;;;;;:::i;:::-;;;15908:154;;;16086:6;16072:21;;;;;15569:532;;;;:::o;33933:126::-;;;;:::o;28338:321::-;28468:18;28474:2;28478:7;28468:5;:18::i;:::-;28519:54;28550:1;28554:2;28558:7;28567:5;28519:22;:54::i;:::-;28497:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28338:321;;;:::o;31717:841::-;31872:4;31893:15;:2;:13;;;:15::i;:::-;31889:662;;;31945:2;31929:36;;;31966:10;31978:4;31984:7;31993:5;31929:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31925:571;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32230:1;32213:6;:13;:18;32209:272;;;32256:60;;;;;;;;;;:::i;:::-;;;;;;;;32209:272;32431:6;32425:13;32416:6;32412:2;32408:15;32401:38;31925:571;32060:4;32043:14;;:21;;;;;;;;;;;;;;;;;;32100:45;;;32090:55;;;:6;:55;;;;32083:62;;;;;31889:662;32535:4;32528:11;;31717:841;;;;;;;:::o;28995:382::-;29089:1;29075:16;;:2;:16;;;;29067:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29148:16;29156:7;29148;:16::i;:::-;29147:17;29139:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:45;29239:1;29243:2;29247:7;29210:20;:45::i;:::-;29285:1;29268:9;:13;29278:2;29268:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29316:2;29297:7;:16;29305:7;29297:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29361:7;29357:2;29336:33;;29353:1;29336:33;;;;;;;;;;;;28995:382;;:::o;6489:387::-;6549:4;6757:12;6824:7;6812:20;6804:28;;6867:1;6860:4;:8;6853:15;;;6489:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;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:552::-;1485:8;1495:6;1545:3;1538:4;1530:6;1526:17;1522:27;1512:122;;1553:79;;:::i;:::-;1512:122;1666:6;1653:20;1643:30;;1696:18;1688:6;1685:30;1682:117;;;1718:79;;:::i;:::-;1682:117;1832:4;1824:6;1820:17;1808:29;;1886:3;1878:4;1870:6;1866:17;1856:8;1852:32;1849:41;1846:128;;;1893:79;;:::i;:::-;1846:128;1428:552;;;;;:::o;1999:338::-;2054:5;2103:3;2096:4;2088:6;2084:17;2080:27;2070:122;;2111:79;;:::i;:::-;2070:122;2228:6;2215:20;2253:78;2327:3;2319:6;2312:4;2304:6;2300:17;2253:78;:::i;:::-;2244:87;;2060:277;1999:338;;;;:::o;2357:340::-;2413:5;2462:3;2455:4;2447:6;2443:17;2439:27;2429:122;;2470:79;;:::i;:::-;2429:122;2587:6;2574:20;2612:79;2687:3;2679:6;2672:4;2664:6;2660:17;2612:79;:::i;:::-;2603:88;;2419:278;2357:340;;;;:::o;2703:139::-;2749:5;2787:6;2774:20;2765:29;;2803:33;2830:5;2803:33;:::i;:::-;2703:139;;;;:::o;2848:329::-;2907:6;2956:2;2944:9;2935:7;2931:23;2927:32;2924:119;;;2962:79;;:::i;:::-;2924:119;3082:1;3107:53;3152:7;3143:6;3132:9;3128:22;3107:53;:::i;:::-;3097:63;;3053:117;2848:329;;;;:::o;3183:474::-;3251:6;3259;3308:2;3296:9;3287:7;3283:23;3279:32;3276:119;;;3314:79;;:::i;:::-;3276:119;3434:1;3459:53;3504:7;3495:6;3484:9;3480:22;3459:53;:::i;:::-;3449:63;;3405:117;3561:2;3587:53;3632:7;3623:6;3612:9;3608:22;3587:53;:::i;:::-;3577:63;;3532:118;3183:474;;;;;:::o;3663:619::-;3740:6;3748;3756;3805:2;3793:9;3784:7;3780:23;3776:32;3773:119;;;3811:79;;:::i;:::-;3773:119;3931:1;3956:53;4001:7;3992:6;3981:9;3977:22;3956:53;:::i;:::-;3946:63;;3902:117;4058:2;4084:53;4129:7;4120:6;4109:9;4105:22;4084:53;:::i;:::-;4074:63;;4029:118;4186:2;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4157:118;3663:619;;;;;:::o;4288:963::-;4385:6;4393;4401;4409;4417;4466:3;4454:9;4445:7;4441:23;4437:33;4434:120;;;4473:79;;:::i;:::-;4434:120;4593:1;4618:53;4663:7;4654:6;4643:9;4639:22;4618:53;:::i;:::-;4608:63;;4564:117;4720:2;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4691:118;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;5004:2;4993:9;4989:18;4976:32;5035:18;5027:6;5024:30;5021:117;;;5057:79;;:::i;:::-;5021:117;5170:64;5226:7;5217:6;5206:9;5202:22;5170:64;:::i;:::-;5152:82;;;;4947:297;4288:963;;;;;;;;:::o;5257:943::-;5352:6;5360;5368;5376;5425:3;5413:9;5404:7;5400:23;5396:33;5393:120;;;5432:79;;:::i;:::-;5393:120;5552:1;5577:53;5622:7;5613:6;5602:9;5598:22;5577:53;:::i;:::-;5567:63;;5523:117;5679:2;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5650:118;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5963:2;5952:9;5948:18;5935:32;5994:18;5986:6;5983:30;5980:117;;;6016:79;;:::i;:::-;5980:117;6121:62;6175:7;6166:6;6155:9;6151:22;6121:62;:::i;:::-;6111:72;;5906:287;5257:943;;;;;;;:::o;6206:468::-;6271:6;6279;6328:2;6316:9;6307:7;6303:23;6299:32;6296:119;;;6334:79;;:::i;:::-;6296:119;6454:1;6479:53;6524:7;6515:6;6504:9;6500:22;6479:53;:::i;:::-;6469:63;;6425:117;6581:2;6607:50;6649:7;6640:6;6629:9;6625:22;6607:50;:::i;:::-;6597:60;;6552:115;6206:468;;;;;:::o;6680:474::-;6748:6;6756;6805:2;6793:9;6784:7;6780:23;6776:32;6773:119;;;6811:79;;:::i;:::-;6773:119;6931:1;6956:53;7001:7;6992:6;6981:9;6977:22;6956:53;:::i;:::-;6946:63;;6902:117;7058:2;7084:53;7129:7;7120:6;7109:9;7105:22;7084:53;:::i;:::-;7074:63;;7029:118;6680:474;;;;;:::o;7160:327::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:119;;;7273:79;;:::i;:::-;7235:119;7393:1;7418:52;7462:7;7453:6;7442:9;7438:22;7418:52;:::i;:::-;7408:62;;7364:116;7160:327;;;;:::o;7493:349::-;7562:6;7611:2;7599:9;7590:7;7586:23;7582:32;7579:119;;;7617:79;;:::i;:::-;7579:119;7737:1;7762:63;7817:7;7808:6;7797:9;7793:22;7762:63;:::i;:::-;7752:73;;7708:127;7493:349;;;;:::o;7848:509::-;7917:6;7966:2;7954:9;7945:7;7941:23;7937:32;7934:119;;;7972:79;;:::i;:::-;7934:119;8120:1;8109:9;8105:17;8092:31;8150:18;8142:6;8139:30;8136:117;;;8172:79;;:::i;:::-;8136:117;8277:63;8332:7;8323:6;8312:9;8308:22;8277:63;:::i;:::-;8267:73;;8063:287;7848:509;;;;:::o;8363:329::-;8422:6;8471:2;8459:9;8450:7;8446:23;8442:32;8439:119;;;8477:79;;:::i;:::-;8439:119;8597:1;8622:53;8667:7;8658:6;8647:9;8643:22;8622:53;:::i;:::-;8612:63;;8568:117;8363:329;;;;:::o;8698:118::-;8785:24;8803:5;8785:24;:::i;:::-;8780:3;8773:37;8698:118;;:::o;8822:109::-;8903:21;8918:5;8903:21;:::i;:::-;8898:3;8891:34;8822:109;;:::o;8937:115::-;9022:23;9039:5;9022:23;:::i;:::-;9017:3;9010:36;8937:115;;:::o;9058:360::-;9144:3;9172:38;9204:5;9172:38;:::i;:::-;9226:70;9289:6;9284:3;9226:70;:::i;:::-;9219:77;;9305:52;9350:6;9345:3;9338:4;9331:5;9327:16;9305:52;:::i;:::-;9382:29;9404:6;9382:29;:::i;:::-;9377:3;9373:39;9366:46;;9148:270;9058:360;;;;:::o;9424:364::-;9512:3;9540:39;9573:5;9540:39;:::i;:::-;9595:71;9659:6;9654:3;9595:71;:::i;:::-;9588:78;;9675:52;9720:6;9715:3;9708:4;9701:5;9697:16;9675:52;:::i;:::-;9752:29;9774:6;9752:29;:::i;:::-;9747:3;9743:39;9736:46;;9516:272;9424:364;;;;:::o;9794:377::-;9900:3;9928:39;9961:5;9928:39;:::i;:::-;9983:89;10065:6;10060:3;9983:89;:::i;:::-;9976:96;;10081:52;10126:6;10121:3;10114:4;10107:5;10103:16;10081:52;:::i;:::-;10158:6;10153:3;10149:16;10142:23;;9904:267;9794:377;;;;:::o;10201:845::-;10304:3;10341:5;10335:12;10370:36;10396:9;10370:36;:::i;:::-;10422:89;10504:6;10499:3;10422:89;:::i;:::-;10415:96;;10542:1;10531:9;10527:17;10558:1;10553:137;;;;10704:1;10699:341;;;;10520:520;;10553:137;10637:4;10633:9;10622;10618:25;10613:3;10606:38;10673:6;10668:3;10664:16;10657:23;;10553:137;;10699:341;10766:38;10798:5;10766:38;:::i;:::-;10826:1;10840:154;10854:6;10851:1;10848:13;10840:154;;;10928:7;10922:14;10918:1;10913:3;10909:11;10902:35;10978:1;10969:7;10965:15;10954:26;;10876:4;10873:1;10869:12;10864:17;;10840:154;;;11023:6;11018:3;11014:16;11007:23;;10706:334;;10520:520;;10308:738;;10201:845;;;;:::o;11052:366::-;11194:3;11215:67;11279:2;11274:3;11215:67;:::i;:::-;11208:74;;11291:93;11380:3;11291:93;:::i;:::-;11409:2;11404:3;11400:12;11393:19;;11052:366;;;:::o;11424:::-;11566:3;11587:67;11651:2;11646:3;11587:67;:::i;:::-;11580:74;;11663:93;11752:3;11663:93;:::i;:::-;11781:2;11776:3;11772:12;11765:19;;11424:366;;;:::o;11796:402::-;11956:3;11977:85;12059:2;12054:3;11977:85;:::i;:::-;11970:92;;12071:93;12160:3;12071:93;:::i;:::-;12189:2;12184:3;12180:12;12173:19;;11796:402;;;:::o;12204:366::-;12346:3;12367:67;12431:2;12426:3;12367:67;:::i;:::-;12360:74;;12443:93;12532:3;12443:93;:::i;:::-;12561:2;12556:3;12552:12;12545:19;;12204:366;;;:::o;12576:::-;12718:3;12739:67;12803:2;12798:3;12739:67;:::i;:::-;12732:74;;12815:93;12904:3;12815:93;:::i;:::-;12933:2;12928:3;12924:12;12917:19;;12576:366;;;:::o;12948:::-;13090:3;13111:67;13175:2;13170:3;13111:67;:::i;:::-;13104:74;;13187:93;13276:3;13187:93;:::i;:::-;13305:2;13300:3;13296:12;13289:19;;12948:366;;;:::o;13320:::-;13462:3;13483:67;13547:2;13542:3;13483:67;:::i;:::-;13476:74;;13559:93;13648:3;13559:93;:::i;:::-;13677:2;13672:3;13668:12;13661:19;;13320:366;;;:::o;13692:::-;13834:3;13855:67;13919:2;13914:3;13855:67;:::i;:::-;13848:74;;13931:93;14020:3;13931:93;:::i;:::-;14049:2;14044:3;14040:12;14033:19;;13692:366;;;:::o;14064:::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:402::-;14968:3;14989:85;15071:2;15066:3;14989:85;:::i;:::-;14982:92;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14808:402;;;:::o;15216:366::-;15358:3;15379:67;15443:2;15438:3;15379:67;:::i;:::-;15372:74;;15455:93;15544:3;15455:93;:::i;:::-;15573:2;15568:3;15564:12;15557:19;;15216:366;;;:::o;15588:::-;15730:3;15751:67;15815:2;15810:3;15751:67;:::i;:::-;15744:74;;15827:93;15916:3;15827:93;:::i;:::-;15945:2;15940:3;15936:12;15929:19;;15588:366;;;:::o;15960:365::-;16102:3;16123:66;16187:1;16182:3;16123:66;:::i;:::-;16116:73;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;15960:365;;;:::o;16331:366::-;16473:3;16494:67;16558:2;16553:3;16494:67;:::i;:::-;16487:74;;16570:93;16659:3;16570:93;:::i;:::-;16688:2;16683:3;16679:12;16672:19;;16331:366;;;:::o;16703:::-;16845:3;16866:67;16930:2;16925:3;16866:67;:::i;:::-;16859:74;;16942:93;17031:3;16942:93;:::i;:::-;17060:2;17055:3;17051:12;17044:19;;16703:366;;;:::o;17075:::-;17217:3;17238:67;17302:2;17297:3;17238:67;:::i;:::-;17231:74;;17314:93;17403:3;17314:93;:::i;:::-;17432:2;17427:3;17423:12;17416:19;;17075:366;;;:::o;17447:::-;17589:3;17610:67;17674:2;17669:3;17610:67;:::i;:::-;17603:74;;17686:93;17775:3;17686:93;:::i;:::-;17804:2;17799:3;17795:12;17788:19;;17447:366;;;:::o;17819:::-;17961:3;17982:67;18046:2;18041:3;17982:67;:::i;:::-;17975:74;;18058:93;18147:3;18058:93;:::i;:::-;18176:2;18171:3;18167:12;18160:19;;17819:366;;;:::o;18191:::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18191:366;;;:::o;18563:::-;18705:3;18726:67;18790:2;18785:3;18726:67;:::i;:::-;18719:74;;18802:93;18891:3;18802:93;:::i;:::-;18920:2;18915:3;18911:12;18904:19;;18563:366;;;:::o;18935:::-;19077:3;19098:67;19162:2;19157:3;19098:67;:::i;:::-;19091:74;;19174:93;19263:3;19174:93;:::i;:::-;19292:2;19287:3;19283:12;19276:19;;18935:366;;;:::o;19307:400::-;19467:3;19488:84;19570:1;19565:3;19488:84;:::i;:::-;19481:91;;19581:93;19670:3;19581:93;:::i;:::-;19699:1;19694:3;19690:11;19683:18;;19307:400;;;:::o;19713:366::-;19855:3;19876:67;19940:2;19935:3;19876:67;:::i;:::-;19869:74;;19952:93;20041:3;19952:93;:::i;:::-;20070:2;20065:3;20061:12;20054:19;;19713:366;;;:::o;20085:::-;20227:3;20248:67;20312:2;20307:3;20248:67;:::i;:::-;20241:74;;20324:93;20413:3;20324:93;:::i;:::-;20442:2;20437:3;20433:12;20426:19;;20085:366;;;:::o;20457:::-;20599:3;20620:67;20684:2;20679:3;20620:67;:::i;:::-;20613:74;;20696:93;20785:3;20696:93;:::i;:::-;20814:2;20809:3;20805:12;20798:19;;20457:366;;;:::o;20829:::-;20971:3;20992:67;21056:2;21051:3;20992:67;:::i;:::-;20985:74;;21068:93;21157:3;21068:93;:::i;:::-;21186:2;21181:3;21177:12;21170:19;;20829:366;;;:::o;21201:398::-;21360:3;21381:83;21462:1;21457:3;21381:83;:::i;:::-;21374:90;;21473:93;21562:3;21473:93;:::i;:::-;21591:1;21586:3;21582:11;21575:18;;21201:398;;;:::o;21605:366::-;21747:3;21768:67;21832:2;21827:3;21768:67;:::i;:::-;21761:74;;21844:93;21933:3;21844:93;:::i;:::-;21962:2;21957:3;21953:12;21946:19;;21605:366;;;:::o;21977:::-;22119:3;22140:67;22204:2;22199:3;22140:67;:::i;:::-;22133:74;;22216:93;22305:3;22216:93;:::i;:::-;22334:2;22329:3;22325:12;22318:19;;21977:366;;;:::o;22349:118::-;22436:24;22454:5;22436:24;:::i;:::-;22431:3;22424:37;22349:118;;:::o;22473:695::-;22751:3;22773:92;22861:3;22852:6;22773:92;:::i;:::-;22766:99;;22882:95;22973:3;22964:6;22882:95;:::i;:::-;22875:102;;22994:148;23138:3;22994:148;:::i;:::-;22987:155;;23159:3;23152:10;;22473:695;;;;;:::o;23174:535::-;23404:3;23426:92;23514:3;23505:6;23426:92;:::i;:::-;23419:99;;23535:148;23679:3;23535:148;:::i;:::-;23528:155;;23700:3;23693:10;;23174:535;;;;:::o;23715:::-;23945:3;23967:92;24055:3;24046:6;23967:92;:::i;:::-;23960:99;;24076:148;24220:3;24076:148;:::i;:::-;24069:155;;24241:3;24234:10;;23715:535;;;;:::o;24256:379::-;24440:3;24462:147;24605:3;24462:147;:::i;:::-;24455:154;;24626:3;24619:10;;24256:379;;;:::o;24641:222::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24785:71;24853:1;24842:9;24838:17;24829:6;24785:71;:::i;:::-;24641:222;;;;:::o;24869:640::-;25064:4;25102:3;25091:9;25087:19;25079:27;;25116:71;25184:1;25173:9;25169:17;25160:6;25116:71;:::i;:::-;25197:72;25265:2;25254:9;25250:18;25241:6;25197:72;:::i;:::-;25279;25347:2;25336:9;25332:18;25323:6;25279:72;:::i;:::-;25398:9;25392:4;25388:20;25383:2;25372:9;25368:18;25361:48;25426:76;25497:4;25488:6;25426:76;:::i;:::-;25418:84;;24869:640;;;;;;;:::o;25515:210::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25653:65;25715:1;25704:9;25700:17;25691:6;25653:65;:::i;:::-;25515:210;;;;:::o;25731:218::-;25822:4;25860:2;25849:9;25845:18;25837:26;;25873:69;25939:1;25928:9;25924:17;25915:6;25873:69;:::i;:::-;25731:218;;;;:::o;25955:313::-;26068:4;26106:2;26095:9;26091:18;26083:26;;26155:9;26149:4;26145:20;26141:1;26130:9;26126:17;26119:47;26183:78;26256:4;26247:6;26183:78;:::i;:::-;26175:86;;25955:313;;;;:::o;26274:419::-;26440:4;26478:2;26467:9;26463:18;26455:26;;26527:9;26521:4;26517:20;26513:1;26502:9;26498:17;26491:47;26555:131;26681:4;26555:131;:::i;:::-;26547:139;;26274:419;;;:::o;26699:::-;26865:4;26903:2;26892:9;26888:18;26880:26;;26952:9;26946:4;26942:20;26938:1;26927:9;26923:17;26916:47;26980:131;27106:4;26980:131;:::i;:::-;26972:139;;26699:419;;;:::o;27124:::-;27290:4;27328:2;27317:9;27313:18;27305:26;;27377:9;27371:4;27367:20;27363:1;27352:9;27348:17;27341:47;27405:131;27531:4;27405:131;:::i;:::-;27397:139;;27124:419;;;:::o;27549:::-;27715:4;27753:2;27742:9;27738:18;27730:26;;27802:9;27796:4;27792:20;27788:1;27777:9;27773:17;27766:47;27830:131;27956:4;27830:131;:::i;:::-;27822:139;;27549:419;;;:::o;27974:::-;28140:4;28178:2;28167:9;28163:18;28155:26;;28227:9;28221:4;28217:20;28213:1;28202:9;28198:17;28191:47;28255:131;28381:4;28255:131;:::i;:::-;28247:139;;27974:419;;;:::o;28399:::-;28565:4;28603:2;28592:9;28588:18;28580:26;;28652:9;28646:4;28642:20;28638:1;28627:9;28623:17;28616:47;28680:131;28806:4;28680:131;:::i;:::-;28672:139;;28399:419;;;:::o;28824:::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28824:419;;;:::o;29249:::-;29415:4;29453:2;29442:9;29438:18;29430:26;;29502:9;29496:4;29492:20;29488:1;29477:9;29473:17;29466:47;29530:131;29656:4;29530:131;:::i;:::-;29522:139;;29249:419;;;:::o;29674:::-;29840:4;29878:2;29867:9;29863:18;29855:26;;29927:9;29921:4;29917:20;29913:1;29902:9;29898:17;29891:47;29955:131;30081:4;29955:131;:::i;:::-;29947:139;;29674:419;;;:::o;30099:::-;30265:4;30303:2;30292:9;30288:18;30280:26;;30352:9;30346:4;30342:20;30338:1;30327:9;30323:17;30316:47;30380:131;30506:4;30380:131;:::i;:::-;30372:139;;30099:419;;;:::o;30524:::-;30690:4;30728:2;30717:9;30713:18;30705:26;;30777:9;30771:4;30767:20;30763:1;30752:9;30748:17;30741:47;30805:131;30931:4;30805:131;:::i;:::-;30797:139;;30524:419;;;:::o;30949:::-;31115:4;31153:2;31142:9;31138:18;31130:26;;31202:9;31196:4;31192:20;31188:1;31177:9;31173:17;31166:47;31230:131;31356:4;31230:131;:::i;:::-;31222:139;;30949:419;;;:::o;31374:::-;31540:4;31578:2;31567:9;31563:18;31555:26;;31627:9;31621:4;31617:20;31613:1;31602:9;31598:17;31591:47;31655:131;31781:4;31655:131;:::i;:::-;31647:139;;31374:419;;;:::o;31799:::-;31965:4;32003:2;31992:9;31988:18;31980:26;;32052:9;32046:4;32042:20;32038:1;32027:9;32023:17;32016:47;32080:131;32206:4;32080:131;:::i;:::-;32072:139;;31799:419;;;:::o;32224:::-;32390:4;32428:2;32417:9;32413:18;32405:26;;32477:9;32471:4;32467:20;32463:1;32452:9;32448:17;32441:47;32505:131;32631:4;32505:131;:::i;:::-;32497:139;;32224:419;;;:::o;32649:::-;32815:4;32853:2;32842:9;32838:18;32830:26;;32902:9;32896:4;32892:20;32888:1;32877:9;32873:17;32866:47;32930:131;33056:4;32930:131;:::i;:::-;32922:139;;32649:419;;;:::o;33074:::-;33240:4;33278:2;33267:9;33263:18;33255:26;;33327:9;33321:4;33317:20;33313:1;33302:9;33298:17;33291:47;33355:131;33481:4;33355:131;:::i;:::-;33347:139;;33074:419;;;:::o;33499:::-;33665:4;33703:2;33692:9;33688:18;33680:26;;33752:9;33746:4;33742:20;33738:1;33727:9;33723:17;33716:47;33780:131;33906:4;33780:131;:::i;:::-;33772:139;;33499:419;;;:::o;33924:::-;34090:4;34128:2;34117:9;34113:18;34105:26;;34177:9;34171:4;34167:20;34163:1;34152:9;34148:17;34141:47;34205:131;34331:4;34205:131;:::i;:::-;34197:139;;33924:419;;;:::o;34349:::-;34515:4;34553:2;34542:9;34538:18;34530:26;;34602:9;34596:4;34592:20;34588:1;34577:9;34573:17;34566:47;34630:131;34756:4;34630:131;:::i;:::-;34622:139;;34349:419;;;:::o;34774:::-;34940:4;34978:2;34967:9;34963:18;34955:26;;35027:9;35021:4;35017:20;35013:1;35002:9;34998:17;34991:47;35055:131;35181:4;35055:131;:::i;:::-;35047:139;;34774:419;;;:::o;35199:::-;35365:4;35403:2;35392:9;35388:18;35380:26;;35452:9;35446:4;35442:20;35438:1;35427:9;35423:17;35416:47;35480:131;35606:4;35480:131;:::i;:::-;35472:139;;35199:419;;;:::o;35624:::-;35790:4;35828:2;35817:9;35813:18;35805:26;;35877:9;35871:4;35867:20;35863:1;35852:9;35848:17;35841:47;35905:131;36031:4;35905:131;:::i;:::-;35897:139;;35624:419;;;:::o;36049:::-;36215:4;36253:2;36242:9;36238:18;36230:26;;36302:9;36296:4;36292:20;36288:1;36277:9;36273:17;36266:47;36330:131;36456:4;36330:131;:::i;:::-;36322:139;;36049:419;;;:::o;36474:::-;36640:4;36678:2;36667:9;36663:18;36655:26;;36727:9;36721:4;36717:20;36713:1;36702:9;36698:17;36691:47;36755:131;36881:4;36755:131;:::i;:::-;36747:139;;36474:419;;;:::o;36899:::-;37065:4;37103:2;37092:9;37088:18;37080:26;;37152:9;37146:4;37142:20;37138:1;37127:9;37123:17;37116:47;37180:131;37306:4;37180:131;:::i;:::-;37172:139;;36899:419;;;:::o;37324:222::-;37417:4;37455:2;37444:9;37440:18;37432:26;;37468:71;37536:1;37525:9;37521:17;37512:6;37468:71;:::i;:::-;37324:222;;;;:::o;37552:129::-;37586:6;37613:20;;:::i;:::-;37603:30;;37642:33;37670:4;37662:6;37642:33;:::i;:::-;37552:129;;;:::o;37687:75::-;37720:6;37753:2;37747:9;37737:19;;37687:75;:::o;37768:307::-;37829:4;37919:18;37911:6;37908:30;37905:56;;;37941:18;;:::i;:::-;37905:56;37979:29;38001:6;37979:29;:::i;:::-;37971:37;;38063:4;38057;38053:15;38045:23;;37768:307;;;:::o;38081:308::-;38143:4;38233:18;38225:6;38222:30;38219:56;;;38255:18;;:::i;:::-;38219:56;38293:29;38315:6;38293:29;:::i;:::-;38285:37;;38377:4;38371;38367:15;38359:23;;38081:308;;;:::o;38395:141::-;38444:4;38467:3;38459:11;;38490:3;38487:1;38480:14;38524:4;38521:1;38511:18;38503:26;;38395:141;;;:::o;38542:98::-;38593:6;38627:5;38621:12;38611:22;;38542:98;;;:::o;38646:99::-;38698:6;38732:5;38726:12;38716:22;;38646:99;;;:::o;38751:168::-;38834:11;38868:6;38863:3;38856:19;38908:4;38903:3;38899:14;38884:29;;38751:168;;;;:::o;38925:147::-;39026:11;39063:3;39048:18;;38925:147;;;;:::o;39078:169::-;39162:11;39196:6;39191:3;39184:19;39236:4;39231:3;39227:14;39212:29;;39078:169;;;;:::o;39253:148::-;39355:11;39392:3;39377:18;;39253:148;;;;:::o;39407:305::-;39447:3;39466:20;39484:1;39466:20;:::i;:::-;39461:25;;39500:20;39518:1;39500:20;:::i;:::-;39495:25;;39654:1;39586:66;39582:74;39579:1;39576:81;39573:107;;;39660:18;;:::i;:::-;39573:107;39704:1;39701;39697:9;39690:16;;39407:305;;;;:::o;39718:185::-;39758:1;39775:20;39793:1;39775:20;:::i;:::-;39770:25;;39809:20;39827:1;39809:20;:::i;:::-;39804:25;;39848:1;39838:35;;39853:18;;:::i;:::-;39838:35;39895:1;39892;39888:9;39883:14;;39718:185;;;;:::o;39909:348::-;39949:7;39972:20;39990:1;39972:20;:::i;:::-;39967:25;;40006:20;40024:1;40006:20;:::i;:::-;40001:25;;40194:1;40126:66;40122:74;40119:1;40116:81;40111:1;40104:9;40097:17;40093:105;40090:131;;;40201:18;;:::i;:::-;40090:131;40249:1;40246;40242:9;40231:20;;39909:348;;;;:::o;40263:191::-;40303:4;40323:20;40341:1;40323:20;:::i;:::-;40318:25;;40357:20;40375:1;40357:20;:::i;:::-;40352:25;;40396:1;40393;40390:8;40387:34;;;40401:18;;:::i;:::-;40387:34;40446:1;40443;40439:9;40431:17;;40263:191;;;;:::o;40460:96::-;40497:7;40526:24;40544:5;40526:24;:::i;:::-;40515:35;;40460:96;;;:::o;40562:90::-;40596:7;40639:5;40632:13;40625:21;40614:32;;40562:90;;;:::o;40658:149::-;40694:7;40734:66;40727:5;40723:78;40712:89;;40658:149;;;:::o;40813:126::-;40850:7;40890:42;40883:5;40879:54;40868:65;;40813:126;;;:::o;40945:77::-;40982:7;41011:5;41000:16;;40945:77;;;:::o;41028:154::-;41112:6;41107:3;41102;41089:30;41174:1;41165:6;41160:3;41156:16;41149:27;41028:154;;;:::o;41188:307::-;41256:1;41266:113;41280:6;41277:1;41274:13;41266:113;;;41365:1;41360:3;41356:11;41350:18;41346:1;41341:3;41337:11;41330:39;41302:2;41299:1;41295:10;41290:15;;41266:113;;;41397:6;41394:1;41391:13;41388:101;;;41477:1;41468:6;41463:3;41459:16;41452:27;41388:101;41237:258;41188:307;;;:::o;41501:320::-;41545:6;41582:1;41576:4;41572:12;41562:22;;41629:1;41623:4;41619:12;41650:18;41640:81;;41706:4;41698:6;41694:17;41684:27;;41640:81;41768:2;41760:6;41757:14;41737:18;41734:38;41731:84;;;41787:18;;:::i;:::-;41731:84;41552:269;41501:320;;;:::o;41827:281::-;41910:27;41932:4;41910:27;:::i;:::-;41902:6;41898:40;42040:6;42028:10;42025:22;42004:18;41992:10;41989:34;41986:62;41983:88;;;42051:18;;:::i;:::-;41983:88;42091:10;42087:2;42080:22;41870:238;41827:281;;:::o;42114:233::-;42153:3;42176:24;42194:5;42176:24;:::i;:::-;42167:33;;42222:66;42215:5;42212:77;42209:103;;;42292:18;;:::i;:::-;42209:103;42339:1;42332:5;42328:13;42321:20;;42114:233;;;:::o;42353:176::-;42385:1;42402:20;42420:1;42402:20;:::i;:::-;42397:25;;42436:20;42454:1;42436:20;:::i;:::-;42431:25;;42475:1;42465:35;;42480:18;;:::i;:::-;42465:35;42521:1;42518;42514:9;42509:14;;42353:176;;;;:::o;42535:180::-;42583:77;42580:1;42573:88;42680:4;42677:1;42670:15;42704:4;42701:1;42694:15;42721:180;42769:77;42766:1;42759:88;42866:4;42863:1;42856:15;42890:4;42887:1;42880:15;42907:180;42955:77;42952:1;42945:88;43052:4;43049:1;43042:15;43076:4;43073:1;43066:15;43093:180;43141:77;43138:1;43131:88;43238:4;43235:1;43228:15;43262:4;43259:1;43252:15;43279:180;43327:77;43324:1;43317:88;43424:4;43421:1;43414:15;43448:4;43445:1;43438:15;43465:117;43574:1;43571;43564:12;43588:117;43697:1;43694;43687:12;43711:117;43820:1;43817;43810:12;43834:117;43943:1;43940;43933:12;43957:117;44066:1;44063;44056:12;44080:117;44189:1;44186;44179:12;44203:102;44244:6;44295:2;44291:7;44286:2;44279:5;44275:14;44271:28;44261:38;;44203:102;;;:::o;44311:166::-;44451:18;44447:1;44439:6;44435:14;44428:42;44311:166;:::o;44483:169::-;44623:21;44619:1;44611:6;44607:14;44600:45;44483:169;:::o;44658:163::-;44798:15;44794:1;44786:6;44782:14;44775:39;44658:163;:::o;44827:237::-;44967:34;44963:1;44955:6;44951:14;44944:58;45036:20;45031:2;45023:6;45019:15;45012:45;44827:237;:::o;45070:225::-;45210:34;45206:1;45198:6;45194:14;45187:58;45279:8;45274:2;45266:6;45262:15;45255:33;45070:225;:::o;45301:178::-;45441:30;45437:1;45429:6;45425:14;45418:54;45301:178;:::o;45485:174::-;45625:26;45621:1;45613:6;45609:14;45602:50;45485:174;:::o;45665:168::-;45805:20;45801:1;45793:6;45789:14;45782:44;45665:168;:::o;45839:223::-;45979:34;45975:1;45967:6;45963:14;45956:58;46048:6;46043:2;46035:6;46031:15;46024:31;45839:223;:::o;46068:175::-;46208:27;46204:1;46196:6;46192:14;46185:51;46068:175;:::o;46249:162::-;46389:14;46385:1;46377:6;46373:14;46366:38;46249:162;:::o;46417:169::-;46557:21;46553:1;46545:6;46541:14;46534:45;46417:169;:::o;46592:231::-;46732:34;46728:1;46720:6;46716:14;46709:58;46801:14;46796:2;46788:6;46784:15;46777:39;46592:231;:::o;46829:158::-;46969:10;46965:1;46957:6;46953:14;46946:34;46829:158;:::o;46993:164::-;47133:16;47129:1;47121:6;47117:14;47110:40;46993:164;:::o;47163:223::-;47303:34;47299:1;47291:6;47287:14;47280:58;47372:6;47367:2;47359:6;47355:15;47348:31;47163:223;:::o;47392:243::-;47532:34;47528:1;47520:6;47516:14;47509:58;47601:26;47596:2;47588:6;47584:15;47577:51;47392:243;:::o;47641:229::-;47781:34;47777:1;47769:6;47765:14;47758:58;47850:12;47845:2;47837:6;47833:15;47826:37;47641:229;:::o;47876:228::-;48016:34;48012:1;48004:6;48000:14;47993:58;48085:11;48080:2;48072:6;48068:15;48061:36;47876:228;:::o;48110:167::-;48250:19;48246:1;48238:6;48234:14;48227:43;48110:167;:::o;48283:182::-;48423:34;48419:1;48411:6;48407:14;48400:58;48283:182;:::o;48471:231::-;48611:34;48607:1;48599:6;48595:14;48588:58;48680:14;48675:2;48667:6;48663:15;48656:39;48471:231;:::o;48708:155::-;48848:7;48844:1;48836:6;48832:14;48825:31;48708:155;:::o;48869:182::-;49009:34;49005:1;48997:6;48993:14;48986:58;48869:182;:::o;49057:228::-;49197:34;49193:1;49185:6;49181:14;49174:58;49266:11;49261:2;49253:6;49249:15;49242:36;49057:228;:::o;49291:234::-;49431:34;49427:1;49419:6;49415:14;49408:58;49500:17;49495:2;49487:6;49483:15;49476:42;49291:234;:::o;49531:220::-;49671:34;49667:1;49659:6;49655:14;49648:58;49740:3;49735:2;49727:6;49723:15;49716:28;49531:220;:::o;49757:114::-;;:::o;49877:236::-;50017:34;50013:1;50005:6;50001:14;49994:58;50086:19;50081:2;50073:6;50069:15;50062:44;49877:236;:::o;50119:169::-;50259:21;50255:1;50247:6;50243:14;50236:45;50119:169;:::o;50294:122::-;50367:24;50385:5;50367:24;:::i;:::-;50360:5;50357:35;50347:63;;50406:1;50403;50396:12;50347:63;50294:122;:::o;50422:116::-;50492:21;50507:5;50492:21;:::i;:::-;50485:5;50482:32;50472:60;;50528:1;50525;50518:12;50472:60;50422:116;:::o;50544:120::-;50616:23;50633:5;50616:23;:::i;:::-;50609:5;50606:34;50596:62;;50654:1;50651;50644:12;50596:62;50544:120;:::o;50670:122::-;50743:24;50761:5;50743:24;:::i;:::-;50736:5;50733:35;50723:63;;50782:1;50779;50772:12;50723:63;50670:122;:::o

Swarm Source

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