ETH Price: $2,679.00 (-2.18%)

Token

CHROMA (CHRNFT)
 

Overview

Max Total Supply

999 CHRNFT

Holders

244

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
nftwindad.eth
Balance
2 CHRNFT
0xc41666540ed3357218fcd093e26f274425ba2a90
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Chroma

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

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

// 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 Chroma 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(address => uint256) private _tokensMintedby;

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

    mapping(uint256 => address) private _tokenApprovals;
    
    // Specific Functionality
    bool public mintActive;
    bool public partnerMintActive;
    bool private _revealed;
    uint256 public totalTokens;
    uint256 public price;
    uint256 public numberMinted;
    uint256 public reservedTokens;
    uint256 public maxperwallet;
    uint256 public maxPerPartnerWallet;

    address contractor      = payable(0x54F37a25e2C21492fD7990de9D3668d1a87a3346); //30
    address toronto         = payable(0xb3a05B0feCC927e32ab448415C7D0EFC694fD5E4); //15
    address doxxed          = payable(0xC1FDc68dc63d3316F32420d4d2c3DeA43091bCDD); //55
    
    mapping(address => uint256) private _mintTracker;
    
    //whitelist for holders
    ERC721 REFLECT; 
    
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "CHROMA";
        _symbol = "CHRNFT";
        _baseURI = "https://everythingisenergy.io/metadata/";
        
        REFLECT = ERC721(0x5fFf521Cf177782BF21d4B03F20aa616573Eb8dd);
      
        price = 10 * (10 ** 16); // Replace leading value with price in finney
        totalTokens = 999;
        reservedTokens = 49;
        maxperwallet = 3;
        maxPerPartnerWallet = 2;
    }

    //@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 == Chroma.onERC721Received.selector;
    }
    

    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
        if (reservedTokens >= qty) {
            reservedTokens -= qty;
        } else {
            reservedTokens = 0;
        }
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }


    function partnerMint(uint256 qty) external payable reentryLock {
        require((1 + reservedTokens + numberMinted + qty) <= totalTokens, "Not enough supply");
        require(REFLECT.balanceOf(_msgSender()) > 0, "Must Hold Reflections NFT");
        require((_tokensMintedby[_msgSender()] + qty ) <= maxPerPartnerWallet, "Max Mint Reached");
        require(msg.value == qty * price, "Wrong Eth Amount");
        require(partnerMintActive,"Partner Mint Is Not Active");
        
        uint256 mintSeedValue = numberMinted;
         for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            _tokensMintedby[_msgSender()] ++;
            numberMinted += 1;
        }

    }   
   
    
    function mint(uint256 qty) external payable reentryLock {
        require((1 + reservedTokens + numberMinted + qty) <= totalTokens, "Not enough supply");
        require((_tokensMintedby[_msgSender()] + qty) <= maxperwallet, "Max Mint Reached");
        require(mintActive,"Mint Is Not Active");
        require(msg.value == qty * price, "Wrong Eth Amount");
        
        uint256 mintSeedValue = numberMinted;
         for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            _tokensMintedby[_msgSender()] ++;
            numberMinted += 1;
        }
    }

    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;

        bool success;
        (success, ) = contractor.call{value: ((sendAmount * 30)/100)}("");
        require(success, "Transaction Unsuccessful");
        
        (success, ) = toronto.call{value: ((sendAmount * 15)/100)}("");
        require(success, "Transaction Unsuccessful");
        
        (success, ) = doxxed.call{value: ((sendAmount * 55)/100)}("");
        require(success, "Transaction Unsuccessful");
        
     }
    
   
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    function reveal() external onlyOwner {
        _revealed = true;
    }
    
    function setMaxPerWallet(uint256 newMax) public onlyOwner{
    	maxperwallet = newMax;
    }
    
    function setMaxPerPartnerWallet(uint256 newMax) public onlyOwner{
    	maxPerPartnerWallet = newMax;
    }

    function changeMaxSupply( uint256 newValue ) external onlyOwner {
        totalTokens = newValue;
    }

    function hide() external onlyOwner {
        _revealed = false;
    }

    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: 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 || 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 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 pure 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 (_revealed){
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        } else {
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.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":[],"name":"activatePartnerMint","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":"newValue","type":"uint256"}],"name":"changeMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivatePartnerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerPartnerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"pure","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":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"partnerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"partnerMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxPerPartnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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"}]

608060405260008060146101000a81548160ff0219169083151502179055507354f37a25e2c21492fd7990de9d3668d1a87a3346601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b3a05b0fecc927e32ab448415c7d0efc694fd5e4601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c1fdc68dc63d3316f32420d4d2c3dea43091bcdd601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012a57600080fd5b506200014b6200013f620002a460201b60201c565b620002ac60201b60201c565b6040518060400160405280600681526020017f4348524f4d410000000000000000000000000000000000000000000000000000815250600190805190602001906200019892919062000370565b506040518060400160405280600681526020017f4348524e4654000000000000000000000000000000000000000000000000000081525060029080519060200190620001e692919062000370565b5060405180606001604052806027815260200162004ff660279139600390805190602001906200021892919062000370565b50735fff521cf177782bf21d4b03f20aa616573eb8dd601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067016345785d8a0000600b819055506103e7600a819055506031600d819055506003600e819055506002600f8190555062000485565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200037e9062000420565b90600052602060002090601f016020900481019282620003a25760008555620003ee565b82601f10620003bd57805160ff1916838001178555620003ee565b82800160010185558215620003ee579182015b82811115620003ed578251825591602001919060010190620003d0565b5b509050620003fd919062000401565b5090565b5b808211156200041c57600081600090555060010162000402565b5090565b600060028204905060018216806200043957607f821691505b6020821081141562000450576200044f62000456565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614b6180620004956000396000f3fe6080604052600436106102605760003560e01c806370a0823111610144578063a6db0fcc116100b6578063d8a216c51161007a578063d8a216c51461083a578063e268e4d314610865578063e8a3d4851461088e578063e985e9c5146108b9578063f2fde38b146108f6578063f8b2cb4f1461091f57610267565b8063a6db0fcc1461078f578063b62a7625146107a6578063b88d4fde146107bd578063c87b56dd146107e6578063c91c04621461082357610267565b806391b7f5ed1161010857806391b7f5ed146106b457806395d89b41146106dd578063a035b1fe14610708578063a0712d6814610733578063a22cb4651461074f578063a475b5dd1461077857610267565b806370a08231146105ee578063715018a61461062b5780637e1c0c091461064257806382c873281461066d5780638da5cb5b1461068957610267565b80632e56f71e116101dd57806349a772b5116101a157806349a772b5146104f25780634dfd6ae61461051d57806355f804b314610534578063587a49e71461055d5780636352211e1461058857806368fbf816146105c557610267565b80632e56f71e146104495780633ccfd60b14610460578063404c7cdd1461047757806342842e0e146104a0578063484b973c146104c957610267565b806315a553471161022457806315a553471461037457806318160ddd1461039f5780631b3d8a34146103ca57806323b872dd146103f557806325fd90f31461041e57610267565b806301ffc9a71461026957806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e578063150b7a021461033757610267565b3661026757005b005b34801561027557600080fd5b50610290600480360381019061028b919061363e565b61095c565b60405161029d9190613da2565b60405180910390f35b3480156102b257600080fd5b506102bb610ae5565b6040516102c89190613dd8565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906136e1565b610b77565b6040516103059190613d3b565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906135fe565b610bfc565b005b34801561034357600080fd5b5061035e600480360381019061035991906134b3565b610d06565b60405161036b9190613dbd565b60405180910390f35b34801561038057600080fd5b50610389610d1b565b604051610396919061413a565b60405180910390f35b3480156103ab57600080fd5b506103b4610d21565b6040516103c1919061413a565b60405180910390f35b3480156103d657600080fd5b506103df610d2b565b6040516103ec919061413a565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613460565b610d31565b005b34801561042a57600080fd5b50610433610d8a565b6040516104409190613da2565b60405180910390f35b34801561045557600080fd5b5061045e610d9d565b005b34801561046c57600080fd5b50610475610e36565b005b34801561048357600080fd5b5061049e600480360381019061049991906136e1565b61116f565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613460565b6111f5565b005b3480156104d557600080fd5b506104f060048036038101906104eb91906135fe565b611215565b005b3480156104fe57600080fd5b506105076113bc565b604051610514919061413a565b60405180910390f35b34801561052957600080fd5b506105326113c2565b005b34801561054057600080fd5b5061055b60048036038101906105569190613698565b61145b565b005b34801561056957600080fd5b506105726114f1565b60405161057f9190613da2565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa91906136e1565b611504565b6040516105bc9190613d3b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906136e1565b6115b6565b005b3480156105fa57600080fd5b50610615600480360381019061061091906133f3565b61163c565b604051610622919061413a565b60405180910390f35b34801561063757600080fd5b506106406116f4565b005b34801561064e57600080fd5b5061065761177c565b604051610664919061413a565b60405180910390f35b610687600480360381019061068291906136e1565b611782565b005b34801561069557600080fd5b5061069e611b56565b6040516106ab9190613d3b565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906136e1565b611b7f565b005b3480156106e957600080fd5b506106f2611c05565b6040516106ff9190613dd8565b60405180910390f35b34801561071457600080fd5b5061071d611c97565b60405161072a919061413a565b60405180910390f35b61074d600480360381019061074891906136e1565b611c9d565b005b34801561075b57600080fd5b50610776600480360381019061077191906135be565b611f7d565b005b34801561078457600080fd5b5061078d6120e9565b005b34801561079b57600080fd5b506107a4612182565b005b3480156107b257600080fd5b506107bb61221b565b005b3480156107c957600080fd5b506107e460048036038101906107df919061353b565b6122b4565b005b3480156107f257600080fd5b5061080d600480360381019061080891906136e1565b61230f565b60405161081a9190613dd8565b60405180910390f35b34801561082f57600080fd5b506108386123cf565b005b34801561084657600080fd5b5061084f612468565b60405161085c919061413a565b60405180910390f35b34801561087157600080fd5b5061088c600480360381019061088791906136e1565b61246e565b005b34801561089a57600080fd5b506108a36124f4565b6040516108b09190613dd8565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613420565b61251c565b6040516108ed9190613da2565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906133f3565b6125b0565b005b34801561092b57600080fd5b50610946600480360381019061094191906133f3565b6126a8565b604051610953919061413a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ade575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610af49061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b209061440a565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b8282612703565b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb89061405a565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0782611504565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cb85750610cb7813361251c565b5b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613fda565b60405180910390fd5b610d01838361276f565b505050565b600063150b7a0260e01b905095945050505050565b600d5481565b6000600c54905090565b600f5481565b610d3b3382612828565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906140ba565b60405180910390fd5b610d858383836128c8565b505050565b600960009054906101000a900460ff1681565b610da5612b24565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611b56565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061409a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610e3e612b24565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611b56565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea99061409a565b60405180910390fd5b60004790506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e84610f0191906142c6565b610f0b9190614295565b604051610f1790613d26565b60006040518083038185875af1925050503d8060008114610f54576040519150601f19603f3d011682016040523d82523d6000602084013e610f59565b606091505b50508091505080610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613efa565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600f84610fe791906142c6565b610ff19190614295565b604051610ffd90613d26565b60006040518083038185875af1925050503d806000811461103a576040519150601f19603f3d011682016040523d82523d6000602084013e61103f565b606091505b50508091505080611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613efa565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646037846110cd91906142c6565b6110d79190614295565b6040516110e390613d26565b60006040518083038185875af1925050503d8060008114611120576040519150601f19603f3d011682016040523d82523d6000602084013e611125565b606091505b5050809150508061116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613efa565b60405180910390fd5b5050565b611177612b24565b73ffffffffffffffffffffffffffffffffffffffff16611195611b56565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061409a565b60405180910390fd5b80600a8190555050565b611210838383604051806020016040528060008152506122b4565b505050565b61121d612b24565b73ffffffffffffffffffffffffffffffffffffffff1661123b611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061409a565b60405180910390fd5b600c5481600c546112a2919061423f565b116112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906140fa565b60405180910390fd5b600a5481600c546112f3919061423f565b1115611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90613fba565b60405180910390fd5b6000600c54905081600d54106113625781600d60008282546113569190614320565b9250508190555061136b565b6000600d819055505b60005b828110156113b65761138b848284611386919061423f565b612b2c565b600c600081548092919061139e9061446d565b919050555080806113ae9061446d565b91505061136e565b50505050565b600c5481565b6113ca612b24565b73ffffffffffffffffffffffffffffffffffffffff166113e8611b56565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114359061409a565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b611463612b24565b73ffffffffffffffffffffffffffffffffffffffff16611481611b56565b73ffffffffffffffffffffffffffffffffffffffff16146114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce9061409a565b60405180910390fd5b80600390805190602001906114ed92919061319c565b5050565b600960019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613f7a565b60405180910390fd5b80915050919050565b6115be612b24565b73ffffffffffffffffffffffffffffffffffffffff166115dc611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061409a565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061403a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116fc612b24565b73ffffffffffffffffffffffffffffffffffffffff1661171a611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117679061409a565b60405180910390fd5b61177a6000612b4a565b565b600a5481565b600060149054906101000a900460ff16156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ffa565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a5481600c54600d546001611803919061423f565b61180d919061423f565b611817919061423f565b1115611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613e3a565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316118a0612b24565b6040518263ffffffff1660e01b81526004016118bc9190613d3b565b60206040518083038186803b1580156118d457600080fd5b505afa1580156118e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190c919061370e565b1161194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613e5a565b60405180910390fd5b600f54816006600061195c612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a1919061423f565b11156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d99061411a565b60405180910390fd5b600b54816119f091906142c6565b3414611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890613e1a565b60405180910390fd5b600960019054906101000a900460ff16611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613f5a565b60405180910390fd5b6000600c54905060005b82811015611b3757611aae611a9d612b24565b8284611aa9919061423f565b612b2c565b60066000611aba612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b059061446d565b91905055506001600c6000828254611b1d919061423f565b925050819055508080611b2f9061446d565b915050611a8a565b505060008060146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b87612b24565b73ffffffffffffffffffffffffffffffffffffffff16611ba5611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf29061409a565b60405180910390fd5b80600b8190555050565b606060028054611c149061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c409061440a565b8015611c8d5780601f10611c6257610100808354040283529160200191611c8d565b820191906000526020600020905b815481529060010190602001808311611c7057829003601f168201915b5050505050905090565b600b5481565b600060149054906101000a900460ff1615611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613ffa565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a5481600c54600d546001611d1e919061423f565b611d28919061423f565b611d32919061423f565b1115611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90613e3a565b60405180910390fd5b600e548160066000611d83612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dc8919061423f565b1115611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061411a565b60405180910390fd5b600960009054906101000a900460ff16611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613e7a565b60405180910390fd5b600b5481611e6691906142c6565b3414611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90613e1a565b60405180910390fd5b6000600c54905060005b82811015611f5e57611ed5611ec4612b24565b8284611ed0919061423f565b612b2c565b60066000611ee1612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f2c9061446d565b91905055506001600c6000828254611f44919061423f565b925050819055508080611f569061446d565b915050611eb1565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613f3a565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120dd9190613da2565b60405180910390a35050565b6120f1612b24565b73ffffffffffffffffffffffffffffffffffffffff1661210f611b56565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061409a565b60405180910390fd5b6001600960026101000a81548160ff021916908315150217905550565b61218a612b24565b73ffffffffffffffffffffffffffffffffffffffff166121a8611b56565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f59061409a565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550565b612223612b24565b73ffffffffffffffffffffffffffffffffffffffff16612241611b56565b73ffffffffffffffffffffffffffffffffffffffff1614612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061409a565b60405180910390fd5b6000600960026101000a81548160ff021916908315150217905550565b6122be3383612828565b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f4906140ba565b60405180910390fd5b61230984848484612c0e565b50505050565b606061231a82612703565b612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906140da565b60405180910390fd5b6060600960029054906101000a900460ff16156123a257600361237b84612c6a565b60405160200161238c929190613cb3565b60405160208183030381529060405290506123c6565b60036040516020016123b49190613d04565b60405160208183030381529060405290505b80915050919050565b6123d7612b24565b73ffffffffffffffffffffffffffffffffffffffff166123f5611b56565b73ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124429061409a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b600e5481565b612476612b24565b73ffffffffffffffffffffffffffffffffffffffff16612494611b56565b73ffffffffffffffffffffffffffffffffffffffff16146124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e19061409a565b60405180910390fd5b80600e8190555050565b606060036040516020016125089190613ce2565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125b8612b24565b73ffffffffffffffffffffffffffffffffffffffff166125d6611b56565b73ffffffffffffffffffffffffffffffffffffffff161461262c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126239061409a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561269c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269390613f1a565b60405180910390fd5b6126a581612b4a565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126fc9190614295565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127e283611504565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061283382612703565b612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613dfa565b60405180910390fd5b600061287d83611504565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128bf57506128be818561251c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128e882611504565b73ffffffffffffffffffffffffffffffffffffffff161461293e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129359061407a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a590613e9a565b60405180910390fd5b6129b9838383612dcb565b6129c460008261276f565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a149190614320565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6b919061423f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b612b46828260405180602001604052806000815250612dd0565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c198484846128c8565b612c2584848484612e2b565b612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90613f9a565b60405180910390fd5b50505050565b60606000821415612cb2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dc6565b600082905060005b60008214612ce4578080612ccd9061446d565b915050600a82612cdd9190614295565b9150612cba565b60008167ffffffffffffffff811115612d0057612cff6145a3565b5b6040519080825280601f01601f191660200182016040528015612d325781602001600182028036833780820191505090505b5090505b60008514612dbf57600182612d4b9190614320565b9150600a85612d5a91906144b6565b6030612d66919061423f565b60f81b818381518110612d7c57612d7b614574565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612db89190614295565b9450612d36565b8093505050505b919050565b505050565b612dda8383612fbb565b612de76000848484612e2b565b612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90613f9a565b60405180910390fd5b505050565b6000612e4c8473ffffffffffffffffffffffffffffffffffffffff16613189565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612e909493929190613d56565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed8919061366b565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90613f9a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130229061401a565b60405180910390fd5b61303481612703565b15613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b90613eba565b60405180910390fd5b61308060008383612dcb565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d0919061423f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131a89061440a565b90600052602060002090601f0160209004810192826131ca5760008555613211565b82601f106131e357805160ff1916838001178555613211565b82800160010185558215613211579182015b828111156132105782518255916020019190600101906131f5565b5b50905061321e9190613222565b5090565b5b8082111561323b576000816000905550600101613223565b5090565b600061325261324d8461417a565b614155565b90508281526020810184848401111561326e5761326d6145e1565b5b6132798482856143c8565b509392505050565b600061329461328f846141ab565b614155565b9050828152602081018484840111156132b0576132af6145e1565b5b6132bb8482856143c8565b509392505050565b6000813590506132d281614acf565b92915050565b6000813590506132e781614ae6565b92915050565b6000813590506132fc81614afd565b92915050565b60008151905061331181614afd565b92915050565b60008083601f84011261332d5761332c6145d7565b5b8235905067ffffffffffffffff81111561334a576133496145d2565b5b602083019150836001820283011115613366576133656145dc565b5b9250929050565b600082601f830112613382576133816145d7565b5b813561339284826020860161323f565b91505092915050565b600082601f8301126133b0576133af6145d7565b5b81356133c0848260208601613281565b91505092915050565b6000813590506133d881614b14565b92915050565b6000815190506133ed81614b14565b92915050565b600060208284031215613409576134086145eb565b5b6000613417848285016132c3565b91505092915050565b60008060408385031215613437576134366145eb565b5b6000613445858286016132c3565b9250506020613456858286016132c3565b9150509250929050565b600080600060608486031215613479576134786145eb565b5b6000613487868287016132c3565b9350506020613498868287016132c3565b92505060406134a9868287016133c9565b9150509250925092565b6000806000806000608086880312156134cf576134ce6145eb565b5b60006134dd888289016132c3565b95505060206134ee888289016132c3565b94505060406134ff888289016133c9565b935050606086013567ffffffffffffffff8111156135205761351f6145e6565b5b61352c88828901613317565b92509250509295509295909350565b60008060008060808587031215613555576135546145eb565b5b6000613563878288016132c3565b9450506020613574878288016132c3565b9350506040613585878288016133c9565b925050606085013567ffffffffffffffff8111156135a6576135a56145e6565b5b6135b28782880161336d565b91505092959194509250565b600080604083850312156135d5576135d46145eb565b5b60006135e3858286016132c3565b92505060206135f4858286016132d8565b9150509250929050565b60008060408385031215613615576136146145eb565b5b6000613623858286016132c3565b9250506020613634858286016133c9565b9150509250929050565b600060208284031215613654576136536145eb565b5b6000613662848285016132ed565b91505092915050565b600060208284031215613681576136806145eb565b5b600061368f84828501613302565b91505092915050565b6000602082840312156136ae576136ad6145eb565b5b600082013567ffffffffffffffff8111156136cc576136cb6145e6565b5b6136d88482850161339b565b91505092915050565b6000602082840312156136f7576136f66145eb565b5b6000613705848285016133c9565b91505092915050565b600060208284031215613724576137236145eb565b5b6000613732848285016133de565b91505092915050565b61374481614354565b82525050565b61375381614366565b82525050565b61376281614372565b82525050565b6000613773826141f1565b61377d8185614207565b935061378d8185602086016143d7565b613796816145f0565b840191505092915050565b60006137ac826141fc565b6137b68185614223565b93506137c68185602086016143d7565b6137cf816145f0565b840191505092915050565b60006137e5826141fc565b6137ef8185614234565b93506137ff8185602086016143d7565b80840191505092915050565b600081546138188161440a565b6138228186614234565b9450600182166000811461383d576001811461384e57613881565b60ff19831686528186019350613881565b613857856141dc565b60005b838110156138795781548189015260018201915060208101905061385a565b838801955050505b50505092915050565b6000613897602083614223565b91506138a282614601565b602082019050919050565b60006138ba601083614223565b91506138c58261462a565b602082019050919050565b60006138dd600d83614234565b91506138e882614653565b600d82019050919050565b6000613900601183614223565b915061390b8261467c565b602082019050919050565b6000613923601983614223565b915061392e826146a5565b602082019050919050565b6000613946601283614223565b9150613951826146ce565b602082019050919050565b6000613969601b83614223565b9150613974826146f7565b602082019050919050565b600061398c601c83614223565b915061399782614720565b602082019050919050565b60006139af601e83614223565b91506139ba82614749565b602082019050919050565b60006139d2601883614223565b91506139dd82614772565b602082019050919050565b60006139f5602083614223565b9150613a008261479b565b602082019050919050565b6000613a18601983614223565b9150613a23826147c4565b602082019050919050565b6000613a3b601a83614223565b9150613a46826147ed565b602082019050919050565b6000613a5e600c83614234565b9150613a6982614816565b600c82019050919050565b6000613a81601e83614223565b9150613a8c8261483f565b602082019050919050565b6000613aa4601a83614223565b9150613aaf82614868565b602082019050919050565b6000613ac7601183614223565b9150613ad282614891565b602082019050919050565b6000613aea601f83614223565b9150613af5826148ba565b602082019050919050565b6000613b0d601f83614223565b9150613b18826148e3565b602082019050919050565b6000613b30602083614223565b9150613b3b8261490c565b602082019050919050565b6000613b53602083614223565b9150613b5e82614935565b602082019050919050565b6000613b76602c83614223565b9150613b818261495e565b604082019050919050565b6000613b99600583614234565b9150613ba4826149ad565b600582019050919050565b6000613bbc601c83614223565b9150613bc7826149d6565b602082019050919050565b6000613bdf602083614223565b9150613bea826149ff565b602082019050919050565b6000613c02601c83614223565b9150613c0d82614a28565b602082019050919050565b6000613c25600083614218565b9150613c3082614a51565b600082019050919050565b6000613c48601d83614223565b9150613c5382614a54565b602082019050919050565b6000613c6b601383614223565b9150613c7682614a7d565b602082019050919050565b6000613c8e601083614223565b9150613c9982614aa6565b602082019050919050565b613cad816143be565b82525050565b6000613cbf828561380b565b9150613ccb82846137da565b9150613cd682613b8c565b91508190509392505050565b6000613cee828461380b565b9150613cf9826138d0565b915081905092915050565b6000613d10828461380b565b9150613d1b82613a51565b915081905092915050565b6000613d3182613c18565b9150819050919050565b6000602082019050613d50600083018461373b565b92915050565b6000608082019050613d6b600083018761373b565b613d78602083018661373b565b613d856040830185613ca4565b8181036060830152613d978184613768565b905095945050505050565b6000602082019050613db7600083018461374a565b92915050565b6000602082019050613dd26000830184613759565b92915050565b60006020820190508181036000830152613df281846137a1565b905092915050565b60006020820190508181036000830152613e138161388a565b9050919050565b60006020820190508181036000830152613e33816138ad565b9050919050565b60006020820190508181036000830152613e53816138f3565b9050919050565b60006020820190508181036000830152613e7381613916565b9050919050565b60006020820190508181036000830152613e9381613939565b9050919050565b60006020820190508181036000830152613eb38161395c565b9050919050565b60006020820190508181036000830152613ed38161397f565b9050919050565b60006020820190508181036000830152613ef3816139a2565b9050919050565b60006020820190508181036000830152613f13816139c5565b9050919050565b60006020820190508181036000830152613f33816139e8565b9050919050565b60006020820190508181036000830152613f5381613a0b565b9050919050565b60006020820190508181036000830152613f7381613a2e565b9050919050565b60006020820190508181036000830152613f9381613a74565b9050919050565b60006020820190508181036000830152613fb381613a97565b9050919050565b60006020820190508181036000830152613fd381613aba565b9050919050565b60006020820190508181036000830152613ff381613add565b9050919050565b6000602082019050818103600083015261401381613b00565b9050919050565b6000602082019050818103600083015261403381613b23565b9050919050565b6000602082019050818103600083015261405381613b46565b9050919050565b6000602082019050818103600083015261407381613b69565b9050919050565b6000602082019050818103600083015261409381613baf565b9050919050565b600060208201905081810360008301526140b381613bd2565b9050919050565b600060208201905081810360008301526140d381613bf5565b9050919050565b600060208201905081810360008301526140f381613c3b565b9050919050565b6000602082019050818103600083015261411381613c5e565b9050919050565b6000602082019050818103600083015261413381613c81565b9050919050565b600060208201905061414f6000830184613ca4565b92915050565b600061415f614170565b905061416b828261443c565b919050565b6000604051905090565b600067ffffffffffffffff821115614195576141946145a3565b5b61419e826145f0565b9050602081019050919050565b600067ffffffffffffffff8211156141c6576141c56145a3565b5b6141cf826145f0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061424a826143be565b9150614255836143be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428a576142896144e7565b5b828201905092915050565b60006142a0826143be565b91506142ab836143be565b9250826142bb576142ba614516565b5b828204905092915050565b60006142d1826143be565b91506142dc836143be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614315576143146144e7565b5b828202905092915050565b600061432b826143be565b9150614336836143be565b925082821015614349576143486144e7565b5b828203905092915050565b600061435f8261439e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143f55780820151818401526020810190506143da565b83811115614404576000848401525b50505050565b6000600282049050600182168061442257607f821691505b6020821081141561443657614435614545565b5b50919050565b614445826145f0565b810181811067ffffffffffffffff82111715614464576144636145a3565b5b80604052505050565b6000614478826143be565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144ab576144aa6144e7565b5b600182019050919050565b60006144c1826143be565b91506144cc836143be565b9250826144dc576144db614516565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f4d75737420486f6c64205265666c656374696f6e73204e465400000000000000600082015250565b7f4d696e74204973204e6f74204163746976650000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f506172746e6572204d696e74204973204e6f7420416374697665000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b7f4d6178204d696e74205265616368656400000000000000000000000000000000600082015250565b614ad881614354565b8114614ae357600080fd5b50565b614aef81614366565b8114614afa57600080fd5b50565b614b0681614372565b8114614b1157600080fd5b50565b614b1d816143be565b8114614b2857600080fd5b5056fea2646970667358221220c23d51b96ef8685a89a73061ade0cad529e471c25d5c2f3a3f73f91b281dff9264736f6c6343000807003368747470733a2f2f65766572797468696e676973656e657267792e696f2f6d657461646174612f

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a0823111610144578063a6db0fcc116100b6578063d8a216c51161007a578063d8a216c51461083a578063e268e4d314610865578063e8a3d4851461088e578063e985e9c5146108b9578063f2fde38b146108f6578063f8b2cb4f1461091f57610267565b8063a6db0fcc1461078f578063b62a7625146107a6578063b88d4fde146107bd578063c87b56dd146107e6578063c91c04621461082357610267565b806391b7f5ed1161010857806391b7f5ed146106b457806395d89b41146106dd578063a035b1fe14610708578063a0712d6814610733578063a22cb4651461074f578063a475b5dd1461077857610267565b806370a08231146105ee578063715018a61461062b5780637e1c0c091461064257806382c873281461066d5780638da5cb5b1461068957610267565b80632e56f71e116101dd57806349a772b5116101a157806349a772b5146104f25780634dfd6ae61461051d57806355f804b314610534578063587a49e71461055d5780636352211e1461058857806368fbf816146105c557610267565b80632e56f71e146104495780633ccfd60b14610460578063404c7cdd1461047757806342842e0e146104a0578063484b973c146104c957610267565b806315a553471161022457806315a553471461037457806318160ddd1461039f5780631b3d8a34146103ca57806323b872dd146103f557806325fd90f31461041e57610267565b806301ffc9a71461026957806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e578063150b7a021461033757610267565b3661026757005b005b34801561027557600080fd5b50610290600480360381019061028b919061363e565b61095c565b60405161029d9190613da2565b60405180910390f35b3480156102b257600080fd5b506102bb610ae5565b6040516102c89190613dd8565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906136e1565b610b77565b6040516103059190613d3b565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906135fe565b610bfc565b005b34801561034357600080fd5b5061035e600480360381019061035991906134b3565b610d06565b60405161036b9190613dbd565b60405180910390f35b34801561038057600080fd5b50610389610d1b565b604051610396919061413a565b60405180910390f35b3480156103ab57600080fd5b506103b4610d21565b6040516103c1919061413a565b60405180910390f35b3480156103d657600080fd5b506103df610d2b565b6040516103ec919061413a565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613460565b610d31565b005b34801561042a57600080fd5b50610433610d8a565b6040516104409190613da2565b60405180910390f35b34801561045557600080fd5b5061045e610d9d565b005b34801561046c57600080fd5b50610475610e36565b005b34801561048357600080fd5b5061049e600480360381019061049991906136e1565b61116f565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613460565b6111f5565b005b3480156104d557600080fd5b506104f060048036038101906104eb91906135fe565b611215565b005b3480156104fe57600080fd5b506105076113bc565b604051610514919061413a565b60405180910390f35b34801561052957600080fd5b506105326113c2565b005b34801561054057600080fd5b5061055b60048036038101906105569190613698565b61145b565b005b34801561056957600080fd5b506105726114f1565b60405161057f9190613da2565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa91906136e1565b611504565b6040516105bc9190613d3b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906136e1565b6115b6565b005b3480156105fa57600080fd5b50610615600480360381019061061091906133f3565b61163c565b604051610622919061413a565b60405180910390f35b34801561063757600080fd5b506106406116f4565b005b34801561064e57600080fd5b5061065761177c565b604051610664919061413a565b60405180910390f35b610687600480360381019061068291906136e1565b611782565b005b34801561069557600080fd5b5061069e611b56565b6040516106ab9190613d3b565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906136e1565b611b7f565b005b3480156106e957600080fd5b506106f2611c05565b6040516106ff9190613dd8565b60405180910390f35b34801561071457600080fd5b5061071d611c97565b60405161072a919061413a565b60405180910390f35b61074d600480360381019061074891906136e1565b611c9d565b005b34801561075b57600080fd5b50610776600480360381019061077191906135be565b611f7d565b005b34801561078457600080fd5b5061078d6120e9565b005b34801561079b57600080fd5b506107a4612182565b005b3480156107b257600080fd5b506107bb61221b565b005b3480156107c957600080fd5b506107e460048036038101906107df919061353b565b6122b4565b005b3480156107f257600080fd5b5061080d600480360381019061080891906136e1565b61230f565b60405161081a9190613dd8565b60405180910390f35b34801561082f57600080fd5b506108386123cf565b005b34801561084657600080fd5b5061084f612468565b60405161085c919061413a565b60405180910390f35b34801561087157600080fd5b5061088c600480360381019061088791906136e1565b61246e565b005b34801561089a57600080fd5b506108a36124f4565b6040516108b09190613dd8565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613420565b61251c565b6040516108ed9190613da2565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906133f3565b6125b0565b005b34801561092b57600080fd5b50610946600480360381019061094191906133f3565b6126a8565b604051610953919061413a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ade575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610af49061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b209061440a565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b8282612703565b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb89061405a565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0782611504565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cb85750610cb7813361251c565b5b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613fda565b60405180910390fd5b610d01838361276f565b505050565b600063150b7a0260e01b905095945050505050565b600d5481565b6000600c54905090565b600f5481565b610d3b3382612828565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906140ba565b60405180910390fd5b610d858383836128c8565b505050565b600960009054906101000a900460ff1681565b610da5612b24565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611b56565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061409a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610e3e612b24565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611b56565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea99061409a565b60405180910390fd5b60004790506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e84610f0191906142c6565b610f0b9190614295565b604051610f1790613d26565b60006040518083038185875af1925050503d8060008114610f54576040519150601f19603f3d011682016040523d82523d6000602084013e610f59565b606091505b50508091505080610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613efa565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600f84610fe791906142c6565b610ff19190614295565b604051610ffd90613d26565b60006040518083038185875af1925050503d806000811461103a576040519150601f19603f3d011682016040523d82523d6000602084013e61103f565b606091505b50508091505080611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613efa565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646037846110cd91906142c6565b6110d79190614295565b6040516110e390613d26565b60006040518083038185875af1925050503d8060008114611120576040519150601f19603f3d011682016040523d82523d6000602084013e611125565b606091505b5050809150508061116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613efa565b60405180910390fd5b5050565b611177612b24565b73ffffffffffffffffffffffffffffffffffffffff16611195611b56565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061409a565b60405180910390fd5b80600a8190555050565b611210838383604051806020016040528060008152506122b4565b505050565b61121d612b24565b73ffffffffffffffffffffffffffffffffffffffff1661123b611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061409a565b60405180910390fd5b600c5481600c546112a2919061423f565b116112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906140fa565b60405180910390fd5b600a5481600c546112f3919061423f565b1115611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90613fba565b60405180910390fd5b6000600c54905081600d54106113625781600d60008282546113569190614320565b9250508190555061136b565b6000600d819055505b60005b828110156113b65761138b848284611386919061423f565b612b2c565b600c600081548092919061139e9061446d565b919050555080806113ae9061446d565b91505061136e565b50505050565b600c5481565b6113ca612b24565b73ffffffffffffffffffffffffffffffffffffffff166113e8611b56565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114359061409a565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b611463612b24565b73ffffffffffffffffffffffffffffffffffffffff16611481611b56565b73ffffffffffffffffffffffffffffffffffffffff16146114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce9061409a565b60405180910390fd5b80600390805190602001906114ed92919061319c565b5050565b600960019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613f7a565b60405180910390fd5b80915050919050565b6115be612b24565b73ffffffffffffffffffffffffffffffffffffffff166115dc611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061409a565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061403a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116fc612b24565b73ffffffffffffffffffffffffffffffffffffffff1661171a611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117679061409a565b60405180910390fd5b61177a6000612b4a565b565b600a5481565b600060149054906101000a900460ff16156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ffa565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a5481600c54600d546001611803919061423f565b61180d919061423f565b611817919061423f565b1115611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613e3a565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316118a0612b24565b6040518263ffffffff1660e01b81526004016118bc9190613d3b565b60206040518083038186803b1580156118d457600080fd5b505afa1580156118e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190c919061370e565b1161194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613e5a565b60405180910390fd5b600f54816006600061195c612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a1919061423f565b11156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d99061411a565b60405180910390fd5b600b54816119f091906142c6565b3414611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890613e1a565b60405180910390fd5b600960019054906101000a900460ff16611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613f5a565b60405180910390fd5b6000600c54905060005b82811015611b3757611aae611a9d612b24565b8284611aa9919061423f565b612b2c565b60066000611aba612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b059061446d565b91905055506001600c6000828254611b1d919061423f565b925050819055508080611b2f9061446d565b915050611a8a565b505060008060146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b87612b24565b73ffffffffffffffffffffffffffffffffffffffff16611ba5611b56565b73ffffffffffffffffffffffffffffffffffffffff1614611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf29061409a565b60405180910390fd5b80600b8190555050565b606060028054611c149061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c409061440a565b8015611c8d5780601f10611c6257610100808354040283529160200191611c8d565b820191906000526020600020905b815481529060010190602001808311611c7057829003601f168201915b5050505050905090565b600b5481565b600060149054906101000a900460ff1615611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613ffa565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a5481600c54600d546001611d1e919061423f565b611d28919061423f565b611d32919061423f565b1115611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90613e3a565b60405180910390fd5b600e548160066000611d83612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dc8919061423f565b1115611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061411a565b60405180910390fd5b600960009054906101000a900460ff16611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613e7a565b60405180910390fd5b600b5481611e6691906142c6565b3414611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90613e1a565b60405180910390fd5b6000600c54905060005b82811015611f5e57611ed5611ec4612b24565b8284611ed0919061423f565b612b2c565b60066000611ee1612b24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f2c9061446d565b91905055506001600c6000828254611f44919061423f565b925050819055508080611f569061446d565b915050611eb1565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613f3a565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120dd9190613da2565b60405180910390a35050565b6120f1612b24565b73ffffffffffffffffffffffffffffffffffffffff1661210f611b56565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061409a565b60405180910390fd5b6001600960026101000a81548160ff021916908315150217905550565b61218a612b24565b73ffffffffffffffffffffffffffffffffffffffff166121a8611b56565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f59061409a565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550565b612223612b24565b73ffffffffffffffffffffffffffffffffffffffff16612241611b56565b73ffffffffffffffffffffffffffffffffffffffff1614612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061409a565b60405180910390fd5b6000600960026101000a81548160ff021916908315150217905550565b6122be3383612828565b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f4906140ba565b60405180910390fd5b61230984848484612c0e565b50505050565b606061231a82612703565b612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906140da565b60405180910390fd5b6060600960029054906101000a900460ff16156123a257600361237b84612c6a565b60405160200161238c929190613cb3565b60405160208183030381529060405290506123c6565b60036040516020016123b49190613d04565b60405160208183030381529060405290505b80915050919050565b6123d7612b24565b73ffffffffffffffffffffffffffffffffffffffff166123f5611b56565b73ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124429061409a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b600e5481565b612476612b24565b73ffffffffffffffffffffffffffffffffffffffff16612494611b56565b73ffffffffffffffffffffffffffffffffffffffff16146124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e19061409a565b60405180910390fd5b80600e8190555050565b606060036040516020016125089190613ce2565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125b8612b24565b73ffffffffffffffffffffffffffffffffffffffff166125d6611b56565b73ffffffffffffffffffffffffffffffffffffffff161461262c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126239061409a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561269c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269390613f1a565b60405180910390fd5b6126a581612b4a565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126fc9190614295565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127e283611504565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061283382612703565b612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613dfa565b60405180910390fd5b600061287d83611504565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128bf57506128be818561251c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128e882611504565b73ffffffffffffffffffffffffffffffffffffffff161461293e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129359061407a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a590613e9a565b60405180910390fd5b6129b9838383612dcb565b6129c460008261276f565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a149190614320565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6b919061423f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b612b46828260405180602001604052806000815250612dd0565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c198484846128c8565b612c2584848484612e2b565b612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90613f9a565b60405180910390fd5b50505050565b60606000821415612cb2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dc6565b600082905060005b60008214612ce4578080612ccd9061446d565b915050600a82612cdd9190614295565b9150612cba565b60008167ffffffffffffffff811115612d0057612cff6145a3565b5b6040519080825280601f01601f191660200182016040528015612d325781602001600182028036833780820191505090505b5090505b60008514612dbf57600182612d4b9190614320565b9150600a85612d5a91906144b6565b6030612d66919061423f565b60f81b818381518110612d7c57612d7b614574565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612db89190614295565b9450612d36565b8093505050505b919050565b505050565b612dda8383612fbb565b612de76000848484612e2b565b612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90613f9a565b60405180910390fd5b505050565b6000612e4c8473ffffffffffffffffffffffffffffffffffffffff16613189565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612e909493929190613d56565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed8919061366b565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90613f9a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130229061401a565b60405180910390fd5b61303481612703565b15613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b90613eba565b60405180910390fd5b61308060008383612dcb565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d0919061423f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131a89061440a565b90600052602060002090601f0160209004810192826131ca5760008555613211565b82601f106131e357805160ff1916838001178555613211565b82800160010185558215613211579182015b828111156132105782518255916020019190600101906131f5565b5b50905061321e9190613222565b5090565b5b8082111561323b576000816000905550600101613223565b5090565b600061325261324d8461417a565b614155565b90508281526020810184848401111561326e5761326d6145e1565b5b6132798482856143c8565b509392505050565b600061329461328f846141ab565b614155565b9050828152602081018484840111156132b0576132af6145e1565b5b6132bb8482856143c8565b509392505050565b6000813590506132d281614acf565b92915050565b6000813590506132e781614ae6565b92915050565b6000813590506132fc81614afd565b92915050565b60008151905061331181614afd565b92915050565b60008083601f84011261332d5761332c6145d7565b5b8235905067ffffffffffffffff81111561334a576133496145d2565b5b602083019150836001820283011115613366576133656145dc565b5b9250929050565b600082601f830112613382576133816145d7565b5b813561339284826020860161323f565b91505092915050565b600082601f8301126133b0576133af6145d7565b5b81356133c0848260208601613281565b91505092915050565b6000813590506133d881614b14565b92915050565b6000815190506133ed81614b14565b92915050565b600060208284031215613409576134086145eb565b5b6000613417848285016132c3565b91505092915050565b60008060408385031215613437576134366145eb565b5b6000613445858286016132c3565b9250506020613456858286016132c3565b9150509250929050565b600080600060608486031215613479576134786145eb565b5b6000613487868287016132c3565b9350506020613498868287016132c3565b92505060406134a9868287016133c9565b9150509250925092565b6000806000806000608086880312156134cf576134ce6145eb565b5b60006134dd888289016132c3565b95505060206134ee888289016132c3565b94505060406134ff888289016133c9565b935050606086013567ffffffffffffffff8111156135205761351f6145e6565b5b61352c88828901613317565b92509250509295509295909350565b60008060008060808587031215613555576135546145eb565b5b6000613563878288016132c3565b9450506020613574878288016132c3565b9350506040613585878288016133c9565b925050606085013567ffffffffffffffff8111156135a6576135a56145e6565b5b6135b28782880161336d565b91505092959194509250565b600080604083850312156135d5576135d46145eb565b5b60006135e3858286016132c3565b92505060206135f4858286016132d8565b9150509250929050565b60008060408385031215613615576136146145eb565b5b6000613623858286016132c3565b9250506020613634858286016133c9565b9150509250929050565b600060208284031215613654576136536145eb565b5b6000613662848285016132ed565b91505092915050565b600060208284031215613681576136806145eb565b5b600061368f84828501613302565b91505092915050565b6000602082840312156136ae576136ad6145eb565b5b600082013567ffffffffffffffff8111156136cc576136cb6145e6565b5b6136d88482850161339b565b91505092915050565b6000602082840312156136f7576136f66145eb565b5b6000613705848285016133c9565b91505092915050565b600060208284031215613724576137236145eb565b5b6000613732848285016133de565b91505092915050565b61374481614354565b82525050565b61375381614366565b82525050565b61376281614372565b82525050565b6000613773826141f1565b61377d8185614207565b935061378d8185602086016143d7565b613796816145f0565b840191505092915050565b60006137ac826141fc565b6137b68185614223565b93506137c68185602086016143d7565b6137cf816145f0565b840191505092915050565b60006137e5826141fc565b6137ef8185614234565b93506137ff8185602086016143d7565b80840191505092915050565b600081546138188161440a565b6138228186614234565b9450600182166000811461383d576001811461384e57613881565b60ff19831686528186019350613881565b613857856141dc565b60005b838110156138795781548189015260018201915060208101905061385a565b838801955050505b50505092915050565b6000613897602083614223565b91506138a282614601565b602082019050919050565b60006138ba601083614223565b91506138c58261462a565b602082019050919050565b60006138dd600d83614234565b91506138e882614653565b600d82019050919050565b6000613900601183614223565b915061390b8261467c565b602082019050919050565b6000613923601983614223565b915061392e826146a5565b602082019050919050565b6000613946601283614223565b9150613951826146ce565b602082019050919050565b6000613969601b83614223565b9150613974826146f7565b602082019050919050565b600061398c601c83614223565b915061399782614720565b602082019050919050565b60006139af601e83614223565b91506139ba82614749565b602082019050919050565b60006139d2601883614223565b91506139dd82614772565b602082019050919050565b60006139f5602083614223565b9150613a008261479b565b602082019050919050565b6000613a18601983614223565b9150613a23826147c4565b602082019050919050565b6000613a3b601a83614223565b9150613a46826147ed565b602082019050919050565b6000613a5e600c83614234565b9150613a6982614816565b600c82019050919050565b6000613a81601e83614223565b9150613a8c8261483f565b602082019050919050565b6000613aa4601a83614223565b9150613aaf82614868565b602082019050919050565b6000613ac7601183614223565b9150613ad282614891565b602082019050919050565b6000613aea601f83614223565b9150613af5826148ba565b602082019050919050565b6000613b0d601f83614223565b9150613b18826148e3565b602082019050919050565b6000613b30602083614223565b9150613b3b8261490c565b602082019050919050565b6000613b53602083614223565b9150613b5e82614935565b602082019050919050565b6000613b76602c83614223565b9150613b818261495e565b604082019050919050565b6000613b99600583614234565b9150613ba4826149ad565b600582019050919050565b6000613bbc601c83614223565b9150613bc7826149d6565b602082019050919050565b6000613bdf602083614223565b9150613bea826149ff565b602082019050919050565b6000613c02601c83614223565b9150613c0d82614a28565b602082019050919050565b6000613c25600083614218565b9150613c3082614a51565b600082019050919050565b6000613c48601d83614223565b9150613c5382614a54565b602082019050919050565b6000613c6b601383614223565b9150613c7682614a7d565b602082019050919050565b6000613c8e601083614223565b9150613c9982614aa6565b602082019050919050565b613cad816143be565b82525050565b6000613cbf828561380b565b9150613ccb82846137da565b9150613cd682613b8c565b91508190509392505050565b6000613cee828461380b565b9150613cf9826138d0565b915081905092915050565b6000613d10828461380b565b9150613d1b82613a51565b915081905092915050565b6000613d3182613c18565b9150819050919050565b6000602082019050613d50600083018461373b565b92915050565b6000608082019050613d6b600083018761373b565b613d78602083018661373b565b613d856040830185613ca4565b8181036060830152613d978184613768565b905095945050505050565b6000602082019050613db7600083018461374a565b92915050565b6000602082019050613dd26000830184613759565b92915050565b60006020820190508181036000830152613df281846137a1565b905092915050565b60006020820190508181036000830152613e138161388a565b9050919050565b60006020820190508181036000830152613e33816138ad565b9050919050565b60006020820190508181036000830152613e53816138f3565b9050919050565b60006020820190508181036000830152613e7381613916565b9050919050565b60006020820190508181036000830152613e9381613939565b9050919050565b60006020820190508181036000830152613eb38161395c565b9050919050565b60006020820190508181036000830152613ed38161397f565b9050919050565b60006020820190508181036000830152613ef3816139a2565b9050919050565b60006020820190508181036000830152613f13816139c5565b9050919050565b60006020820190508181036000830152613f33816139e8565b9050919050565b60006020820190508181036000830152613f5381613a0b565b9050919050565b60006020820190508181036000830152613f7381613a2e565b9050919050565b60006020820190508181036000830152613f9381613a74565b9050919050565b60006020820190508181036000830152613fb381613a97565b9050919050565b60006020820190508181036000830152613fd381613aba565b9050919050565b60006020820190508181036000830152613ff381613add565b9050919050565b6000602082019050818103600083015261401381613b00565b9050919050565b6000602082019050818103600083015261403381613b23565b9050919050565b6000602082019050818103600083015261405381613b46565b9050919050565b6000602082019050818103600083015261407381613b69565b9050919050565b6000602082019050818103600083015261409381613baf565b9050919050565b600060208201905081810360008301526140b381613bd2565b9050919050565b600060208201905081810360008301526140d381613bf5565b9050919050565b600060208201905081810360008301526140f381613c3b565b9050919050565b6000602082019050818103600083015261411381613c5e565b9050919050565b6000602082019050818103600083015261413381613c81565b9050919050565b600060208201905061414f6000830184613ca4565b92915050565b600061415f614170565b905061416b828261443c565b919050565b6000604051905090565b600067ffffffffffffffff821115614195576141946145a3565b5b61419e826145f0565b9050602081019050919050565b600067ffffffffffffffff8211156141c6576141c56145a3565b5b6141cf826145f0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061424a826143be565b9150614255836143be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428a576142896144e7565b5b828201905092915050565b60006142a0826143be565b91506142ab836143be565b9250826142bb576142ba614516565b5b828204905092915050565b60006142d1826143be565b91506142dc836143be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614315576143146144e7565b5b828202905092915050565b600061432b826143be565b9150614336836143be565b925082821015614349576143486144e7565b5b828203905092915050565b600061435f8261439e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143f55780820151818401526020810190506143da565b83811115614404576000848401525b50505050565b6000600282049050600182168061442257607f821691505b6020821081141561443657614435614545565b5b50919050565b614445826145f0565b810181811067ffffffffffffffff82111715614464576144636145a3565b5b80604052505050565b6000614478826143be565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144ab576144aa6144e7565b5b600182019050919050565b60006144c1826143be565b91506144cc836143be565b9250826144dc576144db614516565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f4d75737420486f6c64205265666c656374696f6e73204e465400000000000000600082015250565b7f4d696e74204973204e6f74204163746976650000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f506172746e6572204d696e74204973204e6f7420416374697665000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b7f4d6178204d696e74205265616368656400000000000000000000000000000000600082015250565b614ad881614354565b8114614ae357600080fd5b50565b614aef81614366565b8114614afa57600080fd5b50565b614b0681614372565b8114614b1157600080fd5b50565b614b1d816143be565b8114614b2857600080fd5b5056fea2646970667358221220c23d51b96ef8685a89a73061ade0cad529e471c25d5c2f3a3f73f91b281dff9264736f6c63430008070033

Deployed Bytecode Sourcemap

17695:19214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19777:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35846:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25791:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25068:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34785:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18637:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24057:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18707:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26675:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18449:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23660:80;;;;;;;;;;;;;:::i;:::-;;22197:542;;;;;;;;;;;;;:::i;:::-;;23272:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27060:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20147:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18603:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23748:91;;;;;;;;;;;;;:::i;:::-;;23464:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18478:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24778:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23156:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24518:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14836:94;;;;;;;;;;;;;:::i;:::-;;18543:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20817:734;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14185:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23957:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35987;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18576:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21571:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26084:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22966:72;;;;;;;;;;;;;:::i;:::-;;23851:94;;;;;;;;;;;;;:::i;:::-;;23385:71;;;;;;;;;;;;;:::i;:::-;;27316:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36162:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23571:77;;;;;;;;;;;;;:::i;:::-;;18673:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23050:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36600:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26444:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15085:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24195:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19777:356;19862:4;19902:25;19887:40;;;:11;:40;;;;:109;;;;19963:33;19948:48;;;:11;:48;;;;19887:109;:170;;;;20032:25;20017:40;;;:11;:40;;;;19887:170;:238;;;;20093:32;;;20078:47;;;:11;:47;;;;19887:238;19879:246;;19777:356;;;:::o;35846:84::-;35885:13;35917:5;35910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35846:84;:::o;25791:221::-;25867:7;25895:16;25903:7;25895;:16::i;:::-;25887:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25980:15;:24;25996:7;25980:24;;;;;;;;;;;;;;;;;;;;;25973:31;;25791:221;;;:::o;25068:372::-;25149:13;25165:16;25173:7;25165;:16::i;:::-;25149:32;;25206:5;25200:11;;:2;:11;;;;25192:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25295:5;25281:19;;:10;:19;;;:58;;;;25304:35;25321:5;25328:10;25304:16;:35::i;:::-;25281:58;25259:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25411:21;25420:2;25424:7;25411:8;:21::i;:::-;25138:302;25068:372;;:::o;34785:220::-;34907:6;34967:30;;;34960:37;;34785:220;;;;;;;:::o;18637:29::-;;;;:::o;24057:126::-;24103:7;24130:12;;24123:19;;24057:126;:::o;18707:34::-;;;;:::o;26675:314::-;26870:39;26889:10;26901:7;26870:18;:39::i;:::-;26862:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26953:28;26963:4;26969:2;26973:7;26953:9;:28::i;:::-;26675:314;;;:::o;18449:22::-;;;;;;;;;;;;;:::o;23660:80::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23727:5:::1;23714:10;;:18;;;;;;;;;;;;;;;;;;23660:80::o:0;22197:542::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22247:18:::1;22268:21;22247:42;;22302:12;22339:10;;;;;;;;;;;:15;;22381:3;22377:2;22364:10;:15;;;;:::i;:::-;22363:21;;;;:::i;:::-;22339:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22325:65;;;;;22409:7;22401:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22480:7;;;;;;;;;;;:12;;22519:3;22515:2;22502:10;:15;;;;:::i;:::-;22501:21;;;;:::i;:::-;22480:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22466:62;;;;;22547:7;22539:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22618:6;;;;;;;;;;;:11;;22656:3;22652:2;22639:10;:15;;;;:::i;:::-;22638:21;;;;:::i;:::-;22618:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22604:61;;;;;22684:7;22676:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22236:503;;22197:542::o:0;23272:105::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23361:8:::1;23347:11;:22;;;;23272:105:::0;:::o;27060:185::-;27198:39;27215:4;27221:2;27225:7;27198:39;;;;;;;;;;;;:16;:39::i;:::-;27060:185;;;:::o;20147:660::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20253:12:::1;;20246:3;20231:12;;:18;;;;:::i;:::-;20230:35;20222:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20332:11;;20324:3;20309:12;;:18;;;;:::i;:::-;20308:35;;20300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20386:21;20410:12;;20386:36;;20500:3;20482:14;;:21;20478:126;;20538:3;20520:14;;:21;;;;;;;:::i;:::-;;;;;;;;20478:126;;;20591:1;20574:14;:18;;;;20478:126;20628:9;20624:176;20647:3;20643:1;:7;20624:176;;;20672:33;20682:3;20703:1;20687:13;:17;;;;:::i;:::-;20672:9;:33::i;:::-;20720:12;;:15;;;;;;;;;:::i;:::-;;;;;;20652:3;;;;;:::i;:::-;;;;20624:176;;;;20211:596;20147:660:::0;;:::o;18603:27::-;;;;:::o;23748:91::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23827:4:::1;23807:17;;:24;;;;;;;;;;;;;;;;;;23748:91::o:0;23464:95::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23545:6:::1;23534:8;:17;;;;;;;;;;;;:::i;:::-;;23464:95:::0;:::o;18478:29::-;;;;;;;;;;;;;:::o;24778:228::-;24850:7;24870:13;24886:7;:16;24894:7;24886:16;;;;;;;;;;;;;;;;;;;;;24870:32;;24938:1;24921:19;;:5;:19;;;;24913:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24993:5;24986:12;;;24778:228;;;:::o;23156:108::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23250:6:::1;23228:19;:28;;;;23156:108:::0;:::o;24518:198::-;24590:7;24635:1;24618:19;;:5;:19;;;;24610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24692:9;:16;24702:5;24692:16;;;;;;;;;;;;;;;;24685:23;;24518:198;;;:::o;14836:94::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14901:21:::1;14919:1;14901:9;:21::i;:::-;14836:94::o:0;18543:26::-;;;;:::o;20817:734::-;16119:11;;;;;;;;;;;16118:12;16110:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16191:4;16177:11;;:18;;;;;;;;;;;;;;;;;;20944:11:::1;;20936:3;20921:12;;20904:14;;20900:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;:39;;;;:::i;:::-;20899:56;;20891:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;21030:1;20996:7;;;;;;;;;;;:17;;;21014:12;:10;:12::i;:::-;20996:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;20988:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21122:19;;21113:3;21081:15;:29;21097:12;:10;:12::i;:::-;21081:29;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;21080:61;;21072:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;21200:5;;21194:3;:11;;;;:::i;:::-;21181:9;:24;21173:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21245:17;;;;;;;;;;;21237:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21313:21;21337:12;;21313:36;;21365:9;21361:181;21384:3;21380:1;:7;21361:181;;;21409:42;21419:12;:10;:12::i;:::-;21449:1;21433:13;:17;;;;:::i;:::-;21409:9;:42::i;:::-;21466:15;:29;21482:12;:10;:12::i;:::-;21466:29;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;21529:1;21513:12;;:17;;;;;;;:::i;:::-;;;;;;;;21389:3;;;;;:::i;:::-;;;;21361:181;;;;20880:671;16232:5:::0;16218:11;;:19;;;;;;;;;;;;;;;;;;20817:734;:::o;14185:87::-;14231:7;14258:6;;;;;;;;;;;14251:13;;14185:87;:::o;23957:88::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24029:8:::1;24021:5;:16;;;;23957:88:::0;:::o;35987:::-;36028:13;36060:7;36053:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35987:88;:::o;18576:20::-;;;;:::o;21571:618::-;16119:11;;;;;;;;;;;16118:12;16110:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16191:4;16177:11;;:18;;;;;;;;;;;;;;;;;;21691:11:::1;;21683:3;21668:12;;21651:14;;21647:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;:39;;;;:::i;:::-;21646:56;;21638:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;21784:12;;21776:3;21744:15;:29;21760:12;:10;:12::i;:::-;21744:29;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;21743:53;;21735:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;21836:10;;;;;;;;;;;21828:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;21906:5;;21900:3;:11;;;;:::i;:::-;21887:9;:24;21879:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:21;21977:12;;21953:36;;22005:9;22001:181;22024:3;22020:1;:7;22001:181;;;22049:42;22059:12;:10;:12::i;:::-;22089:1;22073:13;:17;;;;:::i;:::-;22049:9;:42::i;:::-;22106:15;:29;22122:12;:10;:12::i;:::-;22106:29;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;22169:1;22153:12;;:17;;;;;;;:::i;:::-;;;;;;;;22029:3;;;;;:::i;:::-;;;;22001:181;;;;21627:562;16232:5:::0;16218:11;;:19;;;;;;;;;;;;;;;;;;21571:618;:::o;26084:289::-;26199:10;26187:22;;:8;:22;;;;26179:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26295:8;26252:18;:30;26271:10;26252:30;;;;;;;;;;;;;;;:40;26283:8;26252:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26346:8;26319:46;;26334:10;26319:46;;;26356:8;26319:46;;;;;;:::i;:::-;;;;;;;;26084:289;;:::o;22966:72::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23026:4:::1;23014:9;;:16;;;;;;;;;;;;;;;;;;22966:72::o:0;23851:94::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23932:5:::1;23912:17;;:25;;;;;;;;;;;;;;;;;;23851:94::o:0;23385:71::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23443:5:::1;23431:9;;:17;;;;;;;;;;;;;;;;;;23385:71::o:0;27316:305::-;27491:39;27510:10;27522:7;27491:18;:39::i;:::-;27483:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27574:39;27588:4;27594:2;27598:7;27607:5;27574:13;:39::i;:::-;27316:305;;;;:::o;36162:426::-;36220:13;36253:16;36261:7;36253;:16::i;:::-;36245:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36314:22;36351:9;;;;;;;;;;;36347:208;;;36411:8;36421:17;36430:7;36421:8;:17::i;:::-;36394:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36376:73;;36347:208;;;36517:8;36500:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36482:61;;36347:208;36572:8;36565:15;;;36162:426;;;:::o;23571:77::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:4:::1;23623:10;;:17;;;;;;;;;;;;;;;;;;23571:77::o:0;18673:27::-;;;;:::o;23050:94::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23130:6:::1;23115:12;:21;;;;23050:94:::0;:::o;36600:139::-;36644:13;36705:8;36688:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36674:57;;36600:139;:::o;26444:164::-;26541:4;26565:18;:25;26584:5;26565:25;;;;;;;;;;;;;;;:35;26591:8;26565:35;;;;;;;;;;;;;;;;;;;;;;;;;26558:42;;26444:164;;;;:::o;15085:186::-;14416:12;:10;:12::i;:::-;14405:23;;:7;:5;:7::i;:::-;:23;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15194:1:::1;15174:22;;:8;:22;;;;15166:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15244:19;15254:8;15244:9;:19::i;:::-;15085:186:::0;:::o;24195:259::-;24260:7;24402:6;24375:9;:23;24385:12;24375:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;24368:41;;24195:259;;;:::o;29107:127::-;29172:4;29224:1;29196:30;;:7;:16;29204:7;29196:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29189:37;;29107:127;;;:::o;25558:167::-;25660:2;25633:15;:24;25649:7;25633:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25709:7;25705:2;25678:39;;25687:16;25695:7;25687;:16::i;:::-;25678:39;;;;;;;;;;;;25558:167;;:::o;29401:294::-;29494:4;29519:16;29527:7;29519;:16::i;:::-;29511:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29583:13;29599:16;29607:7;29599;:16::i;:::-;29583:32;;29645:5;29634:16;;:7;:16;;;:52;;;;29654:32;29671:5;29678:7;29654:16;:32::i;:::-;29634:52;29626:61;;;29401:294;;;;:::o;32308:547::-;32460:4;32440:24;;:16;32448:7;32440;:16::i;:::-;:24;;;32432:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32530:1;32516:16;;:2;:16;;;;32508:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32575:39;32596:4;32602:2;32606:7;32575:20;:39::i;:::-;32679:29;32696:1;32700:7;32679:8;:29::i;:::-;32740:1;32721:9;:15;32731:4;32721:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32769:1;32752:9;:13;32762:2;32752:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32800:2;32781:7;:16;32789:7;32781:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32839:7;32835:2;32820:27;;32829:4;32820:27;;;;;;;;;;;;32308:547;;;:::o;13568:98::-;13621:7;13648:10;13641:17;;13568:98;:::o;30037:110::-;30113:26;30123:2;30127:7;30113:26;;;;;;;;;;;;:9;:26::i;:::-;30037:110;;:::o;15279:173::-;15335:16;15354:6;;;;;;;;;;;15335:25;;15380:8;15371:6;;:17;;;;;;;;;;;;;;;;;;15435:8;15404:40;;15425:8;15404:40;;;;;;;;;;;;15324:128;15279:173;:::o;28503:291::-;28660:28;28670:4;28676:2;28680:7;28660:9;:28::i;:::-;28707:48;28730:4;28736:2;28740:7;28749:5;28707:22;:48::i;:::-;28699:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28503:291;;;;:::o;15495:532::-;15551:13;15590:1;15581:5;:10;15577:53;;;15608:10;;;;;;;;;;;;;;;;;;;;;15577:53;15640:12;15655:5;15640:20;;15671:14;15696:78;15711:1;15703:4;:9;15696:78;;15729:8;;;;;:::i;:::-;;;;15760:2;15752:10;;;;;:::i;:::-;;;15696:78;;;15784:19;15816:6;15806:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15784:39;;15834:154;15850:1;15841:5;:10;15834:154;;15878:1;15868:11;;;;;:::i;:::-;;;15945:2;15937:5;:10;;;;:::i;:::-;15924:2;:24;;;;:::i;:::-;15911:39;;15894:6;15901;15894:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15974:2;15965:11;;;;;:::i;:::-;;;15834:154;;;16012:6;15998:21;;;;;15495:532;;;;:::o;35577:126::-;;;;:::o;30374:297::-;30504:18;30510:2;30514:7;30504:5;:18::i;:::-;30555:54;30586:1;30590:2;30594:7;30603:5;30555:22;:54::i;:::-;30533:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30374:297;;;:::o;33420:777::-;33575:4;33596:15;:2;:13;;;:15::i;:::-;33592:598;;;33648:2;33632:36;;;33669:10;33681:4;33687:7;33696:5;33632:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33628:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33893:1;33876:6;:13;:18;33872:248;;;33919:36;;;;;;;;;;:::i;:::-;;;;;;;;33872:248;34070:6;34064:13;34055:6;34051:2;34047:15;34040:38;33628:507;33763:45;;;33753:55;;;:6;:55;;;;33746:62;;;;;33592:598;34174:4;34167:11;;33420:777;;;;;;;:::o;31007:382::-;31101:1;31087:16;;:2;:16;;;;31079:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31160:16;31168:7;31160;:16::i;:::-;31159:17;31151:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31222:45;31251:1;31255:2;31259:7;31222:20;:45::i;:::-;31297:1;31280:9;:13;31290:2;31280:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31328:2;31309:7;:16;31317:7;31309:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31373:7;31369:2;31348:33;;31365:1;31348:33;;;;;;;;;;;;31007:382;;:::o;6489:387::-;6549:4;6757:12;6824:7;6812:20;6804:28;;6867:1;6860:4;:8;6853:15;;;6489:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:552::-;1485:8;1495:6;1545:3;1538:4;1530:6;1526:17;1522:27;1512:122;;1553:79;;:::i;:::-;1512:122;1666:6;1653:20;1643:30;;1696:18;1688:6;1685:30;1682:117;;;1718:79;;:::i;:::-;1682:117;1832:4;1824:6;1820:17;1808:29;;1886:3;1878:4;1870:6;1866:17;1856:8;1852:32;1849:41;1846:128;;;1893:79;;:::i;:::-;1846:128;1428:552;;;;;:::o;1999:338::-;2054:5;2103:3;2096:4;2088:6;2084:17;2080:27;2070:122;;2111:79;;:::i;:::-;2070:122;2228:6;2215:20;2253:78;2327:3;2319:6;2312:4;2304:6;2300:17;2253:78;:::i;:::-;2244:87;;2060:277;1999:338;;;;:::o;2357:340::-;2413:5;2462:3;2455:4;2447:6;2443:17;2439:27;2429:122;;2470:79;;:::i;:::-;2429:122;2587:6;2574:20;2612:79;2687:3;2679:6;2672:4;2664:6;2660:17;2612:79;:::i;:::-;2603:88;;2419:278;2357:340;;;;:::o;2703:139::-;2749:5;2787:6;2774:20;2765:29;;2803:33;2830:5;2803:33;:::i;:::-;2703:139;;;;:::o;2848:143::-;2905:5;2936:6;2930:13;2921:22;;2952:33;2979:5;2952:33;:::i;:::-;2848:143;;;;:::o;2997:329::-;3056:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:119;;;3111:79;;:::i;:::-;3073:119;3231:1;3256:53;3301:7;3292:6;3281:9;3277:22;3256:53;:::i;:::-;3246:63;;3202:117;2997:329;;;;:::o;3332:474::-;3400:6;3408;3457:2;3445:9;3436:7;3432:23;3428:32;3425:119;;;3463:79;;:::i;:::-;3425:119;3583:1;3608:53;3653:7;3644:6;3633:9;3629:22;3608:53;:::i;:::-;3598:63;;3554:117;3710:2;3736:53;3781:7;3772:6;3761:9;3757:22;3736:53;:::i;:::-;3726:63;;3681:118;3332:474;;;;;:::o;3812:619::-;3889:6;3897;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;4335:2;4361:53;4406:7;4397:6;4386:9;4382:22;4361:53;:::i;:::-;4351:63;;4306:118;3812:619;;;;;:::o;4437:963::-;4534:6;4542;4550;4558;4566;4615:3;4603:9;4594:7;4590:23;4586:33;4583:120;;;4622:79;;:::i;:::-;4583:120;4742:1;4767:53;4812:7;4803:6;4792:9;4788:22;4767:53;:::i;:::-;4757:63;;4713:117;4869:2;4895:53;4940:7;4931:6;4920:9;4916:22;4895:53;:::i;:::-;4885:63;;4840:118;4997:2;5023:53;5068:7;5059:6;5048:9;5044:22;5023:53;:::i;:::-;5013:63;;4968:118;5153:2;5142:9;5138:18;5125:32;5184:18;5176:6;5173:30;5170:117;;;5206:79;;:::i;:::-;5170:117;5319:64;5375:7;5366:6;5355:9;5351:22;5319:64;:::i;:::-;5301:82;;;;5096:297;4437:963;;;;;;;;:::o;5406:943::-;5501:6;5509;5517;5525;5574:3;5562:9;5553:7;5549:23;5545:33;5542:120;;;5581:79;;:::i;:::-;5542:120;5701:1;5726:53;5771:7;5762:6;5751:9;5747:22;5726:53;:::i;:::-;5716:63;;5672:117;5828:2;5854:53;5899:7;5890:6;5879:9;5875:22;5854:53;:::i;:::-;5844:63;;5799:118;5956:2;5982:53;6027:7;6018:6;6007:9;6003:22;5982:53;:::i;:::-;5972:63;;5927:118;6112:2;6101:9;6097:18;6084:32;6143:18;6135:6;6132:30;6129:117;;;6165:79;;:::i;:::-;6129:117;6270:62;6324:7;6315:6;6304:9;6300:22;6270:62;:::i;:::-;6260:72;;6055:287;5406:943;;;;;;;:::o;6355:468::-;6420:6;6428;6477:2;6465:9;6456:7;6452:23;6448:32;6445:119;;;6483:79;;:::i;:::-;6445:119;6603:1;6628:53;6673:7;6664:6;6653:9;6649:22;6628:53;:::i;:::-;6618:63;;6574:117;6730:2;6756:50;6798:7;6789:6;6778:9;6774:22;6756:50;:::i;:::-;6746:60;;6701:115;6355:468;;;;;:::o;6829:474::-;6897:6;6905;6954:2;6942:9;6933:7;6929:23;6925:32;6922:119;;;6960:79;;:::i;:::-;6922:119;7080:1;7105:53;7150:7;7141:6;7130:9;7126:22;7105:53;:::i;:::-;7095:63;;7051:117;7207:2;7233:53;7278:7;7269:6;7258:9;7254:22;7233:53;:::i;:::-;7223:63;;7178:118;6829:474;;;;;:::o;7309:327::-;7367:6;7416:2;7404:9;7395:7;7391:23;7387:32;7384:119;;;7422:79;;:::i;:::-;7384:119;7542:1;7567:52;7611:7;7602:6;7591:9;7587:22;7567:52;:::i;:::-;7557:62;;7513:116;7309:327;;;;:::o;7642:349::-;7711:6;7760:2;7748:9;7739:7;7735:23;7731:32;7728:119;;;7766:79;;:::i;:::-;7728:119;7886:1;7911:63;7966:7;7957:6;7946:9;7942:22;7911:63;:::i;:::-;7901:73;;7857:127;7642:349;;;;:::o;7997:509::-;8066:6;8115:2;8103:9;8094:7;8090:23;8086:32;8083:119;;;8121:79;;:::i;:::-;8083:119;8269:1;8258:9;8254:17;8241:31;8299:18;8291:6;8288:30;8285:117;;;8321:79;;:::i;:::-;8285:117;8426:63;8481:7;8472:6;8461:9;8457:22;8426:63;:::i;:::-;8416:73;;8212:287;7997:509;;;;:::o;8512:329::-;8571:6;8620:2;8608:9;8599:7;8595:23;8591:32;8588:119;;;8626:79;;:::i;:::-;8588:119;8746:1;8771:53;8816:7;8807:6;8796:9;8792:22;8771:53;:::i;:::-;8761:63;;8717:117;8512:329;;;;:::o;8847:351::-;8917:6;8966:2;8954:9;8945:7;8941:23;8937:32;8934:119;;;8972:79;;:::i;:::-;8934:119;9092:1;9117:64;9173:7;9164:6;9153:9;9149:22;9117:64;:::i;:::-;9107:74;;9063:128;8847:351;;;;:::o;9204:118::-;9291:24;9309:5;9291:24;:::i;:::-;9286:3;9279:37;9204:118;;:::o;9328:109::-;9409:21;9424:5;9409:21;:::i;:::-;9404:3;9397:34;9328:109;;:::o;9443:115::-;9528:23;9545:5;9528:23;:::i;:::-;9523:3;9516:36;9443:115;;:::o;9564:360::-;9650:3;9678:38;9710:5;9678:38;:::i;:::-;9732:70;9795:6;9790:3;9732:70;:::i;:::-;9725:77;;9811:52;9856:6;9851:3;9844:4;9837:5;9833:16;9811:52;:::i;:::-;9888:29;9910:6;9888:29;:::i;:::-;9883:3;9879:39;9872:46;;9654:270;9564:360;;;;:::o;9930:364::-;10018:3;10046:39;10079:5;10046:39;:::i;:::-;10101:71;10165:6;10160:3;10101:71;:::i;:::-;10094:78;;10181:52;10226:6;10221:3;10214:4;10207:5;10203:16;10181:52;:::i;:::-;10258:29;10280:6;10258:29;:::i;:::-;10253:3;10249:39;10242:46;;10022:272;9930:364;;;;:::o;10300:377::-;10406:3;10434:39;10467:5;10434:39;:::i;:::-;10489:89;10571:6;10566:3;10489:89;:::i;:::-;10482:96;;10587:52;10632:6;10627:3;10620:4;10613:5;10609:16;10587:52;:::i;:::-;10664:6;10659:3;10655:16;10648:23;;10410:267;10300:377;;;;:::o;10707:845::-;10810:3;10847:5;10841:12;10876:36;10902:9;10876:36;:::i;:::-;10928:89;11010:6;11005:3;10928:89;:::i;:::-;10921:96;;11048:1;11037:9;11033:17;11064:1;11059:137;;;;11210:1;11205:341;;;;11026:520;;11059:137;11143:4;11139:9;11128;11124:25;11119:3;11112:38;11179:6;11174:3;11170:16;11163:23;;11059:137;;11205:341;11272:38;11304:5;11272:38;:::i;:::-;11332:1;11346:154;11360:6;11357:1;11354:13;11346:154;;;11434:7;11428:14;11424:1;11419:3;11415:11;11408:35;11484:1;11475:7;11471:15;11460:26;;11382:4;11379:1;11375:12;11370:17;;11346:154;;;11529:6;11524:3;11520:16;11513:23;;11212:334;;11026:520;;10814:738;;10707:845;;;;:::o;11558:366::-;11700:3;11721:67;11785:2;11780:3;11721:67;:::i;:::-;11714:74;;11797:93;11886:3;11797:93;:::i;:::-;11915:2;11910:3;11906:12;11899:19;;11558:366;;;:::o;11930:::-;12072:3;12093:67;12157:2;12152:3;12093:67;:::i;:::-;12086:74;;12169:93;12258:3;12169:93;:::i;:::-;12287:2;12282:3;12278:12;12271:19;;11930:366;;;:::o;12302:402::-;12462:3;12483:85;12565:2;12560:3;12483:85;:::i;:::-;12476:92;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12302:402;;;:::o;12710:366::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:::-;13224:3;13245:67;13309:2;13304:3;13245:67;:::i;:::-;13238:74;;13321:93;13410:3;13321:93;:::i;:::-;13439:2;13434:3;13430:12;13423:19;;13082:366;;;:::o;13454:::-;13596:3;13617:67;13681:2;13676:3;13617:67;:::i;:::-;13610:74;;13693:93;13782:3;13693:93;:::i;:::-;13811:2;13806:3;13802:12;13795:19;;13454:366;;;:::o;13826:::-;13968:3;13989:67;14053:2;14048:3;13989:67;:::i;:::-;13982:74;;14065:93;14154:3;14065:93;:::i;:::-;14183:2;14178:3;14174:12;14167:19;;13826:366;;;:::o;14198:::-;14340:3;14361:67;14425:2;14420:3;14361:67;:::i;:::-;14354:74;;14437:93;14526:3;14437:93;:::i;:::-;14555:2;14550:3;14546:12;14539:19;;14198:366;;;:::o;14570:::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:::-;15084:3;15105:67;15169:2;15164:3;15105:67;:::i;:::-;15098:74;;15181:93;15270:3;15181:93;:::i;:::-;15299:2;15294:3;15290:12;15283:19;;14942:366;;;:::o;15314:::-;15456:3;15477:67;15541:2;15536:3;15477:67;:::i;:::-;15470:74;;15553:93;15642:3;15553:93;:::i;:::-;15671:2;15666:3;15662:12;15655:19;;15314:366;;;:::o;15686:::-;15828:3;15849:67;15913:2;15908:3;15849:67;:::i;:::-;15842:74;;15925:93;16014:3;15925:93;:::i;:::-;16043:2;16038:3;16034:12;16027:19;;15686:366;;;:::o;16058:::-;16200:3;16221:67;16285:2;16280:3;16221:67;:::i;:::-;16214:74;;16297:93;16386:3;16297:93;:::i;:::-;16415:2;16410:3;16406:12;16399:19;;16058:366;;;:::o;16430:402::-;16590:3;16611:85;16693:2;16688:3;16611:85;:::i;:::-;16604:92;;16705:93;16794:3;16705:93;:::i;:::-;16823:2;16818:3;16814:12;16807:19;;16430:402;;;:::o;16838:366::-;16980:3;17001:67;17065:2;17060:3;17001:67;:::i;:::-;16994:74;;17077:93;17166:3;17077:93;:::i;:::-;17195:2;17190:3;17186:12;17179:19;;16838:366;;;:::o;17210:::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17210:366;;;:::o;17582:::-;17724:3;17745:67;17809:2;17804:3;17745:67;:::i;:::-;17738:74;;17821:93;17910:3;17821:93;:::i;:::-;17939:2;17934:3;17930:12;17923:19;;17582:366;;;:::o;17954:::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;17954:366;;;:::o;18326:::-;18468:3;18489:67;18553:2;18548:3;18489:67;:::i;:::-;18482:74;;18565:93;18654:3;18565:93;:::i;:::-;18683:2;18678:3;18674:12;18667:19;;18326:366;;;:::o;18698:::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18698:366;;;:::o;19070:::-;19212:3;19233:67;19297:2;19292:3;19233:67;:::i;:::-;19226:74;;19309:93;19398:3;19309:93;:::i;:::-;19427:2;19422:3;19418:12;19411:19;;19070:366;;;:::o;19442:::-;19584:3;19605:67;19669:2;19664:3;19605:67;:::i;:::-;19598:74;;19681:93;19770:3;19681:93;:::i;:::-;19799:2;19794:3;19790:12;19783:19;;19442:366;;;:::o;19814:400::-;19974:3;19995:84;20077:1;20072:3;19995:84;:::i;:::-;19988:91;;20088:93;20177:3;20088:93;:::i;:::-;20206:1;20201:3;20197:11;20190:18;;19814:400;;;:::o;20220:366::-;20362:3;20383:67;20447:2;20442:3;20383:67;:::i;:::-;20376:74;;20459:93;20548:3;20459:93;:::i;:::-;20577:2;20572:3;20568:12;20561:19;;20220:366;;;:::o;20592:::-;20734:3;20755:67;20819:2;20814:3;20755:67;:::i;:::-;20748:74;;20831:93;20920:3;20831:93;:::i;:::-;20949:2;20944:3;20940:12;20933:19;;20592:366;;;:::o;20964:::-;21106:3;21127:67;21191:2;21186:3;21127:67;:::i;:::-;21120:74;;21203:93;21292:3;21203:93;:::i;:::-;21321:2;21316:3;21312:12;21305:19;;20964:366;;;:::o;21336:398::-;21495:3;21516:83;21597:1;21592:3;21516:83;:::i;:::-;21509:90;;21608:93;21697:3;21608:93;:::i;:::-;21726:1;21721:3;21717:11;21710:18;;21336:398;;;:::o;21740:366::-;21882:3;21903:67;21967:2;21962:3;21903:67;:::i;:::-;21896:74;;21979:93;22068:3;21979:93;:::i;:::-;22097:2;22092:3;22088:12;22081:19;;21740:366;;;:::o;22112:::-;22254:3;22275:67;22339:2;22334:3;22275:67;:::i;:::-;22268:74;;22351:93;22440:3;22351:93;:::i;:::-;22469:2;22464:3;22460:12;22453:19;;22112:366;;;:::o;22484:::-;22626:3;22647:67;22711:2;22706:3;22647:67;:::i;:::-;22640:74;;22723:93;22812:3;22723:93;:::i;:::-;22841:2;22836:3;22832:12;22825:19;;22484:366;;;:::o;22856:118::-;22943:24;22961:5;22943:24;:::i;:::-;22938:3;22931:37;22856:118;;:::o;22980:695::-;23258:3;23280:92;23368:3;23359:6;23280:92;:::i;:::-;23273:99;;23389:95;23480:3;23471:6;23389:95;:::i;:::-;23382:102;;23501:148;23645:3;23501:148;:::i;:::-;23494:155;;23666:3;23659:10;;22980:695;;;;;:::o;23681:535::-;23911:3;23933:92;24021:3;24012:6;23933:92;:::i;:::-;23926:99;;24042:148;24186:3;24042:148;:::i;:::-;24035:155;;24207:3;24200:10;;23681:535;;;;:::o;24222:::-;24452:3;24474:92;24562:3;24553:6;24474:92;:::i;:::-;24467:99;;24583:148;24727:3;24583:148;:::i;:::-;24576:155;;24748:3;24741:10;;24222:535;;;;:::o;24763:379::-;24947:3;24969:147;25112:3;24969:147;:::i;:::-;24962:154;;25133:3;25126:10;;24763:379;;;:::o;25148:222::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25292:71;25360:1;25349:9;25345:17;25336:6;25292:71;:::i;:::-;25148:222;;;;:::o;25376:640::-;25571:4;25609:3;25598:9;25594:19;25586:27;;25623:71;25691:1;25680:9;25676:17;25667:6;25623:71;:::i;:::-;25704:72;25772:2;25761:9;25757:18;25748:6;25704:72;:::i;:::-;25786;25854:2;25843:9;25839:18;25830:6;25786:72;:::i;:::-;25905:9;25899:4;25895:20;25890:2;25879:9;25875:18;25868:48;25933:76;26004:4;25995:6;25933:76;:::i;:::-;25925:84;;25376:640;;;;;;;:::o;26022:210::-;26109:4;26147:2;26136:9;26132:18;26124:26;;26160:65;26222:1;26211:9;26207:17;26198:6;26160:65;:::i;:::-;26022:210;;;;:::o;26238:218::-;26329:4;26367:2;26356:9;26352:18;26344:26;;26380:69;26446:1;26435:9;26431:17;26422:6;26380:69;:::i;:::-;26238:218;;;;:::o;26462:313::-;26575:4;26613:2;26602:9;26598:18;26590:26;;26662:9;26656:4;26652:20;26648:1;26637:9;26633:17;26626:47;26690:78;26763:4;26754:6;26690:78;:::i;:::-;26682:86;;26462:313;;;;:::o;26781:419::-;26947:4;26985:2;26974:9;26970:18;26962:26;;27034:9;27028:4;27024:20;27020:1;27009:9;27005:17;26998:47;27062:131;27188:4;27062:131;:::i;:::-;27054:139;;26781:419;;;:::o;27206:::-;27372:4;27410:2;27399:9;27395:18;27387:26;;27459:9;27453:4;27449:20;27445:1;27434:9;27430:17;27423:47;27487:131;27613:4;27487:131;:::i;:::-;27479:139;;27206:419;;;:::o;27631:::-;27797:4;27835:2;27824:9;27820:18;27812:26;;27884:9;27878:4;27874:20;27870:1;27859:9;27855:17;27848:47;27912:131;28038:4;27912:131;:::i;:::-;27904:139;;27631:419;;;:::o;28056:::-;28222:4;28260:2;28249:9;28245:18;28237:26;;28309:9;28303:4;28299:20;28295:1;28284:9;28280:17;28273:47;28337:131;28463:4;28337:131;:::i;:::-;28329:139;;28056:419;;;:::o;28481:::-;28647:4;28685:2;28674:9;28670:18;28662:26;;28734:9;28728:4;28724:20;28720:1;28709:9;28705:17;28698:47;28762:131;28888:4;28762:131;:::i;:::-;28754:139;;28481:419;;;:::o;28906:::-;29072:4;29110:2;29099:9;29095:18;29087:26;;29159:9;29153:4;29149:20;29145:1;29134:9;29130:17;29123:47;29187:131;29313:4;29187:131;:::i;:::-;29179:139;;28906:419;;;:::o;29331:::-;29497:4;29535:2;29524:9;29520:18;29512:26;;29584:9;29578:4;29574:20;29570:1;29559:9;29555:17;29548:47;29612:131;29738:4;29612:131;:::i;:::-;29604:139;;29331:419;;;:::o;29756:::-;29922:4;29960:2;29949:9;29945:18;29937:26;;30009:9;30003:4;29999:20;29995:1;29984:9;29980:17;29973:47;30037:131;30163:4;30037:131;:::i;:::-;30029:139;;29756:419;;;:::o;30181:::-;30347:4;30385:2;30374:9;30370:18;30362:26;;30434:9;30428:4;30424:20;30420:1;30409:9;30405:17;30398:47;30462:131;30588:4;30462:131;:::i;:::-;30454:139;;30181:419;;;:::o;30606:::-;30772:4;30810:2;30799:9;30795:18;30787:26;;30859:9;30853:4;30849:20;30845:1;30834:9;30830:17;30823:47;30887:131;31013:4;30887:131;:::i;:::-;30879:139;;30606:419;;;:::o;31031:::-;31197:4;31235:2;31224:9;31220:18;31212:26;;31284:9;31278:4;31274:20;31270:1;31259:9;31255:17;31248:47;31312:131;31438:4;31312:131;:::i;:::-;31304:139;;31031:419;;;:::o;31456:::-;31622:4;31660:2;31649:9;31645:18;31637:26;;31709:9;31703:4;31699:20;31695:1;31684:9;31680:17;31673:47;31737:131;31863:4;31737:131;:::i;:::-;31729:139;;31456:419;;;:::o;31881:::-;32047:4;32085:2;32074:9;32070:18;32062:26;;32134:9;32128:4;32124:20;32120:1;32109:9;32105:17;32098:47;32162:131;32288:4;32162:131;:::i;:::-;32154:139;;31881:419;;;:::o;32306:::-;32472:4;32510:2;32499:9;32495:18;32487:26;;32559:9;32553:4;32549:20;32545:1;32534:9;32530:17;32523:47;32587:131;32713:4;32587:131;:::i;:::-;32579:139;;32306:419;;;:::o;32731:::-;32897:4;32935:2;32924:9;32920:18;32912:26;;32984:9;32978:4;32974:20;32970:1;32959:9;32955:17;32948:47;33012:131;33138:4;33012:131;:::i;:::-;33004:139;;32731:419;;;:::o;33156:::-;33322:4;33360:2;33349:9;33345:18;33337:26;;33409:9;33403:4;33399:20;33395:1;33384:9;33380:17;33373:47;33437:131;33563:4;33437:131;:::i;:::-;33429:139;;33156:419;;;:::o;33581:::-;33747:4;33785:2;33774:9;33770:18;33762:26;;33834:9;33828:4;33824:20;33820:1;33809:9;33805:17;33798:47;33862:131;33988:4;33862:131;:::i;:::-;33854:139;;33581:419;;;:::o;34006:::-;34172:4;34210:2;34199:9;34195:18;34187:26;;34259:9;34253:4;34249:20;34245:1;34234:9;34230:17;34223:47;34287:131;34413:4;34287:131;:::i;:::-;34279:139;;34006:419;;;:::o;34431:::-;34597:4;34635:2;34624:9;34620:18;34612:26;;34684:9;34678:4;34674:20;34670:1;34659:9;34655:17;34648:47;34712:131;34838:4;34712:131;:::i;:::-;34704:139;;34431:419;;;:::o;34856:::-;35022:4;35060:2;35049:9;35045:18;35037:26;;35109:9;35103:4;35099:20;35095:1;35084:9;35080:17;35073:47;35137:131;35263:4;35137:131;:::i;:::-;35129:139;;34856:419;;;:::o;35281:::-;35447:4;35485:2;35474:9;35470:18;35462:26;;35534:9;35528:4;35524:20;35520:1;35509:9;35505:17;35498:47;35562:131;35688:4;35562:131;:::i;:::-;35554:139;;35281:419;;;:::o;35706:::-;35872:4;35910:2;35899:9;35895:18;35887:26;;35959:9;35953:4;35949:20;35945:1;35934:9;35930:17;35923:47;35987:131;36113:4;35987:131;:::i;:::-;35979:139;;35706:419;;;:::o;36131:::-;36297:4;36335:2;36324:9;36320:18;36312:26;;36384:9;36378:4;36374:20;36370:1;36359:9;36355:17;36348:47;36412:131;36538:4;36412:131;:::i;:::-;36404:139;;36131:419;;;:::o;36556:::-;36722:4;36760:2;36749:9;36745:18;36737:26;;36809:9;36803:4;36799:20;36795:1;36784:9;36780:17;36773:47;36837:131;36963:4;36837:131;:::i;:::-;36829:139;;36556:419;;;:::o;36981:::-;37147:4;37185:2;37174:9;37170:18;37162:26;;37234:9;37228:4;37224:20;37220:1;37209:9;37205:17;37198:47;37262:131;37388:4;37262:131;:::i;:::-;37254:139;;36981:419;;;:::o;37406:::-;37572:4;37610:2;37599:9;37595:18;37587:26;;37659:9;37653:4;37649:20;37645:1;37634:9;37630:17;37623:47;37687:131;37813:4;37687:131;:::i;:::-;37679:139;;37406:419;;;:::o;37831:222::-;37924:4;37962:2;37951:9;37947:18;37939:26;;37975:71;38043:1;38032:9;38028:17;38019:6;37975:71;:::i;:::-;37831:222;;;;:::o;38059:129::-;38093:6;38120:20;;:::i;:::-;38110:30;;38149:33;38177:4;38169:6;38149:33;:::i;:::-;38059:129;;;:::o;38194:75::-;38227:6;38260:2;38254:9;38244:19;;38194:75;:::o;38275:307::-;38336:4;38426:18;38418:6;38415:30;38412:56;;;38448:18;;:::i;:::-;38412:56;38486:29;38508:6;38486:29;:::i;:::-;38478:37;;38570:4;38564;38560:15;38552:23;;38275:307;;;:::o;38588:308::-;38650:4;38740:18;38732:6;38729:30;38726:56;;;38762:18;;:::i;:::-;38726:56;38800:29;38822:6;38800:29;:::i;:::-;38792:37;;38884:4;38878;38874:15;38866:23;;38588:308;;;:::o;38902:141::-;38951:4;38974:3;38966:11;;38997:3;38994:1;38987:14;39031:4;39028:1;39018:18;39010:26;;38902:141;;;:::o;39049:98::-;39100:6;39134:5;39128:12;39118:22;;39049:98;;;:::o;39153:99::-;39205:6;39239:5;39233:12;39223:22;;39153:99;;;:::o;39258:168::-;39341:11;39375:6;39370:3;39363:19;39415:4;39410:3;39406:14;39391:29;;39258:168;;;;:::o;39432:147::-;39533:11;39570:3;39555:18;;39432:147;;;;:::o;39585:169::-;39669:11;39703:6;39698:3;39691:19;39743:4;39738:3;39734:14;39719:29;;39585:169;;;;:::o;39760:148::-;39862:11;39899:3;39884:18;;39760:148;;;;:::o;39914:305::-;39954:3;39973:20;39991:1;39973:20;:::i;:::-;39968:25;;40007:20;40025:1;40007:20;:::i;:::-;40002:25;;40161:1;40093:66;40089:74;40086:1;40083:81;40080:107;;;40167:18;;:::i;:::-;40080:107;40211:1;40208;40204:9;40197:16;;39914:305;;;;:::o;40225:185::-;40265:1;40282:20;40300:1;40282:20;:::i;:::-;40277:25;;40316:20;40334:1;40316:20;:::i;:::-;40311:25;;40355:1;40345:35;;40360:18;;:::i;:::-;40345:35;40402:1;40399;40395:9;40390:14;;40225:185;;;;:::o;40416:348::-;40456:7;40479:20;40497:1;40479:20;:::i;:::-;40474:25;;40513:20;40531:1;40513:20;:::i;:::-;40508:25;;40701:1;40633:66;40629:74;40626:1;40623:81;40618:1;40611:9;40604:17;40600:105;40597:131;;;40708:18;;:::i;:::-;40597:131;40756:1;40753;40749:9;40738:20;;40416:348;;;;:::o;40770:191::-;40810:4;40830:20;40848:1;40830:20;:::i;:::-;40825:25;;40864:20;40882:1;40864:20;:::i;:::-;40859:25;;40903:1;40900;40897:8;40894:34;;;40908:18;;:::i;:::-;40894:34;40953:1;40950;40946:9;40938:17;;40770:191;;;;:::o;40967:96::-;41004:7;41033:24;41051:5;41033:24;:::i;:::-;41022:35;;40967:96;;;:::o;41069:90::-;41103:7;41146:5;41139:13;41132:21;41121:32;;41069:90;;;:::o;41165:149::-;41201:7;41241:66;41234:5;41230:78;41219:89;;41165:149;;;:::o;41320:126::-;41357:7;41397:42;41390:5;41386:54;41375:65;;41320:126;;;:::o;41452:77::-;41489:7;41518:5;41507:16;;41452:77;;;:::o;41535:154::-;41619:6;41614:3;41609;41596:30;41681:1;41672:6;41667:3;41663:16;41656:27;41535:154;;;:::o;41695:307::-;41763:1;41773:113;41787:6;41784:1;41781:13;41773:113;;;41872:1;41867:3;41863:11;41857:18;41853:1;41848:3;41844:11;41837:39;41809:2;41806:1;41802:10;41797:15;;41773:113;;;41904:6;41901:1;41898:13;41895:101;;;41984:1;41975:6;41970:3;41966:16;41959:27;41895:101;41744:258;41695:307;;;:::o;42008:320::-;42052:6;42089:1;42083:4;42079:12;42069:22;;42136:1;42130:4;42126:12;42157:18;42147:81;;42213:4;42205:6;42201:17;42191:27;;42147:81;42275:2;42267:6;42264:14;42244:18;42241:38;42238:84;;;42294:18;;:::i;:::-;42238:84;42059:269;42008:320;;;:::o;42334:281::-;42417:27;42439:4;42417:27;:::i;:::-;42409:6;42405:40;42547:6;42535:10;42532:22;42511:18;42499:10;42496:34;42493:62;42490:88;;;42558:18;;:::i;:::-;42490:88;42598:10;42594:2;42587:22;42377:238;42334:281;;:::o;42621:233::-;42660:3;42683:24;42701:5;42683:24;:::i;:::-;42674:33;;42729:66;42722:5;42719:77;42716:103;;;42799:18;;:::i;:::-;42716:103;42846:1;42839:5;42835:13;42828:20;;42621:233;;;:::o;42860:176::-;42892:1;42909:20;42927:1;42909:20;:::i;:::-;42904:25;;42943:20;42961:1;42943:20;:::i;:::-;42938:25;;42982:1;42972:35;;42987:18;;:::i;:::-;42972:35;43028:1;43025;43021:9;43016:14;;42860:176;;;;:::o;43042:180::-;43090:77;43087:1;43080:88;43187:4;43184:1;43177:15;43211:4;43208:1;43201:15;43228:180;43276:77;43273:1;43266:88;43373:4;43370:1;43363:15;43397:4;43394:1;43387:15;43414:180;43462:77;43459:1;43452:88;43559:4;43556:1;43549:15;43583:4;43580:1;43573:15;43600:180;43648:77;43645:1;43638:88;43745:4;43742:1;43735:15;43769:4;43766:1;43759:15;43786:180;43834:77;43831:1;43824:88;43931:4;43928:1;43921:15;43955:4;43952:1;43945:15;43972:117;44081:1;44078;44071:12;44095:117;44204:1;44201;44194:12;44218:117;44327:1;44324;44317:12;44341:117;44450:1;44447;44440:12;44464:117;44573:1;44570;44563:12;44587:117;44696:1;44693;44686:12;44710:102;44751:6;44802:2;44798:7;44793:2;44786:5;44782:14;44778:28;44768:38;;44710:102;;;:::o;44818:182::-;44958:34;44954:1;44946:6;44942:14;44935:58;44818:182;:::o;45006:166::-;45146:18;45142:1;45134:6;45130:14;45123:42;45006:166;:::o;45178:163::-;45318:15;45314:1;45306:6;45302:14;45295:39;45178:163;:::o;45347:167::-;45487:19;45483:1;45475:6;45471:14;45464:43;45347:167;:::o;45520:175::-;45660:27;45656:1;45648:6;45644:14;45637:51;45520:175;:::o;45701:168::-;45841:20;45837:1;45829:6;45825:14;45818:44;45701:168;:::o;45875:177::-;46015:29;46011:1;46003:6;45999:14;45992:53;45875:177;:::o;46058:178::-;46198:30;46194:1;46186:6;46182:14;46175:54;46058:178;:::o;46242:180::-;46382:32;46378:1;46370:6;46366:14;46359:56;46242:180;:::o;46428:174::-;46568:26;46564:1;46556:6;46552:14;46545:50;46428:174;:::o;46608:182::-;46748:34;46744:1;46736:6;46732:14;46725:58;46608:182;:::o;46796:175::-;46936:27;46932:1;46924:6;46920:14;46913:51;46796:175;:::o;46977:176::-;47117:28;47113:1;47105:6;47101:14;47094:52;46977:176;:::o;47159:162::-;47299:14;47295:1;47287:6;47283:14;47276:38;47159:162;:::o;47327:180::-;47467:32;47463:1;47455:6;47451:14;47444:56;47327:180;:::o;47513:176::-;47653:28;47649:1;47641:6;47637:14;47630:52;47513:176;:::o;47695:167::-;47835:19;47831:1;47823:6;47819:14;47812:43;47695:167;:::o;47868:181::-;48008:33;48004:1;47996:6;47992:14;47985:57;47868:181;:::o;48055:::-;48195:33;48191:1;48183:6;48179:14;48172:57;48055:181;:::o;48242:182::-;48382:34;48378:1;48370:6;48366:14;48359:58;48242:182;:::o;48430:::-;48570:34;48566:1;48558:6;48554:14;48547:58;48430:182;:::o;48618:231::-;48758:34;48754:1;48746:6;48742:14;48735:58;48827:14;48822:2;48814:6;48810:15;48803:39;48618:231;:::o;48855:155::-;48995:7;48991:1;48983:6;48979:14;48972:31;48855:155;:::o;49016:178::-;49156:30;49152:1;49144:6;49140:14;49133:54;49016:178;:::o;49200:182::-;49340:34;49336:1;49328:6;49324:14;49317:58;49200:182;:::o;49388:178::-;49528:30;49524:1;49516:6;49512:14;49505:54;49388:178;:::o;49572:114::-;;:::o;49692:179::-;49832:31;49828:1;49820:6;49816:14;49809:55;49692:179;:::o;49877:169::-;50017:21;50013:1;50005:6;50001:14;49994:45;49877:169;:::o;50052:166::-;50192:18;50188:1;50180:6;50176:14;50169:42;50052:166;:::o;50224:122::-;50297:24;50315:5;50297:24;:::i;:::-;50290:5;50287:35;50277:63;;50336:1;50333;50326:12;50277:63;50224:122;:::o;50352:116::-;50422:21;50437:5;50422:21;:::i;:::-;50415:5;50412:32;50402:60;;50458:1;50455;50448:12;50402:60;50352:116;:::o;50474:120::-;50546:23;50563:5;50546:23;:::i;:::-;50539:5;50536:34;50526:62;;50584:1;50581;50574:12;50526:62;50474:120;:::o;50600:122::-;50673:24;50691:5;50673:24;:::i;:::-;50666:5;50663:35;50653:63;;50712:1;50709;50702:12;50653:63;50600:122;:::o

Swarm Source

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