ETH Price: $2,652.72 (+0.40%)

Token

Tired Unicorns (UNICORNS)
 

Overview

Max Total Supply

29 UNICORNS

Holders

18

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
dragonixx.eth
Balance
2 UNICORNS
0x483a44E5Ed038f23518F7222a97F8f3E8AcD138e
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:
TiredUnicorns

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 13 of 13: TiredUnicorns.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721Enumerable.sol";
import "./Ownable.sol";

contract TiredUnicorns is ERC721Enumerable, Ownable {

   using Strings for uint256;

   string _baseTokenURI;
   string _metadataExtension = "";

   string public METADATA_PROVENANCE_HASH = "";

   string private _baseContractURI;
   uint16 private _reserved = 300;
   uint16 public constant MAX_UNICORNS = 12000;
   uint256 private _price = 0.02 ether;
   bool public _paused = false;

   // Optional mapping for token URIs
   mapping(uint256 => string) private _tokenURIs;

   constructor(string memory baseURI, string memory baseContractURI) ERC721("Tired Unicorns", "UNICORNS")  {
      
      setBaseURI(baseURI);
      setContractURI(baseContractURI);

      // team gets 2 unicorns:)
      _safeMint(owner(), 0);
      _safeMint(owner(), 1);
   }
   
   function _baseURI() internal view virtual override returns (string memory) {
      return _baseTokenURI;
   }

   function contractURI() public view returns (string memory) {
      return _baseContractURI;
   }

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

      string memory _tokenURI = _tokenURIs[tokenId];
      string memory base = _baseURI();

      // If there is no base URI, return the token URI.
      if (bytes(base).length == 0) {
            return _tokenURI;
      }
      // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
      if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI, _metadataExtension));
      }
      // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
      return string(abi.encodePacked(base, tokenId.toString(), _metadataExtension));
   }

   function getMetadataExtension() public view returns(string memory) {
      return _metadataExtension;
   }

   function adoptUnicorn(uint8 num) public payable {
      uint256 supply = totalSupply();
      require( !_paused,                                  "Sale paused" );
      require( num > 0 && num < 21,                       "You can adopt a maximum of 20 unicorn and minimum 1" );
      require( supply + num < MAX_UNICORNS - _reserved,   "Exceeds maximum Unicorns supply" );
      require( msg.value >= _price * num,                 "Ether sent is not correct" );

      for(uint8 i; i < num; i++){
         _safeMint( msg.sender, supply + i );
      }
   }

   function tokensOfOwner(address _owner) public view returns(uint256[] memory) {
      uint256 tokenCount = balanceOf(_owner);

      if(tokenCount == 0) {
         return new uint256[](0);
      }
      else {
         uint256[] memory tokensId = new uint256[](tokenCount);
         for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
         }
         return tokensId;
      }
   }

   function getPrice() public view returns (uint256) {
      return _price;
   }

   function getReservedCount() public view returns (uint16) {
      return _reserved;
   }

   function setProvenanceHash(string memory _hash) public onlyOwner {
      METADATA_PROVENANCE_HASH = _hash;
   }

   function setContractURI(string memory baseContractURI) public onlyOwner {
      _baseContractURI = baseContractURI;
   }

   function setBaseURI(string memory baseURI) public onlyOwner {
      _baseTokenURI = baseURI;
   }

   /**
    * @dev Internal function to set the token URI for a given token.
    * Reverts if the token ID does not exist.
    * @param tokenId uint256 ID of the token to set its URI
    * @param uri string URI to assign
    */
   function setTokenURI(uint256 tokenId, string memory uri) public onlyOwner {
      require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
      _tokenURIs[tokenId] = uri;
   }

   function setMetadataExtension(string memory str) public onlyOwner {
      _metadataExtension = str;
   }

   function setPrice(uint256 _newPrice) public onlyOwner {
     _price = _newPrice;
   }

   function reserveAirdrop(address _to, uint8 _amount) external onlyOwner {
      require( _amount <= _reserved, "Exceeds reserved Unicorn supply" );

      uint256 supply = totalSupply();
      for(uint8 i; i < _amount; i++){
         _safeMint( _to, supply + i );
      }

      _reserved -= _amount;
   }

   function pauseSale(bool val) public onlyOwner {
      _paused = val;
   }

   function withdrawAll() public payable onlyOwner {
      require(payable(msg.sender).send(address(this).balance));
   }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 4 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 5 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 6 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 7 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 9 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 10 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 11 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"baseContractURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_UNICORNS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"num","type":"uint8"}],"name":"adoptUnicorn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMetadataExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservedCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"reserveAirdrop","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"setMetadataExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenURI","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260405180602001604052806000815250600c90805190602001906200002b92919062000e30565b5060405180602001604052806000815250600d90805190602001906200005392919062000e30565b5061012c600f60006101000a81548161ffff021916908361ffff16021790555066470de4df8200006010556000601160006101000a81548160ff021916908315150217905550348015620000a657600080fd5b5060405162006290380380620062908339818101604052810190620000cc919062000fa7565b6040518060400160405280600e81526020017f546972656420556e69636f726e730000000000000000000000000000000000008152506040518060400160405280600881526020017f554e49434f524e5300000000000000000000000000000000000000000000000081525081600090805190602001906200015092919062000e30565b5080600190805190602001906200016992919062000e30565b5050506200018c62000180620001fa60201b60201c565b6200020260201b60201c565b6200019d82620002c860201b60201c565b620001ae816200037360201b60201c565b620001d0620001c26200041e60201b60201c565b60006200044860201b60201c565b620001f2620001e46200041e60201b60201c565b60016200044860201b60201c565b5050620016c3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d8620001fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002fe6200041e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034e906200122e565b60405180910390fd5b80600b90805190602001906200036f92919062000e30565b5050565b62000383620001fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003a96200041e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000402576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f9906200122e565b60405180910390fd5b80600e90805190602001906200041a92919062000e30565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200046a8282604051806020016040528060008152506200046e60201b60201c565b5050565b620004808383620004dc60201b60201c565b620004956000848484620006c260201b60201c565b620004d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ce90620011a6565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200054f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000546906200120c565b60405180910390fd5b62000560816200087c60201b60201c565b15620005a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059a90620011c8565b60405180910390fd5b620005b760008383620008e860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006099190620012dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006f08473ffffffffffffffffffffffffffffffffffffffff1662000a2f60201b62001faa1760201c565b156200086f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000722620001fa60201b60201c565b8786866040518563ffffffff1660e01b815260040162000746949392919062001152565b602060405180830381600087803b1580156200076157600080fd5b505af19250505080156200079557506040513d601f19601f8201168201806040525081019062000792919062000f75565b60015b6200081e573d8060008114620007c8576040519150601f19603f3d011682016040523d82523d6000602084013e620007cd565b606091505b5060008151141562000816576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080d90620011a6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000874565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200090083838362000a4260201b62001fbd1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200094d57620009478162000a4760201b60201c565b62000995565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009945762000993838262000a9060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009e257620009dc8162000c0d60201b60201c565b62000a2a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a295762000a28828262000ce960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000aaa8462000d7560201b620010f61760201c565b62000ab6919062001339565b905060006007600084815260200190815260200160002054905081811462000b9c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c23919062001339565b905060006009600084815260200190815260200160002054905060006008838154811062000c565762000c556200150d565b5b90600052602060002001549050806008838154811062000c7b5762000c7a6200150d565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ccd5762000ccc620014de565b5b6001900381819060005260206000200160009055905550505050565b600062000d018362000d7560201b620010f61760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de090620011ea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e3e9062001414565b90600052602060002090601f01602090048101928262000e62576000855562000eae565b82601f1062000e7d57805160ff191683800117855562000eae565b8280016001018555821562000eae579182015b8281111562000ead57825182559160200191906001019062000e90565b5b50905062000ebd919062000ec1565b5090565b5b8082111562000edc57600081600090555060010162000ec2565b5090565b600062000ef762000ef18462001279565b62001250565b90508281526020810184848401111562000f165762000f1562001570565b5b62000f23848285620013de565b509392505050565b60008151905062000f3c81620016a9565b92915050565b600082601f83011262000f5a5762000f596200156b565b5b815162000f6c84826020860162000ee0565b91505092915050565b60006020828403121562000f8e5762000f8d6200157a565b5b600062000f9e8482850162000f2b565b91505092915050565b6000806040838503121562000fc15762000fc06200157a565b5b600083015167ffffffffffffffff81111562000fe25762000fe162001575565b5b62000ff08582860162000f42565b925050602083015167ffffffffffffffff81111562001014576200101362001575565b5b620010228582860162000f42565b9150509250929050565b620010378162001374565b82525050565b60006200104a82620012af565b620010568185620012ba565b935062001068818560208601620013de565b62001073816200157f565b840191505092915050565b60006200108d603283620012cb565b91506200109a8262001590565b604082019050919050565b6000620010b4601c83620012cb565b9150620010c182620015df565b602082019050919050565b6000620010db602a83620012cb565b9150620010e88262001608565b604082019050919050565b600062001102602083620012cb565b91506200110f8262001657565b602082019050919050565b600062001129602083620012cb565b9150620011368262001680565b602082019050919050565b6200114c81620013d4565b82525050565b60006080820190506200116960008301876200102c565b6200117860208301866200102c565b62001187604083018562001141565b81810360608301526200119b81846200103d565b905095945050505050565b60006020820190508181036000830152620011c1816200107e565b9050919050565b60006020820190508181036000830152620011e381620010a5565b9050919050565b600060208201905081810360008301526200120581620010cc565b9050919050565b600060208201905081810360008301526200122781620010f3565b9050919050565b6000602082019050818103600083015262001249816200111a565b9050919050565b60006200125c6200126f565b90506200126a82826200144a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200129757620012966200153c565b5b620012a2826200157f565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012e982620013d4565b9150620012f683620013d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200132e576200132d62001480565b5b828201905092915050565b60006200134682620013d4565b91506200135383620013d4565b92508282101562001369576200136862001480565b5b828203905092915050565b60006200138182620013b4565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013fe578082015181840152602081019050620013e1565b838111156200140e576000848401525b50505050565b600060028204905060018216806200142d57607f821691505b60208210811415620014445762001443620014af565b5b50919050565b62001455826200157f565b810181811067ffffffffffffffff821117156200147757620014766200153c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620016b48162001388565b8114620016c057600080fd5b50565b614bbd80620016d36000396000f3fe60806040526004361061021a5760003560e01c8063715018a6116101235780639f6350e6116100ab578063db6e4cd11161006f578063db6e4cd1146107b3578063e8a3d485146107dc578063e985e9c514610807578063f0c9dc6014610844578063f2fde38b1461086f5761021a565b80639f6350e6146106df578063a22cb46514610708578063b88d4fde14610731578063c87b56dd1461075a578063ce00ae41146107975761021a565b806391b7f5ed116100f257806391b7f5ed1461060c578063938e3d7b1461063557806395d89b411461065e57806398d5fdca14610689578063995fb908146106b45761021a565b8063715018a6146105835780638462151c1461059a578063853828b6146105d75780638da5cb5b146105e15761021a565b806318160ddd116101a65780634f6ccce7116101755780634f6ccce71461047857806355f804b3146104b55780636352211e146104de5780636e42320c1461051b57806370a08231146105465761021a565b806318160ddd146103be57806323b872dd146103e95780632f745c591461041257806342842e0e1461044f5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef5780630cfed2a2146103185780631096952314610341578063162094c41461036a57806316c61ccc146103935761021a565b806301ffc9a71461021f57806304db5e441461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906134b3565b610898565b6040516102539190613bf1565b60405180910390f35b34801561026857600080fd5b50610271610912565b60405161027e9190613f2e565b60405180910390f35b34801561029357600080fd5b5061029c610918565b6040516102a99190613c0c565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613556565b6109aa565b6040516102e69190613b68565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613406565b610a2f565b005b34801561032457600080fd5b5061033f600480360381019061033a9190613486565b610b47565b005b34801561034d57600080fd5b506103686004803603810190610363919061350d565b610be0565b005b34801561037657600080fd5b50610391600480360381019061038c9190613583565b610c76565b005b34801561039f57600080fd5b506103a8610d66565b6040516103b59190613bf1565b60405180910390f35b3480156103ca57600080fd5b506103d3610d79565b6040516103e09190613f49565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906132f0565b610d86565b005b34801561041e57600080fd5b5061043960048036038101906104349190613406565b610de6565b6040516104469190613f49565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906132f0565b610e8b565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613556565b610eab565b6040516104ac9190613f49565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061350d565b610f1c565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613556565b610fb2565b6040516105129190613b68565b60405180910390f35b34801561052757600080fd5b50610530611064565b60405161053d9190613c0c565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613283565b6110f6565b60405161057a9190613f49565b60405180910390f35b34801561058f57600080fd5b506105986111ae565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613283565b611236565b6040516105ce9190613bcf565b60405180910390f35b6105df611340565b005b3480156105ed57600080fd5b506105f66113fc565b6040516106039190613b68565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613556565b611426565b005b34801561064157600080fd5b5061065c6004803603810190610657919061350d565b6114ac565b005b34801561066a57600080fd5b50610673611542565b6040516106809190613c0c565b60405180910390f35b34801561069557600080fd5b5061069e6115d4565b6040516106ab9190613f49565b60405180910390f35b3480156106c057600080fd5b506106c96115de565b6040516106d69190613f2e565b60405180910390f35b3480156106eb57600080fd5b506107066004803603810190610701919061350d565b6115f6565b005b34801561071457600080fd5b5061072f600480360381019061072a91906133c6565b61168c565b005b34801561073d57600080fd5b5061075860048036038101906107539190613343565b61180d565b005b34801561076657600080fd5b50610781600480360381019061077c9190613556565b61186f565b60405161078e9190613c0c565b60405180910390f35b6107b160048036038101906107ac91906135df565b6119e8565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613446565b611b9e565b005b3480156107e857600080fd5b506107f1611cfe565b6040516107fe9190613c0c565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906132b0565b611d90565b60405161083b9190613bf1565b60405180910390f35b34801561085057600080fd5b50610859611e24565b6040516108669190613c0c565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613283565b611eb2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090b575061090a82611fc2565b5b9050919050565b612ee081565b60606000805461092790614296565b80601f016020809104026020016040519081016040528092919081815260200182805461095390614296565b80156109a05780601f10610975576101008083540402835291602001916109a0565b820191906000526020600020905b81548152906001019060200180831161098357829003601f168201915b5050505050905090565b60006109b5826120a4565b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90613dee565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3a82610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290613e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aca612110565b73ffffffffffffffffffffffffffffffffffffffff161480610af95750610af881610af3612110565b611d90565b5b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613d6e565b60405180910390fd5b610b428383612118565b505050565b610b4f612110565b73ffffffffffffffffffffffffffffffffffffffff16610b6d6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613e2e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b610be8612110565b73ffffffffffffffffffffffffffffffffffffffff16610c066113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613e2e565b60405180910390fd5b80600d9080519060200190610c72929190613082565b5050565b610c7e612110565b73ffffffffffffffffffffffffffffffffffffffff16610c9c6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613e2e565b60405180910390fd5b610cfb826120a4565b610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613e0e565b60405180910390fd5b80601260008481526020019081526020016000209080519060200190610d61929190613082565b505050565b601160009054906101000a900460ff1681565b6000600880549050905090565b610d97610d91612110565b826121d1565b610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613ece565b60405180910390fd5b610de18383836122af565b505050565b6000610df1836110f6565b8210610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613c6e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ea68383836040518060200160405280600081525061180d565b505050565b6000610eb5610d79565b8210610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613eee565b60405180910390fd5b60088281548110610f0a57610f09614459565b5b90600052602060002001549050919050565b610f24612110565b73ffffffffffffffffffffffffffffffffffffffff16610f426113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613e2e565b60405180910390fd5b80600b9080519060200190610fae929190613082565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613dae565b60405180910390fd5b80915050919050565b6060600c805461107390614296565b80601f016020809104026020016040519081016040528092919081815260200182805461109f90614296565b80156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90613d8e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111b6612110565b73ffffffffffffffffffffffffffffffffffffffff166111d46113fc565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613e2e565b60405180910390fd5b611234600061250b565b565b60606000611243836110f6565b905060008114156112a057600067ffffffffffffffff81111561126957611268614488565b5b6040519080825280602002602001820160405280156112975781602001602082028036833780820191505090505b5091505061133b565b60008167ffffffffffffffff8111156112bc576112bb614488565b5b6040519080825280602002602001820160405280156112ea5781602001602082028036833780820191505090505b50905060005b82811015611334576113028582610de6565b82828151811061131557611314614459565b5b602002602001018181525050808061132c906142f9565b9150506112f0565b5080925050505b919050565b611348612110565b73ffffffffffffffffffffffffffffffffffffffff166113666113fc565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613e2e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506113fa57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142e612110565b73ffffffffffffffffffffffffffffffffffffffff1661144c6113fc565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613e2e565b60405180910390fd5b8060108190555050565b6114b4612110565b73ffffffffffffffffffffffffffffffffffffffff166114d26113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613e2e565b60405180910390fd5b80600e908051906020019061153e929190613082565b5050565b60606001805461155190614296565b80601f016020809104026020016040519081016040528092919081815260200182805461157d90614296565b80156115ca5780601f1061159f576101008083540402835291602001916115ca565b820191906000526020600020905b8154815290600101906020018083116115ad57829003601f168201915b5050505050905090565b6000601054905090565b6000600f60009054906101000a900461ffff16905090565b6115fe612110565b73ffffffffffffffffffffffffffffffffffffffff1661161c6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613e2e565b60405180910390fd5b80600c9080519060200190611688929190613082565b5050565b611694612110565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613d2e565b60405180910390fd5b806005600061170f612110565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117bc612110565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118019190613bf1565b60405180910390a35050565b61181e611818612110565b836121d1565b61185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613ece565b60405180910390fd5b611869848484846125d1565b50505050565b606061187a826120a4565b6118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613e6e565b60405180910390fd5b60006012600084815260200190815260200160002080546118d990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461190590614296565b80156119525780601f1061192757610100808354040283529160200191611952565b820191906000526020600020905b81548152906001019060200180831161193557829003601f168201915b50505050509050600061196361262d565b90506000815114156119795781925050506119e3565b6000825111156119b1578082600c60405160200161199993929190613b37565b604051602081830303815290604052925050506119e3565b806119bb856126bf565b600c6040516020016119cf93929190613b37565b604051602081830303815290604052925050505b919050565b60006119f2610d79565b9050601160009054906101000a900460ff1615611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613c2e565b60405180910390fd5b60008260ff16118015611a5a575060158260ff16105b611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9090613c4e565b60405180910390fd5b600f60009054906101000a900461ffff16612ee0611ab7919061415d565b61ffff168260ff1682611aca919061407c565b10611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190613f0e565b60405180910390fd5b8160ff16601054611b1b9190614103565b341015611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613eae565b60405180910390fd5b60005b8260ff168160ff161015611b9957611b86338260ff1684611b81919061407c565b612820565b8080611b9190614342565b915050611b60565b505050565b611ba6612110565b73ffffffffffffffffffffffffffffffffffffffff16611bc46113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190613e2e565b60405180910390fd5b600f60009054906101000a900461ffff1661ffff168160ff161115611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613cce565b60405180910390fd5b6000611c7e610d79565b905060005b8260ff168160ff161015611cbc57611ca9848260ff1684611ca4919061407c565b612820565b8080611cb490614342565b915050611c83565b508160ff16600f60008282829054906101000a900461ffff16611cdf919061415d565b92506101000a81548161ffff021916908361ffff160217905550505050565b6060600e8054611d0d90614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3990614296565b8015611d865780601f10611d5b57610100808354040283529160200191611d86565b820191906000526020600020905b815481529060010190602001808311611d6957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d8054611e3190614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d90614296565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b505050505081565b611eba612110565b73ffffffffffffffffffffffffffffffffffffffff16611ed86113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590613e2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590613cae565b60405180910390fd5b611fa78161250b565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209d575061209c8261283e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661218b83610fb2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121dc826120a4565b61221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613d4e565b60405180910390fd5b600061222683610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061229557508373ffffffffffffffffffffffffffffffffffffffff1661227d846109aa565b73ffffffffffffffffffffffffffffffffffffffff16145b806122a657506122a58185611d90565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122cf82610fb2565b73ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613d0e565b60405180910390fd5b6123a08383836128a8565b6123ab600082612118565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb9190614191565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612452919061407c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125dc8484846122af565b6125e8848484846129bc565b612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90613c8e565b60405180910390fd5b50505050565b6060600b805461263c90614296565b80601f016020809104026020016040519081016040528092919081815260200182805461266890614296565b80156126b55780601f1061268a576101008083540402835291602001916126b5565b820191906000526020600020905b81548152906001019060200180831161269857829003601f168201915b5050505050905090565b60606000821415612707576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061281b565b600082905060005b60008214612739578080612722906142f9565b915050600a8261273291906140d2565b915061270f565b60008167ffffffffffffffff81111561275557612754614488565b5b6040519080825280601f01601f1916602001820160405280156127875781602001600182028036833780820191505090505b5090505b60008514612814576001826127a09190614191565b9150600a856127af919061436c565b60306127bb919061407c565b60f81b8183815181106127d1576127d0614459565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561280d91906140d2565b945061278b565b8093505050505b919050565b61283a828260405180602001604052806000815250612b53565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128b3838383611fbd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f6576128f181612bae565b612935565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612934576129338382612bf7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129785761297381612d64565b6129b7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129b6576129b58282612e35565b5b5b505050565b60006129dd8473ffffffffffffffffffffffffffffffffffffffff16611faa565b15612b46578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a06612110565b8786866040518563ffffffff1660e01b8152600401612a289493929190613b83565b602060405180830381600087803b158015612a4257600080fd5b505af1925050508015612a7357506040513d601f19601f82011682018060405250810190612a7091906134e0565b60015b612af6573d8060008114612aa3576040519150601f19603f3d011682016040523d82523d6000602084013e612aa8565b606091505b50600081511415612aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae590613c8e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b4b565b600190505b949350505050565b612b5d8383612eb4565b612b6a60008484846129bc565b612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090613c8e565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c04846110f6565b612c0e9190614191565b9050600060076000848152602001908152602001600020549050818114612cf3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d789190614191565b9050600060096000848152602001908152602001600020549050600060088381548110612da857612da7614459565b5b906000526020600020015490508060088381548110612dca57612dc9614459565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e1957612e1861442a565b5b6001900381819060005260206000200160009055905550505050565b6000612e40836110f6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b90613dce565b60405180910390fd5b612f2d816120a4565b15612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490613cee565b60405180910390fd5b612f79600083836128a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc9919061407c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461308e90614296565b90600052602060002090601f0160209004810192826130b057600085556130f7565b82601f106130c957805160ff19168380011785556130f7565b828001600101855582156130f7579182015b828111156130f65782518255916020019190600101906130db565b5b5090506131049190613108565b5090565b5b80821115613121576000816000905550600101613109565b5090565b600061313861313384613f89565b613f64565b905082815260208101848484011115613154576131536144bc565b5b61315f848285614254565b509392505050565b600061317a61317584613fba565b613f64565b905082815260208101848484011115613196576131956144bc565b5b6131a1848285614254565b509392505050565b6000813590506131b881614b14565b92915050565b6000813590506131cd81614b2b565b92915050565b6000813590506131e281614b42565b92915050565b6000815190506131f781614b42565b92915050565b600082601f830112613212576132116144b7565b5b8135613222848260208601613125565b91505092915050565b600082601f8301126132405761323f6144b7565b5b8135613250848260208601613167565b91505092915050565b60008135905061326881614b59565b92915050565b60008135905061327d81614b70565b92915050565b600060208284031215613299576132986144c6565b5b60006132a7848285016131a9565b91505092915050565b600080604083850312156132c7576132c66144c6565b5b60006132d5858286016131a9565b92505060206132e6858286016131a9565b9150509250929050565b600080600060608486031215613309576133086144c6565b5b6000613317868287016131a9565b9350506020613328868287016131a9565b925050604061333986828701613259565b9150509250925092565b6000806000806080858703121561335d5761335c6144c6565b5b600061336b878288016131a9565b945050602061337c878288016131a9565b935050604061338d87828801613259565b925050606085013567ffffffffffffffff8111156133ae576133ad6144c1565b5b6133ba878288016131fd565b91505092959194509250565b600080604083850312156133dd576133dc6144c6565b5b60006133eb858286016131a9565b92505060206133fc858286016131be565b9150509250929050565b6000806040838503121561341d5761341c6144c6565b5b600061342b858286016131a9565b925050602061343c85828601613259565b9150509250929050565b6000806040838503121561345d5761345c6144c6565b5b600061346b858286016131a9565b925050602061347c8582860161326e565b9150509250929050565b60006020828403121561349c5761349b6144c6565b5b60006134aa848285016131be565b91505092915050565b6000602082840312156134c9576134c86144c6565b5b60006134d7848285016131d3565b91505092915050565b6000602082840312156134f6576134f56144c6565b5b6000613504848285016131e8565b91505092915050565b600060208284031215613523576135226144c6565b5b600082013567ffffffffffffffff811115613541576135406144c1565b5b61354d8482850161322b565b91505092915050565b60006020828403121561356c5761356b6144c6565b5b600061357a84828501613259565b91505092915050565b6000806040838503121561359a576135996144c6565b5b60006135a885828601613259565b925050602083013567ffffffffffffffff8111156135c9576135c86144c1565b5b6135d58582860161322b565b9150509250929050565b6000602082840312156135f5576135f46144c6565b5b60006136038482850161326e565b91505092915050565b60006136188383613b19565b60208301905092915050565b61362d816141c5565b82525050565b600061363e82614010565b613648818561403e565b935061365383613feb565b8060005b8381101561368457815161366b888261360c565b975061367683614031565b925050600181019050613657565b5085935050505092915050565b61369a816141d7565b82525050565b60006136ab8261401b565b6136b5818561404f565b93506136c5818560208601614263565b6136ce816144cb565b840191505092915050565b60006136e482614026565b6136ee8185614060565b93506136fe818560208601614263565b613707816144cb565b840191505092915050565b600061371d82614026565b6137278185614071565b9350613737818560208601614263565b80840191505092915050565b6000815461375081614296565b61375a8186614071565b945060018216600081146137755760018114613786576137b9565b60ff198316865281860193506137b9565b61378f85613ffb565b60005b838110156137b157815481890152600182019150602081019050613792565b838801955050505b50505092915050565b60006137cf600b83614060565b91506137da826144dc565b602082019050919050565b60006137f2603383614060565b91506137fd82614505565b604082019050919050565b6000613815602b83614060565b915061382082614554565b604082019050919050565b6000613838603283614060565b9150613843826145a3565b604082019050919050565b600061385b602683614060565b9150613866826145f2565b604082019050919050565b600061387e601f83614060565b915061388982614641565b602082019050919050565b60006138a1601c83614060565b91506138ac8261466a565b602082019050919050565b60006138c4602483614060565b91506138cf82614693565b604082019050919050565b60006138e7601983614060565b91506138f2826146e2565b602082019050919050565b600061390a602c83614060565b91506139158261470b565b604082019050919050565b600061392d603883614060565b91506139388261475a565b604082019050919050565b6000613950602a83614060565b915061395b826147a9565b604082019050919050565b6000613973602983614060565b915061397e826147f8565b604082019050919050565b6000613996602083614060565b91506139a182614847565b602082019050919050565b60006139b9602c83614060565b91506139c482614870565b604082019050919050565b60006139dc602c83614060565b91506139e7826148bf565b604082019050919050565b60006139ff602083614060565b9150613a0a8261490e565b602082019050919050565b6000613a22602983614060565b9150613a2d82614937565b604082019050919050565b6000613a45602f83614060565b9150613a5082614986565b604082019050919050565b6000613a68602183614060565b9150613a73826149d5565b604082019050919050565b6000613a8b601983614060565b9150613a9682614a24565b602082019050919050565b6000613aae603183614060565b9150613ab982614a4d565b604082019050919050565b6000613ad1602c83614060565b9150613adc82614a9c565b604082019050919050565b6000613af4601f83614060565b9150613aff82614aeb565b602082019050919050565b613b138161420f565b82525050565b613b228161423d565b82525050565b613b318161423d565b82525050565b6000613b438286613712565b9150613b4f8285613712565b9150613b5b8284613743565b9150819050949350505050565b6000602082019050613b7d6000830184613624565b92915050565b6000608082019050613b986000830187613624565b613ba56020830186613624565b613bb26040830185613b28565b8181036060830152613bc481846136a0565b905095945050505050565b60006020820190508181036000830152613be98184613633565b905092915050565b6000602082019050613c066000830184613691565b92915050565b60006020820190508181036000830152613c2681846136d9565b905092915050565b60006020820190508181036000830152613c47816137c2565b9050919050565b60006020820190508181036000830152613c67816137e5565b9050919050565b60006020820190508181036000830152613c8781613808565b9050919050565b60006020820190508181036000830152613ca78161382b565b9050919050565b60006020820190508181036000830152613cc78161384e565b9050919050565b60006020820190508181036000830152613ce781613871565b9050919050565b60006020820190508181036000830152613d0781613894565b9050919050565b60006020820190508181036000830152613d27816138b7565b9050919050565b60006020820190508181036000830152613d47816138da565b9050919050565b60006020820190508181036000830152613d67816138fd565b9050919050565b60006020820190508181036000830152613d8781613920565b9050919050565b60006020820190508181036000830152613da781613943565b9050919050565b60006020820190508181036000830152613dc781613966565b9050919050565b60006020820190508181036000830152613de781613989565b9050919050565b60006020820190508181036000830152613e07816139ac565b9050919050565b60006020820190508181036000830152613e27816139cf565b9050919050565b60006020820190508181036000830152613e47816139f2565b9050919050565b60006020820190508181036000830152613e6781613a15565b9050919050565b60006020820190508181036000830152613e8781613a38565b9050919050565b60006020820190508181036000830152613ea781613a5b565b9050919050565b60006020820190508181036000830152613ec781613a7e565b9050919050565b60006020820190508181036000830152613ee781613aa1565b9050919050565b60006020820190508181036000830152613f0781613ac4565b9050919050565b60006020820190508181036000830152613f2781613ae7565b9050919050565b6000602082019050613f436000830184613b0a565b92915050565b6000602082019050613f5e6000830184613b28565b92915050565b6000613f6e613f7f565b9050613f7a82826142c8565b919050565b6000604051905090565b600067ffffffffffffffff821115613fa457613fa3614488565b5b613fad826144cb565b9050602081019050919050565b600067ffffffffffffffff821115613fd557613fd4614488565b5b613fde826144cb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140878261423d565b91506140928361423d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c7576140c661439d565b5b828201905092915050565b60006140dd8261423d565b91506140e88361423d565b9250826140f8576140f76143cc565b5b828204905092915050565b600061410e8261423d565b91506141198361423d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141525761415161439d565b5b828202905092915050565b60006141688261420f565b91506141738361420f565b9250828210156141865761418561439d565b5b828203905092915050565b600061419c8261423d565b91506141a78361423d565b9250828210156141ba576141b961439d565b5b828203905092915050565b60006141d08261421d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614281578082015181840152602081019050614266565b83811115614290576000848401525b50505050565b600060028204905060018216806142ae57607f821691505b602082108114156142c2576142c16143fb565b5b50919050565b6142d1826144cb565b810181811067ffffffffffffffff821117156142f0576142ef614488565b5b80604052505050565b60006143048261423d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143375761433661439d565b5b600182019050919050565b600061434d82614247565b915060ff8214156143615761436061439d565b5b600182019050919050565b60006143778261423d565b91506143828361423d565b925082614392576143916143cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f596f752063616e2061646f70742061206d6178696d756d206f6620323020756e60008201527f69636f726e20616e64206d696e696d756d203100000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420556e69636f726e20737570706c7900600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20556e69636f726e7320737570706c7900600082015250565b614b1d816141c5565b8114614b2857600080fd5b50565b614b34816141d7565b8114614b3f57600080fd5b50565b614b4b816141e3565b8114614b5657600080fd5b50565b614b628161423d565b8114614b6d57600080fd5b50565b614b7981614247565b8114614b8457600080fd5b5056fea26469706673582212206c4c3367b4405edbc0e2c797f973c847827b24da846f1494178626cd2142138364736f6c63430008060033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d557870596733584a50326f317763775567484b56766f5075694b73696332334b636734516d414e4d376a55562f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d507159703139313572614838413346684458764e59335a4d39667762504b67456f43414c61395253486e56320000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c8063715018a6116101235780639f6350e6116100ab578063db6e4cd11161006f578063db6e4cd1146107b3578063e8a3d485146107dc578063e985e9c514610807578063f0c9dc6014610844578063f2fde38b1461086f5761021a565b80639f6350e6146106df578063a22cb46514610708578063b88d4fde14610731578063c87b56dd1461075a578063ce00ae41146107975761021a565b806391b7f5ed116100f257806391b7f5ed1461060c578063938e3d7b1461063557806395d89b411461065e57806398d5fdca14610689578063995fb908146106b45761021a565b8063715018a6146105835780638462151c1461059a578063853828b6146105d75780638da5cb5b146105e15761021a565b806318160ddd116101a65780634f6ccce7116101755780634f6ccce71461047857806355f804b3146104b55780636352211e146104de5780636e42320c1461051b57806370a08231146105465761021a565b806318160ddd146103be57806323b872dd146103e95780632f745c591461041257806342842e0e1461044f5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef5780630cfed2a2146103185780631096952314610341578063162094c41461036a57806316c61ccc146103935761021a565b806301ffc9a71461021f57806304db5e441461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906134b3565b610898565b6040516102539190613bf1565b60405180910390f35b34801561026857600080fd5b50610271610912565b60405161027e9190613f2e565b60405180910390f35b34801561029357600080fd5b5061029c610918565b6040516102a99190613c0c565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613556565b6109aa565b6040516102e69190613b68565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613406565b610a2f565b005b34801561032457600080fd5b5061033f600480360381019061033a9190613486565b610b47565b005b34801561034d57600080fd5b506103686004803603810190610363919061350d565b610be0565b005b34801561037657600080fd5b50610391600480360381019061038c9190613583565b610c76565b005b34801561039f57600080fd5b506103a8610d66565b6040516103b59190613bf1565b60405180910390f35b3480156103ca57600080fd5b506103d3610d79565b6040516103e09190613f49565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906132f0565b610d86565b005b34801561041e57600080fd5b5061043960048036038101906104349190613406565b610de6565b6040516104469190613f49565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906132f0565b610e8b565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613556565b610eab565b6040516104ac9190613f49565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061350d565b610f1c565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613556565b610fb2565b6040516105129190613b68565b60405180910390f35b34801561052757600080fd5b50610530611064565b60405161053d9190613c0c565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613283565b6110f6565b60405161057a9190613f49565b60405180910390f35b34801561058f57600080fd5b506105986111ae565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613283565b611236565b6040516105ce9190613bcf565b60405180910390f35b6105df611340565b005b3480156105ed57600080fd5b506105f66113fc565b6040516106039190613b68565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613556565b611426565b005b34801561064157600080fd5b5061065c6004803603810190610657919061350d565b6114ac565b005b34801561066a57600080fd5b50610673611542565b6040516106809190613c0c565b60405180910390f35b34801561069557600080fd5b5061069e6115d4565b6040516106ab9190613f49565b60405180910390f35b3480156106c057600080fd5b506106c96115de565b6040516106d69190613f2e565b60405180910390f35b3480156106eb57600080fd5b506107066004803603810190610701919061350d565b6115f6565b005b34801561071457600080fd5b5061072f600480360381019061072a91906133c6565b61168c565b005b34801561073d57600080fd5b5061075860048036038101906107539190613343565b61180d565b005b34801561076657600080fd5b50610781600480360381019061077c9190613556565b61186f565b60405161078e9190613c0c565b60405180910390f35b6107b160048036038101906107ac91906135df565b6119e8565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613446565b611b9e565b005b3480156107e857600080fd5b506107f1611cfe565b6040516107fe9190613c0c565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906132b0565b611d90565b60405161083b9190613bf1565b60405180910390f35b34801561085057600080fd5b50610859611e24565b6040516108669190613c0c565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613283565b611eb2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090b575061090a82611fc2565b5b9050919050565b612ee081565b60606000805461092790614296565b80601f016020809104026020016040519081016040528092919081815260200182805461095390614296565b80156109a05780601f10610975576101008083540402835291602001916109a0565b820191906000526020600020905b81548152906001019060200180831161098357829003601f168201915b5050505050905090565b60006109b5826120a4565b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90613dee565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3a82610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290613e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aca612110565b73ffffffffffffffffffffffffffffffffffffffff161480610af95750610af881610af3612110565b611d90565b5b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613d6e565b60405180910390fd5b610b428383612118565b505050565b610b4f612110565b73ffffffffffffffffffffffffffffffffffffffff16610b6d6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613e2e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b610be8612110565b73ffffffffffffffffffffffffffffffffffffffff16610c066113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613e2e565b60405180910390fd5b80600d9080519060200190610c72929190613082565b5050565b610c7e612110565b73ffffffffffffffffffffffffffffffffffffffff16610c9c6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613e2e565b60405180910390fd5b610cfb826120a4565b610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613e0e565b60405180910390fd5b80601260008481526020019081526020016000209080519060200190610d61929190613082565b505050565b601160009054906101000a900460ff1681565b6000600880549050905090565b610d97610d91612110565b826121d1565b610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613ece565b60405180910390fd5b610de18383836122af565b505050565b6000610df1836110f6565b8210610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613c6e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ea68383836040518060200160405280600081525061180d565b505050565b6000610eb5610d79565b8210610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613eee565b60405180910390fd5b60088281548110610f0a57610f09614459565b5b90600052602060002001549050919050565b610f24612110565b73ffffffffffffffffffffffffffffffffffffffff16610f426113fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613e2e565b60405180910390fd5b80600b9080519060200190610fae929190613082565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613dae565b60405180910390fd5b80915050919050565b6060600c805461107390614296565b80601f016020809104026020016040519081016040528092919081815260200182805461109f90614296565b80156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90613d8e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111b6612110565b73ffffffffffffffffffffffffffffffffffffffff166111d46113fc565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613e2e565b60405180910390fd5b611234600061250b565b565b60606000611243836110f6565b905060008114156112a057600067ffffffffffffffff81111561126957611268614488565b5b6040519080825280602002602001820160405280156112975781602001602082028036833780820191505090505b5091505061133b565b60008167ffffffffffffffff8111156112bc576112bb614488565b5b6040519080825280602002602001820160405280156112ea5781602001602082028036833780820191505090505b50905060005b82811015611334576113028582610de6565b82828151811061131557611314614459565b5b602002602001018181525050808061132c906142f9565b9150506112f0565b5080925050505b919050565b611348612110565b73ffffffffffffffffffffffffffffffffffffffff166113666113fc565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613e2e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506113fa57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142e612110565b73ffffffffffffffffffffffffffffffffffffffff1661144c6113fc565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613e2e565b60405180910390fd5b8060108190555050565b6114b4612110565b73ffffffffffffffffffffffffffffffffffffffff166114d26113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613e2e565b60405180910390fd5b80600e908051906020019061153e929190613082565b5050565b60606001805461155190614296565b80601f016020809104026020016040519081016040528092919081815260200182805461157d90614296565b80156115ca5780601f1061159f576101008083540402835291602001916115ca565b820191906000526020600020905b8154815290600101906020018083116115ad57829003601f168201915b5050505050905090565b6000601054905090565b6000600f60009054906101000a900461ffff16905090565b6115fe612110565b73ffffffffffffffffffffffffffffffffffffffff1661161c6113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613e2e565b60405180910390fd5b80600c9080519060200190611688929190613082565b5050565b611694612110565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613d2e565b60405180910390fd5b806005600061170f612110565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117bc612110565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118019190613bf1565b60405180910390a35050565b61181e611818612110565b836121d1565b61185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613ece565b60405180910390fd5b611869848484846125d1565b50505050565b606061187a826120a4565b6118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613e6e565b60405180910390fd5b60006012600084815260200190815260200160002080546118d990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461190590614296565b80156119525780601f1061192757610100808354040283529160200191611952565b820191906000526020600020905b81548152906001019060200180831161193557829003601f168201915b50505050509050600061196361262d565b90506000815114156119795781925050506119e3565b6000825111156119b1578082600c60405160200161199993929190613b37565b604051602081830303815290604052925050506119e3565b806119bb856126bf565b600c6040516020016119cf93929190613b37565b604051602081830303815290604052925050505b919050565b60006119f2610d79565b9050601160009054906101000a900460ff1615611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613c2e565b60405180910390fd5b60008260ff16118015611a5a575060158260ff16105b611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9090613c4e565b60405180910390fd5b600f60009054906101000a900461ffff16612ee0611ab7919061415d565b61ffff168260ff1682611aca919061407c565b10611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190613f0e565b60405180910390fd5b8160ff16601054611b1b9190614103565b341015611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613eae565b60405180910390fd5b60005b8260ff168160ff161015611b9957611b86338260ff1684611b81919061407c565b612820565b8080611b9190614342565b915050611b60565b505050565b611ba6612110565b73ffffffffffffffffffffffffffffffffffffffff16611bc46113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190613e2e565b60405180910390fd5b600f60009054906101000a900461ffff1661ffff168160ff161115611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613cce565b60405180910390fd5b6000611c7e610d79565b905060005b8260ff168160ff161015611cbc57611ca9848260ff1684611ca4919061407c565b612820565b8080611cb490614342565b915050611c83565b508160ff16600f60008282829054906101000a900461ffff16611cdf919061415d565b92506101000a81548161ffff021916908361ffff160217905550505050565b6060600e8054611d0d90614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3990614296565b8015611d865780601f10611d5b57610100808354040283529160200191611d86565b820191906000526020600020905b815481529060010190602001808311611d6957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d8054611e3190614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d90614296565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b505050505081565b611eba612110565b73ffffffffffffffffffffffffffffffffffffffff16611ed86113fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590613e2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590613cae565b60405180910390fd5b611fa78161250b565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209d575061209c8261283e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661218b83610fb2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121dc826120a4565b61221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613d4e565b60405180910390fd5b600061222683610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061229557508373ffffffffffffffffffffffffffffffffffffffff1661227d846109aa565b73ffffffffffffffffffffffffffffffffffffffff16145b806122a657506122a58185611d90565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122cf82610fb2565b73ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613d0e565b60405180910390fd5b6123a08383836128a8565b6123ab600082612118565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb9190614191565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612452919061407c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125dc8484846122af565b6125e8848484846129bc565b612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90613c8e565b60405180910390fd5b50505050565b6060600b805461263c90614296565b80601f016020809104026020016040519081016040528092919081815260200182805461266890614296565b80156126b55780601f1061268a576101008083540402835291602001916126b5565b820191906000526020600020905b81548152906001019060200180831161269857829003601f168201915b5050505050905090565b60606000821415612707576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061281b565b600082905060005b60008214612739578080612722906142f9565b915050600a8261273291906140d2565b915061270f565b60008167ffffffffffffffff81111561275557612754614488565b5b6040519080825280601f01601f1916602001820160405280156127875781602001600182028036833780820191505090505b5090505b60008514612814576001826127a09190614191565b9150600a856127af919061436c565b60306127bb919061407c565b60f81b8183815181106127d1576127d0614459565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561280d91906140d2565b945061278b565b8093505050505b919050565b61283a828260405180602001604052806000815250612b53565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128b3838383611fbd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f6576128f181612bae565b612935565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612934576129338382612bf7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129785761297381612d64565b6129b7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129b6576129b58282612e35565b5b5b505050565b60006129dd8473ffffffffffffffffffffffffffffffffffffffff16611faa565b15612b46578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a06612110565b8786866040518563ffffffff1660e01b8152600401612a289493929190613b83565b602060405180830381600087803b158015612a4257600080fd5b505af1925050508015612a7357506040513d601f19601f82011682018060405250810190612a7091906134e0565b60015b612af6573d8060008114612aa3576040519150601f19603f3d011682016040523d82523d6000602084013e612aa8565b606091505b50600081511415612aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae590613c8e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b4b565b600190505b949350505050565b612b5d8383612eb4565b612b6a60008484846129bc565b612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090613c8e565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c04846110f6565b612c0e9190614191565b9050600060076000848152602001908152602001600020549050818114612cf3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d789190614191565b9050600060096000848152602001908152602001600020549050600060088381548110612da857612da7614459565b5b906000526020600020015490508060088381548110612dca57612dc9614459565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e1957612e1861442a565b5b6001900381819060005260206000200160009055905550505050565b6000612e40836110f6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b90613dce565b60405180910390fd5b612f2d816120a4565b15612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490613cee565b60405180910390fd5b612f79600083836128a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc9919061407c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461308e90614296565b90600052602060002090601f0160209004810192826130b057600085556130f7565b82601f106130c957805160ff19168380011785556130f7565b828001600101855582156130f7579182015b828111156130f65782518255916020019190600101906130db565b5b5090506131049190613108565b5090565b5b80821115613121576000816000905550600101613109565b5090565b600061313861313384613f89565b613f64565b905082815260208101848484011115613154576131536144bc565b5b61315f848285614254565b509392505050565b600061317a61317584613fba565b613f64565b905082815260208101848484011115613196576131956144bc565b5b6131a1848285614254565b509392505050565b6000813590506131b881614b14565b92915050565b6000813590506131cd81614b2b565b92915050565b6000813590506131e281614b42565b92915050565b6000815190506131f781614b42565b92915050565b600082601f830112613212576132116144b7565b5b8135613222848260208601613125565b91505092915050565b600082601f8301126132405761323f6144b7565b5b8135613250848260208601613167565b91505092915050565b60008135905061326881614b59565b92915050565b60008135905061327d81614b70565b92915050565b600060208284031215613299576132986144c6565b5b60006132a7848285016131a9565b91505092915050565b600080604083850312156132c7576132c66144c6565b5b60006132d5858286016131a9565b92505060206132e6858286016131a9565b9150509250929050565b600080600060608486031215613309576133086144c6565b5b6000613317868287016131a9565b9350506020613328868287016131a9565b925050604061333986828701613259565b9150509250925092565b6000806000806080858703121561335d5761335c6144c6565b5b600061336b878288016131a9565b945050602061337c878288016131a9565b935050604061338d87828801613259565b925050606085013567ffffffffffffffff8111156133ae576133ad6144c1565b5b6133ba878288016131fd565b91505092959194509250565b600080604083850312156133dd576133dc6144c6565b5b60006133eb858286016131a9565b92505060206133fc858286016131be565b9150509250929050565b6000806040838503121561341d5761341c6144c6565b5b600061342b858286016131a9565b925050602061343c85828601613259565b9150509250929050565b6000806040838503121561345d5761345c6144c6565b5b600061346b858286016131a9565b925050602061347c8582860161326e565b9150509250929050565b60006020828403121561349c5761349b6144c6565b5b60006134aa848285016131be565b91505092915050565b6000602082840312156134c9576134c86144c6565b5b60006134d7848285016131d3565b91505092915050565b6000602082840312156134f6576134f56144c6565b5b6000613504848285016131e8565b91505092915050565b600060208284031215613523576135226144c6565b5b600082013567ffffffffffffffff811115613541576135406144c1565b5b61354d8482850161322b565b91505092915050565b60006020828403121561356c5761356b6144c6565b5b600061357a84828501613259565b91505092915050565b6000806040838503121561359a576135996144c6565b5b60006135a885828601613259565b925050602083013567ffffffffffffffff8111156135c9576135c86144c1565b5b6135d58582860161322b565b9150509250929050565b6000602082840312156135f5576135f46144c6565b5b60006136038482850161326e565b91505092915050565b60006136188383613b19565b60208301905092915050565b61362d816141c5565b82525050565b600061363e82614010565b613648818561403e565b935061365383613feb565b8060005b8381101561368457815161366b888261360c565b975061367683614031565b925050600181019050613657565b5085935050505092915050565b61369a816141d7565b82525050565b60006136ab8261401b565b6136b5818561404f565b93506136c5818560208601614263565b6136ce816144cb565b840191505092915050565b60006136e482614026565b6136ee8185614060565b93506136fe818560208601614263565b613707816144cb565b840191505092915050565b600061371d82614026565b6137278185614071565b9350613737818560208601614263565b80840191505092915050565b6000815461375081614296565b61375a8186614071565b945060018216600081146137755760018114613786576137b9565b60ff198316865281860193506137b9565b61378f85613ffb565b60005b838110156137b157815481890152600182019150602081019050613792565b838801955050505b50505092915050565b60006137cf600b83614060565b91506137da826144dc565b602082019050919050565b60006137f2603383614060565b91506137fd82614505565b604082019050919050565b6000613815602b83614060565b915061382082614554565b604082019050919050565b6000613838603283614060565b9150613843826145a3565b604082019050919050565b600061385b602683614060565b9150613866826145f2565b604082019050919050565b600061387e601f83614060565b915061388982614641565b602082019050919050565b60006138a1601c83614060565b91506138ac8261466a565b602082019050919050565b60006138c4602483614060565b91506138cf82614693565b604082019050919050565b60006138e7601983614060565b91506138f2826146e2565b602082019050919050565b600061390a602c83614060565b91506139158261470b565b604082019050919050565b600061392d603883614060565b91506139388261475a565b604082019050919050565b6000613950602a83614060565b915061395b826147a9565b604082019050919050565b6000613973602983614060565b915061397e826147f8565b604082019050919050565b6000613996602083614060565b91506139a182614847565b602082019050919050565b60006139b9602c83614060565b91506139c482614870565b604082019050919050565b60006139dc602c83614060565b91506139e7826148bf565b604082019050919050565b60006139ff602083614060565b9150613a0a8261490e565b602082019050919050565b6000613a22602983614060565b9150613a2d82614937565b604082019050919050565b6000613a45602f83614060565b9150613a5082614986565b604082019050919050565b6000613a68602183614060565b9150613a73826149d5565b604082019050919050565b6000613a8b601983614060565b9150613a9682614a24565b602082019050919050565b6000613aae603183614060565b9150613ab982614a4d565b604082019050919050565b6000613ad1602c83614060565b9150613adc82614a9c565b604082019050919050565b6000613af4601f83614060565b9150613aff82614aeb565b602082019050919050565b613b138161420f565b82525050565b613b228161423d565b82525050565b613b318161423d565b82525050565b6000613b438286613712565b9150613b4f8285613712565b9150613b5b8284613743565b9150819050949350505050565b6000602082019050613b7d6000830184613624565b92915050565b6000608082019050613b986000830187613624565b613ba56020830186613624565b613bb26040830185613b28565b8181036060830152613bc481846136a0565b905095945050505050565b60006020820190508181036000830152613be98184613633565b905092915050565b6000602082019050613c066000830184613691565b92915050565b60006020820190508181036000830152613c2681846136d9565b905092915050565b60006020820190508181036000830152613c47816137c2565b9050919050565b60006020820190508181036000830152613c67816137e5565b9050919050565b60006020820190508181036000830152613c8781613808565b9050919050565b60006020820190508181036000830152613ca78161382b565b9050919050565b60006020820190508181036000830152613cc78161384e565b9050919050565b60006020820190508181036000830152613ce781613871565b9050919050565b60006020820190508181036000830152613d0781613894565b9050919050565b60006020820190508181036000830152613d27816138b7565b9050919050565b60006020820190508181036000830152613d47816138da565b9050919050565b60006020820190508181036000830152613d67816138fd565b9050919050565b60006020820190508181036000830152613d8781613920565b9050919050565b60006020820190508181036000830152613da781613943565b9050919050565b60006020820190508181036000830152613dc781613966565b9050919050565b60006020820190508181036000830152613de781613989565b9050919050565b60006020820190508181036000830152613e07816139ac565b9050919050565b60006020820190508181036000830152613e27816139cf565b9050919050565b60006020820190508181036000830152613e47816139f2565b9050919050565b60006020820190508181036000830152613e6781613a15565b9050919050565b60006020820190508181036000830152613e8781613a38565b9050919050565b60006020820190508181036000830152613ea781613a5b565b9050919050565b60006020820190508181036000830152613ec781613a7e565b9050919050565b60006020820190508181036000830152613ee781613aa1565b9050919050565b60006020820190508181036000830152613f0781613ac4565b9050919050565b60006020820190508181036000830152613f2781613ae7565b9050919050565b6000602082019050613f436000830184613b0a565b92915050565b6000602082019050613f5e6000830184613b28565b92915050565b6000613f6e613f7f565b9050613f7a82826142c8565b919050565b6000604051905090565b600067ffffffffffffffff821115613fa457613fa3614488565b5b613fad826144cb565b9050602081019050919050565b600067ffffffffffffffff821115613fd557613fd4614488565b5b613fde826144cb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140878261423d565b91506140928361423d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c7576140c661439d565b5b828201905092915050565b60006140dd8261423d565b91506140e88361423d565b9250826140f8576140f76143cc565b5b828204905092915050565b600061410e8261423d565b91506141198361423d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141525761415161439d565b5b828202905092915050565b60006141688261420f565b91506141738361420f565b9250828210156141865761418561439d565b5b828203905092915050565b600061419c8261423d565b91506141a78361423d565b9250828210156141ba576141b961439d565b5b828203905092915050565b60006141d08261421d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614281578082015181840152602081019050614266565b83811115614290576000848401525b50505050565b600060028204905060018216806142ae57607f821691505b602082108114156142c2576142c16143fb565b5b50919050565b6142d1826144cb565b810181811067ffffffffffffffff821117156142f0576142ef614488565b5b80604052505050565b60006143048261423d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143375761433661439d565b5b600182019050919050565b600061434d82614247565b915060ff8214156143615761436061439d565b5b600182019050919050565b60006143778261423d565b91506143828361423d565b925082614392576143916143cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f596f752063616e2061646f70742061206d6178696d756d206f6620323020756e60008201527f69636f726e20616e64206d696e696d756d203100000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420556e69636f726e20737570706c7900600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20556e69636f726e7320737570706c7900600082015250565b614b1d816141c5565b8114614b2857600080fd5b50565b614b34816141d7565b8114614b3f57600080fd5b50565b614b4b816141e3565b8114614b5657600080fd5b50565b614b628161423d565b8114614b6d57600080fd5b50565b614b7981614247565b8114614b8457600080fd5b5056fea26469706673582212206c4c3367b4405edbc0e2c797f973c847827b24da846f1494178626cd2142138364736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d557870596733584a50326f317763775567484b56766f5075694b73696332334b636734516d414e4d376a55562f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d507159703139313572614838413346684458764e59335a4d39667762504b67456f43414c61395253486e56320000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmUxpYg3XJP2o1wcwUgHKVvoPuiKsic23Kcg4QmANM7jUV/
