ETH Price: $2,669.04 (+1.20%)

Token

ChamPotion (CPX)
 

Overview

Max Total Supply

4,846 CPX

Holders

700

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
6 CPX
0x8c89758EB23623bbC0d7a681637f006894c60066
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Free potions for every original Chameleon Which potion will you pull? Only one way to find out... Noir? Mutant? Robotic? Holographic? A special 1/1? A treasure chest full of ETH?

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChamPotion

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-03-12
*/

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

contract ERC721 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance){}
    function ownerOf(uint256 tokenId) external view returns (address owner){}
    function safeTransferFrom(address from,address to,uint256 tokenId) external{}
    function transferFrom(address from, address to, uint256 tokenId) external{}
    function approve(address to, uint256 tokenId) external{}
    function getApproved(uint256 tokenId) external view returns (address operator){}
    function setApprovalForAll(address operator, bool _approved) external{}
    function isApprovedForAll(address owner, address operator) external view returns (bool){}
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external{}
}

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

contract ChamPotion is IERC721, Ownable, Functional {

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

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

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

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

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

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public mintActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public totalTokens;
    uint256 public numberMinted;
    
    mapping(uint256 => bool) private _claimed;
    
    //whitelist for holders
    ERC721 CHAM; ///Define interaction contract

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "ChamPotion";
        _symbol = "CPX";
        _baseURI = "https://chameleoncollective.io/metadata/cpx/";
        _hideTokens = true;
        
        CHAM = ERC721(0xFD3C3717164831916E6D2D7cdde9904dd793eC84);
        //CHAM = ERC721(0x438c915F69be7cc8B2094373Ea247dD10bb27B60); // TESTNET ONLY

        totalTokens = 10000;
    }

    //@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 == ChamPotion.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function mint(uint256[] memory tokenIds) external reentryLock {
        require(mintActive, "closed for business");
        address _to = _msgSender();
        uint256 qty = tokenIds.length;
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");

        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted += qty;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            require( !_claimed[ tokenIds[i] ], "One or more already claimed!");
            require( _msgSender() == CHAM.ownerOf( tokenIds[i] ));
            _safeMint(_to, mintSeedValue + i);
            _claimed[ tokenIds[i] ] = true;
        }
    }

    function mintSingle(uint256 tokenId) external reentryLock {
        require(mintActive, "closed for business");
        require((numberMinted + 1) <= totalTokens, "Cannot fill order");
        address _to = _msgSender();
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted ++;
        
        //send tokens
        require( !_claimed[ tokenId ], "One or more already claimed!");
        require( _msgSender() == CHAM.ownerOf( tokenId ));
        _safeMint(_to, mintSeedValue);
        _claimed[ tokenId ] = true;
        
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }

    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 ++;
        }
    }
    
    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 ++;
        }
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    function setTargetContract(address contractAddress) external onlyOwner {
        CHAM = ERC721(contractAddress);
    }

    function checkClaimed( uint256 tokenId ) public view returns (bool) {
        return _claimed[ tokenId ];
    }

    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    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;
    }

    /**
     * @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":"activateMint","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":"uint256","name":"tokenId","type":"uint256"}],"name":"checkClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintSingle","outputs":[],"stateMutability":"nonpayable","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":"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":"address","name":"contractAddress","type":"address"}],"name":"setTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c620000406200019960201b60201c565b620001a160201b60201c565b6040518060400160405280600a81526020017f4368616d506f74696f6e00000000000000000000000000000000000000000000815250600190805190602001906200009992919062000265565b506040518060400160405280600381526020017f435058000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000265565b506040518060600160405280602c815260200162004bc2602c9139600390805190602001906200011992919062000265565b506001600860016101000a81548160ff02191690831515021790555073fd3c3717164831916e6d2d7cdde9904dd793ec84600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127106009819055506200037a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002739062000315565b90600052602060002090601f016020900481019282620002975760008555620002e3565b82601f10620002b257805160ff1916838001178555620002e3565b82800160010185558215620002e3579182015b82811115620002e2578251825591602001919060010190620002c5565b5b509050620002f29190620002f6565b5090565b5b8082111562000311576000816000905550600101620002f7565b5090565b600060028204905060018216806200032e57607f821691505b602082108114156200034557620003446200034b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614838806200038a6000396000f3fe6080604052600436106102125760003560e01c806353b8eb6711610118578063b0b92263116100a0578063c91c04621161006f578063c91c046214610752578063e8a3d48514610769578063e985e9c514610794578063f2fde38b146107d1578063f8e93ef9146107fa57610219565b8063b0b92263146106ac578063b5b3e214146106d5578063b88d4fde146106ec578063c87b56dd1461071557610219565b8063715018a6116100e7578063715018a6146105eb5780637e1c0c09146106025780638da5cb5b1461062d57806395d89b4114610658578063a22cb4651461068357610219565b806353b8eb671461051f57806355f804b3146105485780636352211e1461057157806370a08231146105ae57610219565b80632e56f71e1161019b57806342842e0e1161016a57806342842e0e1461045057806342966c681461047957806347fc822f146104a2578063484b973c146104cb57806349a772b5146104f457610219565b80632e56f71e146103ce57806335a55caa146103e55780633ba5939d146104225780633ccfd60b1461043957610219565b8063095ea7b3116101e2578063095ea7b3146102e9578063150b7a021461031257806318160ddd1461034f57806323b872dd1461037a57806325fd90f3146103a357610219565b8062b6849f1461021b57806301ffc9a71461024457806306fdde0314610281578063081812fc146102ac57610219565b3661021957005b005b34801561022757600080fd5b50610242600480360381019061023d9190613488565b610823565b005b34801561025057600080fd5b5061026b6004803603810190610266919061351a565b6109ba565b6040516102789190613bc5565b60405180910390f35b34801561028d57600080fd5b50610296610b43565b6040516102a39190613bfb565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce91906135bd565b610bd5565b6040516102e09190613b5e565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613448565b610c5a565b005b34801561031e57600080fd5b50610339600480360381019061033491906132fd565b610d64565b6040516103469190613be0565b60405180910390f35b34801561035b57600080fd5b50610364610d79565b6040516103719190613edd565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906132aa565b610d83565b005b3480156103af57600080fd5b506103b8610ddc565b6040516103c59190613bc5565b60405180910390f35b3480156103da57600080fd5b506103e3610def565b005b3480156103f157600080fd5b5061040c600480360381019061040791906135bd565b610e88565b6040516104199190613bc5565b60405180910390f35b34801561042e57600080fd5b50610437610eb2565b005b34801561044557600080fd5b5061044e610f4b565b005b34801561045c57600080fd5b50610477600480360381019061047291906132aa565b61107c565b005b34801561048557600080fd5b506104a0600480360381019061049b91906135bd565b61109c565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613210565b6110ef565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190613448565b6111af565b005b34801561050057600080fd5b50610509611326565b6040516105169190613edd565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906135bd565b61132c565b005b34801561055457600080fd5b5061056f600480360381019061056a9190613574565b611603565b005b34801561057d57600080fd5b50610598600480360381019061059391906135bd565b611699565b6040516105a59190613b5e565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613210565b61174b565b6040516105e29190613edd565b60405180910390f35b3480156105f757600080fd5b50610600611803565b005b34801561060e57600080fd5b5061061761188b565b6040516106249190613edd565b60405180910390f35b34801561063957600080fd5b50610642611891565b60405161064f9190613b5e565b60405180910390f35b34801561066457600080fd5b5061066d6118ba565b60405161067a9190613bfb565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613408565b61194c565b005b3480156106b857600080fd5b506106d360048036038101906106ce91906135bd565b611ab8565b005b3480156106e157600080fd5b506106ea611b3e565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613385565b611bd7565b005b34801561072157600080fd5b5061073c600480360381019061073791906135bd565b611c32565b6040516107499190613bfb565b60405180910390f35b34801561075e57600080fd5b50610767611cf2565b005b34801561077557600080fd5b5061077e611d8b565b60405161078b9190613bfb565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b6919061326a565b611db3565b6040516107c89190613bc5565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613210565b611e47565b005b34801561080657600080fd5b50610821600480360381019061081c91906134d1565b611f3f565b005b61082b612295565b73ffffffffffffffffffffffffffffffffffffffff16610849611891565b73ffffffffffffffffffffffffffffffffffffffff161461089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690613e5d565b60405180910390fd5b600081519050600a5481600a546108b6919061403a565b116108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed90613ebd565b60405180910390fd5b60095481600a54610907919061403a565b1115610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90613d9d565b60405180910390fd5b6000600a54905060005b828110156109b4576109898482815181106109705761096f614315565b5b60200260200101518284610984919061403a565b61229d565b600a600081548092919061099c9061420e565b919050555080806109ac9061420e565b915050610952565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aed57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b52906141ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e906141ab565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b6000610be0826122bb565b610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613c9d565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6582611699565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90613cbd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d165750610d158133611db3565b5b610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613dbd565b60405180910390fd5b610d5f8383612327565b505050565b600063150b7a0260e01b905095945050505050565b6000600a54905090565b610d8d33826123e0565b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613e7d565b60405180910390fd5b610dd78383836124be565b505050565b600860009054906101000a900460ff1681565b610df7612295565b73ffffffffffffffffffffffffffffffffffffffff16610e15611891565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613e5d565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6000600b600083815260200190815260200160002060009054906101000a900460ff169050919050565b610eba612295565b73ffffffffffffffffffffffffffffffffffffffff16610ed8611891565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590613e5d565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b610f53612295565b73ffffffffffffffffffffffffffffffffffffffff16610f71611891565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90613e5d565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610ff290613b49565b60006040518083038185875af1925050503d806000811461102f576040519150601f19603f3d011682016040523d82523d6000602084013e611034565b606091505b5050905080611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613cdd565b60405180910390fd5b5050565b61109783838360405180602001604052806000815250611bd7565b505050565b6110a581611699565b73ffffffffffffffffffffffffffffffffffffffff166110c3612295565b73ffffffffffffffffffffffffffffffffffffffff16146110e357600080fd5b6110ec8161271a565b50565b6110f7612295565b73ffffffffffffffffffffffffffffffffffffffff16611115611891565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613e5d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111b7612295565b73ffffffffffffffffffffffffffffffffffffffff166111d5611891565b73ffffffffffffffffffffffffffffffffffffffff161461122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613e5d565b60405180910390fd5b600a5481600a5461123c919061403a565b1161127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390613ebd565b60405180910390fd5b60095481600a5461128d919061403a565b11156112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613d9d565b60405180910390fd5b6000600a54905060005b82811015611320576112f58482846112f0919061403a565b61229d565b600a60008154809291906113089061420e565b919050555080806113189061420e565b9150506112d8565b50505050565b600a5481565b600060149054906101000a900460ff161561137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613ddd565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff166113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90613d7d565b60405180910390fd5b6009546001600a546113f8919061403a565b1115611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613d9d565b60405180910390fd5b6000611443612295565b90506000600a549050600a600081548092919061145f9061420e565b9190505550600b600084815260200190815260200160002060009054906101000a900460ff16156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613c3d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016115209190613edd565b60206040518083038186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611570919061323d565b73ffffffffffffffffffffffffffffffffffffffff1661158e612295565b73ffffffffffffffffffffffffffffffffffffffff16146115ae57600080fd5b6115b8828261229d565b6001600b600085815260200190815260200160002060006101000a81548160ff021916908315150217905550505060008060146101000a81548160ff02191690831515021790555050565b61160b612295565b73ffffffffffffffffffffffffffffffffffffffff16611629611891565b73ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613e5d565b60405180910390fd5b8060039080519060200190611695929190612e7d565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613d3d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613e1d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180b612295565b73ffffffffffffffffffffffffffffffffffffffff16611829611891565b73ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690613e5d565b60405180910390fd5b611889600061282b565b565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546118c9906141ab565b80601f01602080910402602001604051908101604052809291908181526020018280546118f5906141ab565b80156119425780601f1061191757610100808354040283529160200191611942565b820191906000526020600020905b81548152906001019060200180831161192557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290613d1d565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aac9190613bc5565b60405180910390a35050565b611ac0612295565b73ffffffffffffffffffffffffffffffffffffffff16611ade611891565b73ffffffffffffffffffffffffffffffffffffffff1614611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613e5d565b60405180910390fd5b8060098190555050565b611b46612295565b73ffffffffffffffffffffffffffffffffffffffff16611b64611891565b73ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190613e5d565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611be133836123e0565b611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790613e7d565b60405180910390fd5b611c2c848484846128ef565b50505050565b6060611c3d826122bb565b611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613e9d565b60405180910390fd5b6060600860019054906101000a900460ff1615611cbb576003604051602001611ca59190613b27565b6040516020818303038152906040529050611ce9565b6003611cc68461294b565b604051602001611cd7929190613ad6565b60405160208183030381529060405290505b80915050919050565b611cfa612295565b73ffffffffffffffffffffffffffffffffffffffff16611d18611891565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613e5d565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606003604051602001611d9f9190613b05565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4f612295565b73ffffffffffffffffffffffffffffffffffffffff16611e6d611891565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90613e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613cfd565b60405180910390fd5b611f3c8161282b565b50565b600060149054906101000a900460ff1615611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690613ddd565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613d7d565b60405180910390fd5b6000612003612295565b905060008251905060095481600a5461201c919061403a565b111561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613d9d565b60405180910390fd5b6000600a54905081600a6000828254612076919061403a565b9250508190555060005b8281101561227457600b600086838151811061209f5761209e614315565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa90613c3d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86838151811061215457612153614315565b5b60200260200101516040518263ffffffff1660e01b81526004016121789190613edd565b60206040518083038186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c8919061323d565b73ffffffffffffffffffffffffffffffffffffffff166121e6612295565b73ffffffffffffffffffffffffffffffffffffffff161461220657600080fd5b61221b848284612216919061403a565b61229d565b6001600b600087848151811061223457612233614315565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061226c9061420e565b915050612080565b5050505060008060146101000a81548160ff02191690831515021790555050565b600033905090565b6122b7828260405180602001604052806000815250612aac565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661239a83611699565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123eb826122bb565b61242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242190613c1d565b60405180910390fd5b600061243583611699565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124a457508373ffffffffffffffffffffffffffffffffffffffff1661248c84610bd5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124b557506124b48185611db3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124de82611699565b73ffffffffffffffffffffffffffffffffffffffff1614612534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252b90613e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b90613c5d565b60405180910390fd5b6125af838383612b07565b6125ba600082612327565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260a91906140c1565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612661919061403a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061272582611699565b905061273381600084612b07565b61273e600083612327565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278e91906140c1565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128fa8484846124be565b61290684848484612b0c565b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90613d5d565b60405180910390fd5b50505050565b60606000821415612993576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa7565b600082905060005b600082146129c55780806129ae9061420e565b915050600a826129be9190614090565b915061299b565b60008167ffffffffffffffff8111156129e1576129e0614344565b5b6040519080825280601f01601f191660200182016040528015612a135781602001600182028036833780820191505090505b5090505b60008514612aa057600182612a2c91906140c1565b9150600a85612a3b9190614257565b6030612a47919061403a565b60f81b818381518110612a5d57612a5c614315565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a999190614090565b9450612a17565b8093505050505b919050565b612ab68383612c9c565b612ac36000848484612b0c565b612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990613d5d565b60405180910390fd5b505050565b505050565b6000612b2d8473ffffffffffffffffffffffffffffffffffffffff16612e6a565b15612c8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b719493929190613b79565b602060405180830381600087803b158015612b8b57600080fd5b505af1925050508015612bbc57506040513d601f19601f82011682018060405250810190612bb99190613547565b60015b612c3f573d8060008114612bec576040519150601f19603f3d011682016040523d82523d6000602084013e612bf1565b606091505b50600081511415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90613d5d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c94565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613dfd565b60405180910390fd5b612d15816122bb565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613c7d565b60405180910390fd5b612d6160008383612b07565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db1919061403a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e89906141ab565b90600052602060002090601f016020900481019282612eab5760008555612ef2565b82601f10612ec457805160ff1916838001178555612ef2565b82800160010185558215612ef2579182015b82811115612ef1578251825591602001919060010190612ed6565b5b509050612eff9190612f03565b5090565b5b80821115612f1c576000816000905550600101612f04565b5090565b6000612f33612f2e84613f1d565b613ef8565b90508083825260208201905082856020860282011115612f5657612f5561437d565b5b60005b85811015612f865781612f6c8882613084565b845260208401935060208301925050600181019050612f59565b5050509392505050565b6000612fa3612f9e84613f49565b613ef8565b90508083825260208201905082856020860282011115612fc657612fc561437d565b5b60005b85811015612ff65781612fdc88826131fb565b845260208401935060208301925050600181019050612fc9565b5050509392505050565b600061301361300e84613f75565b613ef8565b90508281526020810184848401111561302f5761302e614382565b5b61303a848285614169565b509392505050565b600061305561305084613fa6565b613ef8565b90508281526020810184848401111561307157613070614382565b5b61307c848285614169565b509392505050565b600081359050613093816147a6565b92915050565b6000815190506130a8816147a6565b92915050565b600082601f8301126130c3576130c2614378565b5b81356130d3848260208601612f20565b91505092915050565b600082601f8301126130f1576130f0614378565b5b8135613101848260208601612f90565b91505092915050565b600081359050613119816147bd565b92915050565b60008135905061312e816147d4565b92915050565b600081519050613143816147d4565b92915050565b60008083601f84011261315f5761315e614378565b5b8235905067ffffffffffffffff81111561317c5761317b614373565b5b6020830191508360018202830111156131985761319761437d565b5b9250929050565b600082601f8301126131b4576131b3614378565b5b81356131c4848260208601613000565b91505092915050565b600082601f8301126131e2576131e1614378565b5b81356131f2848260208601613042565b91505092915050565b60008135905061320a816147eb565b92915050565b6000602082840312156132265761322561438c565b5b600061323484828501613084565b91505092915050565b6000602082840312156132535761325261438c565b5b600061326184828501613099565b91505092915050565b600080604083850312156132815761328061438c565b5b600061328f85828601613084565b92505060206132a085828601613084565b9150509250929050565b6000806000606084860312156132c3576132c261438c565b5b60006132d186828701613084565b93505060206132e286828701613084565b92505060406132f3868287016131fb565b9150509250925092565b6000806000806000608086880312156133195761331861438c565b5b600061332788828901613084565b955050602061333888828901613084565b9450506040613349888289016131fb565b935050606086013567ffffffffffffffff81111561336a57613369614387565b5b61337688828901613149565b92509250509295509295909350565b6000806000806080858703121561339f5761339e61438c565b5b60006133ad87828801613084565b94505060206133be87828801613084565b93505060406133cf878288016131fb565b925050606085013567ffffffffffffffff8111156133f0576133ef614387565b5b6133fc8782880161319f565b91505092959194509250565b6000806040838503121561341f5761341e61438c565b5b600061342d85828601613084565b925050602061343e8582860161310a565b9150509250929050565b6000806040838503121561345f5761345e61438c565b5b600061346d85828601613084565b925050602061347e858286016131fb565b9150509250929050565b60006020828403121561349e5761349d61438c565b5b600082013567ffffffffffffffff8111156134bc576134bb614387565b5b6134c8848285016130ae565b91505092915050565b6000602082840312156134e7576134e661438c565b5b600082013567ffffffffffffffff81111561350557613504614387565b5b613511848285016130dc565b91505092915050565b6000602082840312156135305761352f61438c565b5b600061353e8482850161311f565b91505092915050565b60006020828403121561355d5761355c61438c565b5b600061356b84828501613134565b91505092915050565b60006020828403121561358a5761358961438c565b5b600082013567ffffffffffffffff8111156135a8576135a7614387565b5b6135b4848285016131cd565b91505092915050565b6000602082840312156135d3576135d261438c565b5b60006135e1848285016131fb565b91505092915050565b6135f3816140f5565b82525050565b61360281614107565b82525050565b61361181614113565b82525050565b600061362282613fec565b61362c8185614002565b935061363c818560208601614178565b61364581614391565b840191505092915050565b600061365b82613ff7565b613665818561401e565b9350613675818560208601614178565b61367e81614391565b840191505092915050565b600061369482613ff7565b61369e818561402f565b93506136ae818560208601614178565b80840191505092915050565b600081546136c7816141ab565b6136d1818661402f565b945060018216600081146136ec57600181146136fd57613730565b60ff19831686528186019350613730565b61370685613fd7565b60005b8381101561372857815481890152600182019150602081019050613709565b838801955050505b50505092915050565b600061374660208361401e565b9150613751826143a2565b602082019050919050565b6000613769600d8361402f565b9150613774826143cb565b600d82019050919050565b600061378c601c8361401e565b9150613797826143f4565b602082019050919050565b60006137af601b8361401e565b91506137ba8261441d565b602082019050919050565b60006137d2601c8361401e565b91506137dd82614446565b602082019050919050565b60006137f560208361401e565b91506138008261446f565b602082019050919050565b6000613818601e8361401e565b915061382382614498565b602082019050919050565b600061383b60188361401e565b9150613846826144c1565b602082019050919050565b600061385e60208361401e565b9150613869826144ea565b602082019050919050565b600061388160198361401e565b915061388c82614513565b602082019050919050565b60006138a4600c8361402f565b91506138af8261453c565b600c82019050919050565b60006138c7601e8361401e565b91506138d282614565565b602082019050919050565b60006138ea601a8361401e565b91506138f58261458e565b602082019050919050565b600061390d60138361401e565b9150613918826145b7565b602082019050919050565b600061393060118361401e565b915061393b826145e0565b602082019050919050565b6000613953601f8361401e565b915061395e82614609565b602082019050919050565b6000613976601f8361401e565b915061398182614632565b602082019050919050565b600061399960208361401e565b91506139a48261465b565b602082019050919050565b60006139bc60208361401e565b91506139c782614684565b602082019050919050565b60006139df60058361402f565b91506139ea826146ad565b600582019050919050565b6000613a02601c8361401e565b9150613a0d826146d6565b602082019050919050565b6000613a2560208361401e565b9150613a30826146ff565b602082019050919050565b6000613a48601c8361401e565b9150613a5382614728565b602082019050919050565b6000613a6b600083614013565b9150613a7682614751565b600082019050919050565b6000613a8e601d8361401e565b9150613a9982614754565b602082019050919050565b6000613ab160138361401e565b9150613abc8261477d565b602082019050919050565b613ad08161415f565b82525050565b6000613ae282856136ba565b9150613aee8284613689565b9150613af9826139d2565b91508190509392505050565b6000613b1182846136ba565b9150613b1c8261375c565b915081905092915050565b6000613b3382846136ba565b9150613b3e82613897565b915081905092915050565b6000613b5482613a5e565b9150819050919050565b6000602082019050613b7360008301846135ea565b92915050565b6000608082019050613b8e60008301876135ea565b613b9b60208301866135ea565b613ba86040830185613ac7565b8181036060830152613bba8184613617565b905095945050505050565b6000602082019050613bda60008301846135f9565b92915050565b6000602082019050613bf56000830184613608565b92915050565b60006020820190508181036000830152613c158184613650565b905092915050565b60006020820190508181036000830152613c3681613739565b9050919050565b60006020820190508181036000830152613c568161377f565b9050919050565b60006020820190508181036000830152613c76816137a2565b9050919050565b60006020820190508181036000830152613c96816137c5565b9050919050565b60006020820190508181036000830152613cb6816137e8565b9050919050565b60006020820190508181036000830152613cd68161380b565b9050919050565b60006020820190508181036000830152613cf68161382e565b9050919050565b60006020820190508181036000830152613d1681613851565b9050919050565b60006020820190508181036000830152613d3681613874565b9050919050565b60006020820190508181036000830152613d56816138ba565b9050919050565b60006020820190508181036000830152613d76816138dd565b9050919050565b60006020820190508181036000830152613d9681613900565b9050919050565b60006020820190508181036000830152613db681613923565b9050919050565b60006020820190508181036000830152613dd681613946565b9050919050565b60006020820190508181036000830152613df681613969565b9050919050565b60006020820190508181036000830152613e168161398c565b9050919050565b60006020820190508181036000830152613e36816139af565b9050919050565b60006020820190508181036000830152613e56816139f5565b9050919050565b60006020820190508181036000830152613e7681613a18565b9050919050565b60006020820190508181036000830152613e9681613a3b565b9050919050565b60006020820190508181036000830152613eb681613a81565b9050919050565b60006020820190508181036000830152613ed681613aa4565b9050919050565b6000602082019050613ef26000830184613ac7565b92915050565b6000613f02613f13565b9050613f0e82826141dd565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3857613f37614344565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f6457613f63614344565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f614344565b5b613f9982614391565b9050602081019050919050565b600067ffffffffffffffff821115613fc157613fc0614344565b5b613fca82614391565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140458261415f565b91506140508361415f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408557614084614288565b5b828201905092915050565b600061409b8261415f565b91506140a68361415f565b9250826140b6576140b56142b7565b5b828204905092915050565b60006140cc8261415f565b91506140d78361415f565b9250828210156140ea576140e9614288565b5b828203905092915050565b60006141008261413f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561419657808201518184015260208101905061417b565b838111156141a5576000848401525b50505050565b600060028204905060018216806141c357607f821691505b602082108114156141d7576141d66142e6565b5b50919050565b6141e682614391565b810181811067ffffffffffffffff8211171561420557614204614344565b5b80604052505050565b60006142198261415f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424c5761424b614288565b5b600182019050919050565b60006142628261415f565b915061426d8361415f565b92508261427d5761427c6142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4f6e65206f72206d6f726520616c726561647920636c61696d65642100000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f636c6f73656420666f7220627573696e65737300000000000000000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147af816140f5565b81146147ba57600080fd5b50565b6147c681614107565b81146147d157600080fd5b50565b6147dd81614113565b81146147e857600080fd5b50565b6147f48161415f565b81146147ff57600080fd5b5056fea2646970667358221220cd64782c28877b9f555c9df181e1b58c5be830fa06208705d90ea24624da178c64736f6c6343000807003368747470733a2f2f6368616d656c656f6e636f6c6c6563746976652e696f2f6d657461646174612f6370782f

Deployed Bytecode

0x6080604052600436106102125760003560e01c806353b8eb6711610118578063b0b92263116100a0578063c91c04621161006f578063c91c046214610752578063e8a3d48514610769578063e985e9c514610794578063f2fde38b146107d1578063f8e93ef9146107fa57610219565b8063b0b92263146106ac578063b5b3e214146106d5578063b88d4fde146106ec578063c87b56dd1461071557610219565b8063715018a6116100e7578063715018a6146105eb5780637e1c0c09146106025780638da5cb5b1461062d57806395d89b4114610658578063a22cb4651461068357610219565b806353b8eb671461051f57806355f804b3146105485780636352211e1461057157806370a08231146105ae57610219565b80632e56f71e1161019b57806342842e0e1161016a57806342842e0e1461045057806342966c681461047957806347fc822f146104a2578063484b973c146104cb57806349a772b5146104f457610219565b80632e56f71e146103ce57806335a55caa146103e55780633ba5939d146104225780633ccfd60b1461043957610219565b8063095ea7b3116101e2578063095ea7b3146102e9578063150b7a021461031257806318160ddd1461034f57806323b872dd1461037a57806325fd90f3146103a357610219565b8062b6849f1461021b57806301ffc9a71461024457806306fdde0314610281578063081812fc146102ac57610219565b3661021957005b005b34801561022757600080fd5b50610242600480360381019061023d9190613488565b610823565b005b34801561025057600080fd5b5061026b6004803603810190610266919061351a565b6109ba565b6040516102789190613bc5565b60405180910390f35b34801561028d57600080fd5b50610296610b43565b6040516102a39190613bfb565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce91906135bd565b610bd5565b6040516102e09190613b5e565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613448565b610c5a565b005b34801561031e57600080fd5b50610339600480360381019061033491906132fd565b610d64565b6040516103469190613be0565b60405180910390f35b34801561035b57600080fd5b50610364610d79565b6040516103719190613edd565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906132aa565b610d83565b005b3480156103af57600080fd5b506103b8610ddc565b6040516103c59190613bc5565b60405180910390f35b3480156103da57600080fd5b506103e3610def565b005b3480156103f157600080fd5b5061040c600480360381019061040791906135bd565b610e88565b6040516104199190613bc5565b60405180910390f35b34801561042e57600080fd5b50610437610eb2565b005b34801561044557600080fd5b5061044e610f4b565b005b34801561045c57600080fd5b50610477600480360381019061047291906132aa565b61107c565b005b34801561048557600080fd5b506104a0600480360381019061049b91906135bd565b61109c565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613210565b6110ef565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190613448565b6111af565b005b34801561050057600080fd5b50610509611326565b6040516105169190613edd565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906135bd565b61132c565b005b34801561055457600080fd5b5061056f600480360381019061056a9190613574565b611603565b005b34801561057d57600080fd5b50610598600480360381019061059391906135bd565b611699565b6040516105a59190613b5e565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613210565b61174b565b6040516105e29190613edd565b60405180910390f35b3480156105f757600080fd5b50610600611803565b005b34801561060e57600080fd5b5061061761188b565b6040516106249190613edd565b60405180910390f35b34801561063957600080fd5b50610642611891565b60405161064f9190613b5e565b60405180910390f35b34801561066457600080fd5b5061066d6118ba565b60405161067a9190613bfb565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613408565b61194c565b005b3480156106b857600080fd5b506106d360048036038101906106ce91906135bd565b611ab8565b005b3480156106e157600080fd5b506106ea611b3e565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613385565b611bd7565b005b34801561072157600080fd5b5061073c600480360381019061073791906135bd565b611c32565b6040516107499190613bfb565b60405180910390f35b34801561075e57600080fd5b50610767611cf2565b005b34801561077557600080fd5b5061077e611d8b565b60405161078b9190613bfb565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b6919061326a565b611db3565b6040516107c89190613bc5565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613210565b611e47565b005b34801561080657600080fd5b50610821600480360381019061081c91906134d1565b611f3f565b005b61082b612295565b73ffffffffffffffffffffffffffffffffffffffff16610849611891565b73ffffffffffffffffffffffffffffffffffffffff161461089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690613e5d565b60405180910390fd5b600081519050600a5481600a546108b6919061403a565b116108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed90613ebd565b60405180910390fd5b60095481600a54610907919061403a565b1115610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90613d9d565b60405180910390fd5b6000600a54905060005b828110156109b4576109898482815181106109705761096f614315565b5b60200260200101518284610984919061403a565b61229d565b600a600081548092919061099c9061420e565b919050555080806109ac9061420e565b915050610952565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aed57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b52906141ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e906141ab565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b6000610be0826122bb565b610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613c9d565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6582611699565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90613cbd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d165750610d158133611db3565b5b610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613dbd565b60405180910390fd5b610d5f8383612327565b505050565b600063150b7a0260e01b905095945050505050565b6000600a54905090565b610d8d33826123e0565b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613e7d565b60405180910390fd5b610dd78383836124be565b505050565b600860009054906101000a900460ff1681565b610df7612295565b73ffffffffffffffffffffffffffffffffffffffff16610e15611891565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613e5d565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6000600b600083815260200190815260200160002060009054906101000a900460ff169050919050565b610eba612295565b73ffffffffffffffffffffffffffffffffffffffff16610ed8611891565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590613e5d565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b610f53612295565b73ffffffffffffffffffffffffffffffffffffffff16610f71611891565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90613e5d565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610ff290613b49565b60006040518083038185875af1925050503d806000811461102f576040519150601f19603f3d011682016040523d82523d6000602084013e611034565b606091505b5050905080611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613cdd565b60405180910390fd5b5050565b61109783838360405180602001604052806000815250611bd7565b505050565b6110a581611699565b73ffffffffffffffffffffffffffffffffffffffff166110c3612295565b73ffffffffffffffffffffffffffffffffffffffff16146110e357600080fd5b6110ec8161271a565b50565b6110f7612295565b73ffffffffffffffffffffffffffffffffffffffff16611115611891565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613e5d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111b7612295565b73ffffffffffffffffffffffffffffffffffffffff166111d5611891565b73ffffffffffffffffffffffffffffffffffffffff161461122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613e5d565b60405180910390fd5b600a5481600a5461123c919061403a565b1161127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390613ebd565b60405180910390fd5b60095481600a5461128d919061403a565b11156112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613d9d565b60405180910390fd5b6000600a54905060005b82811015611320576112f58482846112f0919061403a565b61229d565b600a60008154809291906113089061420e565b919050555080806113189061420e565b9150506112d8565b50505050565b600a5481565b600060149054906101000a900460ff161561137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613ddd565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff166113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90613d7d565b60405180910390fd5b6009546001600a546113f8919061403a565b1115611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613d9d565b60405180910390fd5b6000611443612295565b90506000600a549050600a600081548092919061145f9061420e565b9190505550600b600084815260200190815260200160002060009054906101000a900460ff16156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613c3d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016115209190613edd565b60206040518083038186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611570919061323d565b73ffffffffffffffffffffffffffffffffffffffff1661158e612295565b73ffffffffffffffffffffffffffffffffffffffff16146115ae57600080fd5b6115b8828261229d565b6001600b600085815260200190815260200160002060006101000a81548160ff021916908315150217905550505060008060146101000a81548160ff02191690831515021790555050565b61160b612295565b73ffffffffffffffffffffffffffffffffffffffff16611629611891565b73ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613e5d565b60405180910390fd5b8060039080519060200190611695929190612e7d565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613d3d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613e1d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180b612295565b73ffffffffffffffffffffffffffffffffffffffff16611829611891565b73ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690613e5d565b60405180910390fd5b611889600061282b565b565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546118c9906141ab565b80601f01602080910402602001604051908101604052809291908181526020018280546118f5906141ab565b80156119425780601f1061191757610100808354040283529160200191611942565b820191906000526020600020905b81548152906001019060200180831161192557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290613d1d565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aac9190613bc5565b60405180910390a35050565b611ac0612295565b73ffffffffffffffffffffffffffffffffffffffff16611ade611891565b73ffffffffffffffffffffffffffffffffffffffff1614611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613e5d565b60405180910390fd5b8060098190555050565b611b46612295565b73ffffffffffffffffffffffffffffffffffffffff16611b64611891565b73ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190613e5d565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611be133836123e0565b611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790613e7d565b60405180910390fd5b611c2c848484846128ef565b50505050565b6060611c3d826122bb565b611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613e9d565b60405180910390fd5b6060600860019054906101000a900460ff1615611cbb576003604051602001611ca59190613b27565b6040516020818303038152906040529050611ce9565b6003611cc68461294b565b604051602001611cd7929190613ad6565b60405160208183030381529060405290505b80915050919050565b611cfa612295565b73ffffffffffffffffffffffffffffffffffffffff16611d18611891565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613e5d565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606003604051602001611d9f9190613b05565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4f612295565b73ffffffffffffffffffffffffffffffffffffffff16611e6d611891565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90613e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613cfd565b60405180910390fd5b611f3c8161282b565b50565b600060149054906101000a900460ff1615611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690613ddd565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613d7d565b60405180910390fd5b6000612003612295565b905060008251905060095481600a5461201c919061403a565b111561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613d9d565b60405180910390fd5b6000600a54905081600a6000828254612076919061403a565b9250508190555060005b8281101561227457600b600086838151811061209f5761209e614315565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa90613c3d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86838151811061215457612153614315565b5b60200260200101516040518263ffffffff1660e01b81526004016121789190613edd565b60206040518083038186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c8919061323d565b73ffffffffffffffffffffffffffffffffffffffff166121e6612295565b73ffffffffffffffffffffffffffffffffffffffff161461220657600080fd5b61221b848284612216919061403a565b61229d565b6001600b600087848151811061223457612233614315565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061226c9061420e565b915050612080565b5050505060008060146101000a81548160ff02191690831515021790555050565b600033905090565b6122b7828260405180602001604052806000815250612aac565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661239a83611699565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123eb826122bb565b61242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242190613c1d565b60405180910390fd5b600061243583611699565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124a457508373ffffffffffffffffffffffffffffffffffffffff1661248c84610bd5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124b557506124b48185611db3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124de82611699565b73ffffffffffffffffffffffffffffffffffffffff1614612534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252b90613e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b90613c5d565b60405180910390fd5b6125af838383612b07565b6125ba600082612327565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260a91906140c1565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612661919061403a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061272582611699565b905061273381600084612b07565b61273e600083612327565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278e91906140c1565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128fa8484846124be565b61290684848484612b0c565b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90613d5d565b60405180910390fd5b50505050565b60606000821415612993576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa7565b600082905060005b600082146129c55780806129ae9061420e565b915050600a826129be9190614090565b915061299b565b60008167ffffffffffffffff8111156129e1576129e0614344565b5b6040519080825280601f01601f191660200182016040528015612a135781602001600182028036833780820191505090505b5090505b60008514612aa057600182612a2c91906140c1565b9150600a85612a3b9190614257565b6030612a47919061403a565b60f81b818381518110612a5d57612a5c614315565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a999190614090565b9450612a17565b8093505050505b919050565b612ab68383612c9c565b612ac36000848484612b0c565b612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990613d5d565b60405180910390fd5b505050565b505050565b6000612b2d8473ffffffffffffffffffffffffffffffffffffffff16612e6a565b15612c8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b719493929190613b79565b602060405180830381600087803b158015612b8b57600080fd5b505af1925050508015612bbc57506040513d601f19601f82011682018060405250810190612bb99190613547565b60015b612c3f573d8060008114612bec576040519150601f19603f3d011682016040523d82523d6000602084013e612bf1565b606091505b50600081511415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90613d5d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c94565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613dfd565b60405180910390fd5b612d15816122bb565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613c7d565b60405180910390fd5b612d6160008383612b07565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db1919061403a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e89906141ab565b90600052602060002090601f016020900481019282612eab5760008555612ef2565b82601f10612ec457805160ff1916838001178555612ef2565b82800160010185558215612ef2579182015b82811115612ef1578251825591602001919060010190612ed6565b5b509050612eff9190612f03565b5090565b5b80821115612f1c576000816000905550600101612f04565b5090565b6000612f33612f2e84613f1d565b613ef8565b90508083825260208201905082856020860282011115612f5657612f5561437d565b5b60005b85811015612f865781612f6c8882613084565b845260208401935060208301925050600181019050612f59565b5050509392505050565b6000612fa3612f9e84613f49565b613ef8565b90508083825260208201905082856020860282011115612fc657612fc561437d565b5b60005b85811015612ff65781612fdc88826131fb565b845260208401935060208301925050600181019050612fc9565b5050509392505050565b600061301361300e84613f75565b613ef8565b90508281526020810184848401111561302f5761302e614382565b5b61303a848285614169565b509392505050565b600061305561305084613fa6565b613ef8565b90508281526020810184848401111561307157613070614382565b5b61307c848285614169565b509392505050565b600081359050613093816147a6565b92915050565b6000815190506130a8816147a6565b92915050565b600082601f8301126130c3576130c2614378565b5b81356130d3848260208601612f20565b91505092915050565b600082601f8301126130f1576130f0614378565b5b8135613101848260208601612f90565b91505092915050565b600081359050613119816147bd565b92915050565b60008135905061312e816147d4565b92915050565b600081519050613143816147d4565b92915050565b60008083601f84011261315f5761315e614378565b5b8235905067ffffffffffffffff81111561317c5761317b614373565b5b6020830191508360018202830111156131985761319761437d565b5b9250929050565b600082601f8301126131b4576131b3614378565b5b81356131c4848260208601613000565b91505092915050565b600082601f8301126131e2576131e1614378565b5b81356131f2848260208601613042565b91505092915050565b60008135905061320a816147eb565b92915050565b6000602082840312156132265761322561438c565b5b600061323484828501613084565b91505092915050565b6000602082840312156132535761325261438c565b5b600061326184828501613099565b91505092915050565b600080604083850312156132815761328061438c565b5b600061328f85828601613084565b92505060206132a085828601613084565b9150509250929050565b6000806000606084860312156132c3576132c261438c565b5b60006132d186828701613084565b93505060206132e286828701613084565b92505060406132f3868287016131fb565b9150509250925092565b6000806000806000608086880312156133195761331861438c565b5b600061332788828901613084565b955050602061333888828901613084565b9450506040613349888289016131fb565b935050606086013567ffffffffffffffff81111561336a57613369614387565b5b61337688828901613149565b92509250509295509295909350565b6000806000806080858703121561339f5761339e61438c565b5b60006133ad87828801613084565b94505060206133be87828801613084565b93505060406133cf878288016131fb565b925050606085013567ffffffffffffffff8111156133f0576133ef614387565b5b6133fc8782880161319f565b91505092959194509250565b6000806040838503121561341f5761341e61438c565b5b600061342d85828601613084565b925050602061343e8582860161310a565b9150509250929050565b6000806040838503121561345f5761345e61438c565b5b600061346d85828601613084565b925050602061347e858286016131fb565b9150509250929050565b60006020828403121561349e5761349d61438c565b5b600082013567ffffffffffffffff8111156134bc576134bb614387565b5b6134c8848285016130ae565b91505092915050565b6000602082840312156134e7576134e661438c565b5b600082013567ffffffffffffffff81111561350557613504614387565b5b613511848285016130dc565b91505092915050565b6000602082840312156135305761352f61438c565b5b600061353e8482850161311f565b91505092915050565b60006020828403121561355d5761355c61438c565b5b600061356b84828501613134565b91505092915050565b60006020828403121561358a5761358961438c565b5b600082013567ffffffffffffffff8111156135a8576135a7614387565b5b6135b4848285016131cd565b91505092915050565b6000602082840312156135d3576135d261438c565b5b60006135e1848285016131fb565b91505092915050565b6135f3816140f5565b82525050565b61360281614107565b82525050565b61361181614113565b82525050565b600061362282613fec565b61362c8185614002565b935061363c818560208601614178565b61364581614391565b840191505092915050565b600061365b82613ff7565b613665818561401e565b9350613675818560208601614178565b61367e81614391565b840191505092915050565b600061369482613ff7565b61369e818561402f565b93506136ae818560208601614178565b80840191505092915050565b600081546136c7816141ab565b6136d1818661402f565b945060018216600081146136ec57600181146136fd57613730565b60ff19831686528186019350613730565b61370685613fd7565b60005b8381101561372857815481890152600182019150602081019050613709565b838801955050505b50505092915050565b600061374660208361401e565b9150613751826143a2565b602082019050919050565b6000613769600d8361402f565b9150613774826143cb565b600d82019050919050565b600061378c601c8361401e565b9150613797826143f4565b602082019050919050565b60006137af601b8361401e565b91506137ba8261441d565b602082019050919050565b60006137d2601c8361401e565b91506137dd82614446565b602082019050919050565b60006137f560208361401e565b91506138008261446f565b602082019050919050565b6000613818601e8361401e565b915061382382614498565b602082019050919050565b600061383b60188361401e565b9150613846826144c1565b602082019050919050565b600061385e60208361401e565b9150613869826144ea565b602082019050919050565b600061388160198361401e565b915061388c82614513565b602082019050919050565b60006138a4600c8361402f565b91506138af8261453c565b600c82019050919050565b60006138c7601e8361401e565b91506138d282614565565b602082019050919050565b60006138ea601a8361401e565b91506138f58261458e565b602082019050919050565b600061390d60138361401e565b9150613918826145b7565b602082019050919050565b600061393060118361401e565b915061393b826145e0565b602082019050919050565b6000613953601f8361401e565b915061395e82614609565b602082019050919050565b6000613976601f8361401e565b915061398182614632565b602082019050919050565b600061399960208361401e565b91506139a48261465b565b602082019050919050565b60006139bc60208361401e565b91506139c782614684565b602082019050919050565b60006139df60058361402f565b91506139ea826146ad565b600582019050919050565b6000613a02601c8361401e565b9150613a0d826146d6565b602082019050919050565b6000613a2560208361401e565b9150613a30826146ff565b602082019050919050565b6000613a48601c8361401e565b9150613a5382614728565b602082019050919050565b6000613a6b600083614013565b9150613a7682614751565b600082019050919050565b6000613a8e601d8361401e565b9150613a9982614754565b602082019050919050565b6000613ab160138361401e565b9150613abc8261477d565b602082019050919050565b613ad08161415f565b82525050565b6000613ae282856136ba565b9150613aee8284613689565b9150613af9826139d2565b91508190509392505050565b6000613b1182846136ba565b9150613b1c8261375c565b915081905092915050565b6000613b3382846136ba565b9150613b3e82613897565b915081905092915050565b6000613b5482613a5e565b9150819050919050565b6000602082019050613b7360008301846135ea565b92915050565b6000608082019050613b8e60008301876135ea565b613b9b60208301866135ea565b613ba86040830185613ac7565b8181036060830152613bba8184613617565b905095945050505050565b6000602082019050613bda60008301846135f9565b92915050565b6000602082019050613bf56000830184613608565b92915050565b60006020820190508181036000830152613c158184613650565b905092915050565b60006020820190508181036000830152613c3681613739565b9050919050565b60006020820190508181036000830152613c568161377f565b9050919050565b60006020820190508181036000830152613c76816137a2565b9050919050565b60006020820190508181036000830152613c96816137c5565b9050919050565b60006020820190508181036000830152613cb6816137e8565b9050919050565b60006020820190508181036000830152613cd68161380b565b9050919050565b60006020820190508181036000830152613cf68161382e565b9050919050565b60006020820190508181036000830152613d1681613851565b9050919050565b60006020820190508181036000830152613d3681613874565b9050919050565b60006020820190508181036000830152613d56816138ba565b9050919050565b60006020820190508181036000830152613d76816138dd565b9050919050565b60006020820190508181036000830152613d9681613900565b9050919050565b60006020820190508181036000830152613db681613923565b9050919050565b60006020820190508181036000830152613dd681613946565b9050919050565b60006020820190508181036000830152613df681613969565b9050919050565b60006020820190508181036000830152613e168161398c565b9050919050565b60006020820190508181036000830152613e36816139af565b9050919050565b60006020820190508181036000830152613e56816139f5565b9050919050565b60006020820190508181036000830152613e7681613a18565b9050919050565b60006020820190508181036000830152613e9681613a3b565b9050919050565b60006020820190508181036000830152613eb681613a81565b9050919050565b60006020820190508181036000830152613ed681613aa4565b9050919050565b6000602082019050613ef26000830184613ac7565b92915050565b6000613f02613f13565b9050613f0e82826141dd565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3857613f37614344565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f6457613f63614344565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f614344565b5b613f9982614391565b9050602081019050919050565b600067ffffffffffffffff821115613fc157613fc0614344565b5b613fca82614391565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140458261415f565b91506140508361415f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408557614084614288565b5b828201905092915050565b600061409b8261415f565b91506140a68361415f565b9250826140b6576140b56142b7565b5b828204905092915050565b60006140cc8261415f565b91506140d78361415f565b9250828210156140ea576140e9614288565b5b828203905092915050565b60006141008261413f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561419657808201518184015260208101905061417b565b838111156141a5576000848401525b50505050565b600060028204905060018216806141c357607f821691505b602082108114156141d7576141d66142e6565b5b50919050565b6141e682614391565b810181811067ffffffffffffffff8211171561420557614204614344565b5b80604052505050565b60006142198261415f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424c5761424b614288565b5b600182019050919050565b60006142628261415f565b915061426d8361415f565b92508261427d5761427c6142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4f6e65206f72206d6f726520616c726561647920636c61696d65642100000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f636c6f73656420666f7220627573696e65737300000000000000000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147af816140f5565b81146147ba57600080fd5b50565b6147c681614107565b81146147d157600080fd5b50565b6147dd81614113565b81146147e857600080fd5b50565b6147f48161415f565b81146147ff57600080fd5b5056fea2646970667358221220cd64782c28877b9f555c9df181e1b58c5be830fa06208705d90ea24624da178c64736f6c63430008070033

Deployed Bytecode Sourcemap

17624:18549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19239:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34990:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24634:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24196:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33934:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23273:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25504:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18372:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23071:80;;;;;;;;;;;;;:::i;:::-;;22754:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23501:81;;;;;;;;;;;;;:::i;:::-;;19681:223;;;;;;;;;;;;;:::i;:::-;;25889:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21336:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22626:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21469:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18486:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20654:611;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22875:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23906:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;18453:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35131:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24913:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23163:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23411:78;;;;;;;;;;;;;:::i;:::-;;26145:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35306:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22982:77;;;;;;;;;;;;;:::i;:::-;;35864:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25273:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19916:730;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21952:458;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22021:11:::1;22035:3;:10;22021:24;;22087:12;;22080:3;22065:12;;:18;;;;:::i;:::-;22064:35;22056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22166:11;;22158:3;22143:12;;:18;;;;:::i;:::-;22142:35;;22134:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22220:21;22244:12;;22220:36;;22281:9;22277:126;22300:3;22296:1;:7;22277:126;;;22325:36;22335:3;22339:1;22335:6;;;;;;;;:::i;:::-;;;;;;;;22359:1;22343:13;:17;;;;:::i;:::-;22325:9;:36::i;:::-;22376:12;;:15;;;;;;;;;:::i;:::-;;;;;;22305:3;;;;;:::i;:::-;;;;22277:126;;;;22010:400;;21952:458:::0;:::o;19239:360::-;19324:4;19364:25;19349:40;;;:11;:40;;;;:109;;;;19425:33;19410:48;;;:11;:48;;;;19349:109;:170;;;;19494:25;19479:40;;;:11;:40;;;;19349:170;:242;;;;19555:36;;;19540:51;;;:11;:51;;;;19349:242;19341:250;;19239:360;;;:::o;34990:84::-;35029:13;35061:5;35054:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34990:84;:::o;24634:207::-;24710:7;24738:16;24746:7;24738;:16::i;:::-;24730:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24809:15;:24;24825:7;24809:24;;;;;;;;;;;;;;;;;;;;;24802:31;;24634:207;;;:::o;24196:372::-;24277:13;24293:16;24301:7;24293;:16::i;:::-;24277:32;;24334:5;24328:11;;:2;:11;;;;24320:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24423:5;24409:19;;:10;:19;;;:58;;;;24432:35;24449:5;24456:10;24432:16;:35::i;:::-;24409:58;24387:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;24539:21;24548:2;24552:7;24539:8;:21::i;:::-;24266:302;24196:372;;:::o;33934:215::-;34051:6;34111:30;;;34104:37;;33934:215;;;;;;;:::o;23273:126::-;23319:7;23346:12;;23339:19;;23273:126;:::o;25504:314::-;25699:39;25718:10;25730:7;25699:18;:39::i;:::-;25691:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25782:28;25792:4;25798:2;25802:7;25782:9;:28::i;:::-;25504:314;;;:::o;18372:22::-;;;;;;;;;;;;;:::o;23071:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23138:5:::1;23125:10;;:18;;;;;;;;;;;;;;;;;;23071:80::o:0;22754:113::-;22816:4;22840:8;:19;22850:7;22840:19;;;;;;;;;;;;;;;;;;;;;22833:26;;22754:113;;;:::o;23501:81::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23569:5:::1;23555:11;;:19;;;;;;;;;;;;;;;;;;23501:81::o:0;19681:223::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19731:18:::1;19752:21;19731:42;;19785:12;19803:10;:15;;19826:10;19803:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19784:57;;;19860:7;19852:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19720:184;;19681:223::o:0;25889:185::-;26027:39;26044:4;26050:2;26054:7;26027:39;;;;;;;;;;;;:16;:39::i;:::-;25889:185;;;:::o;21336:125::-;21411:16;21419:7;21411;:16::i;:::-;21395:32;;:12;:10;:12::i;:::-;:32;;;21387:41;;;;;;21439:14;21445:7;21439:5;:14::i;:::-;21336:125;:::o;22626:120::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22722:15:::1;22708:4;;:30;;;;;;;;;;;;;;;;;;22626:120:::0;:::o;21469:471::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21575:12:::1;;21568:3;21553:12;;:18;;;;:::i;:::-;21552:35;21544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21654:11;;21646:3;21631:12;;:18;;;;:::i;:::-;21630:35;;21622:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21708:21;21732:12;;21708:36;;21814:9;21810:123;21833:3;21829:1;:7;21810:123;;;21858:33;21868:3;21889:1;21873:13;:17;;;;:::i;:::-;21858:9;:33::i;:::-;21906:12;;:15;;;;;;;;;:::i;:::-;;;;;;21838:3;;;;;:::i;:::-;;;;21810:123;;;;21533:407;21469:471:::0;;:::o;18486:27::-;;;;:::o;20654:611::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;20731:10:::1;;;;;;;;;;;20723:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;20806:11;;20800:1;20785:12;;:16;;;;:::i;:::-;20784:33;;20776:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20850:11;20864:12;:10;:12::i;:::-;20850:26;;20897:21;20921:12;;20897:36;;20989:12;;:15;;;;;;;;;:::i;:::-;;;;;;21058:8;:19;21068:7;21058:19;;;;;;;;;;;;;;;;;;;;;21057:20;21048:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21146:4;;;;;;;;;;;:12;;;21160:7;21146:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21130:39;;:12;:10;:12::i;:::-;:39;;;21121:49;;;::::0;::::1;;21181:29;21191:3;21196:13;21181:9;:29::i;:::-;21243:4;21221:8;:19;21231:7;21221:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20712:553;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;20654:611;:::o;22875:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22956:6:::1;22945:8;:17;;;;;;;;;;;;:::i;:::-;;22875:95:::0;:::o;23906:228::-;23978:7;23998:13;24014:7;:16;24022:7;24014:16;;;;;;;;;;;;;;;;;;;;;23998:32;;24066:1;24049:19;;:5;:19;;;;24041:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24121:5;24114:12;;;23906:228;;;:::o;23646:198::-;23718:7;23763:1;23746:19;;:5;:19;;;;23738:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23820:9;:16;23830:5;23820:16;;;;;;;;;;;;;;;;23813:23;;23646: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;18453:26::-;;;;:::o;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;35131:88::-;35172:13;35204:7;35197:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35131:88;:::o;24913:289::-;25028:10;25016:22;;:8;:22;;;;25008:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25124:8;25081:18;:30;25100:10;25081:30;;;;;;;;;;;;;;;:40;25112:8;25081:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25175:8;25148:46;;25163:10;25148:46;;;25185:8;25148:46;;;;;;:::i;:::-;;;;;;;;24913:289;;:::o;23163:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23248:9:::1;23234:11;:23;;;;23163:102:::0;:::o;23411:78::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23477:4:::1;23463:11;;:18;;;;;;;;;;;;;;;;;;23411:78::o:0;26145:305::-;26320:39;26339:10;26351:7;26320:18;:39::i;:::-;26312:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26403:39;26417:4;26423:2;26427:7;26436:5;26403:13;:39::i;:::-;26145:305;;;;:::o;35306:546::-;35364:13;35397:16;35405:7;35397;:16::i;:::-;35389:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35458:22;35505:11;;;;;;;;;;;35501:308;;;35607:8;35590:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35572:61;;35501:308;;;35759:8;35769:17;35778:7;35769:8;:17::i;:::-;35742:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35724:73;;35501:308;35836:8;35829:15;;;35306:546;;;:::o;22982:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23047:4:::1;23034:10;;:17;;;;;;;;;;;;;;;;;;22982:77::o:0;35864:139::-;35908:13;35969:8;35952:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35938:57;;35864:139;:::o;25273:164::-;25370:4;25394:18;:25;25413:5;25394:25;;;;;;;;;;;;;;;:35;25420:8;25394:35;;;;;;;;;;;;;;;;;;;;;;;;;25387:42;;25273: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;19916:730::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;19997:10:::1;;;;;;;;;;;19989:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;20042:11;20056:12;:10;:12::i;:::-;20042:26;;20079:11;20093:8;:15;20079:29;;20151:11;;20143:3;20128:12;;:18;;;;:::i;:::-;20127:35;;20119:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20197:21;20221:12;;20197:36;;20305:3;20289:12;;:19;;;;;;;:::i;:::-;;;;;;;;20356:9;20352:287;20375:3;20371:1;:7;20352:287;;;20410:8;:23;20420:8;20429:1;20420:11;;;;;;;;:::i;:::-;;;;;;;;20410:23;;;;;;;;;;;;;;;;;;;;;20409:24;20400:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20506:4;;;;;;;;;;;:12;;;20520:8;20529:1;20520:11;;;;;;;;:::i;:::-;;;;;;;;20506:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20490:43;;:12;:10;:12::i;:::-;:43;;;20481:53;;;::::0;::::1;;20549:33;20559:3;20580:1;20564:13;:17;;;;:::i;:::-;20549:9;:33::i;:::-;20623:4;20597:8;:23;20607:8;20616:1;20607:11;;;;;;;;:::i;:::-;;;;;;;;20597:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;20380:3;;;;;:::i;:::-;;;;20352:287;;;;19978:668;;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;19916:730;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;28901:110::-;28977:26;28987:2;28991:7;28977:26;;;;;;;;;;;;:9;:26::i;:::-;28901:110;;:::o;27936:127::-;28001:4;28053:1;28025:30;;:7;:16;28033:7;28025:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28018:37;;27936:127;;;:::o;31837:167::-;31939:2;31912:15;:24;31928:7;31912:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31988:7;31984:2;31957:39;;31966:16;31974:7;31966;:16::i;:::-;31957:39;;;;;;;;;;;;31837:167;;:::o;28230:329::-;28323:4;28348:16;28356:7;28348;:16::i;:::-;28340:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28412:13;28428:16;28436:7;28428;:16::i;:::-;28412:32;;28474:5;28463:16;;:7;:16;;;:51;;;;28507:7;28483:31;;:20;28495:7;28483:11;:20::i;:::-;:31;;;28463:51;:87;;;;28518:32;28535:5;28542:7;28518:16;:32::i;:::-;28463:87;28455:96;;;28230:329;;;;:::o;31172:547::-;31324:4;31304:24;;:16;31312:7;31304;:16::i;:::-;:24;;;31296:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31394:1;31380:16;;:2;:16;;;;31372:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31439:39;31460:4;31466:2;31470:7;31439:20;:39::i;:::-;31543:29;31560:1;31564:7;31543:8;:29::i;:::-;31604:1;31585:9;:15;31595:4;31585:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31633:1;31616:9;:13;31626:2;31616:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31664:2;31645:7;:16;31653:7;31645:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31703:7;31699:2;31684:27;;31693:4;31684:27;;;;;;;;;;;;31172:547;;;:::o;30482:353::-;30542:13;30558:16;30566:7;30558;:16::i;:::-;30542:32;;30587:48;30608:5;30623:1;30627:7;30587:20;:48::i;:::-;30676:29;30693:1;30697:7;30676:8;:29::i;:::-;30738:1;30718:9;:16;30728:5;30718:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30757:7;:16;30765:7;30757:16;;;;;;;;;;;;30750:23;;;;;;;;;;;30819:7;30815:1;30791:36;;30800:5;30791:36;;;;;;;;;;;;30531:304;30482: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;27332:291::-;27489:28;27499:4;27505:2;27509:7;27489:9;:28::i;:::-;27536:48;27559:4;27565:2;27569:7;27578:5;27536:22;:48::i;:::-;27528:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27332: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;29238:297::-;29368:18;29374:2;29378:7;29368:5;:18::i;:::-;29419:54;29450:1;29454:2;29458:7;29467:5;29419:22;:54::i;:::-;29397:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;29238:297;;;:::o;34721:126::-;;;;:::o;32569:777::-;32724:4;32745:15;:2;:13;;;:15::i;:::-;32741:598;;;32797:2;32781:36;;;32818:10;32830:4;32836:7;32845:5;32781:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32777:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33042:1;33025:6;:13;:18;33021:248;;;33068:36;;;;;;;;;;:::i;:::-;;;;;;;;33021:248;33219:6;33213:13;33204:6;33200:2;33196:15;33189:38;32777:507;32912:45;;;32902:55;;;:6;:55;;;;32895:62;;;;;32741:598;33323:4;33316:11;;32569:777;;;;;;;:::o;29871:382::-;29965:1;29951:16;;:2;:16;;;;29943:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30024:16;30032:7;30024;:16::i;:::-;30023:17;30015:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30086:45;30115:1;30119:2;30123:7;30086:20;:45::i;:::-;30161:1;30144:9;:13;30154:2;30144:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30192:2;30173:7;:16;30181:7;30173:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30237:7;30233:2;30212:33;;30229:1;30212:33;;;;;;;;;;;;29871: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;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2476:143::-;2533:5;2564:6;2558:13;2549:22;;2580:33;2607:5;2580:33;:::i;:::-;2476:143;;;;:::o;2642:370::-;2713:5;2762:3;2755:4;2747:6;2743:17;2739:27;2729:122;;2770:79;;:::i;:::-;2729:122;2887:6;2874:20;2912:94;3002:3;2994:6;2987:4;2979:6;2975:17;2912:94;:::i;:::-;2903:103;;2719:293;2642:370;;;;:::o;3035:::-;3106:5;3155:3;3148:4;3140:6;3136:17;3132:27;3122:122;;3163:79;;:::i;:::-;3122:122;3280:6;3267:20;3305:94;3395:3;3387:6;3380:4;3372:6;3368:17;3305:94;:::i;:::-;3296:103;;3112:293;3035:370;;;;:::o;3411:133::-;3454:5;3492:6;3479:20;3470:29;;3508:30;3532:5;3508:30;:::i;:::-;3411:133;;;;:::o;3550:137::-;3595:5;3633:6;3620:20;3611:29;;3649:32;3675:5;3649:32;:::i;:::-;3550:137;;;;:::o;3693:141::-;3749:5;3780:6;3774:13;3765:22;;3796:32;3822:5;3796:32;:::i;:::-;3693:141;;;;:::o;3853:552::-;3910:8;3920:6;3970:3;3963:4;3955:6;3951:17;3947:27;3937:122;;3978:79;;:::i;:::-;3937:122;4091:6;4078:20;4068:30;;4121:18;4113:6;4110:30;4107:117;;;4143:79;;:::i;:::-;4107:117;4257:4;4249:6;4245:17;4233:29;;4311:3;4303:4;4295:6;4291:17;4281:8;4277:32;4274:41;4271:128;;;4318:79;;:::i;:::-;4271:128;3853:552;;;;;:::o;4424:338::-;4479:5;4528:3;4521:4;4513:6;4509:17;4505:27;4495:122;;4536:79;;:::i;:::-;4495:122;4653:6;4640:20;4678:78;4752:3;4744:6;4737:4;4729:6;4725:17;4678:78;:::i;:::-;4669:87;;4485:277;4424:338;;;;:::o;4782:340::-;4838:5;4887:3;4880:4;4872:6;4868:17;4864:27;4854:122;;4895:79;;:::i;:::-;4854:122;5012:6;4999:20;5037:79;5112:3;5104:6;5097:4;5089:6;5085:17;5037:79;:::i;:::-;5028:88;;4844:278;4782:340;;;;:::o;5128:139::-;5174:5;5212:6;5199:20;5190:29;;5228:33;5255:5;5228:33;:::i;:::-;5128:139;;;;:::o;5273:329::-;5332:6;5381:2;5369:9;5360:7;5356:23;5352:32;5349:119;;;5387:79;;:::i;:::-;5349:119;5507:1;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5478:117;5273:329;;;;:::o;5608:351::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:64;5934:7;5925:6;5914:9;5910:22;5878:64;:::i;:::-;5868:74;;5824:128;5608:351;;;;:::o;5965:474::-;6033:6;6041;6090:2;6078:9;6069:7;6065:23;6061:32;6058:119;;;6096:79;;:::i;:::-;6058:119;6216:1;6241:53;6286:7;6277:6;6266:9;6262:22;6241:53;:::i;:::-;6231:63;;6187:117;6343:2;6369:53;6414:7;6405:6;6394:9;6390:22;6369:53;:::i;:::-;6359:63;;6314:118;5965:474;;;;;:::o;6445:619::-;6522:6;6530;6538;6587:2;6575:9;6566:7;6562:23;6558:32;6555:119;;;6593:79;;:::i;:::-;6555:119;6713:1;6738:53;6783:7;6774:6;6763:9;6759:22;6738:53;:::i;:::-;6728:63;;6684:117;6840:2;6866:53;6911:7;6902:6;6891:9;6887:22;6866:53;:::i;:::-;6856:63;;6811:118;6968:2;6994:53;7039:7;7030:6;7019:9;7015:22;6994:53;:::i;:::-;6984:63;;6939:118;6445:619;;;;;:::o;7070:963::-;7167:6;7175;7183;7191;7199;7248:3;7236:9;7227:7;7223:23;7219:33;7216:120;;;7255:79;;:::i;:::-;7216:120;7375:1;7400:53;7445:7;7436:6;7425:9;7421:22;7400:53;:::i;:::-;7390:63;;7346:117;7502:2;7528:53;7573:7;7564:6;7553:9;7549:22;7528:53;:::i;:::-;7518:63;;7473:118;7630:2;7656:53;7701:7;7692:6;7681:9;7677:22;7656:53;:::i;:::-;7646:63;;7601:118;7786:2;7775:9;7771:18;7758:32;7817:18;7809:6;7806:30;7803:117;;;7839:79;;:::i;:::-;7803:117;7952:64;8008:7;7999:6;7988:9;7984:22;7952:64;:::i;:::-;7934:82;;;;7729:297;7070:963;;;;;;;;:::o;8039:943::-;8134:6;8142;8150;8158;8207:3;8195:9;8186:7;8182:23;8178:33;8175:120;;;8214:79;;:::i;:::-;8175:120;8334:1;8359:53;8404:7;8395:6;8384:9;8380:22;8359:53;:::i;:::-;8349:63;;8305:117;8461:2;8487:53;8532:7;8523:6;8512:9;8508:22;8487:53;:::i;:::-;8477:63;;8432:118;8589:2;8615:53;8660:7;8651:6;8640:9;8636:22;8615:53;:::i;:::-;8605:63;;8560:118;8745:2;8734:9;8730:18;8717:32;8776:18;8768:6;8765:30;8762:117;;;8798:79;;:::i;:::-;8762:117;8903:62;8957:7;8948:6;8937:9;8933:22;8903:62;:::i;:::-;8893:72;;8688:287;8039:943;;;;;;;:::o;8988:468::-;9053:6;9061;9110:2;9098:9;9089:7;9085:23;9081:32;9078:119;;;9116:79;;:::i;:::-;9078:119;9236:1;9261:53;9306:7;9297:6;9286:9;9282:22;9261:53;:::i;:::-;9251:63;;9207:117;9363:2;9389:50;9431:7;9422:6;9411:9;9407:22;9389:50;:::i;:::-;9379:60;;9334:115;8988:468;;;;;:::o;9462:474::-;9530:6;9538;9587:2;9575:9;9566:7;9562:23;9558:32;9555:119;;;9593:79;;:::i;:::-;9555:119;9713:1;9738:53;9783:7;9774:6;9763:9;9759:22;9738:53;:::i;:::-;9728:63;;9684:117;9840:2;9866:53;9911:7;9902:6;9891:9;9887:22;9866:53;:::i;:::-;9856:63;;9811:118;9462:474;;;;;:::o;9942:539::-;10026:6;10075:2;10063:9;10054:7;10050:23;10046:32;10043:119;;;10081:79;;:::i;:::-;10043:119;10229:1;10218:9;10214:17;10201:31;10259:18;10251:6;10248:30;10245:117;;;10281:79;;:::i;:::-;10245:117;10386:78;10456:7;10447:6;10436:9;10432:22;10386:78;:::i;:::-;10376:88;;10172:302;9942:539;;;;:::o;10487:::-;10571:6;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10774:1;10763:9;10759:17;10746:31;10804:18;10796:6;10793:30;10790:117;;;10826:79;;:::i;:::-;10790:117;10931:78;11001:7;10992:6;10981:9;10977:22;10931:78;:::i;:::-;10921:88;;10717:302;10487:539;;;;:::o;11032:327::-;11090:6;11139:2;11127:9;11118:7;11114:23;11110:32;11107:119;;;11145:79;;:::i;:::-;11107:119;11265:1;11290:52;11334:7;11325:6;11314:9;11310:22;11290:52;:::i;:::-;11280:62;;11236:116;11032:327;;;;:::o;11365:349::-;11434:6;11483:2;11471:9;11462:7;11458:23;11454:32;11451:119;;;11489:79;;:::i;:::-;11451:119;11609:1;11634:63;11689:7;11680:6;11669:9;11665:22;11634:63;:::i;:::-;11624:73;;11580:127;11365:349;;;;:::o;11720:509::-;11789:6;11838:2;11826:9;11817:7;11813:23;11809:32;11806:119;;;11844:79;;:::i;:::-;11806:119;11992:1;11981:9;11977:17;11964:31;12022:18;12014:6;12011:30;12008:117;;;12044:79;;:::i;:::-;12008:117;12149:63;12204:7;12195:6;12184:9;12180:22;12149:63;:::i;:::-;12139:73;;11935:287;11720:509;;;;:::o;12235:329::-;12294:6;12343:2;12331:9;12322:7;12318:23;12314:32;12311:119;;;12349:79;;:::i;:::-;12311:119;12469:1;12494:53;12539:7;12530:6;12519:9;12515:22;12494:53;:::i;:::-;12484:63;;12440:117;12235:329;;;;:::o;12570:118::-;12657:24;12675:5;12657:24;:::i;:::-;12652:3;12645:37;12570:118;;:::o;12694:109::-;12775:21;12790:5;12775:21;:::i;:::-;12770:3;12763:34;12694:109;;:::o;12809:115::-;12894:23;12911:5;12894:23;:::i;:::-;12889:3;12882:36;12809:115;;:::o;12930:360::-;13016:3;13044:38;13076:5;13044:38;:::i;:::-;13098:70;13161:6;13156:3;13098:70;:::i;:::-;13091:77;;13177:52;13222:6;13217:3;13210:4;13203:5;13199:16;13177:52;:::i;:::-;13254:29;13276:6;13254:29;:::i;:::-;13249:3;13245:39;13238:46;;13020:270;12930:360;;;;:::o;13296:364::-;13384:3;13412:39;13445:5;13412:39;:::i;:::-;13467:71;13531:6;13526:3;13467:71;:::i;:::-;13460:78;;13547:52;13592:6;13587:3;13580:4;13573:5;13569:16;13547:52;:::i;:::-;13624:29;13646:6;13624:29;:::i;:::-;13619:3;13615:39;13608:46;;13388:272;13296:364;;;;:::o;13666:377::-;13772:3;13800:39;13833:5;13800:39;:::i;:::-;13855:89;13937:6;13932:3;13855:89;:::i;:::-;13848:96;;13953:52;13998:6;13993:3;13986:4;13979:5;13975:16;13953:52;:::i;:::-;14030:6;14025:3;14021:16;14014:23;;13776:267;13666:377;;;;:::o;14073:845::-;14176:3;14213:5;14207:12;14242:36;14268:9;14242:36;:::i;:::-;14294:89;14376:6;14371:3;14294:89;:::i;:::-;14287:96;;14414:1;14403:9;14399:17;14430:1;14425:137;;;;14576:1;14571:341;;;;14392:520;;14425:137;14509:4;14505:9;14494;14490:25;14485:3;14478:38;14545:6;14540:3;14536:16;14529:23;;14425:137;;14571:341;14638:38;14670:5;14638:38;:::i;:::-;14698:1;14712:154;14726:6;14723:1;14720:13;14712:154;;;14800:7;14794:14;14790:1;14785:3;14781:11;14774:35;14850:1;14841:7;14837:15;14826:26;;14748:4;14745:1;14741:12;14736:17;;14712:154;;;14895:6;14890:3;14886:16;14879:23;;14578:334;;14392:520;;14180:738;;14073:845;;;;:::o;14924:366::-;15066:3;15087:67;15151:2;15146:3;15087:67;:::i;:::-;15080:74;;15163:93;15252:3;15163:93;:::i;:::-;15281:2;15276:3;15272:12;15265:19;;14924:366;;;:::o;15296:402::-;15456:3;15477:85;15559:2;15554:3;15477:85;:::i;:::-;15470:92;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15296:402;;;:::o;15704:366::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:402::-;18840:3;18861:85;18943:2;18938:3;18861:85;:::i;:::-;18854:92;;18955:93;19044:3;18955:93;:::i;:::-;19073:2;19068:3;19064:12;19057:19;;18680:402;;;:::o;19088:366::-;19230:3;19251:67;19315:2;19310:3;19251:67;:::i;:::-;19244:74;;19327:93;19416:3;19327:93;:::i;:::-;19445:2;19440:3;19436:12;19429:19;;19088:366;;;:::o;19460:::-;19602:3;19623:67;19687:2;19682:3;19623:67;:::i;:::-;19616:74;;19699:93;19788:3;19699:93;:::i;:::-;19817:2;19812:3;19808:12;19801:19;;19460:366;;;:::o;19832:::-;19974:3;19995:67;20059:2;20054:3;19995:67;:::i;:::-;19988:74;;20071:93;20160:3;20071:93;:::i;:::-;20189:2;20184:3;20180:12;20173:19;;19832:366;;;:::o;20204:::-;20346:3;20367:67;20431:2;20426:3;20367:67;:::i;:::-;20360:74;;20443:93;20532:3;20443:93;:::i;:::-;20561:2;20556:3;20552:12;20545:19;;20204:366;;;:::o;20576:::-;20718:3;20739:67;20803:2;20798:3;20739:67;:::i;:::-;20732:74;;20815:93;20904:3;20815:93;:::i;:::-;20933:2;20928:3;20924:12;20917:19;;20576:366;;;:::o;20948:::-;21090:3;21111:67;21175:2;21170:3;21111:67;:::i;:::-;21104:74;;21187:93;21276:3;21187:93;:::i;:::-;21305:2;21300:3;21296:12;21289:19;;20948:366;;;:::o;21320:::-;21462:3;21483:67;21547:2;21542:3;21483:67;:::i;:::-;21476:74;;21559:93;21648:3;21559:93;:::i;:::-;21677:2;21672:3;21668:12;21661:19;;21320:366;;;:::o;21692:::-;21834:3;21855:67;21919:2;21914:3;21855:67;:::i;:::-;21848:74;;21931:93;22020:3;21931:93;:::i;:::-;22049:2;22044:3;22040:12;22033:19;;21692:366;;;:::o;22064:400::-;22224:3;22245:84;22327:1;22322:3;22245:84;:::i;:::-;22238:91;;22338:93;22427:3;22338:93;:::i;:::-;22456:1;22451:3;22447:11;22440:18;;22064:400;;;:::o;22470:366::-;22612:3;22633:67;22697:2;22692:3;22633:67;:::i;:::-;22626:74;;22709:93;22798:3;22709:93;:::i;:::-;22827:2;22822:3;22818:12;22811:19;;22470:366;;;:::o;22842:::-;22984:3;23005:67;23069:2;23064:3;23005:67;:::i;:::-;22998:74;;23081:93;23170:3;23081:93;:::i;:::-;23199:2;23194:3;23190:12;23183:19;;22842:366;;;:::o;23214:::-;23356:3;23377:67;23441:2;23436:3;23377:67;:::i;:::-;23370:74;;23453:93;23542:3;23453:93;:::i;:::-;23571:2;23566:3;23562:12;23555:19;;23214:366;;;:::o;23586:398::-;23745:3;23766:83;23847:1;23842:3;23766:83;:::i;:::-;23759:90;;23858:93;23947:3;23858:93;:::i;:::-;23976:1;23971:3;23967:11;23960:18;;23586:398;;;:::o;23990:366::-;24132:3;24153:67;24217:2;24212:3;24153:67;:::i;:::-;24146:74;;24229:93;24318:3;24229:93;:::i;:::-;24347:2;24342:3;24338:12;24331:19;;23990:366;;;:::o;24362:::-;24504:3;24525:67;24589:2;24584:3;24525:67;:::i;:::-;24518:74;;24601:93;24690:3;24601:93;:::i;:::-;24719:2;24714:3;24710:12;24703:19;;24362:366;;;:::o;24734:118::-;24821:24;24839:5;24821:24;:::i;:::-;24816:3;24809:37;24734:118;;:::o;24858:695::-;25136:3;25158:92;25246:3;25237:6;25158:92;:::i;:::-;25151:99;;25267:95;25358:3;25349:6;25267:95;:::i;:::-;25260:102;;25379:148;25523:3;25379:148;:::i;:::-;25372:155;;25544:3;25537:10;;24858:695;;;;;:::o;25559:535::-;25789:3;25811:92;25899:3;25890:6;25811:92;:::i;:::-;25804:99;;25920:148;26064:3;25920:148;:::i;:::-;25913:155;;26085:3;26078:10;;25559:535;;;;:::o;26100:::-;26330:3;26352:92;26440:3;26431:6;26352:92;:::i;:::-;26345:99;;26461:148;26605:3;26461:148;:::i;:::-;26454:155;;26626:3;26619:10;;26100:535;;;;:::o;26641:379::-;26825:3;26847:147;26990:3;26847:147;:::i;:::-;26840:154;;27011:3;27004:10;;26641:379;;;:::o;27026:222::-;27119:4;27157:2;27146:9;27142:18;27134:26;;27170:71;27238:1;27227:9;27223:17;27214:6;27170:71;:::i;:::-;27026:222;;;;:::o;27254:640::-;27449:4;27487:3;27476:9;27472:19;27464:27;;27501:71;27569:1;27558:9;27554:17;27545:6;27501:71;:::i;:::-;27582:72;27650:2;27639:9;27635:18;27626:6;27582:72;:::i;:::-;27664;27732:2;27721:9;27717:18;27708:6;27664:72;:::i;:::-;27783:9;27777:4;27773:20;27768:2;27757:9;27753:18;27746:48;27811:76;27882:4;27873:6;27811:76;:::i;:::-;27803:84;;27254:640;;;;;;;:::o;27900:210::-;27987:4;28025:2;28014:9;28010:18;28002:26;;28038:65;28100:1;28089:9;28085:17;28076:6;28038:65;:::i;:::-;27900:210;;;;:::o;28116:218::-;28207:4;28245:2;28234:9;28230:18;28222:26;;28258:69;28324:1;28313:9;28309:17;28300:6;28258:69;:::i;:::-;28116:218;;;;:::o;28340:313::-;28453:4;28491:2;28480:9;28476:18;28468:26;;28540:9;28534:4;28530:20;28526:1;28515:9;28511:17;28504:47;28568:78;28641:4;28632:6;28568:78;:::i;:::-;28560:86;;28340:313;;;;:::o;28659:419::-;28825:4;28863:2;28852:9;28848:18;28840:26;;28912:9;28906:4;28902:20;28898:1;28887:9;28883:17;28876:47;28940:131;29066:4;28940:131;:::i;:::-;28932:139;;28659:419;;;:::o;29084:::-;29250:4;29288:2;29277:9;29273:18;29265:26;;29337:9;29331:4;29327:20;29323:1;29312:9;29308:17;29301:47;29365:131;29491:4;29365:131;:::i;:::-;29357:139;;29084:419;;;:::o;29509:::-;29675:4;29713:2;29702:9;29698:18;29690:26;;29762:9;29756:4;29752:20;29748:1;29737:9;29733:17;29726:47;29790:131;29916:4;29790:131;:::i;:::-;29782:139;;29509:419;;;:::o;29934:::-;30100:4;30138:2;30127:9;30123:18;30115:26;;30187:9;30181:4;30177:20;30173:1;30162:9;30158:17;30151:47;30215:131;30341:4;30215:131;:::i;:::-;30207:139;;29934:419;;;:::o;30359:::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:::-;30950:4;30988:2;30977:9;30973:18;30965:26;;31037:9;31031:4;31027:20;31023:1;31012:9;31008:17;31001:47;31065:131;31191:4;31065:131;:::i;:::-;31057:139;;30784:419;;;:::o;31209:::-;31375:4;31413:2;31402:9;31398:18;31390:26;;31462:9;31456:4;31452:20;31448:1;31437:9;31433:17;31426:47;31490:131;31616:4;31490:131;:::i;:::-;31482:139;;31209:419;;;:::o;31634:::-;31800:4;31838:2;31827:9;31823:18;31815:26;;31887:9;31881:4;31877:20;31873:1;31862:9;31858:17;31851:47;31915:131;32041:4;31915:131;:::i;:::-;31907:139;;31634:419;;;:::o;32059:::-;32225:4;32263:2;32252:9;32248:18;32240:26;;32312:9;32306:4;32302:20;32298:1;32287:9;32283:17;32276:47;32340:131;32466:4;32340:131;:::i;:::-;32332:139;;32059:419;;;:::o;32484:::-;32650:4;32688:2;32677:9;32673:18;32665:26;;32737:9;32731:4;32727:20;32723:1;32712:9;32708:17;32701:47;32765:131;32891:4;32765:131;:::i;:::-;32757:139;;32484:419;;;:::o;32909:::-;33075:4;33113:2;33102:9;33098:18;33090:26;;33162:9;33156:4;33152:20;33148:1;33137:9;33133:17;33126:47;33190:131;33316:4;33190:131;:::i;:::-;33182:139;;32909:419;;;:::o;33334:::-;33500:4;33538:2;33527:9;33523:18;33515:26;;33587:9;33581:4;33577:20;33573:1;33562:9;33558:17;33551:47;33615:131;33741:4;33615:131;:::i;:::-;33607:139;;33334:419;;;:::o;33759:::-;33925:4;33963:2;33952:9;33948:18;33940:26;;34012:9;34006:4;34002:20;33998:1;33987:9;33983:17;33976:47;34040:131;34166:4;34040:131;:::i;:::-;34032:139;;33759:419;;;:::o;34184:::-;34350:4;34388:2;34377:9;34373:18;34365:26;;34437:9;34431:4;34427:20;34423:1;34412:9;34408:17;34401:47;34465:131;34591:4;34465:131;:::i;:::-;34457:139;;34184:419;;;:::o;34609:::-;34775:4;34813:2;34802:9;34798:18;34790:26;;34862:9;34856:4;34852:20;34848:1;34837:9;34833:17;34826:47;34890:131;35016:4;34890:131;:::i;:::-;34882:139;;34609:419;;;:::o;35034:::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:::-;35625:4;35663:2;35652:9;35648:18;35640:26;;35712:9;35706:4;35702:20;35698:1;35687:9;35683:17;35676:47;35740:131;35866:4;35740:131;:::i;:::-;35732:139;;35459:419;;;:::o;35884:::-;36050:4;36088:2;36077:9;36073:18;36065:26;;36137:9;36131:4;36127:20;36123:1;36112:9;36108:17;36101:47;36165:131;36291:4;36165:131;:::i;:::-;36157:139;;35884:419;;;:::o;36309:::-;36475:4;36513:2;36502:9;36498:18;36490:26;;36562:9;36556:4;36552:20;36548:1;36537:9;36533:17;36526:47;36590:131;36716:4;36590:131;:::i;:::-;36582:139;;36309:419;;;:::o;36734:::-;36900:4;36938:2;36927:9;36923:18;36915:26;;36987:9;36981:4;36977:20;36973:1;36962:9;36958:17;36951:47;37015:131;37141:4;37015:131;:::i;:::-;37007:139;;36734:419;;;:::o;37159:::-;37325:4;37363:2;37352:9;37348:18;37340:26;;37412:9;37406:4;37402:20;37398:1;37387:9;37383:17;37376:47;37440:131;37566:4;37440:131;:::i;:::-;37432:139;;37159:419;;;:::o;37584:::-;37750:4;37788:2;37777:9;37773:18;37765:26;;37837:9;37831:4;37827:20;37823:1;37812:9;37808:17;37801:47;37865:131;37991:4;37865:131;:::i;:::-;37857:139;;37584:419;;;:::o;38009:222::-;38102:4;38140:2;38129:9;38125:18;38117:26;;38153:71;38221:1;38210:9;38206:17;38197:6;38153:71;:::i;:::-;38009:222;;;;:::o;38237:129::-;38271:6;38298:20;;:::i;:::-;38288:30;;38327:33;38355:4;38347:6;38327:33;:::i;:::-;38237:129;;;:::o;38372:75::-;38405:6;38438:2;38432:9;38422:19;;38372:75;:::o;38453:311::-;38530:4;38620:18;38612:6;38609:30;38606:56;;;38642:18;;:::i;:::-;38606:56;38692:4;38684:6;38680:17;38672:25;;38752:4;38746;38742:15;38734:23;;38453:311;;;:::o;38770:::-;38847:4;38937:18;38929:6;38926:30;38923:56;;;38959:18;;:::i;:::-;38923:56;39009:4;39001:6;38997:17;38989:25;;39069:4;39063;39059:15;39051:23;;38770:311;;;:::o;39087:307::-;39148:4;39238:18;39230:6;39227:30;39224:56;;;39260:18;;:::i;:::-;39224:56;39298:29;39320:6;39298:29;:::i;:::-;39290:37;;39382:4;39376;39372:15;39364:23;;39087:307;;;:::o;39400:308::-;39462:4;39552:18;39544:6;39541:30;39538:56;;;39574:18;;:::i;:::-;39538:56;39612:29;39634:6;39612:29;:::i;:::-;39604:37;;39696:4;39690;39686:15;39678:23;;39400:308;;;:::o;39714:141::-;39763:4;39786:3;39778:11;;39809:3;39806:1;39799:14;39843:4;39840:1;39830:18;39822:26;;39714:141;;;:::o;39861:98::-;39912:6;39946:5;39940:12;39930:22;;39861:98;;;:::o;39965:99::-;40017:6;40051:5;40045:12;40035:22;;39965:99;;;:::o;40070:168::-;40153:11;40187:6;40182:3;40175:19;40227:4;40222:3;40218:14;40203:29;;40070:168;;;;:::o;40244:147::-;40345:11;40382:3;40367:18;;40244:147;;;;:::o;40397:169::-;40481:11;40515:6;40510:3;40503:19;40555:4;40550:3;40546:14;40531:29;;40397:169;;;;:::o;40572:148::-;40674:11;40711:3;40696:18;;40572:148;;;;:::o;40726:305::-;40766:3;40785:20;40803:1;40785:20;:::i;:::-;40780:25;;40819:20;40837:1;40819:20;:::i;:::-;40814:25;;40973:1;40905:66;40901:74;40898:1;40895:81;40892:107;;;40979:18;;:::i;:::-;40892:107;41023:1;41020;41016:9;41009:16;;40726:305;;;;:::o;41037:185::-;41077:1;41094:20;41112:1;41094:20;:::i;:::-;41089:25;;41128:20;41146:1;41128:20;:::i;:::-;41123:25;;41167:1;41157:35;;41172:18;;:::i;:::-;41157:35;41214:1;41211;41207:9;41202:14;;41037:185;;;;:::o;41228:191::-;41268:4;41288:20;41306:1;41288:20;:::i;:::-;41283:25;;41322:20;41340:1;41322:20;:::i;:::-;41317:25;;41361:1;41358;41355:8;41352:34;;;41366:18;;:::i;:::-;41352:34;41411:1;41408;41404:9;41396:17;;41228:191;;;;:::o;41425:96::-;41462:7;41491:24;41509:5;41491:24;:::i;:::-;41480:35;;41425:96;;;:::o;41527:90::-;41561:7;41604:5;41597:13;41590:21;41579:32;;41527:90;;;:::o;41623:149::-;41659:7;41699:66;41692:5;41688:78;41677:89;;41623:149;;;:::o;41778:126::-;41815:7;41855:42;41848:5;41844:54;41833:65;;41778:126;;;:::o;41910:77::-;41947:7;41976:5;41965:16;;41910:77;;;:::o;41993:154::-;42077:6;42072:3;42067;42054:30;42139:1;42130:6;42125:3;42121:16;42114:27;41993:154;;;:::o;42153:307::-;42221:1;42231:113;42245:6;42242:1;42239:13;42231:113;;;42330:1;42325:3;42321:11;42315:18;42311:1;42306:3;42302:11;42295:39;42267:2;42264:1;42260:10;42255:15;;42231:113;;;42362:6;42359:1;42356:13;42353:101;;;42442:1;42433:6;42428:3;42424:16;42417:27;42353:101;42202:258;42153:307;;;:::o;42466:320::-;42510:6;42547:1;42541:4;42537:12;42527:22;;42594:1;42588:4;42584:12;42615:18;42605:81;;42671:4;42663:6;42659:17;42649:27;;42605:81;42733:2;42725:6;42722:14;42702:18;42699:38;42696:84;;;42752:18;;:::i;:::-;42696:84;42517:269;42466:320;;;:::o;42792:281::-;42875:27;42897:4;42875:27;:::i;:::-;42867:6;42863:40;43005:6;42993:10;42990:22;42969:18;42957:10;42954:34;42951:62;42948:88;;;43016:18;;:::i;:::-;42948:88;43056:10;43052:2;43045:22;42835:238;42792:281;;:::o;43079:233::-;43118:3;43141:24;43159:5;43141:24;:::i;:::-;43132:33;;43187:66;43180:5;43177:77;43174:103;;;43257:18;;:::i;:::-;43174:103;43304:1;43297:5;43293:13;43286:20;;43079:233;;;:::o;43318:176::-;43350:1;43367:20;43385:1;43367:20;:::i;:::-;43362:25;;43401:20;43419:1;43401:20;:::i;:::-;43396:25;;43440:1;43430:35;;43445:18;;:::i;:::-;43430:35;43486:1;43483;43479:9;43474:14;;43318:176;;;;:::o;43500:180::-;43548:77;43545:1;43538:88;43645:4;43642:1;43635:15;43669:4;43666:1;43659:15;43686:180;43734:77;43731:1;43724:88;43831:4;43828:1;43821:15;43855:4;43852:1;43845:15;43872:180;43920:77;43917:1;43910:88;44017:4;44014:1;44007:15;44041:4;44038:1;44031:15;44058:180;44106:77;44103:1;44096:88;44203:4;44200:1;44193:15;44227:4;44224:1;44217:15;44244:180;44292:77;44289:1;44282:88;44389:4;44386:1;44379:15;44413:4;44410:1;44403:15;44430:117;44539:1;44536;44529:12;44553:117;44662:1;44659;44652:12;44676:117;44785:1;44782;44775:12;44799:117;44908:1;44905;44898:12;44922:117;45031:1;45028;45021:12;45045:117;45154:1;45151;45144:12;45168:102;45209:6;45260:2;45256:7;45251:2;45244:5;45240:14;45236:28;45226:38;;45168:102;;;:::o;45276:182::-;45416:34;45412:1;45404:6;45400:14;45393:58;45276:182;:::o;45464:163::-;45604:15;45600:1;45592:6;45588:14;45581:39;45464:163;:::o;45633:178::-;45773:30;45769:1;45761:6;45757:14;45750:54;45633:178;:::o;45817:177::-;45957:29;45953:1;45945:6;45941:14;45934:53;45817:177;:::o;46000:178::-;46140:30;46136:1;46128:6;46124:14;46117:54;46000:178;:::o;46184:182::-;46324:34;46320:1;46312:6;46308:14;46301:58;46184:182;:::o;46372:180::-;46512:32;46508:1;46500:6;46496:14;46489:56;46372:180;:::o;46558:174::-;46698:26;46694:1;46686:6;46682:14;46675:50;46558:174;:::o;46738:182::-;46878:34;46874:1;46866:6;46862:14;46855:58;46738:182;:::o;46926:175::-;47066:27;47062:1;47054:6;47050:14;47043:51;46926:175;:::o;47107:162::-;47247:14;47243:1;47235:6;47231:14;47224:38;47107:162;:::o;47275:180::-;47415:32;47411:1;47403:6;47399:14;47392:56;47275:180;:::o;47461:176::-;47601:28;47597:1;47589:6;47585:14;47578:52;47461:176;:::o;47643:169::-;47783:21;47779:1;47771:6;47767:14;47760:45;47643:169;:::o;47818:167::-;47958:19;47954:1;47946:6;47942:14;47935:43;47818:167;:::o;47991:181::-;48131:33;48127:1;48119:6;48115:14;48108:57;47991:181;:::o;48178:::-;48318:33;48314:1;48306:6;48302:14;48295:57;48178:181;:::o;48365:182::-;48505:34;48501:1;48493:6;48489:14;48482:58;48365:182;:::o;48553:::-;48693:34;48689:1;48681:6;48677:14;48670:58;48553:182;:::o;48741:155::-;48881:7;48877:1;48869:6;48865:14;48858:31;48741:155;:::o;48902:178::-;49042:30;49038:1;49030:6;49026:14;49019:54;48902:178;:::o;49086:182::-;49226:34;49222:1;49214:6;49210:14;49203:58;49086:182;:::o;49274:178::-;49414:30;49410:1;49402:6;49398:14;49391:54;49274:178;:::o;49458:114::-;;:::o;49578:179::-;49718:31;49714:1;49706:6;49702:14;49695:55;49578:179;:::o;49763:169::-;49903:21;49899:1;49891:6;49887:14;49880:45;49763:169;:::o;49938:122::-;50011:24;50029:5;50011:24;:::i;:::-;50004:5;50001:35;49991:63;;50050:1;50047;50040:12;49991:63;49938:122;:::o;50066:116::-;50136:21;50151:5;50136:21;:::i;:::-;50129:5;50126:32;50116:60;;50172:1;50169;50162:12;50116:60;50066:116;:::o;50188:120::-;50260:23;50277:5;50260:23;:::i;:::-;50253:5;50250:34;50240:62;;50298:1;50295;50288:12;50240:62;50188:120;:::o;50314:122::-;50387:24;50405:5;50387:24;:::i;:::-;50380:5;50377:35;50367:63;;50426:1;50423;50416:12;50367:63;50314:122;:::o

Swarm Source

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