ETH Price: $3,713.02 (+4.72%)

Token

ERC-20: Paranormies (NORMIE)
 

Overview

Max Total Supply

4,200 NORMIE

Holders

1,487

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
montivault.eth
Balance
9 NORMIE
0xe092d6e79c05f2c412a52dbab0724ea39ce47c0f
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:
Normies

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-10
*/

// 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, "Addr: cant send val, rcpt revert");
    }

    /**
     * @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, "Addr: low-level call value fail");
    }

    /**
     * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail");
    }

    /**
     * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call 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 0x 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 reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

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

contract Normies 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 public whitelistActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public whiteListMax;
    uint256 public WLprice;
    
    mapping(address => uint256) private _whitelist;

    //Distribution Wallets
    address Founder =       payable(0xD61344DBd5321C7583B1166705f993Ff126DACf8); //85%
    address Developer =     payable(0x2E07cd18E675c921E8c523E36D79788734E94f88); //5%
    address Consulting =    payable(0xe9A36d2d6820539ec2F3b4ddC68Fd337BF8Ce293); //5%
    address Community =     payable(0x9f4A549dD4415968f0279dB9Ae43AFfD7354CFDE); //5%

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Paranormies";
        _symbol = "NORMIE";
        _baseURI = "https://paranormies.io/metadata/";
        _hideTokens = true;
        

        totalTokens = 9700;
        price = 69 * (10 ** 15); // Replace leading value with price in finney  0.069E
        WLprice = 69 * (10 ** 15);
        maxPerTxn = 20;
        whiteListMax = 4;
    }

    //@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 == Normies.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 Funds = address(this).balance;
        bool success;

        uint256 sendAmount = (Funds * 85) / 100;
        (success, ) = Founder.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (Funds * 5) / 100;
        (success, ) = Developer.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful"); 
        
        sendAmount = (Funds * 5) / 100;
        (success, ) = Consulting.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (Funds * 5) / 100;
        (success, ) = Community.call{value: sendAmount}("");
        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 singleAirdrop(address _to) external onlyOwner {
        require(numberMinted <= totalTokens, "Cannot Fill Order");

        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch

        numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        _safeMint(_to, mintSeedValue);
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function mintWL(uint256 qty) external payable reentryLock {
        require(whitelistActive, "WL not open");
        require(msg.value == qty * WLprice, "WL: Wrong Eth Amount");
        require((qty + numberMinted) <= totalTokens, "WL: Not enough avaialability");
        require(_whitelist[_msgSender()] >= qty, "WL: unauth amount");

        _whitelist[_msgSender()] -= qty;
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch

        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }

    }

    function mint(uint256 qty) external payable reentryLock {
        require(mintActive, "mint not open");
        require(msg.value >= qty * price, "Mint: Insufficient Funds");
        require(qty <= maxPerTxn, "Mint: Above Trxn Threshold!");
        require((qty + numberMinted) <= totalTokens, "Mint: Not enough avaialability");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch

        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function whiteList(address account) external onlyOwner {
        _whitelist[account] = whiteListMax;
    }
    
    function whiteListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist[accounts[i]] = whiteListMax;
        }
    }

    function checkWhitelist(address testAddress) external view returns (uint256) {
        return _whitelist[testAddress];
    }
    
    function setMaxMintThreshold(uint256 maxMints) external onlyOwner {
        maxPerTxn = maxMints;
    }
    
    function setWhitelistThreshold(uint whitelisterBuyLimit) external onlyOwner {
        whiteListMax = whitelisterBuyLimit;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }

    function activateWL() public onlyOwner {
        whitelistActive = true;
    }
    
    function deactivateWL() public onlyOwner {
        whitelistActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    function setWhitelistPrice(uint256 newPrice) public onlyOwner {
        WLprice = 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: bal qry for 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: own query nonexist tkn");
        return owner;
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        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: txfr !owner/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: txfr !owner/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), "txfr to non ERC721Reciever");
    }

    /**
     * @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: op query nonexistent tkn");
        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),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @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: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 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) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } 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 0x0 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"));
        }
        
        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":"WLprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","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":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","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":"deactivateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintWL","outputs":[],"stateMutability":"payable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"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":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","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":"uint256","name":"newPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"whitelisterBuyLimit","type":"uint256"}],"name":"setWhitelistThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"singleAirdrop","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":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff02191690831515021790555073d61344dbd5321c7583b1166705f993ff126dacf8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732e07cd18e675c921e8c523e36d79788734e94f88601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e9a36d2d6820539ec2f3b4ddc68fd337bf8ce293601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739f4a549dd4415968f0279db9ae43affd7354cfde601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200017f57600080fd5b50620001a062000194620002e060201b60201c565b620002e860201b60201c565b6040518060400160405280600b81526020017f506172616e6f726d69657300000000000000000000000000000000000000000081525060019080519060200190620001ed929190620003ac565b506040518060400160405280600681526020017f4e4f524d49450000000000000000000000000000000000000000000000000000815250600290805190602001906200023b929190620003ac565b506040518060400160405280602081526020017f68747470733a2f2f706172616e6f726d6965732e696f2f6d657461646174612f8152506003908051906020019062000289929190620003ac565b506001600860026101000a81548160ff0219169083151502179055506125e4600a8190555066f523226980800060098190555066f5232269808000600e819055506014600c819055506004600d81905550620004c1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003ba906200045c565b90600052602060002090601f016020900481019282620003de57600085556200042a565b82601f10620003f957805160ff19168380011785556200042a565b828001600101855582156200042a579182015b82811115620004295782518255916020019190600101906200040c565b5b5090506200043991906200043d565b5090565b5b80821115620004585760008160009055506001016200043e565b5090565b600060028204905060018216806200047557607f821691505b602082108114156200048c576200048b62000492565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61548d80620004d16000396000f3fe6080604052600436106102cc5760003560e01c806370a0823111610175578063b0b92263116100dc578063c91c046211610095578063e8a3d4851161006f578063e8a3d48514610a2d578063e985e9c514610a58578063f2fde38b14610a95578063f8b2cb4f14610abe576102d3565b8063c91c0462146109c2578063d78c06fa146109d9578063e397950814610a02576102d3565b8063b0b92263146108d7578063b46dc27814610900578063b5b3e21414610929578063b88d4fde14610940578063ba419de014610969578063c87b56dd14610985576102d3565b806391b7f5ed1161012e57806391b7f5ed146107ea57806395d89b411461081357806397d888681461083e578063a035b1fe14610867578063a0712d6814610892578063a22cb465146108ae576102d3565b806370a0823114610700578063715018a61461073d578063717d57d3146107545780637e1c0c091461077d578063877b8644146107a85780638da5cb5b146107bf576102d3565b806329869c941161023457806342842e0e116101ed578063484b973c116101c7578063484b973c1461064657806349a772b51461066f57806355f804b31461069a5780636352211e146106c3576102d3565b806342842e0e146105cb57806342966c68146105f457806343d675651461061d576102d3565b806329869c941461051b5780632e56f71e14610532578063372c12b1146105495780633ba5939d146105725780633cb51994146105895780633ccfd60b146105b4576102d3565b8063095ea7b311610286578063095ea7b3146103f9578063150b7a021461042257806318160ddd1461045f5780631950c2181461048a57806323b872dd146104c757806325fd90f3146104f0576102d3565b8062b6849f146102d557806301ffc9a7146102fe57806302ce58131461033b57806306fdde03146103665780630743b80814610391578063081812fc146103bc576102d3565b366102d357005b005b3480156102e157600080fd5b506102fc60048036038101906102f79190613e04565b610afb565b005b34801561030a57600080fd5b5061032560048036038101906103209190613e4d565b610c92565b60405161033291906145ed565b60405180910390f35b34801561034757600080fd5b50610350610e1b565b60405161035d91906145ed565b60405180910390f35b34801561037257600080fd5b5061037b610e2e565b6040516103889190614623565b60405180910390f35b34801561039d57600080fd5b506103a6610ec0565b6040516103b391906149e5565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613ef0565b610ec6565b6040516103f09190614586565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613dc4565b610f4b565b005b34801561042e57600080fd5b5061044960048036038101906104449190613c79565b611055565b6040516104569190614608565b60405180910390f35b34801561046b57600080fd5b5061047461106a565b60405161048191906149e5565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613bb9565b611074565b6040516104be91906149e5565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613c26565b6110bd565b005b3480156104fc57600080fd5b50610505611116565b60405161051291906145ed565b60405180910390f35b34801561052757600080fd5b50610530611129565b005b34801561053e57600080fd5b506105476111c2565b005b34801561055557600080fd5b50610570600480360381019061056b9190613bb9565b61125b565b005b34801561057e57600080fd5b50610587611320565b005b34801561059557600080fd5b5061059e6113b9565b6040516105ab91906149e5565b60405180910390f35b3480156105c057600080fd5b506105c96113bf565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190613c26565b6117ec565b005b34801561060057600080fd5b5061061b60048036038101906106169190613ef0565b61180c565b005b34801561062957600080fd5b50610644600480360381019061063f9190613e04565b61185f565b005b34801561065257600080fd5b5061066d60048036038101906106689190613dc4565b61195e565b005b34801561067b57600080fd5b50610684611ad5565b60405161069191906149e5565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613ea7565b611adb565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613ef0565b611b71565b6040516106f79190614586565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613bb9565b611c23565b60405161073491906149e5565b60405180910390f35b34801561074957600080fd5b50610752611cdb565b005b34801561076057600080fd5b5061077b60048036038101906107769190613ef0565b611d63565b005b34801561078957600080fd5b50610792611de9565b60405161079f91906149e5565b60405180910390f35b3480156107b457600080fd5b506107bd611def565b005b3480156107cb57600080fd5b506107d4611e88565b6040516107e19190614586565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190613ef0565b611eb1565b005b34801561081f57600080fd5b50610828611f37565b6040516108359190614623565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613ef0565b611fc9565b005b34801561087357600080fd5b5061087c61204f565b60405161088991906149e5565b60405180910390f35b6108ac60048036038101906108a79190613ef0565b612055565b005b3480156108ba57600080fd5b506108d560048036038101906108d09190613d84565b61226e565b005b3480156108e357600080fd5b506108fe60048036038101906108f99190613ef0565b6123da565b005b34801561090c57600080fd5b5061092760048036038101906109229190613bb9565b612460565b005b34801561093557600080fd5b5061093e612550565b005b34801561094c57600080fd5b5061096760048036038101906109629190613d01565b6125e9565b005b610983600480360381019061097e9190613ef0565b612644565b005b34801561099157600080fd5b506109ac60048036038101906109a79190613ef0565b6128fd565b6040516109b99190614623565b60405180910390f35b3480156109ce57600080fd5b506109d76129bd565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613ef0565b612a56565b005b348015610a0e57600080fd5b50610a17612adc565b604051610a2491906149e5565b60405180910390f35b348015610a3957600080fd5b50610a42612ae2565b604051610a4f9190614623565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613be6565b612b0a565b604051610a8c91906145ed565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613bb9565b612b9e565b005b348015610aca57600080fd5b50610ae56004803603810190610ae09190613bb9565b612c96565b604051610af291906149e5565b60405180910390f35b610b03612cf1565b73ffffffffffffffffffffffffffffffffffffffff16610b21611e88565b73ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e906148e5565b60405180910390fd5b600081519050600b5481600b54610b8e9190614b16565b11610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906149c5565b60405180910390fd5b600a5481600b54610bdf9190614b16565b1115610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790614805565b60405180910390fd5b6000600b54905060005b82811015610c8c57610c61848281518110610c4857610c47614e4b565b5b60200260200101518284610c5c9190614b16565b612cf9565b600b6000815480929190610c7490614d44565b91905055508080610c8490614d44565b915050610c2a565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dc557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e14575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610e3d90614ce1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990614ce1565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b5050505050905090565b600d5481565b6000610ed182612d17565b610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906146e5565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f5682611b71565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90614705565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061100757506110068133612b0a565b5b611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614825565b60405180910390fd5b6110508383612d83565b505050565b600063150b7a0260e01b905095945050505050565b6000600b54905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c73382612e3c565b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90614925565b60405180910390fd5b611111838383612f1a565b505050565b600860009054906101000a900460ff1681565b611131612cf1565b73ffffffffffffffffffffffffffffffffffffffff1661114f611e88565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906148e5565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6111ca612cf1565b73ffffffffffffffffffffffffffffffffffffffff166111e8611e88565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906148e5565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611263612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611281611e88565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906148e5565b60405180910390fd5b600d54600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b611328612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611346611e88565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611393906148e5565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b600c5481565b6113c7612cf1565b73ffffffffffffffffffffffffffffffffffffffff166113e5611e88565b73ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906148e5565b60405180910390fd5b600047905060008060646055846114529190614b9d565b61145c9190614b6c565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516114a490614571565b60006040518083038185875af1925050503d80600081146114e1576040519150601f19603f3d011682016040523d82523d6000602084013e6114e6565b606091505b5050809250508161152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614745565b60405180910390fd5b606460058461153b9190614b9d565b6115459190614b6c565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161158d90614571565b60006040518083038185875af1925050503d80600081146115ca576040519150601f19603f3d011682016040523d82523d6000602084013e6115cf565b606091505b50508092505081611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614745565b60405180910390fd5b60646005846116249190614b9d565b61162e9190614b6c565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161167690614571565b60006040518083038185875af1925050503d80600081146116b3576040519150601f19603f3d011682016040523d82523d6000602084013e6116b8565b606091505b505080925050816116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614745565b60405180910390fd5b606460058461170d9190614b9d565b6117179190614b6c565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161175f90614571565b60006040518083038185875af1925050503d806000811461179c576040519150601f19603f3d011682016040523d82523d6000602084013e6117a1565b606091505b505080925050816117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614745565b60405180910390fd5b505050565b611807838383604051806020016040528060008152506125e9565b505050565b61181581611b71565b73ffffffffffffffffffffffffffffffffffffffff16611833612cf1565b73ffffffffffffffffffffffffffffffffffffffff161461185357600080fd5b61185c81613176565b50565b611867612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611885611e88565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d2906148e5565b60405180910390fd5b60005b815181101561195a57600d54600f600084848151811061190157611900614e4b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061195290614d44565b9150506118de565b5050565b611966612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611984611e88565b73ffffffffffffffffffffffffffffffffffffffff16146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1906148e5565b60405180910390fd5b600b5481600b546119eb9190614b16565b11611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a22906149c5565b60405180910390fd5b600a5481600b54611a3c9190614b16565b1115611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490614805565b60405180910390fd5b6000600b54905060005b82811015611acf57611aa4848284611a9f9190614b16565b612cf9565b600b6000815480929190611ab790614d44565b91905055508080611ac790614d44565b915050611a87565b50505050565b600b5481565b611ae3612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611b01611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e906148e5565b60405180910390fd5b8060039080519060200190611b6d9291906138d9565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906147c5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90614885565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ce3612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611d01611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e906148e5565b60405180910390fd5b611d616000613287565b565b611d6b612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611d89611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd6906148e5565b60405180910390fd5b80600e8190555050565b600a5481565b611df7612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611e15611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906148e5565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eb9612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f24906148e5565b60405180910390fd5b8060098190555050565b606060028054611f4690614ce1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7290614ce1565b8015611fbf5780601f10611f9457610100808354040283529160200191611fbf565b820191906000526020600020905b815481529060010190602001808311611fa257829003601f168201915b5050505050905090565b611fd1612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611fef611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906148e5565b60405180910390fd5b80600d8190555050565b60095481565b600060149054906101000a900460ff16156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614845565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff1661210f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612106906147a5565b60405180910390fd5b6009548161211d9190614b9d565b34101561215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614905565b60405180910390fd5b600c548111156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90614985565b60405180910390fd5b600a54600b54826121b59190614b16565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614665565b60405180910390fd5b6000600b54905060005b8281101561224f57612224612213612cf1565b828461221f9190614b16565b612cf9565b600b600081548092919061223790614d44565b9190505550808061224790614d44565b915050612200565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490614785565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ce91906145ed565b60405180910390a35050565b6123e2612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612400611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148e5565b60405180910390fd5b80600a8190555050565b612468612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612486611e88565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906148e5565b60405180910390fd5b600a54600b541115612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614645565b60405180910390fd5b6000600b549050600b600081548092919061253d90614d44565b919050555061254c8282612cf9565b5050565b612558612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612576611e88565b73ffffffffffffffffffffffffffffffffffffffff16146125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906148e5565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b6125f33383612e3c565b612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614925565b60405180910390fd5b61263e8484848461334b565b50505050565b600060149054906101000a900460ff1615612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90614845565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860019054906101000a900460ff166126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f5906148a5565b60405180910390fd5b600e548161270c9190614b9d565b341461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614725565b60405180910390fd5b600a54600b548261275e9190614b16565b111561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614965565b60405180910390fd5b80600f60006127ac612cf1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f90614945565b60405180910390fd5b80600f6000612835612cf1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287e9190614bf7565b925050819055506000600b54905060005b828110156128de576128b36128a2612cf1565b82846128ae9190614b16565b612cf9565b600b60008154809291906128c690614d44565b919050555080806128d690614d44565b91505061288f565b505060008060146101000a81548160ff02191690831515021790555050565b606061290882612d17565b612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293e906149a5565b60405180910390fd5b6060600860029054906101000a900460ff1615612986576003604051602001612970919061454f565b60405160208183030381529060405290506129b4565b6003612991846133a7565b6040516020016129a29291906144fe565b60405160208183030381529060405290505b80915050919050565b6129c5612cf1565b73ffffffffffffffffffffffffffffffffffffffff166129e3611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a30906148e5565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b612a5e612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612a7c611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac9906148e5565b60405180910390fd5b80600c8190555050565b600e5481565b60606003604051602001612af6919061452d565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612ba6612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612bc4611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c11906148e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190614765565b60405180910390fd5b612c9381613287565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cea9190614b6c565b9050919050565b600033905090565b612d13828260405180602001604052806000815250613508565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612df683611b71565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e4782612d17565b612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614685565b60405180910390fd5b6000612e9183611b71565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f0057508373ffffffffffffffffffffffffffffffffffffffff16612ee884610ec6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f115750612f108185612b0a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f3a82611b71565b73ffffffffffffffffffffffffffffffffffffffff1614612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f87906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff7906146a5565b60405180910390fd5b61300b838383613563565b613016600082612d83565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130669190614bf7565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130bd9190614b16565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061318182611b71565b905061318f81600084613563565b61319a600083612d83565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ea9190614bf7565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613356848484612f1a565b61336284848484613568565b6133a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613398906147e5565b60405180910390fd5b50505050565b606060008214156133ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613503565b600082905060005b6000821461342157808061340a90614d44565b915050600a8261341a9190614b6c565b91506133f7565b60008167ffffffffffffffff81111561343d5761343c614e7a565b5b6040519080825280601f01601f19166020018201604052801561346f5781602001600182028036833780820191505090505b5090505b600085146134fc576001826134889190614bf7565b9150600a856134979190614d8d565b60306134a39190614b16565b60f81b8183815181106134b9576134b8614e4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134f59190614b6c565b9450613473565b8093505050505b919050565b61351283836136f8565b61351f6000848484613568565b61355e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613555906147e5565b60405180910390fd5b505050565b505050565b60006135898473ffffffffffffffffffffffffffffffffffffffff166138c6565b156136eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016135cd94939291906145a1565b602060405180830381600087803b1580156135e757600080fd5b505af192505050801561361857506040513d601f19601f820116820180604052508101906136159190613e7a565b60015b61369b573d8060008114613648576040519150601f19603f3d011682016040523d82523d6000602084013e61364d565b606091505b50600081511415613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368a906147e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506136f0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375f90614865565b60405180910390fd5b61377181612d17565b156137b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a8906146c5565b60405180910390fd5b6137bd60008383613563565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380d9190614b16565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546138e590614ce1565b90600052602060002090601f016020900481019282613907576000855561394e565b82601f1061392057805160ff191683800117855561394e565b8280016001018555821561394e579182015b8281111561394d578251825591602001919060010190613932565b5b50905061395b919061395f565b5090565b5b80821115613978576000816000905550600101613960565b5090565b600061398f61398a84614a25565b614a00565b905080838252602082019050828560208602820111156139b2576139b1614eb3565b5b60005b858110156139e257816139c88882613a70565b8452602084019350602083019250506001810190506139b5565b5050509392505050565b60006139ff6139fa84614a51565b614a00565b905082815260208101848484011115613a1b57613a1a614eb8565b5b613a26848285614c9f565b509392505050565b6000613a41613a3c84614a82565b614a00565b905082815260208101848484011115613a5d57613a5c614eb8565b5b613a68848285614c9f565b509392505050565b600081359050613a7f816153fb565b92915050565b600082601f830112613a9a57613a99614eae565b5b8135613aaa84826020860161397c565b91505092915050565b600081359050613ac281615412565b92915050565b600081359050613ad781615429565b92915050565b600081519050613aec81615429565b92915050565b60008083601f840112613b0857613b07614eae565b5b8235905067ffffffffffffffff811115613b2557613b24614ea9565b5b602083019150836001820283011115613b4157613b40614eb3565b5b9250929050565b600082601f830112613b5d57613b5c614eae565b5b8135613b6d8482602086016139ec565b91505092915050565b600082601f830112613b8b57613b8a614eae565b5b8135613b9b848260208601613a2e565b91505092915050565b600081359050613bb381615440565b92915050565b600060208284031215613bcf57613bce614ec2565b5b6000613bdd84828501613a70565b91505092915050565b60008060408385031215613bfd57613bfc614ec2565b5b6000613c0b85828601613a70565b9250506020613c1c85828601613a70565b9150509250929050565b600080600060608486031215613c3f57613c3e614ec2565b5b6000613c4d86828701613a70565b9350506020613c5e86828701613a70565b9250506040613c6f86828701613ba4565b9150509250925092565b600080600080600060808688031215613c9557613c94614ec2565b5b6000613ca388828901613a70565b9550506020613cb488828901613a70565b9450506040613cc588828901613ba4565b935050606086013567ffffffffffffffff811115613ce657613ce5614ebd565b5b613cf288828901613af2565b92509250509295509295909350565b60008060008060808587031215613d1b57613d1a614ec2565b5b6000613d2987828801613a70565b9450506020613d3a87828801613a70565b9350506040613d4b87828801613ba4565b925050606085013567ffffffffffffffff811115613d6c57613d6b614ebd565b5b613d7887828801613b48565b91505092959194509250565b60008060408385031215613d9b57613d9a614ec2565b5b6000613da985828601613a70565b9250506020613dba85828601613ab3565b9150509250929050565b60008060408385031215613ddb57613dda614ec2565b5b6000613de985828601613a70565b9250506020613dfa85828601613ba4565b9150509250929050565b600060208284031215613e1a57613e19614ec2565b5b600082013567ffffffffffffffff811115613e3857613e37614ebd565b5b613e4484828501613a85565b91505092915050565b600060208284031215613e6357613e62614ec2565b5b6000613e7184828501613ac8565b91505092915050565b600060208284031215613e9057613e8f614ec2565b5b6000613e9e84828501613add565b91505092915050565b600060208284031215613ebd57613ebc614ec2565b5b600082013567ffffffffffffffff811115613edb57613eda614ebd565b5b613ee784828501613b76565b91505092915050565b600060208284031215613f0657613f05614ec2565b5b6000613f1484828501613ba4565b91505092915050565b613f2681614c2b565b82525050565b613f3581614c3d565b82525050565b613f4481614c49565b82525050565b6000613f5582614ac8565b613f5f8185614ade565b9350613f6f818560208601614cae565b613f7881614ec7565b840191505092915050565b6000613f8e82614ad3565b613f988185614afa565b9350613fa8818560208601614cae565b613fb181614ec7565b840191505092915050565b6000613fc782614ad3565b613fd18185614b0b565b9350613fe1818560208601614cae565b80840191505092915050565b60008154613ffa81614ce1565b6140048186614b0b565b9450600182166000811461401f576001811461403057614063565b60ff19831686528186019350614063565b61403985614ab3565b60005b8381101561405b5781548189015260018201915060208101905061403c565b838801955050505b50505092915050565b6000614079601183614afa565b915061408482614ed8565b602082019050919050565b600061409c601e83614afa565b91506140a782614f01565b602082019050919050565b60006140bf602083614afa565b91506140ca82614f2a565b602082019050919050565b60006140e2600d83614b0b565b91506140ed82614f53565b600d82019050919050565b6000614105601b83614afa565b915061411082614f7c565b602082019050919050565b6000614128601c83614afa565b915061413382614fa5565b602082019050919050565b600061414b602083614afa565b915061415682614fce565b602082019050919050565b600061416e601e83614afa565b915061417982614ff7565b602082019050919050565b6000614191601483614afa565b915061419c82615020565b602082019050919050565b60006141b4601883614afa565b91506141bf82615049565b602082019050919050565b60006141d7602083614afa565b91506141e282615072565b602082019050919050565b60006141fa601983614afa565b91506142058261509b565b602082019050919050565b600061421d600c83614b0b565b9150614228826150c4565b600c82019050919050565b6000614240600d83614afa565b915061424b826150ed565b602082019050919050565b6000614263601e83614afa565b915061426e82615116565b602082019050919050565b6000614286601a83614afa565b91506142918261513f565b602082019050919050565b60006142a9601183614afa565b91506142b482615168565b602082019050919050565b60006142cc601f83614afa565b91506142d782615191565b602082019050919050565b60006142ef601f83614afa565b91506142fa826151ba565b602082019050919050565b6000614312602083614afa565b915061431d826151e3565b602082019050919050565b6000614335602083614afa565b91506143408261520c565b602082019050919050565b6000614358600b83614afa565b915061436382615235565b602082019050919050565b600061437b600583614b0b565b91506143868261525e565b600582019050919050565b600061439e601c83614afa565b91506143a982615287565b602082019050919050565b60006143c1602083614afa565b91506143cc826152b0565b602082019050919050565b60006143e4601883614afa565b91506143ef826152d9565b602082019050919050565b6000614407601c83614afa565b915061441282615302565b602082019050919050565b600061442a601183614afa565b91506144358261532b565b602082019050919050565b600061444d601c83614afa565b915061445882615354565b602082019050919050565b6000614470601b83614afa565b915061447b8261537d565b602082019050919050565b6000614493600083614aef565b915061449e826153a6565b600082019050919050565b60006144b6601d83614afa565b91506144c1826153a9565b602082019050919050565b60006144d9601383614afa565b91506144e4826153d2565b602082019050919050565b6144f881614c95565b82525050565b600061450a8285613fed565b91506145168284613fbc565b91506145218261436e565b91508190509392505050565b60006145398284613fed565b9150614544826140d5565b915081905092915050565b600061455b8284613fed565b915061456682614210565b915081905092915050565b600061457c82614486565b9150819050919050565b600060208201905061459b6000830184613f1d565b92915050565b60006080820190506145b66000830187613f1d565b6145c36020830186613f1d565b6145d060408301856144ef565b81810360608301526145e28184613f4a565b905095945050505050565b60006020820190506146026000830184613f2c565b92915050565b600060208201905061461d6000830184613f3b565b92915050565b6000602082019050818103600083015261463d8184613f83565b905092915050565b6000602082019050818103600083015261465e8161406c565b9050919050565b6000602082019050818103600083015261467e8161408f565b9050919050565b6000602082019050818103600083015261469e816140b2565b9050919050565b600060208201905081810360008301526146be816140f8565b9050919050565b600060208201905081810360008301526146de8161411b565b9050919050565b600060208201905081810360008301526146fe8161413e565b9050919050565b6000602082019050818103600083015261471e81614161565b9050919050565b6000602082019050818103600083015261473e81614184565b9050919050565b6000602082019050818103600083015261475e816141a7565b9050919050565b6000602082019050818103600083015261477e816141ca565b9050919050565b6000602082019050818103600083015261479e816141ed565b9050919050565b600060208201905081810360008301526147be81614233565b9050919050565b600060208201905081810360008301526147de81614256565b9050919050565b600060208201905081810360008301526147fe81614279565b9050919050565b6000602082019050818103600083015261481e8161429c565b9050919050565b6000602082019050818103600083015261483e816142bf565b9050919050565b6000602082019050818103600083015261485e816142e2565b9050919050565b6000602082019050818103600083015261487e81614305565b9050919050565b6000602082019050818103600083015261489e81614328565b9050919050565b600060208201905081810360008301526148be8161434b565b9050919050565b600060208201905081810360008301526148de81614391565b9050919050565b600060208201905081810360008301526148fe816143b4565b9050919050565b6000602082019050818103600083015261491e816143d7565b9050919050565b6000602082019050818103600083015261493e816143fa565b9050919050565b6000602082019050818103600083015261495e8161441d565b9050919050565b6000602082019050818103600083015261497e81614440565b9050919050565b6000602082019050818103600083015261499e81614463565b9050919050565b600060208201905081810360008301526149be816144a9565b9050919050565b600060208201905081810360008301526149de816144cc565b9050919050565b60006020820190506149fa60008301846144ef565b92915050565b6000614a0a614a1b565b9050614a168282614d13565b919050565b6000604051905090565b600067ffffffffffffffff821115614a4057614a3f614e7a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a6c57614a6b614e7a565b5b614a7582614ec7565b9050602081019050919050565b600067ffffffffffffffff821115614a9d57614a9c614e7a565b5b614aa682614ec7565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b2182614c95565b9150614b2c83614c95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b6157614b60614dbe565b5b828201905092915050565b6000614b7782614c95565b9150614b8283614c95565b925082614b9257614b91614ded565b5b828204905092915050565b6000614ba882614c95565b9150614bb383614c95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bec57614beb614dbe565b5b828202905092915050565b6000614c0282614c95565b9150614c0d83614c95565b925082821015614c2057614c1f614dbe565b5b828203905092915050565b6000614c3682614c75565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ccc578082015181840152602081019050614cb1565b83811115614cdb576000848401525b50505050565b60006002820490506001821680614cf957607f821691505b60208210811415614d0d57614d0c614e1c565b5b50919050565b614d1c82614ec7565b810181811067ffffffffffffffff82111715614d3b57614d3a614e7a565b5b80604052505050565b6000614d4f82614c95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d8257614d81614dbe565b5b600182019050919050565b6000614d9882614c95565b9150614da383614c95565b925082614db357614db2614ded565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e6e6f742046696c6c204f72646572000000000000000000000000000000600082015250565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f574c3a2057726f6e672045746820416d6f756e74000000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f6d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f574c206e6f74206f70656e000000000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f574c3a20756e6175746820616d6f756e74000000000000000000000000000000600082015250565b7f574c3a204e6f7420656e6f7567682061766169616c6162696c69747900000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b61540481614c2b565b811461540f57600080fd5b50565b61541b81614c3d565b811461542657600080fd5b50565b61543281614c49565b811461543d57600080fd5b50565b61544981614c95565b811461545457600080fd5b5056fea26469706673582212203769da7659d20c17dd4be28d8ca8a4682459dc19c1e8f922d118906fbacb0a4064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102cc5760003560e01c806370a0823111610175578063b0b92263116100dc578063c91c046211610095578063e8a3d4851161006f578063e8a3d48514610a2d578063e985e9c514610a58578063f2fde38b14610a95578063f8b2cb4f14610abe576102d3565b8063c91c0462146109c2578063d78c06fa146109d9578063e397950814610a02576102d3565b8063b0b92263146108d7578063b46dc27814610900578063b5b3e21414610929578063b88d4fde14610940578063ba419de014610969578063c87b56dd14610985576102d3565b806391b7f5ed1161012e57806391b7f5ed146107ea57806395d89b411461081357806397d888681461083e578063a035b1fe14610867578063a0712d6814610892578063a22cb465146108ae576102d3565b806370a0823114610700578063715018a61461073d578063717d57d3146107545780637e1c0c091461077d578063877b8644146107a85780638da5cb5b146107bf576102d3565b806329869c941161023457806342842e0e116101ed578063484b973c116101c7578063484b973c1461064657806349a772b51461066f57806355f804b31461069a5780636352211e146106c3576102d3565b806342842e0e146105cb57806342966c68146105f457806343d675651461061d576102d3565b806329869c941461051b5780632e56f71e14610532578063372c12b1146105495780633ba5939d146105725780633cb51994146105895780633ccfd60b146105b4576102d3565b8063095ea7b311610286578063095ea7b3146103f9578063150b7a021461042257806318160ddd1461045f5780631950c2181461048a57806323b872dd146104c757806325fd90f3146104f0576102d3565b8062b6849f146102d557806301ffc9a7146102fe57806302ce58131461033b57806306fdde03146103665780630743b80814610391578063081812fc146103bc576102d3565b366102d357005b005b3480156102e157600080fd5b506102fc60048036038101906102f79190613e04565b610afb565b005b34801561030a57600080fd5b5061032560048036038101906103209190613e4d565b610c92565b60405161033291906145ed565b60405180910390f35b34801561034757600080fd5b50610350610e1b565b60405161035d91906145ed565b60405180910390f35b34801561037257600080fd5b5061037b610e2e565b6040516103889190614623565b60405180910390f35b34801561039d57600080fd5b506103a6610ec0565b6040516103b391906149e5565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613ef0565b610ec6565b6040516103f09190614586565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613dc4565b610f4b565b005b34801561042e57600080fd5b5061044960048036038101906104449190613c79565b611055565b6040516104569190614608565b60405180910390f35b34801561046b57600080fd5b5061047461106a565b60405161048191906149e5565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613bb9565b611074565b6040516104be91906149e5565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613c26565b6110bd565b005b3480156104fc57600080fd5b50610505611116565b60405161051291906145ed565b60405180910390f35b34801561052757600080fd5b50610530611129565b005b34801561053e57600080fd5b506105476111c2565b005b34801561055557600080fd5b50610570600480360381019061056b9190613bb9565b61125b565b005b34801561057e57600080fd5b50610587611320565b005b34801561059557600080fd5b5061059e6113b9565b6040516105ab91906149e5565b60405180910390f35b3480156105c057600080fd5b506105c96113bf565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190613c26565b6117ec565b005b34801561060057600080fd5b5061061b60048036038101906106169190613ef0565b61180c565b005b34801561062957600080fd5b50610644600480360381019061063f9190613e04565b61185f565b005b34801561065257600080fd5b5061066d60048036038101906106689190613dc4565b61195e565b005b34801561067b57600080fd5b50610684611ad5565b60405161069191906149e5565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613ea7565b611adb565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613ef0565b611b71565b6040516106f79190614586565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613bb9565b611c23565b60405161073491906149e5565b60405180910390f35b34801561074957600080fd5b50610752611cdb565b005b34801561076057600080fd5b5061077b60048036038101906107769190613ef0565b611d63565b005b34801561078957600080fd5b50610792611de9565b60405161079f91906149e5565b60405180910390f35b3480156107b457600080fd5b506107bd611def565b005b3480156107cb57600080fd5b506107d4611e88565b6040516107e19190614586565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190613ef0565b611eb1565b005b34801561081f57600080fd5b50610828611f37565b6040516108359190614623565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613ef0565b611fc9565b005b34801561087357600080fd5b5061087c61204f565b60405161088991906149e5565b60405180910390f35b6108ac60048036038101906108a79190613ef0565b612055565b005b3480156108ba57600080fd5b506108d560048036038101906108d09190613d84565b61226e565b005b3480156108e357600080fd5b506108fe60048036038101906108f99190613ef0565b6123da565b005b34801561090c57600080fd5b5061092760048036038101906109229190613bb9565b612460565b005b34801561093557600080fd5b5061093e612550565b005b34801561094c57600080fd5b5061096760048036038101906109629190613d01565b6125e9565b005b610983600480360381019061097e9190613ef0565b612644565b005b34801561099157600080fd5b506109ac60048036038101906109a79190613ef0565b6128fd565b6040516109b99190614623565b60405180910390f35b3480156109ce57600080fd5b506109d76129bd565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613ef0565b612a56565b005b348015610a0e57600080fd5b50610a17612adc565b604051610a2491906149e5565b60405180910390f35b348015610a3957600080fd5b50610a42612ae2565b604051610a4f9190614623565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613be6565b612b0a565b604051610a8c91906145ed565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613bb9565b612b9e565b005b348015610aca57600080fd5b50610ae56004803603810190610ae09190613bb9565b612c96565b604051610af291906149e5565b60405180910390f35b610b03612cf1565b73ffffffffffffffffffffffffffffffffffffffff16610b21611e88565b73ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e906148e5565b60405180910390fd5b600081519050600b5481600b54610b8e9190614b16565b11610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906149c5565b60405180910390fd5b600a5481600b54610bdf9190614b16565b1115610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790614805565b60405180910390fd5b6000600b54905060005b82811015610c8c57610c61848281518110610c4857610c47614e4b565b5b60200260200101518284610c5c9190614b16565b612cf9565b600b6000815480929190610c7490614d44565b91905055508080610c8490614d44565b915050610c2a565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dc557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e14575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610e3d90614ce1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990614ce1565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b5050505050905090565b600d5481565b6000610ed182612d17565b610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906146e5565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f5682611b71565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90614705565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061100757506110068133612b0a565b5b611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614825565b60405180910390fd5b6110508383612d83565b505050565b600063150b7a0260e01b905095945050505050565b6000600b54905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c73382612e3c565b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90614925565b60405180910390fd5b611111838383612f1a565b505050565b600860009054906101000a900460ff1681565b611131612cf1565b73ffffffffffffffffffffffffffffffffffffffff1661114f611e88565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906148e5565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6111ca612cf1565b73ffffffffffffffffffffffffffffffffffffffff166111e8611e88565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906148e5565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611263612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611281611e88565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906148e5565b60405180910390fd5b600d54600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b611328612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611346611e88565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611393906148e5565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b600c5481565b6113c7612cf1565b73ffffffffffffffffffffffffffffffffffffffff166113e5611e88565b73ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906148e5565b60405180910390fd5b600047905060008060646055846114529190614b9d565b61145c9190614b6c565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516114a490614571565b60006040518083038185875af1925050503d80600081146114e1576040519150601f19603f3d011682016040523d82523d6000602084013e6114e6565b606091505b5050809250508161152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614745565b60405180910390fd5b606460058461153b9190614b9d565b6115459190614b6c565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161158d90614571565b60006040518083038185875af1925050503d80600081146115ca576040519150601f19603f3d011682016040523d82523d6000602084013e6115cf565b606091505b50508092505081611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614745565b60405180910390fd5b60646005846116249190614b9d565b61162e9190614b6c565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161167690614571565b60006040518083038185875af1925050503d80600081146116b3576040519150601f19603f3d011682016040523d82523d6000602084013e6116b8565b606091505b505080925050816116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614745565b60405180910390fd5b606460058461170d9190614b9d565b6117179190614b6c565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161175f90614571565b60006040518083038185875af1925050503d806000811461179c576040519150601f19603f3d011682016040523d82523d6000602084013e6117a1565b606091505b505080925050816117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614745565b60405180910390fd5b505050565b611807838383604051806020016040528060008152506125e9565b505050565b61181581611b71565b73ffffffffffffffffffffffffffffffffffffffff16611833612cf1565b73ffffffffffffffffffffffffffffffffffffffff161461185357600080fd5b61185c81613176565b50565b611867612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611885611e88565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d2906148e5565b60405180910390fd5b60005b815181101561195a57600d54600f600084848151811061190157611900614e4b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061195290614d44565b9150506118de565b5050565b611966612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611984611e88565b73ffffffffffffffffffffffffffffffffffffffff16146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1906148e5565b60405180910390fd5b600b5481600b546119eb9190614b16565b11611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a22906149c5565b60405180910390fd5b600a5481600b54611a3c9190614b16565b1115611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490614805565b60405180910390fd5b6000600b54905060005b82811015611acf57611aa4848284611a9f9190614b16565b612cf9565b600b6000815480929190611ab790614d44565b91905055508080611ac790614d44565b915050611a87565b50505050565b600b5481565b611ae3612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611b01611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e906148e5565b60405180910390fd5b8060039080519060200190611b6d9291906138d9565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906147c5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90614885565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ce3612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611d01611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e906148e5565b60405180910390fd5b611d616000613287565b565b611d6b612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611d89611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd6906148e5565b60405180910390fd5b80600e8190555050565b600a5481565b611df7612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611e15611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906148e5565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eb9612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611e88565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f24906148e5565b60405180910390fd5b8060098190555050565b606060028054611f4690614ce1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7290614ce1565b8015611fbf5780601f10611f9457610100808354040283529160200191611fbf565b820191906000526020600020905b815481529060010190602001808311611fa257829003601f168201915b5050505050905090565b611fd1612cf1565b73ffffffffffffffffffffffffffffffffffffffff16611fef611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906148e5565b60405180910390fd5b80600d8190555050565b60095481565b600060149054906101000a900460ff16156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614845565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff1661210f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612106906147a5565b60405180910390fd5b6009548161211d9190614b9d565b34101561215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614905565b60405180910390fd5b600c548111156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90614985565b60405180910390fd5b600a54600b54826121b59190614b16565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614665565b60405180910390fd5b6000600b54905060005b8281101561224f57612224612213612cf1565b828461221f9190614b16565b612cf9565b600b600081548092919061223790614d44565b9190505550808061224790614d44565b915050612200565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490614785565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ce91906145ed565b60405180910390a35050565b6123e2612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612400611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148e5565b60405180910390fd5b80600a8190555050565b612468612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612486611e88565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906148e5565b60405180910390fd5b600a54600b541115612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614645565b60405180910390fd5b6000600b549050600b600081548092919061253d90614d44565b919050555061254c8282612cf9565b5050565b612558612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612576611e88565b73ffffffffffffffffffffffffffffffffffffffff16146125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906148e5565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b6125f33383612e3c565b612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614925565b60405180910390fd5b61263e8484848461334b565b50505050565b600060149054906101000a900460ff1615612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90614845565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860019054906101000a900460ff166126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f5906148a5565b60405180910390fd5b600e548161270c9190614b9d565b341461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614725565b60405180910390fd5b600a54600b548261275e9190614b16565b111561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614965565b60405180910390fd5b80600f60006127ac612cf1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f90614945565b60405180910390fd5b80600f6000612835612cf1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287e9190614bf7565b925050819055506000600b54905060005b828110156128de576128b36128a2612cf1565b82846128ae9190614b16565b612cf9565b600b60008154809291906128c690614d44565b919050555080806128d690614d44565b91505061288f565b505060008060146101000a81548160ff02191690831515021790555050565b606061290882612d17565b612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293e906149a5565b60405180910390fd5b6060600860029054906101000a900460ff1615612986576003604051602001612970919061454f565b60405160208183030381529060405290506129b4565b6003612991846133a7565b6040516020016129a29291906144fe565b60405160208183030381529060405290505b80915050919050565b6129c5612cf1565b73ffffffffffffffffffffffffffffffffffffffff166129e3611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a30906148e5565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b612a5e612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612a7c611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac9906148e5565b60405180910390fd5b80600c8190555050565b600e5481565b60606003604051602001612af6919061452d565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612ba6612cf1565b73ffffffffffffffffffffffffffffffffffffffff16612bc4611e88565b73ffffffffffffffffffffffffffffffffffffffff1614612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c11906148e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190614765565b60405180910390fd5b612c9381613287565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cea9190614b6c565b9050919050565b600033905090565b612d13828260405180602001604052806000815250613508565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612df683611b71565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e4782612d17565b612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614685565b60405180910390fd5b6000612e9183611b71565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f0057508373ffffffffffffffffffffffffffffffffffffffff16612ee884610ec6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f115750612f108185612b0a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f3a82611b71565b73ffffffffffffffffffffffffffffffffffffffff1614612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f87906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff7906146a5565b60405180910390fd5b61300b838383613563565b613016600082612d83565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130669190614bf7565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130bd9190614b16565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061318182611b71565b905061318f81600084613563565b61319a600083612d83565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ea9190614bf7565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613356848484612f1a565b61336284848484613568565b6133a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613398906147e5565b60405180910390fd5b50505050565b606060008214156133ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613503565b600082905060005b6000821461342157808061340a90614d44565b915050600a8261341a9190614b6c565b91506133f7565b60008167ffffffffffffffff81111561343d5761343c614e7a565b5b6040519080825280601f01601f19166020018201604052801561346f5781602001600182028036833780820191505090505b5090505b600085146134fc576001826134889190614bf7565b9150600a856134979190614d8d565b60306134a39190614b16565b60f81b8183815181106134b9576134b8614e4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134f59190614b6c565b9450613473565b8093505050505b919050565b61351283836136f8565b61351f6000848484613568565b61355e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613555906147e5565b60405180910390fd5b505050565b505050565b60006135898473ffffffffffffffffffffffffffffffffffffffff166138c6565b156136eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016135cd94939291906145a1565b602060405180830381600087803b1580156135e757600080fd5b505af192505050801561361857506040513d601f19601f820116820180604052508101906136159190613e7a565b60015b61369b573d8060008114613648576040519150601f19603f3d011682016040523d82523d6000602084013e61364d565b606091505b50600081511415613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368a906147e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506136f0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375f90614865565b60405180910390fd5b61377181612d17565b156137b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a8906146c5565b60405180910390fd5b6137bd60008383613563565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380d9190614b16565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546138e590614ce1565b90600052602060002090601f016020900481019282613907576000855561394e565b82601f1061392057805160ff191683800117855561394e565b8280016001018555821561394e579182015b8281111561394d578251825591602001919060010190613932565b5b50905061395b919061395f565b5090565b5b80821115613978576000816000905550600101613960565b5090565b600061398f61398a84614a25565b614a00565b905080838252602082019050828560208602820111156139b2576139b1614eb3565b5b60005b858110156139e257816139c88882613a70565b8452602084019350602083019250506001810190506139b5565b5050509392505050565b60006139ff6139fa84614a51565b614a00565b905082815260208101848484011115613a1b57613a1a614eb8565b5b613a26848285614c9f565b509392505050565b6000613a41613a3c84614a82565b614a00565b905082815260208101848484011115613a5d57613a5c614eb8565b5b613a68848285614c9f565b509392505050565b600081359050613a7f816153fb565b92915050565b600082601f830112613a9a57613a99614eae565b5b8135613aaa84826020860161397c565b91505092915050565b600081359050613ac281615412565b92915050565b600081359050613ad781615429565b92915050565b600081519050613aec81615429565b92915050565b60008083601f840112613b0857613b07614eae565b5b8235905067ffffffffffffffff811115613b2557613b24614ea9565b5b602083019150836001820283011115613b4157613b40614eb3565b5b9250929050565b600082601f830112613b5d57613b5c614eae565b5b8135613b6d8482602086016139ec565b91505092915050565b600082601f830112613b8b57613b8a614eae565b5b8135613b9b848260208601613a2e565b91505092915050565b600081359050613bb381615440565b92915050565b600060208284031215613bcf57613bce614ec2565b5b6000613bdd84828501613a70565b91505092915050565b60008060408385031215613bfd57613bfc614ec2565b5b6000613c0b85828601613a70565b9250506020613c1c85828601613a70565b9150509250929050565b600080600060608486031215613c3f57613c3e614ec2565b5b6000613c4d86828701613a70565b9350506020613c5e86828701613a70565b9250506040613c6f86828701613ba4565b9150509250925092565b600080600080600060808688031215613c9557613c94614ec2565b5b6000613ca388828901613a70565b9550506020613cb488828901613a70565b9450506040613cc588828901613ba4565b935050606086013567ffffffffffffffff811115613ce657613ce5614ebd565b5b613cf288828901613af2565b92509250509295509295909350565b60008060008060808587031215613d1b57613d1a614ec2565b5b6000613d2987828801613a70565b9450506020613d3a87828801613a70565b9350506040613d4b87828801613ba4565b925050606085013567ffffffffffffffff811115613d6c57613d6b614ebd565b5b613d7887828801613b48565b91505092959194509250565b60008060408385031215613d9b57613d9a614ec2565b5b6000613da985828601613a70565b9250506020613dba85828601613ab3565b9150509250929050565b60008060408385031215613ddb57613dda614ec2565b5b6000613de985828601613a70565b9250506020613dfa85828601613ba4565b9150509250929050565b600060208284031215613e1a57613e19614ec2565b5b600082013567ffffffffffffffff811115613e3857613e37614ebd565b5b613e4484828501613a85565b91505092915050565b600060208284031215613e6357613e62614ec2565b5b6000613e7184828501613ac8565b91505092915050565b600060208284031215613e9057613e8f614ec2565b5b6000613e9e84828501613add565b91505092915050565b600060208284031215613ebd57613ebc614ec2565b5b600082013567ffffffffffffffff811115613edb57613eda614ebd565b5b613ee784828501613b76565b91505092915050565b600060208284031215613f0657613f05614ec2565b5b6000613f1484828501613ba4565b91505092915050565b613f2681614c2b565b82525050565b613f3581614c3d565b82525050565b613f4481614c49565b82525050565b6000613f5582614ac8565b613f5f8185614ade565b9350613f6f818560208601614cae565b613f7881614ec7565b840191505092915050565b6000613f8e82614ad3565b613f988185614afa565b9350613fa8818560208601614cae565b613fb181614ec7565b840191505092915050565b6000613fc782614ad3565b613fd18185614b0b565b9350613fe1818560208601614cae565b80840191505092915050565b60008154613ffa81614ce1565b6140048186614b0b565b9450600182166000811461401f576001811461403057614063565b60ff19831686528186019350614063565b61403985614ab3565b60005b8381101561405b5781548189015260018201915060208101905061403c565b838801955050505b50505092915050565b6000614079601183614afa565b915061408482614ed8565b602082019050919050565b600061409c601e83614afa565b91506140a782614f01565b602082019050919050565b60006140bf602083614afa565b91506140ca82614f2a565b602082019050919050565b60006140e2600d83614b0b565b91506140ed82614f53565b600d82019050919050565b6000614105601b83614afa565b915061411082614f7c565b602082019050919050565b6000614128601c83614afa565b915061413382614fa5565b602082019050919050565b600061414b602083614afa565b915061415682614fce565b602082019050919050565b600061416e601e83614afa565b915061417982614ff7565b602082019050919050565b6000614191601483614afa565b915061419c82615020565b602082019050919050565b60006141b4601883614afa565b91506141bf82615049565b602082019050919050565b60006141d7602083614afa565b91506141e282615072565b602082019050919050565b60006141fa601983614afa565b91506142058261509b565b602082019050919050565b600061421d600c83614b0b565b9150614228826150c4565b600c82019050919050565b6000614240600d83614afa565b915061424b826150ed565b602082019050919050565b6000614263601e83614afa565b915061426e82615116565b602082019050919050565b6000614286601a83614afa565b91506142918261513f565b602082019050919050565b60006142a9601183614afa565b91506142b482615168565b602082019050919050565b60006142cc601f83614afa565b91506142d782615191565b602082019050919050565b60006142ef601f83614afa565b91506142fa826151ba565b602082019050919050565b6000614312602083614afa565b915061431d826151e3565b602082019050919050565b6000614335602083614afa565b91506143408261520c565b602082019050919050565b6000614358600b83614afa565b915061436382615235565b602082019050919050565b600061437b600583614b0b565b91506143868261525e565b600582019050919050565b600061439e601c83614afa565b91506143a982615287565b602082019050919050565b60006143c1602083614afa565b91506143cc826152b0565b602082019050919050565b60006143e4601883614afa565b91506143ef826152d9565b602082019050919050565b6000614407601c83614afa565b915061441282615302565b602082019050919050565b600061442a601183614afa565b91506144358261532b565b602082019050919050565b600061444d601c83614afa565b915061445882615354565b602082019050919050565b6000614470601b83614afa565b915061447b8261537d565b602082019050919050565b6000614493600083614aef565b915061449e826153a6565b600082019050919050565b60006144b6601d83614afa565b91506144c1826153a9565b602082019050919050565b60006144d9601383614afa565b91506144e4826153d2565b602082019050919050565b6144f881614c95565b82525050565b600061450a8285613fed565b91506145168284613fbc565b91506145218261436e565b91508190509392505050565b60006145398284613fed565b9150614544826140d5565b915081905092915050565b600061455b8284613fed565b915061456682614210565b915081905092915050565b600061457c82614486565b9150819050919050565b600060208201905061459b6000830184613f1d565b92915050565b60006080820190506145b66000830187613f1d565b6145c36020830186613f1d565b6145d060408301856144ef565b81810360608301526145e28184613f4a565b905095945050505050565b60006020820190506146026000830184613f2c565b92915050565b600060208201905061461d6000830184613f3b565b92915050565b6000602082019050818103600083015261463d8184613f83565b905092915050565b6000602082019050818103600083015261465e8161406c565b9050919050565b6000602082019050818103600083015261467e8161408f565b9050919050565b6000602082019050818103600083015261469e816140b2565b9050919050565b600060208201905081810360008301526146be816140f8565b9050919050565b600060208201905081810360008301526146de8161411b565b9050919050565b600060208201905081810360008301526146fe8161413e565b9050919050565b6000602082019050818103600083015261471e81614161565b9050919050565b6000602082019050818103600083015261473e81614184565b9050919050565b6000602082019050818103600083015261475e816141a7565b9050919050565b6000602082019050818103600083015261477e816141ca565b9050919050565b6000602082019050818103600083015261479e816141ed565b9050919050565b600060208201905081810360008301526147be81614233565b9050919050565b600060208201905081810360008301526147de81614256565b9050919050565b600060208201905081810360008301526147fe81614279565b9050919050565b6000602082019050818103600083015261481e8161429c565b9050919050565b6000602082019050818103600083015261483e816142bf565b9050919050565b6000602082019050818103600083015261485e816142e2565b9050919050565b6000602082019050818103600083015261487e81614305565b9050919050565b6000602082019050818103600083015261489e81614328565b9050919050565b600060208201905081810360008301526148be8161434b565b9050919050565b600060208201905081810360008301526148de81614391565b9050919050565b600060208201905081810360008301526148fe816143b4565b9050919050565b6000602082019050818103600083015261491e816143d7565b9050919050565b6000602082019050818103600083015261493e816143fa565b9050919050565b6000602082019050818103600083015261495e8161441d565b9050919050565b6000602082019050818103600083015261497e81614440565b9050919050565b6000602082019050818103600083015261499e81614463565b9050919050565b600060208201905081810360008301526149be816144a9565b9050919050565b600060208201905081810360008301526149de816144cc565b9050919050565b60006020820190506149fa60008301846144ef565b92915050565b6000614a0a614a1b565b9050614a168282614d13565b919050565b6000604051905090565b600067ffffffffffffffff821115614a4057614a3f614e7a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a6c57614a6b614e7a565b5b614a7582614ec7565b9050602081019050919050565b600067ffffffffffffffff821115614a9d57614a9c614e7a565b5b614aa682614ec7565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b2182614c95565b9150614b2c83614c95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b6157614b60614dbe565b5b828201905092915050565b6000614b7782614c95565b9150614b8283614c95565b925082614b9257614b91614ded565b5b828204905092915050565b6000614ba882614c95565b9150614bb383614c95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bec57614beb614dbe565b5b828202905092915050565b6000614c0282614c95565b9150614c0d83614c95565b925082821015614c2057614c1f614dbe565b5b828203905092915050565b6000614c3682614c75565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ccc578082015181840152602081019050614cb1565b83811115614cdb576000848401525b50505050565b60006002820490506001821680614cf957607f821691505b60208210811415614d0d57614d0c614e1c565b5b50919050565b614d1c82614ec7565b810181811067ffffffffffffffff82111715614d3b57614d3a614e7a565b5b80604052505050565b6000614d4f82614c95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d8257614d81614dbe565b5b600182019050919050565b6000614d9882614c95565b9150614da383614c95565b925082614db357614db2614ded565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e6e6f742046696c6c204f72646572000000000000000000000000000000600082015250565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f574c3a2057726f6e672045746820416d6f756e74000000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f6d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f574c206e6f74206f70656e000000000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f574c3a20756e6175746820616d6f756e74000000000000000000000000000000600082015250565b7f574c3a204e6f7420656e6f7567682061766169616c6162696c69747900000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b61540481614c2b565b811461540f57600080fd5b50565b61541b81614c3d565b811461542657600080fd5b50565b61543281614c49565b811461543d57600080fd5b50565b61544981614c95565b811461545457600080fd5b5056fea26469706673582212203769da7659d20c17dd4be28d8ca8a4682459dc19c1e8f922d118906fbacb0a4064736f6c63430008070033

Deployed Bytecode Sourcemap

16576:21112:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20798:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18656:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17350:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36505:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17561:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26149:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25711:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35449:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24517:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17321:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24109:83;;;;;;;;;;;;;:::i;:::-;;23929:80;;;;;;;;;;;;;:::i;:::-;;23015:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24745:81;;;;;;;;;;;;;:::i;:::-;;17530:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19095:801;;;;;;;;;;;;;:::i;:::-;;27404:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22668:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23135:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19908:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17496:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23733:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25421:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25161:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;24300:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17463:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24017:80;;;;;;;;;;;;;:::i;:::-;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24204:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36646;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23592:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17436:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21989:608;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26428:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24407:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20440:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24655:78;;;;;;;;;;;;;:::i;:::-;;27660:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21321:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36821:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23840:77;;;;;;;;;;;;;:::i;:::-;;23475:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17595:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37379:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26788:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24838:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20798:511;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20867:11:::1;20881:3;:10;20867:24;;20933:12;;20926:3;20911:12;;:18;;;;:::i;:::-;20910:35;20902:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21012:11;;21004:3;20989:12;;:18;;;;:::i;:::-;20988:35;;20980:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21066:21;21090:12;;21066:36;;21127:9;21123:179;21146:3;21142:1;:7;21123:179;;;21171:36;21181:3;21185:1;21181:6;;;;;;;;:::i;:::-;;;;;;;;21205:1;21189:13;:17;;;;:::i;:::-;21171:9;:36::i;:::-;21222:12;;:15;;;;;;;;;:::i;:::-;;;;;;21151:3;;;;;:::i;:::-;;;;21123:179;;;;20856:453;;20798:511:::0;:::o;18656:357::-;18741:4;18781:25;18766:40;;;:11;:40;;;;:109;;;;18842:33;18827:48;;;:11;:48;;;;18766:109;:170;;;;18911:25;18896:40;;;:11;:40;;;;18766:170;:239;;;;18972:33;;;18957:48;;;:11;:48;;;;18766:239;18758:247;;18656:357;;;:::o;17350:27::-;;;;;;;;;;;;;:::o;36505:84::-;36544:13;36576:5;36569:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36505:84;:::o;17561:27::-;;;;:::o;26149:207::-;26225:7;26253:16;26261:7;26253;:16::i;:::-;26245:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:15;:24;26340:7;26324:24;;;;;;;;;;;;;;;;;;;;;26317:31;;26149:207;;;:::o;25711:372::-;25792:13;25808:16;25816:7;25808;:16::i;:::-;25792:32;;25849:5;25843:11;;:2;:11;;;;25835:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25938:5;25924:19;;:10;:19;;;:58;;;;25947:35;25964:5;25971:10;25947:16;:35::i;:::-;25924:58;25902:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:21;26063:2;26067:7;26054:8;:21::i;:::-;25781:302;25711:372;;:::o;35449:215::-;35566:6;35626:30;;;35619:37;;35449:215;;;;;;;:::o;24517:126::-;24563:7;24590:12;;24583:19;;24517:126;:::o;23337:::-;23405:7;23432:10;:23;23443:11;23432:23;;;;;;;;;;;;;;;;23425:30;;23337:126;;;:::o;27019:314::-;27214:39;27233:10;27245:7;27214:18;:39::i;:::-;27206:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27297:28;27307:4;27313:2;27317:7;27297:9;:28::i;:::-;27019:314;;;:::o;17321:22::-;;;;;;;;;;;;;:::o;24109:83::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24179:5:::1;24161:15;;:23;;;;;;;;;;;;;;;;;;24109:83::o:0;23929:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23996:5:::1;23983:10;;:18;;;;;;;;;;;;;;;;;;23929:80::o:0;23015:108::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23103:12:::1;;23081:10;:19;23092:7;23081:19;;;;;;;;;;;;;;;:34;;;;23015:108:::0;:::o;24745:81::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24813:5:::1;24799:11;;:19;;;;;;;;;;;;;;;;;;24745:81::o:0;17530:24::-;;;;:::o;19095:801::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19145:13:::1;19161:21;19145:37;;19193:12;19218:18:::0;19254:3:::1;19248:2;19240:5;:10;;;;:::i;:::-;19239:18;;;;:::i;:::-;19218:39;;19282:7;;;;;;;;;;;:12;;19302:10;19282:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19268:49;;;;;19336:7;19328:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19420:3;19415:1;19407:5;:9;;;;:::i;:::-;19406:17;;;;:::i;:::-;19393:30;;19448:9;;;;;;;;;;;:14;;19470:10;19448:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19434:51;;;;;19504:7;19496:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19589:3;19584:1;19576:5;:9;;;;:::i;:::-;19575:17;;;;:::i;:::-;19562:30;;19617:10;;;;;;;;;;;:15;;19640:10;19617:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19603:52;;;;;19674:7;19666:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19758:3;19753:1;19745:5;:9;;;;:::i;:::-;19744:17;;;;:::i;:::-;19731:30;;19786:9;;;;;;;;;;;:14;;19808:10;19786:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19772:51;;;;;19842:7;19834:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19134:762;;;19095:801::o:0;27404:185::-;27542:39;27559:4;27565:2;27569:7;27542:39;;;;;;;;;;;;:16;:39::i;:::-;27404:185;;;:::o;22668:125::-;22743:16;22751:7;22743;:16::i;:::-;22727:32;;:12;:10;:12::i;:::-;:32;;;22719:41;;;;;;22771:14;22777:7;22771:5;:14::i;:::-;22668:125;:::o;23135:194::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:9:::1;23215:107;23235:8;:15;23231:1;:19;23215:107;;;23298:12;;23272:10;:23;23283:8;23292:1;23283:11;;;;;;;;:::i;:::-;;;;;;;;23272:23;;;;;;;;;;;;;;;:38;;;;23252:3;;;;;:::i;:::-;;;;23215:107;;;;23135:194:::0;:::o;19908:524::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20014:12:::1;;20007:3;19992:12;;:18;;;;:::i;:::-;19991:35;19983:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20093:11;;20085:3;20070:12;;:18;;;;:::i;:::-;20069:35;;20061:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20147:21;20171:12;;20147:36;;20253:9;20249:176;20272:3;20268:1;:7;20249:176;;;20297:33;20307:3;20328:1;20312:13;:17;;;;:::i;:::-;20297:9;:33::i;:::-;20345:12;;:15;;;;;;;;;:::i;:::-;;;;;;20277:3;;;;;:::i;:::-;;;;20249:176;;;;19972:460;19908:524:::0;;:::o;17496:27::-;;;;:::o;23733:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23814:6:::1;23803:8;:17;;;;;;;;;;;;:::i;:::-;;23733:95:::0;:::o;25421:228::-;25493:7;25513:13;25529:7;:16;25537:7;25529:16;;;;;;;;;;;;;;;;;;;;;25513:32;;25581:1;25564:19;;:5;:19;;;;25556:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25636:5;25629:12;;;25421:228;;;:::o;25161:198::-;25233:7;25278:1;25261:19;;:5;:19;;;;25253:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25335:9;:16;25345:5;25335:16;;;;;;;;;;;;;;;;25328:23;;25161:198;;;:::o;14765:94::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:21:::1;14848:1;14830:9;:21::i;:::-;14765:94::o:0;24300:99::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24383:8:::1;24373:7;:18;;;;24300:99:::0;:::o;17463:26::-;;;;:::o;24017:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24085:4:::1;24067:15;;:22;;;;;;;;;;;;;;;;;;24017:80::o:0;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;24204:88::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24276:8:::1;24268:5;:16;;;;24204:88:::0;:::o;36646:::-;36687:13;36719:7;36712:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36646:88;:::o;23592:129::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23694:19:::1;23679:12;:34;;;;23592:129:::0;:::o;17436:20::-;;;;:::o;21989:608::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;22064:10:::1;;;;;;;;;;;22056:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;22130:5;;22124:3;:11;;;;:::i;:::-;22111:9;:24;;22103:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22190:9;;22183:3;:16;;22175:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22274:11;;22257:12;;22251:3;:18;;;;:::i;:::-;22250:35;;22242:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22341:21;22365:12;;22341:36;;22462:9;22458:132;22481:3;22477:1;:7;22458:132;;;22506:42;22516:12;:10;:12::i;:::-;22546:1;22530:13;:17;;;;:::i;:::-;22506:9;:42::i;:::-;22563:12;;:15;;;;;;;;;:::i;:::-;;;;;;22486:3;;;;;:::i;:::-;;;;22458:132;;;;22045:552;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;21989:608;:::o;26428:289::-;26543:10;26531:22;;:8;:22;;;;26523:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26639:8;26596:18;:30;26615:10;26596:30;;;;;;;;;;;;;;;:40;26627:8;26596:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26690:8;26663:46;;26678:10;26663:46;;;26700:8;26663:46;;;;;;:::i;:::-;;;;;;;;26428:289;;:::o;24407:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24492:9:::1;24478:11;:23;;;;24407:102:::0;:::o;20440:346::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20530:11:::1;;20514:12;;:27;;20506:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20576:21;20600:12;;20576:36;;20670:12;;:15;;;;;;;;;:::i;:::-;;;;;;20749:29;20759:3;20764:13;20749:9;:29::i;:::-;20495:291;20440:346:::0;:::o;24655:78::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24721:4:::1;24707:11;;:18;;;;;;;;;;;;;;;;;;24655:78::o:0;27660:305::-;27835:39;27854:10;27866:7;27835:18;:39::i;:::-;27827:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27918:39;27932:4;27938:2;27942:7;27951:5;27918:13;:39::i;:::-;27660:305;;;;:::o;21321:660::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;21398:15:::1;;;;;;;;;;;21390:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;21467:7;;21461:3;:13;;;;:::i;:::-;21448:9;:26;21440:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21542:11;;21525:12;;21519:3;:18;;;;:::i;:::-;21518:35;;21510:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21633:3;21605:10;:24;21616:12;:10;:12::i;:::-;21605:24;;;;;;;;;;;;;;;;:31;;21597:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21699:3;21671:10;:24;21682:12;:10;:12::i;:::-;21671:24;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;21723:21;21747:12;;21723:36;;21844:9;21840:132;21863:3;21859:1;:7;21840:132;;;21888:42;21898:12;:10;:12::i;:::-;21928:1;21912:13;:17;;;;:::i;:::-;21888:9;:42::i;:::-;21945:12;;:15;;;;;;;;;:::i;:::-;;;;;;21868:3;;;;;:::i;:::-;;;;21840:132;;;;21379:602;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;21321:660;:::o;36821:546::-;36879:13;36912:16;36920:7;36912;:16::i;:::-;36904:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36973:22;37020:11;;;;;;;;;;;37016:308;;;37122:8;37105:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37087:61;;37016:308;;;37274:8;37284:17;37293:7;37284:8;:17::i;:::-;37257:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37239:73;;37016:308;37351:8;37344:15;;;36821:546;;;:::o;23840:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23905:4:::1;23892:10;;:17;;;;;;;;;;;;;;;;;;23840:77::o:0;23475:105::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23564:8:::1;23552:9;:20;;;;23475:105:::0;:::o;17595:22::-;;;;:::o;37379:139::-;37423:13;37484:8;37467:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37453:57;;37379:139;:::o;26788:164::-;26885:4;26909:18;:25;26928:5;26909:25;;;;;;;;;;;;;;;:35;26935:8;26909:35;;;;;;;;;;;;;;;;;;;;;;;;;26902:42;;26788:164;;;;:::o;15014:186::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15123:1:::1;15103:22;;:8;:22;;;;15095:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15173:19;15183:8;15173:9;:19::i;:::-;15014:186:::0;:::o;24838:259::-;24903:7;25045:6;25018:9;:23;25028:12;25018:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;25011:41;;24838:259;;;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;30416:110::-;30492:26;30502:2;30506:7;30492:26;;;;;;;;;;;;:9;:26::i;:::-;30416:110;;:::o;29451:127::-;29516:4;29568:1;29540:30;;:7;:16;29548:7;29540:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29533:37;;29451:127;;;:::o;33352:167::-;33454:2;33427:15;:24;33443:7;33427:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33503:7;33499:2;33472:39;;33481:16;33489:7;33481;:16::i;:::-;33472:39;;;;;;;;;;;;33352:167;;:::o;29745:329::-;29838:4;29863:16;29871:7;29863;:16::i;:::-;29855:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29927:13;29943:16;29951:7;29943;:16::i;:::-;29927:32;;29989:5;29978:16;;:7;:16;;;:51;;;;30022:7;29998:31;;:20;30010:7;29998:11;:20::i;:::-;:31;;;29978:51;:87;;;;30033:32;30050:5;30057:7;30033:16;:32::i;:::-;29978:87;29970:96;;;29745:329;;;;:::o;32687:547::-;32839:4;32819:24;;:16;32827:7;32819;:16::i;:::-;:24;;;32811:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32909:1;32895:16;;:2;:16;;;;32887:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32954:39;32975:4;32981:2;32985:7;32954:20;:39::i;:::-;33058:29;33075:1;33079:7;33058:8;:29::i;:::-;33119:1;33100:9;:15;33110:4;33100:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33148:1;33131:9;:13;33141:2;33131:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33179:2;33160:7;:16;33168:7;33160:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33218:7;33214:2;33199:27;;33208:4;33199:27;;;;;;;;;;;;32687:547;;;:::o;31997:353::-;32057:13;32073:16;32081:7;32073;:16::i;:::-;32057:32;;32102:48;32123:5;32138:1;32142:7;32102:20;:48::i;:::-;32191:29;32208:1;32212:7;32191:8;:29::i;:::-;32253:1;32233:9;:16;32243:5;32233:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32272:7;:16;32280:7;32272:16;;;;;;;;;;;;32265:23;;;;;;;;;;;32334:7;32330:1;32306:36;;32315:5;32306:36;;;;;;;;;;;;32046:304;31997:353;:::o;15208:173::-;15264:16;15283:6;;;;;;;;;;;15264:25;;15309:8;15300:6;;:17;;;;;;;;;;;;;;;;;;15364:8;15333:40;;15354:8;15333:40;;;;;;;;;;;;15253:128;15208:173;:::o;28847:291::-;29004:28;29014:4;29020:2;29024:7;29004:9;:28::i;:::-;29051:48;29074:4;29080:2;29084:7;29093:5;29051:22;:48::i;:::-;29043:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28847:291;;;;:::o;15424:532::-;15480:13;15519:1;15510:5;:10;15506:53;;;15537:10;;;;;;;;;;;;;;;;;;;;;15506:53;15569:12;15584:5;15569:20;;15600:14;15625:78;15640:1;15632:4;:9;15625:78;;15658:8;;;;;:::i;:::-;;;;15689:2;15681:10;;;;;:::i;:::-;;;15625:78;;;15713:19;15745:6;15735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15713:39;;15763:154;15779:1;15770:5;:10;15763:154;;15807:1;15797:11;;;;;:::i;:::-;;;15874:2;15866:5;:10;;;;:::i;:::-;15853:2;:24;;;;:::i;:::-;15840:39;;15823:6;15830;15823:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15903:2;15894:11;;;;;:::i;:::-;;;15763:154;;;15941:6;15927:21;;;;;15424:532;;;;:::o;30753:297::-;30883:18;30889:2;30893:7;30883:5;:18::i;:::-;30934:54;30965:1;30969:2;30973:7;30982:5;30934:22;:54::i;:::-;30912:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30753:297;;;:::o;36236:126::-;;;;:::o;34084:777::-;34239:4;34260:15;:2;:13;;;:15::i;:::-;34256:598;;;34312:2;34296:36;;;34333:10;34345:4;34351:7;34360:5;34296:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34292:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34557:1;34540:6;:13;:18;34536:248;;;34583:36;;;;;;;;;;:::i;:::-;;;;;;;;34536:248;34734:6;34728:13;34719:6;34715:2;34711:15;34704:38;34292:507;34427:45;;;34417:55;;;:6;:55;;;;34410:62;;;;;34256:598;34838:4;34831:11;;34084:777;;;;;;;:::o;31386:382::-;31480:1;31466:16;;:2;:16;;;;31458:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31539:16;31547:7;31539;:16::i;:::-;31538:17;31530:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31601:45;31630:1;31634:2;31638:7;31601:20;:45::i;:::-;31676:1;31659:9;:13;31669:2;31659:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31707:2;31688:7;:16;31696:7;31688:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31752:7;31748:2;31727:33;;31744:1;31727:33;;;;;;;;;;;;31386:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:::-;13249:3;13270:67;13334:2;13329:3;13270:67;:::i;:::-;13263:74;;13346:93;13435:3;13346:93;:::i;:::-;13464:2;13459:3;13455:12;13448:19;;13107:366;;;:::o;13479:::-;13621:3;13642:67;13706:2;13701:3;13642:67;:::i;:::-;13635:74;;13718:93;13807:3;13718:93;:::i;:::-;13836:2;13831:3;13827:12;13820:19;;13479:366;;;:::o;13851:402::-;14011:3;14032:85;14114:2;14109:3;14032:85;:::i;:::-;14025:92;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13851:402;;;:::o;14259:366::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:402::-;17395:3;17416:85;17498:2;17493:3;17416:85;:::i;:::-;17409:92;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17235:402;;;:::o;17643:366::-;17785:3;17806:67;17870:2;17865:3;17806:67;:::i;:::-;17799:74;;17882:93;17971:3;17882:93;:::i;:::-;18000:2;17995:3;17991:12;17984:19;;17643:366;;;:::o;18015:::-;18157:3;18178:67;18242:2;18237:3;18178:67;:::i;:::-;18171:74;;18254:93;18343:3;18254:93;:::i;:::-;18372:2;18367:3;18363:12;18356:19;;18015:366;;;:::o;18387:::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:::-;19645:3;19666:67;19730:2;19725:3;19666:67;:::i;:::-;19659:74;;19742:93;19831:3;19742:93;:::i;:::-;19860:2;19855:3;19851:12;19844:19;;19503:366;;;:::o;19875:::-;20017:3;20038:67;20102:2;20097:3;20038:67;:::i;:::-;20031:74;;20114:93;20203:3;20114:93;:::i;:::-;20232:2;20227:3;20223:12;20216:19;;19875:366;;;:::o;20247:::-;20389:3;20410:67;20474:2;20469:3;20410:67;:::i;:::-;20403:74;;20486:93;20575:3;20486:93;:::i;:::-;20604:2;20599:3;20595:12;20588:19;;20247:366;;;:::o;20619:::-;20761:3;20782:67;20846:2;20841:3;20782:67;:::i;:::-;20775:74;;20858:93;20947:3;20858:93;:::i;:::-;20976:2;20971:3;20967:12;20960:19;;20619:366;;;:::o;20991:400::-;21151:3;21172:84;21254:1;21249:3;21172:84;:::i;:::-;21165:91;;21265:93;21354:3;21265:93;:::i;:::-;21383:1;21378:3;21374:11;21367:18;;20991:400;;;:::o;21397:366::-;21539:3;21560:67;21624:2;21619:3;21560:67;:::i;:::-;21553:74;;21636:93;21725:3;21636:93;:::i;:::-;21754:2;21749:3;21745:12;21738:19;;21397:366;;;:::o;21769:::-;21911:3;21932:67;21996:2;21991:3;21932:67;:::i;:::-;21925:74;;22008:93;22097:3;22008:93;:::i;:::-;22126:2;22121:3;22117:12;22110:19;;21769:366;;;:::o;22141:::-;22283:3;22304:67;22368:2;22363:3;22304:67;:::i;:::-;22297:74;;22380:93;22469:3;22380:93;:::i;:::-;22498:2;22493:3;22489:12;22482:19;;22141:366;;;:::o;22513:::-;22655:3;22676:67;22740:2;22735:3;22676:67;:::i;:::-;22669:74;;22752:93;22841:3;22752:93;:::i;:::-;22870:2;22865:3;22861:12;22854:19;;22513:366;;;:::o;22885:::-;23027:3;23048:67;23112:2;23107:3;23048:67;:::i;:::-;23041:74;;23124:93;23213:3;23124:93;:::i;:::-;23242:2;23237:3;23233:12;23226:19;;22885:366;;;:::o;23257:::-;23399:3;23420:67;23484:2;23479:3;23420:67;:::i;:::-;23413:74;;23496:93;23585:3;23496:93;:::i;:::-;23614:2;23609:3;23605:12;23598:19;;23257:366;;;:::o;23629:::-;23771:3;23792:67;23856:2;23851:3;23792:67;:::i;:::-;23785:74;;23868:93;23957:3;23868:93;:::i;:::-;23986:2;23981:3;23977:12;23970:19;;23629:366;;;:::o;24001:398::-;24160:3;24181:83;24262:1;24257:3;24181:83;:::i;:::-;24174:90;;24273:93;24362:3;24273:93;:::i;:::-;24391:1;24386:3;24382:11;24375:18;;24001:398;;;:::o;24405:366::-;24547:3;24568:67;24632:2;24627:3;24568:67;:::i;:::-;24561:74;;24644:93;24733:3;24644:93;:::i;:::-;24762:2;24757:3;24753:12;24746:19;;24405:366;;;:::o;24777:::-;24919:3;24940:67;25004:2;24999:3;24940:67;:::i;:::-;24933:74;;25016:93;25105:3;25016:93;:::i;:::-;25134:2;25129:3;25125:12;25118:19;;24777:366;;;:::o;25149:118::-;25236:24;25254:5;25236:24;:::i;:::-;25231:3;25224:37;25149:118;;:::o;25273:695::-;25551:3;25573:92;25661:3;25652:6;25573:92;:::i;:::-;25566:99;;25682:95;25773:3;25764:6;25682:95;:::i;:::-;25675:102;;25794:148;25938:3;25794:148;:::i;:::-;25787:155;;25959:3;25952:10;;25273:695;;;;;:::o;25974:535::-;26204:3;26226:92;26314:3;26305:6;26226:92;:::i;:::-;26219:99;;26335:148;26479:3;26335:148;:::i;:::-;26328:155;;26500:3;26493:10;;25974:535;;;;:::o;26515:::-;26745:3;26767:92;26855:3;26846:6;26767:92;:::i;:::-;26760:99;;26876:148;27020:3;26876:148;:::i;:::-;26869:155;;27041:3;27034:10;;26515:535;;;;:::o;27056:379::-;27240:3;27262:147;27405:3;27262:147;:::i;:::-;27255:154;;27426:3;27419:10;;27056:379;;;:::o;27441:222::-;27534:4;27572:2;27561:9;27557:18;27549:26;;27585:71;27653:1;27642:9;27638:17;27629:6;27585:71;:::i;:::-;27441:222;;;;:::o;27669:640::-;27864:4;27902:3;27891:9;27887:19;27879:27;;27916:71;27984:1;27973:9;27969:17;27960:6;27916:71;:::i;:::-;27997:72;28065:2;28054:9;28050:18;28041:6;27997:72;:::i;:::-;28079;28147:2;28136:9;28132:18;28123:6;28079:72;:::i;:::-;28198:9;28192:4;28188:20;28183:2;28172:9;28168:18;28161:48;28226:76;28297:4;28288:6;28226:76;:::i;:::-;28218:84;;27669:640;;;;;;;:::o;28315:210::-;28402:4;28440:2;28429:9;28425:18;28417:26;;28453:65;28515:1;28504:9;28500:17;28491:6;28453:65;:::i;:::-;28315:210;;;;:::o;28531:218::-;28622:4;28660:2;28649:9;28645:18;28637:26;;28673:69;28739:1;28728:9;28724:17;28715:6;28673:69;:::i;:::-;28531:218;;;;:::o;28755:313::-;28868:4;28906:2;28895:9;28891:18;28883:26;;28955:9;28949:4;28945:20;28941:1;28930:9;28926:17;28919:47;28983:78;29056:4;29047:6;28983:78;:::i;:::-;28975:86;;28755:313;;;;:::o;29074:419::-;29240:4;29278:2;29267:9;29263:18;29255:26;;29327:9;29321:4;29317:20;29313:1;29302:9;29298:17;29291:47;29355:131;29481:4;29355:131;:::i;:::-;29347:139;;29074:419;;;:::o;29499:::-;29665:4;29703:2;29692:9;29688:18;29680:26;;29752:9;29746:4;29742:20;29738:1;29727:9;29723:17;29716:47;29780:131;29906:4;29780:131;:::i;:::-;29772:139;;29499:419;;;:::o;29924:::-;30090:4;30128:2;30117:9;30113:18;30105:26;;30177:9;30171:4;30167:20;30163:1;30152:9;30148:17;30141:47;30205:131;30331:4;30205:131;:::i;:::-;30197:139;;29924:419;;;:::o;30349:::-;30515:4;30553:2;30542:9;30538:18;30530:26;;30602:9;30596:4;30592:20;30588:1;30577:9;30573:17;30566:47;30630:131;30756:4;30630:131;:::i;:::-;30622:139;;30349:419;;;:::o;30774:::-;30940:4;30978:2;30967:9;30963:18;30955:26;;31027:9;31021:4;31017:20;31013:1;31002:9;30998:17;30991:47;31055:131;31181:4;31055:131;:::i;:::-;31047:139;;30774:419;;;:::o;31199:::-;31365:4;31403:2;31392:9;31388:18;31380:26;;31452:9;31446:4;31442:20;31438:1;31427:9;31423:17;31416:47;31480:131;31606:4;31480:131;:::i;:::-;31472:139;;31199:419;;;:::o;31624:::-;31790:4;31828:2;31817:9;31813:18;31805:26;;31877:9;31871:4;31867:20;31863:1;31852:9;31848:17;31841:47;31905:131;32031:4;31905:131;:::i;:::-;31897:139;;31624:419;;;:::o;32049:::-;32215:4;32253:2;32242:9;32238:18;32230:26;;32302:9;32296:4;32292:20;32288:1;32277:9;32273:17;32266:47;32330:131;32456:4;32330:131;:::i;:::-;32322:139;;32049:419;;;:::o;32474:::-;32640:4;32678:2;32667:9;32663:18;32655:26;;32727:9;32721:4;32717:20;32713:1;32702:9;32698:17;32691:47;32755:131;32881:4;32755:131;:::i;:::-;32747:139;;32474:419;;;:::o;32899:::-;33065:4;33103:2;33092:9;33088:18;33080:26;;33152:9;33146:4;33142:20;33138:1;33127:9;33123:17;33116:47;33180:131;33306:4;33180:131;:::i;:::-;33172:139;;32899:419;;;:::o;33324:::-;33490:4;33528:2;33517:9;33513:18;33505:26;;33577:9;33571:4;33567:20;33563:1;33552:9;33548:17;33541:47;33605:131;33731:4;33605:131;:::i;:::-;33597:139;;33324:419;;;:::o;33749:::-;33915:4;33953:2;33942:9;33938:18;33930:26;;34002:9;33996:4;33992:20;33988:1;33977:9;33973:17;33966:47;34030:131;34156:4;34030:131;:::i;:::-;34022:139;;33749:419;;;:::o;34174:::-;34340:4;34378:2;34367:9;34363:18;34355:26;;34427:9;34421:4;34417:20;34413:1;34402:9;34398:17;34391:47;34455:131;34581:4;34455:131;:::i;:::-;34447:139;;34174:419;;;:::o;34599:::-;34765:4;34803:2;34792:9;34788:18;34780:26;;34852:9;34846:4;34842:20;34838:1;34827:9;34823:17;34816:47;34880:131;35006:4;34880:131;:::i;:::-;34872:139;;34599:419;;;:::o;35024:::-;35190:4;35228:2;35217:9;35213:18;35205:26;;35277:9;35271:4;35267:20;35263:1;35252:9;35248:17;35241:47;35305:131;35431:4;35305:131;:::i;:::-;35297:139;;35024:419;;;:::o;35449:::-;35615:4;35653:2;35642:9;35638:18;35630:26;;35702:9;35696:4;35692:20;35688:1;35677:9;35673:17;35666:47;35730:131;35856:4;35730:131;:::i;:::-;35722:139;;35449:419;;;:::o;35874:::-;36040:4;36078:2;36067:9;36063:18;36055:26;;36127:9;36121:4;36117:20;36113:1;36102:9;36098:17;36091:47;36155:131;36281:4;36155:131;:::i;:::-;36147:139;;35874:419;;;:::o;36299:::-;36465:4;36503:2;36492:9;36488:18;36480:26;;36552:9;36546:4;36542:20;36538:1;36527:9;36523:17;36516:47;36580:131;36706:4;36580:131;:::i;:::-;36572:139;;36299:419;;;:::o;36724:::-;36890:4;36928:2;36917:9;36913:18;36905:26;;36977:9;36971:4;36967:20;36963:1;36952:9;36948:17;36941:47;37005:131;37131:4;37005:131;:::i;:::-;36997:139;;36724:419;;;:::o;37149:::-;37315:4;37353:2;37342:9;37338:18;37330:26;;37402:9;37396:4;37392:20;37388:1;37377:9;37373:17;37366:47;37430:131;37556:4;37430:131;:::i;:::-;37422:139;;37149:419;;;:::o;37574:::-;37740:4;37778:2;37767:9;37763:18;37755:26;;37827:9;37821:4;37817:20;37813:1;37802:9;37798:17;37791:47;37855:131;37981:4;37855:131;:::i;:::-;37847:139;;37574:419;;;:::o;37999:::-;38165:4;38203:2;38192:9;38188:18;38180:26;;38252:9;38246:4;38242:20;38238:1;38227:9;38223:17;38216:47;38280:131;38406:4;38280:131;:::i;:::-;38272:139;;37999:419;;;:::o;38424:::-;38590:4;38628:2;38617:9;38613:18;38605:26;;38677:9;38671:4;38667:20;38663:1;38652:9;38648:17;38641:47;38705:131;38831:4;38705:131;:::i;:::-;38697:139;;38424:419;;;:::o;38849:::-;39015:4;39053:2;39042:9;39038:18;39030:26;;39102:9;39096:4;39092:20;39088:1;39077:9;39073:17;39066:47;39130:131;39256:4;39130:131;:::i;:::-;39122:139;;38849:419;;;:::o;39274:::-;39440:4;39478:2;39467:9;39463:18;39455:26;;39527:9;39521:4;39517:20;39513:1;39502:9;39498:17;39491:47;39555:131;39681:4;39555:131;:::i;:::-;39547:139;;39274:419;;;:::o;39699:::-;39865:4;39903:2;39892:9;39888:18;39880:26;;39952:9;39946:4;39942:20;39938:1;39927:9;39923:17;39916:47;39980:131;40106:4;39980:131;:::i;:::-;39972:139;;39699:419;;;:::o;40124:::-;40290:4;40328:2;40317:9;40313:18;40305:26;;40377:9;40371:4;40367:20;40363:1;40352:9;40348:17;40341:47;40405:131;40531:4;40405:131;:::i;:::-;40397:139;;40124:419;;;:::o;40549:::-;40715:4;40753:2;40742:9;40738:18;40730:26;;40802:9;40796:4;40792:20;40788:1;40777:9;40773:17;40766:47;40830:131;40956:4;40830:131;:::i;:::-;40822:139;;40549:419;;;:::o;40974:::-;41140:4;41178:2;41167:9;41163:18;41155:26;;41227:9;41221:4;41217:20;41213:1;41202:9;41198:17;41191:47;41255:131;41381:4;41255:131;:::i;:::-;41247:139;;40974:419;;;:::o;41399:222::-;41492:4;41530:2;41519:9;41515:18;41507:26;;41543:71;41611:1;41600:9;41596:17;41587:6;41543:71;:::i;:::-;41399:222;;;;:::o;41627:129::-;41661:6;41688:20;;:::i;:::-;41678:30;;41717:33;41745:4;41737:6;41717:33;:::i;:::-;41627:129;;;:::o;41762:75::-;41795:6;41828:2;41822:9;41812:19;;41762:75;:::o;41843:311::-;41920:4;42010:18;42002:6;41999:30;41996:56;;;42032:18;;:::i;:::-;41996:56;42082:4;42074:6;42070:17;42062:25;;42142:4;42136;42132:15;42124:23;;41843:311;;;:::o;42160:307::-;42221:4;42311:18;42303:6;42300:30;42297:56;;;42333:18;;:::i;:::-;42297:56;42371:29;42393:6;42371:29;:::i;:::-;42363:37;;42455:4;42449;42445:15;42437:23;;42160:307;;;:::o;42473:308::-;42535:4;42625:18;42617:6;42614:30;42611:56;;;42647:18;;:::i;:::-;42611:56;42685:29;42707:6;42685:29;:::i;:::-;42677:37;;42769:4;42763;42759:15;42751:23;;42473:308;;;:::o;42787:141::-;42836:4;42859:3;42851:11;;42882:3;42879:1;42872:14;42916:4;42913:1;42903:18;42895:26;;42787:141;;;:::o;42934:98::-;42985:6;43019:5;43013:12;43003:22;;42934:98;;;:::o;43038:99::-;43090:6;43124:5;43118:12;43108:22;;43038:99;;;:::o;43143:168::-;43226:11;43260:6;43255:3;43248:19;43300:4;43295:3;43291:14;43276:29;;43143:168;;;;:::o;43317:147::-;43418:11;43455:3;43440:18;;43317:147;;;;:::o;43470:169::-;43554:11;43588:6;43583:3;43576:19;43628:4;43623:3;43619:14;43604:29;;43470:169;;;;:::o;43645:148::-;43747:11;43784:3;43769:18;;43645:148;;;;:::o;43799:305::-;43839:3;43858:20;43876:1;43858:20;:::i;:::-;43853:25;;43892:20;43910:1;43892:20;:::i;:::-;43887:25;;44046:1;43978:66;43974:74;43971:1;43968:81;43965:107;;;44052:18;;:::i;:::-;43965:107;44096:1;44093;44089:9;44082:16;;43799:305;;;;:::o;44110:185::-;44150:1;44167:20;44185:1;44167:20;:::i;:::-;44162:25;;44201:20;44219:1;44201:20;:::i;:::-;44196:25;;44240:1;44230:35;;44245:18;;:::i;:::-;44230:35;44287:1;44284;44280:9;44275:14;;44110:185;;;;:::o;44301:348::-;44341:7;44364:20;44382:1;44364:20;:::i;:::-;44359:25;;44398:20;44416:1;44398:20;:::i;:::-;44393:25;;44586:1;44518:66;44514:74;44511:1;44508:81;44503:1;44496:9;44489:17;44485:105;44482:131;;;44593:18;;:::i;:::-;44482:131;44641:1;44638;44634:9;44623:20;;44301:348;;;;:::o;44655:191::-;44695:4;44715:20;44733:1;44715:20;:::i;:::-;44710:25;;44749:20;44767:1;44749:20;:::i;:::-;44744:25;;44788:1;44785;44782:8;44779:34;;;44793:18;;:::i;:::-;44779:34;44838:1;44835;44831:9;44823:17;;44655:191;;;;:::o;44852:96::-;44889:7;44918:24;44936:5;44918:24;:::i;:::-;44907:35;;44852:96;;;:::o;44954:90::-;44988:7;45031:5;45024:13;45017:21;45006:32;;44954:90;;;:::o;45050:149::-;45086:7;45126:66;45119:5;45115:78;45104:89;;45050:149;;;:::o;45205:126::-;45242:7;45282:42;45275:5;45271:54;45260:65;;45205:126;;;:::o;45337:77::-;45374:7;45403:5;45392:16;;45337:77;;;:::o;45420:154::-;45504:6;45499:3;45494;45481:30;45566:1;45557:6;45552:3;45548:16;45541:27;45420:154;;;:::o;45580:307::-;45648:1;45658:113;45672:6;45669:1;45666:13;45658:113;;;45757:1;45752:3;45748:11;45742:18;45738:1;45733:3;45729:11;45722:39;45694:2;45691:1;45687:10;45682:15;;45658:113;;;45789:6;45786:1;45783:13;45780:101;;;45869:1;45860:6;45855:3;45851:16;45844:27;45780:101;45629:258;45580:307;;;:::o;45893:320::-;45937:6;45974:1;45968:4;45964:12;45954:22;;46021:1;46015:4;46011:12;46042:18;46032:81;;46098:4;46090:6;46086:17;46076:27;;46032:81;46160:2;46152:6;46149:14;46129:18;46126:38;46123:84;;;46179:18;;:::i;:::-;46123:84;45944:269;45893:320;;;:::o;46219:281::-;46302:27;46324:4;46302:27;:::i;:::-;46294:6;46290:40;46432:6;46420:10;46417:22;46396:18;46384:10;46381:34;46378:62;46375:88;;;46443:18;;:::i;:::-;46375:88;46483:10;46479:2;46472:22;46262:238;46219:281;;:::o;46506:233::-;46545:3;46568:24;46586:5;46568:24;:::i;:::-;46559:33;;46614:66;46607:5;46604:77;46601:103;;;46684:18;;:::i;:::-;46601:103;46731:1;46724:5;46720:13;46713:20;;46506:233;;;:::o;46745:176::-;46777:1;46794:20;46812:1;46794:20;:::i;:::-;46789:25;;46828:20;46846:1;46828:20;:::i;:::-;46823:25;;46867:1;46857:35;;46872:18;;:::i;:::-;46857:35;46913:1;46910;46906:9;46901:14;;46745:176;;;;:::o;46927:180::-;46975:77;46972:1;46965:88;47072:4;47069:1;47062:15;47096:4;47093:1;47086:15;47113:180;47161:77;47158:1;47151:88;47258:4;47255:1;47248:15;47282:4;47279:1;47272:15;47299:180;47347:77;47344:1;47337:88;47444:4;47441:1;47434:15;47468:4;47465:1;47458:15;47485:180;47533:77;47530:1;47523:88;47630:4;47627:1;47620:15;47654:4;47651:1;47644:15;47671:180;47719:77;47716:1;47709:88;47816:4;47813:1;47806:15;47840:4;47837:1;47830:15;47857:117;47966:1;47963;47956:12;47980:117;48089:1;48086;48079:12;48103:117;48212:1;48209;48202:12;48226:117;48335:1;48332;48325:12;48349:117;48458:1;48455;48448:12;48472:117;48581:1;48578;48571:12;48595:102;48636:6;48687:2;48683:7;48678:2;48671:5;48667:14;48663:28;48653:38;;48595:102;;;:::o;48703:167::-;48843:19;48839:1;48831:6;48827:14;48820:43;48703:167;:::o;48876:180::-;49016:32;49012:1;49004:6;49000:14;48993:56;48876:180;:::o;49062:182::-;49202:34;49198:1;49190:6;49186:14;49179:58;49062:182;:::o;49250:163::-;49390:15;49386:1;49378:6;49374:14;49367:39;49250:163;:::o;49419:177::-;49559:29;49555:1;49547:6;49543:14;49536:53;49419:177;:::o;49602:178::-;49742:30;49738:1;49730:6;49726:14;49719:54;49602:178;:::o;49786:182::-;49926:34;49922:1;49914:6;49910:14;49903:58;49786:182;:::o;49974:180::-;50114:32;50110:1;50102:6;50098:14;50091:56;49974:180;:::o;50160:170::-;50300:22;50296:1;50288:6;50284:14;50277:46;50160:170;:::o;50336:174::-;50476:26;50472:1;50464:6;50460:14;50453:50;50336:174;:::o;50516:182::-;50656:34;50652:1;50644:6;50640:14;50633:58;50516:182;:::o;50704:175::-;50844:27;50840:1;50832:6;50828:14;50821:51;50704:175;:::o;50885:162::-;51025:14;51021:1;51013:6;51009:14;51002:38;50885:162;:::o;51053:163::-;51193:15;51189:1;51181:6;51177:14;51170:39;51053:163;:::o;51222:180::-;51362:32;51358:1;51350:6;51346:14;51339:56;51222:180;:::o;51408:176::-;51548:28;51544:1;51536:6;51532:14;51525:52;51408:176;:::o;51590:167::-;51730:19;51726:1;51718:6;51714:14;51707:43;51590:167;:::o;51763:181::-;51903:33;51899:1;51891:6;51887:14;51880:57;51763:181;:::o;51950:::-;52090:33;52086:1;52078:6;52074:14;52067:57;51950:181;:::o;52137:182::-;52277:34;52273:1;52265:6;52261:14;52254:58;52137:182;:::o;52325:::-;52465:34;52461:1;52453:6;52449:14;52442:58;52325:182;:::o;52513:161::-;52653:13;52649:1;52641:6;52637:14;52630:37;52513:161;:::o;52680:155::-;52820:7;52816:1;52808:6;52804:14;52797:31;52680:155;:::o;52841:178::-;52981:30;52977:1;52969:6;52965:14;52958:54;52841:178;:::o;53025:182::-;53165:34;53161:1;53153:6;53149:14;53142:58;53025:182;:::o;53213:174::-;53353:26;53349:1;53341:6;53337:14;53330:50;53213:174;:::o;53393:178::-;53533:30;53529:1;53521:6;53517:14;53510:54;53393:178;:::o;53577:167::-;53717:19;53713:1;53705:6;53701:14;53694:43;53577:167;:::o;53750:178::-;53890:30;53886:1;53878:6;53874:14;53867:54;53750:178;:::o;53934:177::-;54074:29;54070:1;54062:6;54058:14;54051:53;53934:177;:::o;54117:114::-;;:::o;54237:179::-;54377:31;54373:1;54365:6;54361:14;54354:55;54237:179;:::o;54422:169::-;54562:21;54558:1;54550:6;54546:14;54539:45;54422:169;:::o;54597:122::-;54670:24;54688:5;54670:24;:::i;:::-;54663:5;54660:35;54650:63;;54709:1;54706;54699:12;54650:63;54597:122;:::o;54725:116::-;54795:21;54810:5;54795:21;:::i;:::-;54788:5;54785:32;54775:60;;54831:1;54828;54821:12;54775:60;54725:116;:::o;54847:120::-;54919:23;54936:5;54919:23;:::i;:::-;54912:5;54909:34;54899:62;;54957:1;54954;54947:12;54899:62;54847:120;:::o;54973:122::-;55046:24;55064:5;55046:24;:::i;:::-;55039:5;55036:35;55026:63;;55085:1;55082;55075:12;55026:63;54973:122;:::o

Swarm Source

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