Arg [1] : baseContractURI (string): ipfs://QmPqYp1915raH8A3FhDXvNY3ZM9fwbPKgEoCALa9RSHnV2

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d557870596733584a50326f317763775567484b56766f50
Arg [4] : 75694b73696332334b636734516d414e4d376a55562f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [6] : 697066733a2f2f516d507159703139313572614838413346684458764e59335a
Arg [7] : 4d39667762504b67456f43414c61395253486e56320000000000000000000000


Deployed Bytecode Sourcemap

123:4727:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:224:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;404:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2426:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3985:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3508:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4645:75:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3326:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3914:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;494:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1577:113:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4875:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1245:256:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5285:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1767:233:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3575:99:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2120:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2011:108:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:10;;;;;;;;;;;;;:::i;:::-;;2698:439:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4727:120;;;:::i;:::-;;999:87:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4231::12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3446:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2595:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:79:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3230:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4118:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4278:295:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5541:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1194:810:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2126:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4325:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1031:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4644:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;280:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;937:224:4;1039:4;1078:35;1063:50;;;:11;:50;;;;:90;;;;1117:36;1141:11;1117:23;:36::i;:::-;1063:90;1056:97;;937:224;;;:::o;404:43:12:-;442:5;404:43;:::o;2426:100:3:-;2480:13;2513:5;2506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:100;:::o;3985:221::-;4061:7;4089:16;4097:7;4089;:16::i;:::-;4081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:15;:24;4190:7;4174:24;;;;;;;;;;;;;;;;;;;;;4167:31;;3985:221;;;:::o;3508:411::-;3589:13;3605:23;3620:7;3605:14;:23::i;:::-;3589:39;;3653:5;3647:11;;:2;:11;;;;3639:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3747:5;3731:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3756:37;3773:5;3780:12;:10;:12::i;:::-;3756:16;:37::i;:::-;3731:62;3709:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3890:21;3899:2;3903:7;3890:8;:21::i;:::-;3578:341;3508:411;;:::o;4645:75:12:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4710:3:12::1;4700:7;;:13;;;;;;;;;;;;;;;;;;4645:75:::0;:::o;3326:113::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3427:5:12::1;3400:24;:32;;;;;;;;;;;;:::i;:::-;;3326:113:::0;:::o;3914:197::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4005:16:12::1;4013:7;4005;:16::i;:::-;3997:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4101:3;4079:10;:19;4090:7;4079:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;3914:197:::0;;:::o;494:27::-;;;;;;;;;;;;;:::o;1577:113:4:-;1638:7;1665:10;:17;;;;1658:24;;1577:113;:::o;4875:339:3:-;5070:41;5089:12;:10;:12::i;:::-;5103:7;5070:18;:41::i;:::-;5062:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5178:28;5188:4;5194:2;5198:7;5178:9;:28::i;:::-;4875:339;;;:::o;1245:256:4:-;1342:7;1378:23;1395:5;1378:16;:23::i;:::-;1370:5;:31;1362:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1467:12;:19;1480:5;1467:19;;;;;;;;;;;;;;;:26;1487:5;1467:26;;;;;;;;;;;;1460:33;;1245:256;;;;:::o;5285:185:3:-;5423:39;5440:4;5446:2;5450:7;5423:39;;;;;;;;;;;;:16;:39::i;:::-;5285:185;;;:::o;1767:233:4:-;1842:7;1878:30;:28;:30::i;:::-;1870:5;:38;1862:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1975:10;1986:5;1975:17;;;;;;;;:::i;:::-;;;;;;;;;;1968:24;;1767:233;;;:::o;3575:99:12:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3660:7:12::1;3644:13;:23;;;;;;;;;;;;:::i;:::-;;3575:99:::0;:::o;2120:239:3:-;2192:7;2212:13;2228:7;:16;2236:7;2228:16;;;;;;;;;;;;;;;;;;;;;2212:32;;2280:1;2263:19;;:5;:19;;;;2255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2346:5;2339:12;;;2120:239;;;:::o;2011:108:12:-;2063:13;2094:18;2087:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2011:108;:::o;1850:208:3:-;1922:7;1967:1;1950:19;;:5;:19;;;;1942:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1850:208;;;:::o;1650:94:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;2698:439:12:-;2757:16;2784:18;2805:17;2815:6;2805:9;:17::i;:::-;2784:38;;2850:1;2836:10;:15;2833:298;;;2886:1;2872:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:23;;;;;2833:298;2923:25;2965:10;2951:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2923:53;;2992:9;2988:107;3007:10;3003:1;:14;2988:107;;;3052:30;3072:6;3080:1;3052:19;:30::i;:::-;3038:8;3047:1;3038:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;3019:3;;;;;:::i;:::-;;;;2988:107;;;;3113:8;3106:15;;;;2698:439;;;;:::o;4727:120::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4800:10:12::1;4792:24;;:47;4817:21;4792:47;;;;;;;;;;;;;;;;;;;;;;;4784:56;;;::::0;::::1;;4727:120::o:0;999:87:10:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;4231::12:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4302:9:12::1;4293:6;:18;;;;4231:87:::0;:::o;3446:122::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3546:15:12::1;3527:16;:34;;;;;;;;;;;;:::i;:::-;;3446:122:::0;:::o;2595:104:3:-;2651:13;2684:7;2677:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:104;:::o;3144:79:12:-;3185:7;3210:6;;3203:13;;3144:79;:::o;3230:89::-;3279:6;3303:9;;;;;;;;;;;3296:16;;3230:89;:::o;4118:106::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4214:3:12::1;4193:18;:24;;;;;;;;;;;;:::i;:::-;;4118:106:::0;:::o;4278:295:3:-;4393:12;:10;:12::i;:::-;4381:24;;:8;:24;;;;4373:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4493:8;4448:18;:32;4467:12;:10;:12::i;:::-;4448:32;;;;;;;;;;;;;;;:42;4481:8;4448:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4546:8;4517:48;;4532:12;:10;:12::i;:::-;4517:48;;;4556:8;4517:48;;;;;;:::i;:::-;;;;;;;;4278:295;;:::o;5541:328::-;5716:41;5735:12;:10;:12::i;:::-;5749:7;5716:18;:41::i;:::-;5708:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5822:39;5836:4;5842:2;5846:7;5855:5;5822:13;:39::i;:::-;5541:328;;;;:::o;1194:810:12:-;1267:13;1299:16;1307:7;1299;:16::i;:::-;1291:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1378:23;1404:10;:19;1415:7;1404:19;;;;;;;;;;;1378:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1432:18;1453:10;:8;:10::i;:::-;1432:31;;1557:1;1541:4;1535:18;:23;1531:70;;;1582:9;1575:16;;;;;;1531:70;1727:1;1707:9;1701:23;:27;1697:126;;;1776:4;1782:9;1793:18;1759:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1745:68;;;;;;1697:126;1951:4;1957:18;:7;:16;:18::i;:::-;1977;1934:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1920:77;;;;1194:810;;;;:::o;2126:565::-;2183:14;2200:13;:11;:13::i;:::-;2183:30;;2232:7;;;;;;;;;;;2231:8;2222:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2313:1;2307:3;:7;;;:19;;;;;2324:2;2318:3;:8;;;2307:19;2298:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2453:9;;;;;;;;;;;442:5;2438:24;;;;:::i;:::-;2423:39;;2432:3;2423:12;;:6;:12;;;;:::i;:::-;:39;2414:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;2541:3;2532:12;;:6;;:12;;;;:::i;:::-;2519:9;:25;;2510:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;2606:7;2602:83;2619:3;2615:7;;:1;:7;;;2602:83;;;2640:35;2651:10;2672:1;2663:10;;:6;:10;;;;:::i;:::-;2640:9;:35::i;:::-;2624:3;;;;;:::i;:::-;;;;2602:83;;;;2174:517;2126:565;:::o;4325:313::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4425:9:12::1;;;;;;;;;;;4414:20;;:7;:20;;;;4405:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4482:14;4499:13;:11;:13::i;:::-;4482:30;;4525:7;4521:80;4538:7;4534:11;;:1;:11;;;4521:80;;;4563:28;4574:3;4588:1;4579:10;;:6;:10;;;;:::i;:::-;4563:9;:28::i;:::-;4547:3;;;;;:::i;:::-;;;;4521:80;;;;4624:7;4611:20;;:9;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4396:242;4325:313:::0;;:::o;1031:98::-;1075:13;1106:16;1099:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1031:98;:::o;4644:164:3:-;4741:4;4765:18;:25;4784:5;4765:25;;;;;;;;;;;;;;;:35;4791:8;4765:35;;;;;;;;;;;;;;;;;;;;;;;;;4758:42;;4644:164;;;;:::o;280:43:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1899:192:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;13475:126:3:-;;;;:::o;1481:305::-;1583:4;1635:25;1620:40;;;:11;:40;;;;:105;;;;1692:33;1677:48;;;:11;:48;;;;1620:105;:158;;;;1742:36;1766:11;1742:23;:36::i;:::-;1620:158;1600:178;;1481:305;;;:::o;7379:127::-;7444:4;7496:1;7468:30;;:7;:16;7476:7;7468:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7461:37;;7379:127;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;11361:174:3:-;11463:2;11436:15;:24;11452:7;11436:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11519:7;11515:2;11481:46;;11490:23;11505:7;11490:14;:23::i;:::-;11481:46;;;;;;;;;;;;11361:174;;:::o;7673:348::-;7766:4;7791:16;7799:7;7791;:16::i;:::-;7783:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7867:13;7883:23;7898:7;7883:14;:23::i;:::-;7867:39;;7936:5;7925:16;;:7;:16;;;:51;;;;7969:7;7945:31;;:20;7957:7;7945:11;:20::i;:::-;:31;;;7925:51;:87;;;;7980:32;7997:5;8004:7;7980:16;:32::i;:::-;7925:87;7917:96;;;7673:348;;;;:::o;10665:578::-;10824:4;10797:31;;:23;10812:7;10797:14;:23::i;:::-;:31;;;10789:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10907:1;10893:16;;:2;:16;;;;10885:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10963:39;10984:4;10990:2;10994:7;10963:20;:39::i;:::-;11067:29;11084:1;11088:7;11067:8;:29::i;:::-;11128:1;11109:9;:15;11119:4;11109:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11157:1;11140:9;:13;11150:2;11140:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11188:2;11169:7;:16;11177:7;11169:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11227:7;11223:2;11208:27;;11217:4;11208:27;;;;;;;;;;;;10665:578;;;:::o;2099:173:10:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;6751:315:3:-;6908:28;6918:4;6924:2;6928:7;6908:9;:28::i;:::-;6955:48;6978:4;6984:2;6988:7;6997:5;6955:22;:48::i;:::-;6947:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:315;;;;:::o;913:111:12:-;973:13;1004;997:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;913:111;:::o;288:723:11:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;8363:110:3:-;8439:26;8449:2;8453:7;8439:26;;;;;;;;;;;;:9;:26::i;:::-;8363:110;;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;2613:589:4:-;2757:45;2784:4;2790:2;2794:7;2757:26;:45::i;:::-;2835:1;2819:18;;:4;:18;;;2815:187;;;2854:40;2886:7;2854:31;:40::i;:::-;2815:187;;;2924:2;2916:10;;:4;:10;;;2912:90;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;2912:90;2815:187;3030:1;3016:16;;:2;:16;;;3012:183;;;3049:45;3086:7;3049:36;:45::i;:::-;3012:183;;;3122:4;3116:10;;:2;:10;;;3112:83;;3143:40;3171:2;3175:7;3143:27;:40::i;:::-;3112:83;3012:183;2613:589;;;:::o;12100:803:3:-;12255:4;12276:15;:2;:13;;;:15::i;:::-;12272:624;;;12328:2;12312:36;;;12349:12;:10;:12::i;:::-;12363:4;12369:7;12378:5;12312:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12308:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:1;12558:6;:13;:18;12554:272;;;12601:60;;;;;;;;;;:::i;:::-;;;;;;;;12554:272;12776:6;12770:13;12761:6;12757:2;12753:15;12746:38;12308:533;12445:45;;;12435:55;;;:6;:55;;;;12428:62;;;;;12272:624;12880:4;12873:11;;12100:803;;;;;;;:::o;8700:321::-;8830:18;8836:2;8840:7;8830:5;:18::i;:::-;8881:54;8912:1;8916:2;8920:7;8929:5;8881:22;:54::i;:::-;8859:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8700:321;;;:::o;3925:164:4:-;4029:10;:17;;;;4002:15;:24;4018:7;4002:24;;;;;;;;;;;:44;;;;4057:10;4073:7;4057:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3925:164;:::o;4716:988::-;4982:22;5032:1;5007:22;5024:4;5007:16;:22::i;:::-;:26;;;;:::i;:::-;4982:51;;5044:18;5065:17;:26;5083:7;5065:26;;;;;;;;;;;;5044:47;;5212:14;5198:10;:28;5194:328;;5243:19;5265:12;:18;5278:4;5265:18;;;;;;;;;;;;;;;:34;5284:14;5265:34;;;;;;;;;;;;5243:56;;5349:11;5316:12;:18;5329:4;5316:18;;;;;;;;;;;;;;;:30;5335:10;5316:30;;;;;;;;;;;:44;;;;5466:10;5433:17;:30;5451:11;5433:30;;;;;;;;;;;:43;;;;5228:294;5194:328;5618:17;:26;5636:7;5618:26;;;;;;;;;;;5611:33;;;5662:12;:18;5675:4;5662:18;;;;;;;;;;;;;;;:34;5681:14;5662:34;;;;;;;;;;;5655:41;;;4797:907;;4716:988;;:::o;5999:1079::-;6252:22;6297:1;6277:10;:17;;;;:21;;;;:::i;:::-;6252:46;;6309:18;6330:15;:24;6346:7;6330:24;;;;;;;;;;;;6309:45;;6681:19;6703:10;6714:14;6703:26;;;;;;;;:::i;:::-;;;;;;;;;;6681:48;;6767:11;6742:10;6753;6742:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6878:10;6847:15;:28;6863:11;6847:28;;;;;;;;;;;:41;;;;7019:15;:24;7035:7;7019:24;;;;;;;;;;;7012:31;;;7054:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6070:1008;;;5999:1079;:::o;3503:221::-;3588:14;3605:20;3622:2;3605:16;:20::i;:::-;3588:37;;3663:7;3636:12;:16;3649:2;3636:16;;;;;;;;;;;;;;;:24;3653:6;3636:24;;;;;;;;;;;:34;;;;3710:6;3681:17;:26;3699:7;3681:26;;;;;;;;;;;:35;;;;3577:147;3503:221;;:::o;9357:382:3:-;9451:1;9437:16;;:2;:16;;;;9429:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9510:16;9518:7;9510;:16::i;:::-;9509:17;9501:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9572:45;9601:1;9605:2;9609:7;9572:20;:45::i;:::-;9647:1;9630:9;:13;9640:2;9630:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9678:2;9659:7;:16;9667:7;9659:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9723:7;9719:2;9698:33;;9715:1;9698:33;;;;;;;;;;;;9357:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:135::-;2321:5;2359:6;2346:20;2337:29;;2375:31;2400:5;2375:31;:::i;:::-;2327:85;;;;:::o;2418:329::-;2477:6;2526:2;2514:9;2505:7;2501:23;2497:32;2494:2;;;2532:79;;:::i;:::-;2494:2;2652:1;2677:53;2722:7;2713:6;2702:9;2698:22;2677:53;:::i;:::-;2667:63;;2623:117;2484:263;;;;:::o;2753:474::-;2821:6;2829;2878:2;2866:9;2857:7;2853:23;2849:32;2846:2;;;2884:79;;:::i;:::-;2846:2;3004:1;3029:53;3074:7;3065:6;3054:9;3050:22;3029:53;:::i;:::-;3019:63;;2975:117;3131:2;3157:53;3202:7;3193:6;3182:9;3178:22;3157:53;:::i;:::-;3147:63;;3102:118;2836:391;;;;;:::o;3233:619::-;3310:6;3318;3326;3375:2;3363:9;3354:7;3350:23;3346:32;3343:2;;;3381:79;;:::i;:::-;3343:2;3501:1;3526:53;3571:7;3562:6;3551:9;3547:22;3526:53;:::i;:::-;3516:63;;3472:117;3628:2;3654:53;3699:7;3690:6;3679:9;3675:22;3654:53;:::i;:::-;3644:63;;3599:118;3756:2;3782:53;3827:7;3818:6;3807:9;3803:22;3782:53;:::i;:::-;3772:63;;3727:118;3333:519;;;;;:::o;3858:943::-;3953:6;3961;3969;3977;4026:3;4014:9;4005:7;4001:23;3997:33;3994:2;;;4033:79;;:::i;:::-;3994:2;4153:1;4178:53;4223:7;4214:6;4203:9;4199:22;4178:53;:::i;:::-;4168:63;;4124:117;4280:2;4306:53;4351:7;4342:6;4331:9;4327:22;4306:53;:::i;:::-;4296:63;;4251:118;4408:2;4434:53;4479:7;4470:6;4459:9;4455:22;4434:53;:::i;:::-;4424:63;;4379:118;4564:2;4553:9;4549:18;4536:32;4595:18;4587:6;4584:30;4581:2;;;4617:79;;:::i;:::-;4581:2;4722:62;4776:7;4767:6;4756:9;4752:22;4722:62;:::i;:::-;4712:72;;4507:287;3984:817;;;;;;;:::o;4807:468::-;4872:6;4880;4929:2;4917:9;4908:7;4904:23;4900:32;4897:2;;;4935:79;;:::i;:::-;4897:2;5055:1;5080:53;5125:7;5116:6;5105:9;5101:22;5080:53;:::i;:::-;5070:63;;5026:117;5182:2;5208:50;5250:7;5241:6;5230:9;5226:22;5208:50;:::i;:::-;5198:60;;5153:115;4887:388;;;;;:::o;5281:474::-;5349:6;5357;5406:2;5394:9;5385:7;5381:23;5377:32;5374:2;;;5412:79;;:::i;:::-;5374:2;5532:1;5557:53;5602:7;5593:6;5582:9;5578:22;5557:53;:::i;:::-;5547:63;;5503:117;5659:2;5685:53;5730:7;5721:6;5710:9;5706:22;5685:53;:::i;:::-;5675:63;;5630:118;5364:391;;;;;:::o;5761:470::-;5827:6;5835;5884:2;5872:9;5863:7;5859:23;5855:32;5852:2;;;5890:79;;:::i;:::-;5852:2;6010:1;6035:53;6080:7;6071:6;6060:9;6056:22;6035:53;:::i;:::-;6025:63;;5981:117;6137:2;6163:51;6206:7;6197:6;6186:9;6182:22;6163:51;:::i;:::-;6153:61;;6108:116;5842:389;;;;;:::o;6237:323::-;6293:6;6342:2;6330:9;6321:7;6317:23;6313:32;6310:2;;;6348:79;;:::i;:::-;6310:2;6468:1;6493:50;6535:7;6526:6;6515:9;6511:22;6493:50;:::i;:::-;6483:60;;6439:114;6300:260;;;;:::o;6566:327::-;6624:6;6673:2;6661:9;6652:7;6648:23;6644:32;6641:2;;;6679:79;;:::i;:::-;6641:2;6799:1;6824:52;6868:7;6859:6;6848:9;6844:22;6824:52;:::i;:::-;6814:62;;6770:116;6631:262;;;;:::o;6899:349::-;6968:6;7017:2;7005:9;6996:7;6992:23;6988:32;6985:2;;;7023:79;;:::i;:::-;6985:2;7143:1;7168:63;7223:7;7214:6;7203:9;7199:22;7168:63;:::i;:::-;7158:73;;7114:127;6975:273;;;;:::o;7254:509::-;7323:6;7372:2;7360:9;7351:7;7347:23;7343:32;7340:2;;;7378:79;;:::i;:::-;7340:2;7526:1;7515:9;7511:17;7498:31;7556:18;7548:6;7545:30;7542:2;;;7578:79;;:::i;:::-;7542:2;7683:63;7738:7;7729:6;7718:9;7714:22;7683:63;:::i;:::-;7673:73;;7469:287;7330:433;;;;:::o;7769:329::-;7828:6;7877:2;7865:9;7856:7;7852:23;7848:32;7845:2;;;7883:79;;:::i;:::-;7845:2;8003:1;8028:53;8073:7;8064:6;8053:9;8049:22;8028:53;:::i;:::-;8018:63;;7974:117;7835:263;;;;:::o;8104:654::-;8182:6;8190;8239:2;8227:9;8218:7;8214:23;8210:32;8207:2;;;8245:79;;:::i;:::-;8207:2;8365:1;8390:53;8435:7;8426:6;8415:9;8411:22;8390:53;:::i;:::-;8380:63;;8336:117;8520:2;8509:9;8505:18;8492:32;8551:18;8543:6;8540:30;8537:2;;;8573:79;;:::i;:::-;8537:2;8678:63;8733:7;8724:6;8713:9;8709:22;8678:63;:::i;:::-;8668:73;;8463:288;8197:561;;;;;:::o;8764:325::-;8821:6;8870:2;8858:9;8849:7;8845:23;8841:32;8838:2;;;8876:79;;:::i;:::-;8838:2;8996:1;9021:51;9064:7;9055:6;9044:9;9040:22;9021:51;:::i;:::-;9011:61;;8967:115;8828:261;;;;:::o;9095:179::-;9164:10;9185:46;9227:3;9219:6;9185:46;:::i;:::-;9263:4;9258:3;9254:14;9240:28;;9175:99;;;;:::o;9280:118::-;9367:24;9385:5;9367:24;:::i;:::-;9362:3;9355:37;9345:53;;:::o;9434:732::-;9553:3;9582:54;9630:5;9582:54;:::i;:::-;9652:86;9731:6;9726:3;9652:86;:::i;:::-;9645:93;;9762:56;9812:5;9762:56;:::i;:::-;9841:7;9872:1;9857:284;9882:6;9879:1;9876:13;9857:284;;;9958:6;9952:13;9985:63;10044:3;10029:13;9985:63;:::i;:::-;9978:70;;10071:60;10124:6;10071:60;:::i;:::-;10061:70;;9917:224;9904:1;9901;9897:9;9892:14;;9857:284;;;9861:14;10157:3;10150:10;;9558:608;;;;;;;:::o;10172:109::-;10253:21;10268:5;10253:21;:::i;:::-;10248:3;10241:34;10231:50;;:::o;10287:360::-;10373:3;10401:38;10433:5;10401:38;:::i;:::-;10455:70;10518:6;10513:3;10455:70;:::i;:::-;10448:77;;10534:52;10579:6;10574:3;10567:4;10560:5;10556:16;10534:52;:::i;:::-;10611:29;10633:6;10611:29;:::i;:::-;10606:3;10602:39;10595:46;;10377:270;;;;;:::o;10653:364::-;10741:3;10769:39;10802:5;10769:39;:::i;:::-;10824:71;10888:6;10883:3;10824:71;:::i;:::-;10817:78;;10904:52;10949:6;10944:3;10937:4;10930:5;10926:16;10904:52;:::i;:::-;10981:29;11003:6;10981:29;:::i;:::-;10976:3;10972:39;10965:46;;10745:272;;;;;:::o;11023:377::-;11129:3;11157:39;11190:5;11157:39;:::i;:::-;11212:89;11294:6;11289:3;11212:89;:::i;:::-;11205:96;;11310:52;11355:6;11350:3;11343:4;11336:5;11332:16;11310:52;:::i;:::-;11387:6;11382:3;11378:16;11371:23;;11133:267;;;;;:::o;11430:845::-;11533:3;11570:5;11564:12;11599:36;11625:9;11599:36;:::i;:::-;11651:89;11733:6;11728:3;11651:89;:::i;:::-;11644:96;;11771:1;11760:9;11756:17;11787:1;11782:137;;;;11933:1;11928:341;;;;11749:520;;11782:137;11866:4;11862:9;11851;11847:25;11842:3;11835:38;11902:6;11897:3;11893:16;11886:23;;11782:137;;11928:341;11995:38;12027:5;11995:38;:::i;:::-;12055:1;12069:154;12083:6;12080:1;12077:13;12069:154;;;12157:7;12151:14;12147:1;12142:3;12138:11;12131:35;12207:1;12198:7;12194:15;12183:26;;12105:4;12102:1;12098:12;12093:17;;12069:154;;;12252:6;12247:3;12243:16;12236:23;;11935:334;;11749:520;;11537:738;;;;;;:::o;12281:366::-;12423:3;12444:67;12508:2;12503:3;12444:67;:::i;:::-;12437:74;;12520:93;12609:3;12520:93;:::i;:::-;12638:2;12633:3;12629:12;12622:19;;12427:220;;;:::o;12653:366::-;12795:3;12816:67;12880:2;12875:3;12816:67;:::i;:::-;12809:74;;12892:93;12981:3;12892:93;:::i;:::-;13010:2;13005:3;13001:12;12994:19;;12799:220;;;:::o;13025:366::-;13167:3;13188:67;13252:2;13247:3;13188:67;:::i;:::-;13181:74;;13264:93;13353:3;13264:93;:::i;:::-;13382:2;13377:3;13373:12;13366:19;;13171:220;;;:::o;13397:366::-;13539:3;13560:67;13624:2;13619:3;13560:67;:::i;:::-;13553:74;;13636:93;13725:3;13636:93;:::i;:::-;13754:2;13749:3;13745:12;13738:19;;13543:220;;;:::o;13769:366::-;13911:3;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14008:93;14097:3;14008:93;:::i;:::-;14126:2;14121:3;14117:12;14110:19;;13915:220;;;:::o;14141:366::-;14283:3;14304:67;14368:2;14363:3;14304:67;:::i;:::-;14297:74;;14380:93;14469:3;14380:93;:::i;:::-;14498:2;14493:3;14489:12;14482:19;;14287:220;;;:::o;14513:366::-;14655:3;14676:67;14740:2;14735:3;14676:67;:::i;:::-;14669:74;;14752:93;14841:3;14752:93;:::i;:::-;14870:2;14865:3;14861:12;14854:19;;14659:220;;;:::o;14885:366::-;15027:3;15048:67;15112:2;15107:3;15048:67;:::i;:::-;15041:74;;15124:93;15213:3;15124:93;:::i;:::-;15242:2;15237:3;15233:12;15226:19;;15031:220;;;:::o;15257:366::-;15399:3;15420:67;15484:2;15479:3;15420:67;:::i;:::-;15413:74;;15496:93;15585:3;15496:93;:::i;:::-;15614:2;15609:3;15605:12;15598:19;;15403:220;;;:::o;15629:366::-;15771:3;15792:67;15856:2;15851:3;15792:67;:::i;:::-;15785:74;;15868:93;15957:3;15868:93;:::i;:::-;15986:2;15981:3;15977:12;15970:19;;15775:220;;;:::o;16001:366::-;16143:3;16164:67;16228:2;16223:3;16164:67;:::i;:::-;16157:74;;16240:93;16329:3;16240:93;:::i;:::-;16358:2;16353:3;16349:12;16342:19;;16147:220;;;:::o;16373:366::-;16515:3;16536:67;16600:2;16595:3;16536:67;:::i;:::-;16529:74;;16612:93;16701:3;16612:93;:::i;:::-;16730:2;16725:3;16721:12;16714:19;;16519:220;;;:::o;16745:366::-;16887:3;16908:67;16972:2;16967:3;16908:67;:::i;:::-;16901:74;;16984:93;17073:3;16984:93;:::i;:::-;17102:2;17097:3;17093:12;17086:19;;16891:220;;;:::o;17117:366::-;17259:3;17280:67;17344:2;17339:3;17280:67;:::i;:::-;17273:74;;17356:93;17445:3;17356:93;:::i;:::-;17474:2;17469:3;17465:12;17458:19;;17263:220;;;:::o;17489:366::-;17631:3;17652:67;17716:2;17711:3;17652:67;:::i;:::-;17645:74;;17728:93;17817:3;17728:93;:::i;:::-;17846:2;17841:3;17837:12;17830:19;;17635:220;;;:::o;17861:366::-;18003:3;18024:67;18088:2;18083:3;18024:67;:::i;:::-;18017:74;;18100:93;18189:3;18100:93;:::i;:::-;18218:2;18213:3;18209:12;18202:19;;18007:220;;;:::o;18233:366::-;18375:3;18396:67;18460:2;18455:3;18396:67;:::i;:::-;18389:74;;18472:93;18561:3;18472:93;:::i;:::-;18590:2;18585:3;18581:12;18574:19;;18379:220;;;:::o;18605:366::-;18747:3;18768:67;18832:2;18827:3;18768:67;:::i;:::-;18761:74;;18844:93;18933:3;18844:93;:::i;:::-;18962:2;18957:3;18953:12;18946:19;;18751:220;;;:::o;18977:366::-;19119:3;19140:67;19204:2;19199:3;19140:67;:::i;:::-;19133:74;;19216:93;19305:3;19216:93;:::i;:::-;19334:2;19329:3;19325:12;19318:19;;19123:220;;;:::o;19349:366::-;19491:3;19512:67;19576:2;19571:3;19512:67;:::i;:::-;19505:74;;19588:93;19677:3;19588:93;:::i;:::-;19706:2;19701:3;19697:12;19690:19;;19495:220;;;:::o;19721:366::-;19863:3;19884:67;19948:2;19943:3;19884:67;:::i;:::-;19877:74;;19960:93;20049:3;19960:93;:::i;:::-;20078:2;20073:3;20069:12;20062:19;;19867:220;;;:::o;20093:366::-;20235:3;20256:67;20320:2;20315:3;20256:67;:::i;:::-;20249:74;;20332:93;20421:3;20332:93;:::i;:::-;20450:2;20445:3;20441:12;20434:19;;20239:220;;;:::o;20465:366::-;20607:3;20628:67;20692:2;20687:3;20628:67;:::i;:::-;20621:74;;20704:93;20793:3;20704:93;:::i;:::-;20822:2;20817:3;20813:12;20806:19;;20611:220;;;:::o;20837:366::-;20979:3;21000:67;21064:2;21059:3;21000:67;:::i;:::-;20993:74;;21076:93;21165:3;21076:93;:::i;:::-;21194:2;21189:3;21185:12;21178:19;;20983:220;;;:::o;21209:115::-;21294:23;21311:5;21294:23;:::i;:::-;21289:3;21282:36;21272:52;;:::o;21330:108::-;21407:24;21425:5;21407:24;:::i;:::-;21402:3;21395:37;21385:53;;:::o;21444:118::-;21531:24;21549:5;21531:24;:::i;:::-;21526:3;21519:37;21509:53;;:::o;21568:589::-;21793:3;21815:95;21906:3;21897:6;21815:95;:::i;:::-;21808:102;;21927:95;22018:3;22009:6;21927:95;:::i;:::-;21920:102;;22039:92;22127:3;22118:6;22039:92;:::i;:::-;22032:99;;22148:3;22141:10;;21797:360;;;;;;:::o;22163:222::-;22256:4;22294:2;22283:9;22279:18;22271:26;;22307:71;22375:1;22364:9;22360:17;22351:6;22307:71;:::i;:::-;22261:124;;;;:::o;22391:640::-;22586:4;22624:3;22613:9;22609:19;22601:27;;22638:71;22706:1;22695:9;22691:17;22682:6;22638:71;:::i;:::-;22719:72;22787:2;22776:9;22772:18;22763:6;22719:72;:::i;:::-;22801;22869:2;22858:9;22854:18;22845:6;22801:72;:::i;:::-;22920:9;22914:4;22910:20;22905:2;22894:9;22890:18;22883:48;22948:76;23019:4;23010:6;22948:76;:::i;:::-;22940:84;;22591:440;;;;;;;:::o;23037:373::-;23180:4;23218:2;23207:9;23203:18;23195:26;;23267:9;23261:4;23257:20;23253:1;23242:9;23238:17;23231:47;23295:108;23398:4;23389:6;23295:108;:::i;:::-;23287:116;;23185:225;;;;:::o;23416:210::-;23503:4;23541:2;23530:9;23526:18;23518:26;;23554:65;23616:1;23605:9;23601:17;23592:6;23554:65;:::i;:::-;23508:118;;;;:::o;23632:313::-;23745:4;23783:2;23772:9;23768:18;23760:26;;23832:9;23826:4;23822:20;23818:1;23807:9;23803:17;23796:47;23860:78;23933:4;23924:6;23860:78;:::i;:::-;23852:86;;23750:195;;;;:::o;23951:419::-;24117:4;24155:2;24144:9;24140:18;24132:26;;24204:9;24198:4;24194:20;24190:1;24179:9;24175:17;24168:47;24232:131;24358:4;24232:131;:::i;:::-;24224:139;;24122:248;;;:::o;24376:419::-;24542:4;24580:2;24569:9;24565:18;24557:26;;24629:9;24623:4;24619:20;24615:1;24604:9;24600:17;24593:47;24657:131;24783:4;24657:131;:::i;:::-;24649:139;;24547:248;;;:::o;24801:419::-;24967:4;25005:2;24994:9;24990:18;24982:26;;25054:9;25048:4;25044:20;25040:1;25029:9;25025:17;25018:47;25082:131;25208:4;25082:131;:::i;:::-;25074:139;;24972:248;;;:::o;25226:419::-;25392:4;25430:2;25419:9;25415:18;25407:26;;25479:9;25473:4;25469:20;25465:1;25454:9;25450:17;25443:47;25507:131;25633:4;25507:131;:::i;:::-;25499:139;;25397:248;;;:::o;25651:419::-;25817:4;25855:2;25844:9;25840:18;25832:26;;25904:9;25898:4;25894:20;25890:1;25879:9;25875:17;25868:47;25932:131;26058:4;25932:131;:::i;:::-;25924:139;;25822:248;;;:::o;26076:419::-;26242:4;26280:2;26269:9;26265:18;26257:26;;26329:9;26323:4;26319:20;26315:1;26304:9;26300:17;26293:47;26357:131;26483:4;26357:131;:::i;:::-;26349:139;;26247:248;;;:::o;26501:419::-;26667:4;26705:2;26694:9;26690:18;26682:26;;26754:9;26748:4;26744:20;26740:1;26729:9;26725:17;26718:47;26782:131;26908:4;26782:131;:::i;:::-;26774:139;;26672:248;;;:::o;26926:419::-;27092:4;27130:2;27119:9;27115:18;27107:26;;27179:9;27173:4;27169:20;27165:1;27154:9;27150:17;27143:47;27207:131;27333:4;27207:131;:::i;:::-;27199:139;;27097:248;;;:::o;27351:419::-;27517:4;27555:2;27544:9;27540:18;27532:26;;27604:9;27598:4;27594:20;27590:1;27579:9;27575:17;27568:47;27632:131;27758:4;27632:131;:::i;:::-;27624:139;;27522:248;;;:::o;27776:419::-;27942:4;27980:2;27969:9;27965:18;27957:26;;28029:9;28023:4;28019:20;28015:1;28004:9;28000:17;27993:47;28057:131;28183:4;28057:131;:::i;:::-;28049:139;;27947:248;;;:::o;28201:419::-;28367:4;28405:2;28394:9;28390:18;28382:26;;28454:9;28448:4;28444:20;28440:1;28429:9;28425:17;28418:47;28482:131;28608:4;28482:131;:::i;:::-;28474:139;;28372:248;;;:::o;28626:419::-;28792:4;28830:2;28819:9;28815:18;28807:26;;28879:9;28873:4;28869:20;28865:1;28854:9;28850:17;28843:47;28907:131;29033:4;28907:131;:::i;:::-;28899:139;;28797:248;;;:::o;29051:419::-;29217:4;29255:2;29244:9;29240:18;29232:26;;29304:9;29298:4;29294:20;29290:1;29279:9;29275:17;29268:47;29332:131;29458:4;29332:131;:::i;:::-;29324:139;;29222:248;;;:::o;29476:419::-;29642:4;29680:2;29669:9;29665:18;29657:26;;29729:9;29723:4;29719:20;29715:1;29704:9;29700:17;29693:47;29757:131;29883:4;29757:131;:::i;:::-;29749:139;;29647:248;;;:::o;29901:419::-;30067:4;30105:2;30094:9;30090:18;30082:26;;30154:9;30148:4;30144:20;30140:1;30129:9;30125:17;30118:47;30182:131;30308:4;30182:131;:::i;:::-;30174:139;;30072:248;;;:::o;30326:419::-;30492:4;30530:2;30519:9;30515:18;30507:26;;30579:9;30573:4;30569:20;30565:1;30554:9;30550:17;30543:47;30607:131;30733:4;30607:131;:::i;:::-;30599:139;;30497:248;;;:::o;30751:419::-;30917:4;30955:2;30944:9;30940:18;30932:26;;31004:9;30998:4;30994:20;30990:1;30979:9;30975:17;30968:47;31032:131;31158:4;31032:131;:::i;:::-;31024:139;;30922:248;;;:::o;31176:419::-;31342:4;31380:2;31369:9;31365:18;31357:26;;31429:9;31423:4;31419:20;31415:1;31404:9;31400:17;31393:47;31457:131;31583:4;31457:131;:::i;:::-;31449:139;;31347:248;;;:::o;31601:419::-;31767:4;31805:2;31794:9;31790:18;31782:26;;31854:9;31848:4;31844:20;31840:1;31829:9;31825:17;31818:47;31882:131;32008:4;31882:131;:::i;:::-;31874:139;;31772:248;;;:::o;32026:419::-;32192:4;32230:2;32219:9;32215:18;32207:26;;32279:9;32273:4;32269:20;32265:1;32254:9;32250:17;32243:47;32307:131;32433:4;32307:131;:::i;:::-;32299:139;;32197:248;;;:::o;32451:419::-;32617:4;32655:2;32644:9;32640:18;32632:26;;32704:9;32698:4;32694:20;32690:1;32679:9;32675:17;32668:47;32732:131;32858:4;32732:131;:::i;:::-;32724:139;;32622:248;;;:::o;32876:419::-;33042:4;33080:2;33069:9;33065:18;33057:26;;33129:9;33123:4;33119:20;33115:1;33104:9;33100:17;33093:47;33157:131;33283:4;33157:131;:::i;:::-;33149:139;;33047:248;;;:::o;33301:419::-;33467:4;33505:2;33494:9;33490:18;33482:26;;33554:9;33548:4;33544:20;33540:1;33529:9;33525:17;33518:47;33582:131;33708:4;33582:131;:::i;:::-;33574:139;;33472:248;;;:::o;33726:419::-;33892:4;33930:2;33919:9;33915:18;33907:26;;33979:9;33973:4;33969:20;33965:1;33954:9;33950:17;33943:47;34007:131;34133:4;34007:131;:::i;:::-;33999:139;;33897:248;;;:::o;34151:218::-;34242:4;34280:2;34269:9;34265:18;34257:26;;34293:69;34359:1;34348:9;34344:17;34335:6;34293:69;:::i;:::-;34247:122;;;;:::o;34375:222::-;34468:4;34506:2;34495:9;34491:18;34483:26;;34519:71;34587:1;34576:9;34572:17;34563:6;34519:71;:::i;:::-;34473:124;;;;:::o;34603:129::-;34637:6;34664:20;;:::i;:::-;34654:30;;34693:33;34721:4;34713:6;34693:33;:::i;:::-;34644:88;;;:::o;34738:75::-;34771:6;34804:2;34798:9;34788:19;;34778:35;:::o;34819:307::-;34880:4;34970:18;34962:6;34959:30;34956:2;;;34992:18;;:::i;:::-;34956:2;35030:29;35052:6;35030:29;:::i;:::-;35022:37;;35114:4;35108;35104:15;35096:23;;34885:241;;;:::o;35132:308::-;35194:4;35284:18;35276:6;35273:30;35270:2;;;35306:18;;:::i;:::-;35270:2;35344:29;35366:6;35344:29;:::i;:::-;35336:37;;35428:4;35422;35418:15;35410:23;;35199:241;;;:::o;35446:132::-;35513:4;35536:3;35528:11;;35566:4;35561:3;35557:14;35549:22;;35518:60;;;:::o;35584:141::-;35633:4;35656:3;35648:11;;35679:3;35676:1;35669:14;35713:4;35710:1;35700:18;35692:26;;35638:87;;;:::o;35731:114::-;35798:6;35832:5;35826:12;35816:22;;35805:40;;;:::o;35851:98::-;35902:6;35936:5;35930:12;35920:22;;35909:40;;;:::o;35955:99::-;36007:6;36041:5;36035:12;36025:22;;36014:40;;;:::o;36060:113::-;36130:4;36162;36157:3;36153:14;36145:22;;36135:38;;;:::o;36179:184::-;36278:11;36312:6;36307:3;36300:19;36352:4;36347:3;36343:14;36328:29;;36290:73;;;;:::o;36369:168::-;36452:11;36486:6;36481:3;36474:19;36526:4;36521:3;36517:14;36502:29;;36464:73;;;;:::o;36543:169::-;36627:11;36661:6;36656:3;36649:19;36701:4;36696:3;36692:14;36677:29;;36639:73;;;;:::o;36718:148::-;36820:11;36857:3;36842:18;;36832:34;;;;:::o;36872:305::-;36912:3;36931:20;36949:1;36931:20;:::i;:::-;36926:25;;36965:20;36983:1;36965:20;:::i;:::-;36960:25;;37119:1;37051:66;37047:74;37044:1;37041:81;37038:2;;;37125:18;;:::i;:::-;37038:2;37169:1;37166;37162:9;37155:16;;36916:261;;;;:::o;37183:185::-;37223:1;37240:20;37258:1;37240:20;:::i;:::-;37235:25;;37274:20;37292:1;37274:20;:::i;:::-;37269:25;;37313:1;37303:2;;37318:18;;:::i;:::-;37303:2;37360:1;37357;37353:9;37348:14;;37225:143;;;;:::o;37374:348::-;37414:7;37437:20;37455:1;37437:20;:::i;:::-;37432:25;;37471:20;37489:1;37471:20;:::i;:::-;37466:25;;37659:1;37591:66;37587:74;37584:1;37581:81;37576:1;37569:9;37562:17;37558:105;37555:2;;;37666:18;;:::i;:::-;37555:2;37714:1;37711;37707:9;37696:20;;37422:300;;;;:::o;37728:188::-;37767:4;37787:19;37804:1;37787:19;:::i;:::-;37782:24;;37820:19;37837:1;37820:19;:::i;:::-;37815:24;;37858:1;37855;37852:8;37849:2;;;37863:18;;:::i;:::-;37849:2;37908:1;37905;37901:9;37893:17;;37772:144;;;;:::o;37922:191::-;37962:4;37982:20;38000:1;37982:20;:::i;:::-;37977:25;;38016:20;38034:1;38016:20;:::i;:::-;38011:25;;38055:1;38052;38049:8;38046:2;;;38060:18;;:::i;:::-;38046:2;38105:1;38102;38098:9;38090:17;;37967:146;;;;:::o;38119:96::-;38156:7;38185:24;38203:5;38185:24;:::i;:::-;38174:35;;38164:51;;;:::o;38221:90::-;38255:7;38298:5;38291:13;38284:21;38273:32;;38263:48;;;:::o;38317:149::-;38353:7;38393:66;38386:5;38382:78;38371:89;;38361:105;;;:::o;38472:89::-;38508:7;38548:6;38541:5;38537:18;38526:29;;38516:45;;;:::o;38567:126::-;38604:7;38644:42;38637:5;38633:54;38622:65;;38612:81;;;:::o;38699:77::-;38736:7;38765:5;38754:16;;38744:32;;;:::o;38782:86::-;38817:7;38857:4;38850:5;38846:16;38835:27;;38825:43;;;:::o;38874:154::-;38958:6;38953:3;38948;38935:30;39020:1;39011:6;39006:3;39002:16;38995:27;38925:103;;;:::o;39034:307::-;39102:1;39112:113;39126:6;39123:1;39120:13;39112:113;;;39211:1;39206:3;39202:11;39196:18;39192:1;39187:3;39183:11;39176:39;39148:2;39145:1;39141:10;39136:15;;39112:113;;;39243:6;39240:1;39237:13;39234:2;;;39323:1;39314:6;39309:3;39305:16;39298:27;39234:2;39083:258;;;;:::o;39347:320::-;39391:6;39428:1;39422:4;39418:12;39408:22;;39475:1;39469:4;39465:12;39496:18;39486:2;;39552:4;39544:6;39540:17;39530:27;;39486:2;39614;39606:6;39603:14;39583:18;39580:38;39577:2;;;39633:18;;:::i;:::-;39577:2;39398:269;;;;:::o;39673:281::-;39756:27;39778:4;39756:27;:::i;:::-;39748:6;39744:40;39886:6;39874:10;39871:22;39850:18;39838:10;39835:34;39832:62;39829:2;;;39897:18;;:::i;:::-;39829:2;39937:10;39933:2;39926:22;39716:238;;;:::o;39960:233::-;39999:3;40022:24;40040:5;40022:24;:::i;:::-;40013:33;;40068:66;40061:5;40058:77;40055:2;;;40138:18;;:::i;:::-;40055:2;40185:1;40178:5;40174:13;40167:20;;40003:190;;;:::o;40199:167::-;40236:3;40259:22;40275:5;40259:22;:::i;:::-;40250:31;;40303:4;40296:5;40293:15;40290:2;;;40311:18;;:::i;:::-;40290:2;40358:1;40351:5;40347:13;40340:20;;40240:126;;;:::o;40372:176::-;40404:1;40421:20;40439:1;40421:20;:::i;:::-;40416:25;;40455:20;40473:1;40455:20;:::i;:::-;40450:25;;40494:1;40484:2;;40499:18;;:::i;:::-;40484:2;40540:1;40537;40533:9;40528:14;;40406:142;;;;:::o;40554:180::-;40602:77;40599:1;40592:88;40699:4;40696:1;40689:15;40723:4;40720:1;40713:15;40740:180;40788:77;40785:1;40778:88;40885:4;40882:1;40875:15;40909:4;40906:1;40899:15;40926:180;40974:77;40971:1;40964:88;41071:4;41068:1;41061:15;41095:4;41092:1;41085:15;41112:180;41160:77;41157:1;41150:88;41257:4;41254:1;41247:15;41281:4;41278:1;41271:15;41298:180;41346:77;41343:1;41336:88;41443:4;41440:1;41433:15;41467:4;41464:1;41457:15;41484:180;41532:77;41529:1;41522:88;41629:4;41626:1;41619:15;41653:4;41650:1;41643:15;41670:117;41779:1;41776;41769:12;41793:117;41902:1;41899;41892:12;41916:117;42025:1;42022;42015:12;42039:117;42148:1;42145;42138:12;42162:102;42203:6;42254:2;42250:7;42245:2;42238:5;42234:14;42230:28;42220:38;;42210:54;;;:::o;42270:161::-;42410:13;42406:1;42398:6;42394:14;42387:37;42376:55;:::o;42437:238::-;42577:34;42573:1;42565:6;42561:14;42554:58;42646:21;42641:2;42633:6;42629:15;42622:46;42543:132;:::o;42681:230::-;42821:34;42817:1;42809:6;42805:14;42798:58;42890:13;42885:2;42877:6;42873:15;42866:38;42787:124;:::o;42917:237::-;43057:34;43053:1;43045:6;43041:14;43034:58;43126:20;43121:2;43113:6;43109:15;43102:45;43023:131;:::o;43160:225::-;43300:34;43296:1;43288:6;43284:14;43277:58;43369:8;43364:2;43356:6;43352:15;43345:33;43266:119;:::o;43391:181::-;43531:33;43527:1;43519:6;43515:14;43508:57;43497:75;:::o;43578:178::-;43718:30;43714:1;43706:6;43702:14;43695:54;43684:72;:::o;43762:223::-;43902:34;43898:1;43890:6;43886:14;43879:58;43971:6;43966:2;43958:6;43954:15;43947:31;43868:117;:::o;43991:175::-;44131:27;44127:1;44119:6;44115:14;44108:51;44097:69;:::o;44172:231::-;44312:34;44308:1;44300:6;44296:14;44289:58;44381:14;44376:2;44368:6;44364:15;44357:39;44278:125;:::o;44409:243::-;44549:34;44545:1;44537:6;44533:14;44526:58;44618:26;44613:2;44605:6;44601:15;44594:51;44515:137;:::o;44658:229::-;44798:34;44794:1;44786:6;44782:14;44775:58;44867:12;44862:2;44854:6;44850:15;44843:37;44764:123;:::o;44893:228::-;45033:34;45029:1;45021:6;45017:14;45010:58;45102:11;45097:2;45089:6;45085:15;45078:36;44999:122;:::o;45127:182::-;45267:34;45263:1;45255:6;45251:14;45244:58;45233:76;:::o;45315:231::-;45455:34;45451:1;45443:6;45439:14;45432:58;45524:14;45519:2;45511:6;45507:15;45500:39;45421:125;:::o;45552:231::-;45692:34;45688:1;45680:6;45676:14;45669:58;45761:14;45756:2;45748:6;45744:15;45737:39;45658:125;:::o;45789:182::-;45929:34;45925:1;45917:6;45913:14;45906:58;45895:76;:::o;45977:228::-;46117:34;46113:1;46105:6;46101:14;46094:58;46186:11;46181:2;46173:6;46169:15;46162:36;46083:122;:::o;46211:234::-;46351:34;46347:1;46339:6;46335:14;46328:58;46420:17;46415:2;46407:6;46403:15;46396:42;46317:128;:::o;46451:220::-;46591:34;46587:1;46579:6;46575:14;46568:58;46660:3;46655:2;46647:6;46643:15;46636:28;46557:114;:::o;46677:175::-;46817:27;46813:1;46805:6;46801:14;46794:51;46783:69;:::o;46858:236::-;46998:34;46994:1;46986:6;46982:14;46975:58;47067:19;47062:2;47054:6;47050:15;47043:44;46964:130;:::o;47100:231::-;47240:34;47236:1;47228:6;47224:14;47217:58;47309:14;47304:2;47296:6;47292:15;47285:39;47206:125;:::o;47337:181::-;47477:33;47473:1;47465:6;47461:14;47454:57;47443:75;:::o;47524:122::-;47597:24;47615:5;47597:24;:::i;:::-;47590:5;47587:35;47577:2;;47636:1;47633;47626:12;47577:2;47567:79;:::o;47652:116::-;47722:21;47737:5;47722:21;:::i;:::-;47715:5;47712:32;47702:2;;47758:1;47755;47748:12;47702:2;47692:76;:::o;47774:120::-;47846:23;47863:5;47846:23;:::i;:::-;47839:5;47836:34;47826:2;;47884:1;47881;47874:12;47826:2;47816:78;:::o;47900:122::-;47973:24;47991:5;47973:24;:::i;:::-;47966:5;47963:35;47953:2;;48012:1;48009;48002:12;47953:2;47943:79;:::o;48028:118::-;48099:22;48115:5;48099:22;:::i;:::-;48092:5;48089:33;48079:2;;48136:1;48133;48126:12;48079:2;48069:77;:::o

Swarm Source

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