ETH Price: $2,730.69 (+12.16%)
 

Overview

Max Total Supply

2,600 CONAN

Holders

1,330

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 CONAN
0xed67f0e52a06f2a624983a0030e95c657b2425cf
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:
ConansCircle

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: ConansCircle/ReentrancyGuard.sol


pragma solidity ^0.8.0;


abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
// File: ConansCircle/Strings.sol



pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

// File: ConansCircle/Context.sol


pragma solidity ^0.8.0;

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: ConansCircle/Ownable.sol



pragma solidity ^0.8.0;


abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: ConansCircle/Address.sol


pragma solidity ^0.8.1;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

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

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    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
    ) internal 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: ConansCircle/IERC721Receiver.sol



pragma solidity ^0.8.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: ConansCircle/IERC165.sol



pragma solidity ^0.8.0;

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

// File: ConansCircle/ERC165.sol


pragma solidity ^0.8.0;


/**
 * @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: ConansCircle/IERC721.sol



pragma solidity ^0.8.0;


interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: ConansCircle/IERC721Metadata.sol



pragma solidity ^0.8.0;


interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: ConansCircle/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @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: ConansCircle/ERC721A.sol



pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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 override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    // require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @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("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// File: ConansCircle/MerkleProof.sol


pragma solidity ^0.8.0;

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

// File: ConansCircle/ConansCircle.sol


pragma solidity ^0.8.7;





contract ConansCircle is Ownable, ERC721A, ReentrancyGuard {
    uint256 private _publicPrice = 0.03 ether;
    uint256 private _presalePrice = 0.03 ether;
    bool public isWhitelistMintStarted = false;
    bool public isPublicMintStarted = false;

    uint256 private constant _maxPurchaseDuringWhitelist = 1;
    uint256 private constant _maxPerTransaction = 2;
    uint256 private _maxMint = 2500;
    address private _team = 0x17f3C41EEf2E55c8b3969B958ee04d3417f9a699;
    bytes32 public merkleRoot = 0x0;
    mapping(address => uint256) public presaleAddressMintCount;
    bool public isPaused = false;
    string private _tokenURI = "ipfs://QmXddgi4iCf1CE9Pm9KwR3298LJ4R7xFtcf3SfvNbqEAhS/";

    constructor() ERC721A("ConansCircle", "CONAN", _maxPerTransaction, _maxMint) {}

    function setWhitelistMint (bool value) external onlyOwner {
        isWhitelistMintStarted = value;
    }

    function setPublicMint (bool value) external onlyOwner {
        isPublicMintStarted = value;
    }

    function getIsPublicMintStarted () external view returns (bool) {
        return isPublicMintStarted;
    }

    function pause() external onlyOwner {
        isPaused = true;
    }

    function unpause() external onlyOwner {
        isPaused = false;
    }

    function setWhitelistPrice (uint256 price) external onlyOwner {
        _presalePrice = price;
    }

    function setPublicPrice (uint256 price) external onlyOwner {
        _publicPrice = price;
    }

    modifier mintGuard(uint256 tokenCount) {
        require(!isPaused, "Sale not started");
        require(tokenCount > 0 && tokenCount <= _maxPerTransaction, "Max one per transaction");
        require(msg.sender == tx.origin, "Sender not origin");
        // Price check
        if (isPublicMintStarted) {
            require(_publicPrice * tokenCount <= msg.value, "Insufficient funds");
        } else {
            require(_presalePrice * tokenCount <= msg.value, "Insufficient funds");
        }
        require(totalSupply() + tokenCount <= _maxMint+1, "Sold out!");
        _;
    }

    function mint(uint256 amount) external payable mintGuard(amount) {
        require(isPublicMintStarted, "Sale not started");
        require(amount <= _maxPerTransaction, "Exceed transaction limit");
        _safeMint(msg.sender, amount);
    }

    function mintPresale(bytes32[] calldata proof, uint256 amount) external payable mintGuard(amount) {
        require(isWhitelistMintStarted, "Whitelist mint has not started!");
        require(amount <= _maxPurchaseDuringWhitelist, "Exceed transaction limit");
        require(presaleAddressMintCount[msg.sender] + amount <= _maxPurchaseDuringWhitelist, "Maximum limit reached");
        require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "Not eligible for presale");

        presaleAddressMintCount[msg.sender] += amount;
        _safeMint(msg.sender, amount);
    }

    function cashout() external onlyOwner {
        payable(_team).transfer(address(this).balance);
    }

    function setCashout(address addr) external onlyOwner returns(address) {
        _team = addr;
        return addr;
    }

    function devMint(uint32 qty) external onlyOwner {
        _safeMint(msg.sender, qty);
    }

    function setMerkleRoot(bytes32 root) external onlyOwner {
        merkleRoot = root;
    }

    function setMaxMint(uint256 maxMint) external onlyOwner {
        _maxMint = maxMint;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _tokenURI = baseURI;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _tokenURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"cashout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"qty","type":"uint32"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIsPublicMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAddressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"address","name":"addr","type":"address"}],"name":"setCashout","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setWhitelistPrice","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":[],"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260006001556000600855666a94d74f430000600a55666a94d74f430000600b556000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506109c4600d557317f3c41eef2e55c8b3969b958ee04d3417f9a699600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000801b600f556000601160006101000a81548160ff021916908315150217905550604051806060016040528060368152602001620059cd60369139601290805190602001906200010892919062000354565b503480156200011657600080fd5b506040518060400160405280600c81526020017f436f6e616e73436972636c6500000000000000000000000000000000000000008152506040518060400160405280600581526020017f434f4e414e0000000000000000000000000000000000000000000000000000008152506002600d54620001a86200019c6200028860201b60201c565b6200029060201b60201c565b60008111620001ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e59062000474565b60405180910390fd5b6000821162000234576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b9062000452565b60405180910390fd5b83600290805190602001906200024c92919062000354565b5082600390805190602001906200026592919062000354565b508160a081815250508060808181525050505050506001600981905550620005aa565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200036290620004a7565b90600052602060002090601f016020900481019282620003865760008555620003d2565b82601f10620003a157805160ff1916838001178555620003d2565b82800160010185558215620003d2579182015b82811115620003d1578251825591602001919060010190620003b4565b5b509050620003e19190620003e5565b5090565b5b8082111562000400576000816000905550600101620003e6565b5090565b60006200041360278362000496565b915062000420826200050c565b604082019050919050565b60006200043a602e8362000496565b915062000447826200055b565b604082019050919050565b600060208201905081810360008301526200046d8162000404565b9050919050565b600060208201905081810360008301526200048f816200042b565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004c057607f821691505b60208210811415620004d757620004d6620004dd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516153f9620005d460003960008181612bac0152612bd50152600050506153f96000f3fe60806040526004361061023b5760003560e01c8063777cd9811161012e578063b187bd26116100ab578063c75a20b31161006f578063c75a20b314610817578063c87b56dd14610854578063d7224ba014610891578063e985e9c5146108bc578063f2fde38b146108f95761023b565b8063b187bd2614610746578063b3c11d3a14610771578063b88d4fde1461079a578063bbb79262146107c3578063c6275255146107ee5761023b565b80638da5cb5b116100f25780638da5cb5b1461068f57806395d89b41146106ba578063a0712d68146106e5578063a22cb46514610701578063ad7f1ea11461072a5761023b565b8063777cd981146105d05780637cb64759146105fb5780637db5a6361461062457806384054d3d146106615780638456cb59146106785761023b565b80633f4ba83a116101bc5780635d56d55e116101805780635d56d55e146104ed5780636352211e1461051657806370a0823114610553578063715018a614610590578063717d57d3146105a75761023b565b80633f4ba83a1461041e57806342842e0e146104355780634f6ccce71461045e578063547520fe1461049b57806355f804b3146104c45761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632eb4a7ab1461038b5780632f745c59146103b657806330a0ef06146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630e2d56cf1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c46565b610922565b60405161027491906142fa565b60405180910390f35b34801561028957600080fd5b50610292610a6c565b60405161029f9190614330565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613ced565b610afe565b6040516102dc9190614293565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613b4c565b610b83565b005b34801561031a57600080fd5b5061033560048036038101906103309190613bec565b610c9c565b005b34801561034357600080fd5b5061034c610d35565b60405161035991906146d2565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613a36565b610d3f565b005b34801561039757600080fd5b506103a0610d4f565b6040516103ad9190614315565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613b4c565b610d55565b6040516103ea91906146d2565b60405180910390f35b3480156103ff57600080fd5b50610408610f53565b60405161041591906142fa565b60405180910390f35b34801561042a57600080fd5b50610433610f6a565b005b34801561044157600080fd5b5061045c60048036038101906104579190613a36565b611003565b005b34801561046a57600080fd5b5061048560048036038101906104809190613ced565b611023565b60405161049291906146d2565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190613ced565b611076565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613ca0565b6110fc565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613bec565b61118e565b005b34801561052257600080fd5b5061053d60048036038101906105389190613ced565b611227565b60405161054a9190614293565b60405180910390f35b34801561055f57600080fd5b5061057a600480360381019061057591906139c9565b61123d565b60405161058791906146d2565b60405180910390f35b34801561059c57600080fd5b506105a5611326565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613ced565b6113ae565b005b3480156105dc57600080fd5b506105e5611434565b6040516105f291906142fa565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190613c19565b611447565b005b34801561063057600080fd5b5061064b600480360381019061064691906139c9565b6114cd565b60405161065891906146d2565b60405180910390f35b34801561066d57600080fd5b506106766114e5565b005b34801561068457600080fd5b5061068d6115cc565b005b34801561069b57600080fd5b506106a4611665565b6040516106b19190614293565b60405180910390f35b3480156106c657600080fd5b506106cf61168e565b6040516106dc9190614330565b60405180910390f35b6106ff60048036038101906106fa9190613ced565b611720565b005b34801561070d57600080fd5b5061072860048036038101906107239190613b0c565b6119ee565b005b610744600480360381019061073f9190613b8c565b611b6f565b005b34801561075257600080fd5b5061075b611fd6565b60405161076891906142fa565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d1a565b611fe9565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190613a89565b612078565b005b3480156107cf57600080fd5b506107d86120d4565b6040516107e591906142fa565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613ced565b6120e7565b005b34801561082357600080fd5b5061083e600480360381019061083991906139c9565b61216d565b60405161084b9190614293565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190613ced565b612234565b6040516108889190614330565b60405180910390f35b34801561089d57600080fd5b506108a66122db565b6040516108b391906146d2565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de91906139f6565b6122e1565b6040516108f091906142fa565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b91906139c9565b612375565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a655750610a648261246d565b5b9050919050565b606060028054610a7b90614a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa790614a2b565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b5050505050905090565b6000610b09826124d7565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90614652565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8e82611227565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690614552565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1e6124e5565b73ffffffffffffffffffffffffffffffffffffffff161480610c4d5750610c4c81610c476124e5565b6122e1565b5b610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390614452565b60405180910390fd5b610c978383836124ed565b505050565b610ca46124e5565b73ffffffffffffffffffffffffffffffffffffffff16610cc2611665565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906144d2565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000600154905090565b610d4a83838361259f565b505050565b600f5481565b6000610d608361123d565b8210610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9890614352565b60405180910390fd5b6000610dab610d35565b905060008060005b83811015610f11576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ea557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efd5786841415610eee578195505050505050610f4d565b8380610ef990614a8e565b9450505b508080610f0990614a8e565b915050610db3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f44906145f2565b60405180910390fd5b92915050565b6000600c60019054906101000a900460ff16905090565b610f726124e5565b73ffffffffffffffffffffffffffffffffffffffff16610f90611665565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906144d2565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b61101e83838360405180602001604052806000815250612078565b505050565b600061102d610d35565b821061106e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611065906143d2565b60405180910390fd5b819050919050565b61107e6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661109c611665565b73ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906144d2565b60405180910390fd5b80600d8190555050565b6111046124e5565b73ffffffffffffffffffffffffffffffffffffffff16611122611665565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f906144d2565b60405180910390fd5b81816012919061118992919061373d565b505050565b6111966124e5565b73ffffffffffffffffffffffffffffffffffffffff166111b4611665565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611201906144d2565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600061123282612b58565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590614492565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61132e6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661134c611665565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906144d2565b60405180910390fd5b6113ac6000612d5b565b565b6113b66124e5565b73ffffffffffffffffffffffffffffffffffffffff166113d4611665565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906144d2565b60405180910390fd5b80600b8190555050565b600c60009054906101000a900460ff1681565b61144f6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661146d611665565b73ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906144d2565b60405180910390fd5b80600f8190555050565b60106020528060005260406000206000915090505481565b6114ed6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661150b611665565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906144d2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156115c9573d6000803e3d6000fd5b50565b6115d46124e5565b73ffffffffffffffffffffffffffffffffffffffff166115f2611665565b73ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906144d2565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461169d90614a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546116c990614a2b565b80156117165780601f106116eb57610100808354040283529160200191611716565b820191906000526020600020905b8154815290600101906020018083116116f957829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890614432565b60405180910390fd5b600081118015611782575060028111155b6117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890614612565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906143b2565b60405180910390fd5b600c60019054906101000a900460ff1615611899573481600a546118539190614853565b1115611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90614412565b60405180910390fd5b6118ea565b3481600b546118a89190614853565b11156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614412565b60405180910390fd5b5b6001600d546118f991906147cc565b81611902610d35565b61190c91906147cc565b111561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614692565b60405180910390fd5b600c60019054906101000a900460ff1661199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614432565b60405180910390fd5b60028211156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790614672565b60405180910390fd5b6119ea3383612e1f565b5050565b6119f66124e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614512565b60405180910390fd5b8060076000611a716124e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b1e6124e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6391906142fa565b60405180910390a35050565b80601160009054906101000a900460ff1615611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614432565b60405180910390fd5b600081118015611bd1575060028111155b611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614612565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c75906143b2565b60405180910390fd5b600c60019054906101000a900460ff1615611ce8573481600a54611ca29190614853565b1115611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90614412565b60405180910390fd5b611d39565b3481600b54611cf79190614853565b1115611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614412565b60405180910390fd5b5b6001600d54611d4891906147cc565b81611d51610d35565b611d5b91906147cc565b1115611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614692565b60405180910390fd5b600c60009054906101000a900460ff16611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614572565b60405180910390fd5b6001821115611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2690614672565b60405180910390fd5b600182601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e7c91906147cc565b1115611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490614472565b60405180910390fd5b611f31848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5433604051602001611f169190614228565b60405160208183030381529060405280519060200120612e3d565b611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906146b2565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fbf91906147cc565b92505081905550611fd03383612e1f565b50505050565b601160009054906101000a900460ff1681565b611ff16124e5565b73ffffffffffffffffffffffffffffffffffffffff1661200f611665565b73ffffffffffffffffffffffffffffffffffffffff1614612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906144d2565b60405180910390fd5b612075338263ffffffff16612e1f565b50565b61208384848461259f565b61208f84848484612e54565b6120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614592565b60405180910390fd5b50505050565b600c60019054906101000a900460ff1681565b6120ef6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661210d611665565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a906144d2565b60405180910390fd5b80600a8190555050565b60006121776124e5565b73ffffffffffffffffffffffffffffffffffffffff16612195611665565b73ffffffffffffffffffffffffffffffffffffffff16146121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e2906144d2565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061223f826124d7565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906144f2565b60405180910390fd5b6000612288612feb565b905060008151116122a857604051806020016040528060008152506122d3565b806122b28461307d565b6040516020016122c392919061426f565b6040516020818303038152906040525b915050919050565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61237d6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661239b611665565b73ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614372565b60405180910390fd5b61246a81612d5b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125aa82612b58565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125d16124e5565b73ffffffffffffffffffffffffffffffffffffffff16148061262d57506125f66124e5565b73ffffffffffffffffffffffffffffffffffffffff1661261584610afe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612649575061264882600001516126436124e5565b6122e1565b5b90508061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614532565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906144b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561276d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612764906143f2565b60405180910390fd5b61277a85858560016131de565b61278a60008484600001516124ed565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127f891906148ad565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661289c9190614786565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129a291906147cc565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ae857612a18816124d7565b15612ae7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b5086868660016131e4565b505050505050565b612b606137c3565b612b69826124d7565b612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614392565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612c0c5760017f000000000000000000000000000000000000000000000000000000000000000084612bff91906148e1565b612c0991906147cc565b90505b60008390505b818110612d1a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d0657809350505050612d56565b508080612d1290614a01565b915050612c12565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90614632565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e398282604051806020016040528060008152506131ea565b5050565b600082612e4a8584613667565b1490509392505050565b6000612e758473ffffffffffffffffffffffffffffffffffffffff1661371a565b15612fde578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9e6124e5565b8786866040518563ffffffff1660e01b8152600401612ec094939291906142ae565b602060405180830381600087803b158015612eda57600080fd5b505af1925050508015612f0b57506040513d601f19601f82011682018060405250810190612f089190613c73565b60015b612f8e573d8060008114612f3b576040519150601f19603f3d011682016040523d82523d6000602084013e612f40565b606091505b50600081511415612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d90614592565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe3565b600190505b949350505050565b606060128054612ffa90614a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461302690614a2b565b80156130735780601f1061304857610100808354040283529160200191613073565b820191906000526020600020905b81548152906001019060200180831161305657829003601f168201915b5050505050905090565b606060008214156130c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d9565b600082905060005b600082146130f75780806130e090614a8e565b915050600a826130f09190614822565b91506130cd565b60008167ffffffffffffffff81111561311357613112614bf2565b5b6040519080825280601f01601f1916602001820160405280156131455781602001600182028036833780820191505090505b5090505b600085146131d25760018261315e91906148e1565b9150600a8561316d9190614b05565b603061317991906147cc565b60f81b81838151811061318f5761318e614bc3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131cb9190614822565b9450613149565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613261576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613258906145d2565b60405180910390fd5b61326a816124d7565b156132aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a1906145b2565b60405180910390fd5b6132b760008583866131de565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133b49190614786565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133db9190614786565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561364a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ea6000888488612e54565b613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614592565b60405180910390fd5b818061363490614a8e565b925050808061364290614a8e565b915050613579565b508060018190555061365f60008785886131e4565b505050505050565b60008082905060005b845181101561370f57600085828151811061368e5761368d614bc3565b5b602002602001015190508083116136cf5782816040516020016136b2929190614243565b6040516020818303038152906040528051906020012092506136fb565b80836040516020016136e2929190614243565b6040516020818303038152906040528051906020012092505b50808061370790614a8e565b915050613670565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461374990614a2b565b90600052602060002090601f01602090048101928261376b57600085556137b2565b82601f1061378457803560ff19168380011785556137b2565b828001600101855582156137b2579182015b828111156137b1578235825591602001919060010190613796565b5b5090506137bf91906137fd565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156138165760008160009055506001016137fe565b5090565b600061382d61382884614712565b6146ed565b90508281526020810184848401111561384957613848614c30565b5b6138548482856149bf565b509392505050565b60008135905061386b81615339565b92915050565b60008083601f84011261388757613886614c26565b5b8235905067ffffffffffffffff8111156138a4576138a3614c21565b5b6020830191508360208202830111156138c0576138bf614c2b565b5b9250929050565b6000813590506138d681615350565b92915050565b6000813590506138eb81615367565b92915050565b6000813590506139008161537e565b92915050565b6000815190506139158161537e565b92915050565b600082601f8301126139305761392f614c26565b5b813561394084826020860161381a565b91505092915050565b60008083601f84011261395f5761395e614c26565b5b8235905067ffffffffffffffff81111561397c5761397b614c21565b5b60208301915083600182028301111561399857613997614c2b565b5b9250929050565b6000813590506139ae81615395565b92915050565b6000813590506139c3816153ac565b92915050565b6000602082840312156139df576139de614c3a565b5b60006139ed8482850161385c565b91505092915050565b60008060408385031215613a0d57613a0c614c3a565b5b6000613a1b8582860161385c565b9250506020613a2c8582860161385c565b9150509250929050565b600080600060608486031215613a4f57613a4e614c3a565b5b6000613a5d8682870161385c565b9350506020613a6e8682870161385c565b9250506040613a7f8682870161399f565b9150509250925092565b60008060008060808587031215613aa357613aa2614c3a565b5b6000613ab18782880161385c565b9450506020613ac28782880161385c565b9350506040613ad38782880161399f565b925050606085013567ffffffffffffffff811115613af457613af3614c35565b5b613b008782880161391b565b91505092959194509250565b60008060408385031215613b2357613b22614c3a565b5b6000613b318582860161385c565b9250506020613b42858286016138c7565b9150509250929050565b60008060408385031215613b6357613b62614c3a565b5b6000613b718582860161385c565b9250506020613b828582860161399f565b9150509250929050565b600080600060408486031215613ba557613ba4614c3a565b5b600084013567ffffffffffffffff811115613bc357613bc2614c35565b5b613bcf86828701613871565b93509350506020613be28682870161399f565b9150509250925092565b600060208284031215613c0257613c01614c3a565b5b6000613c10848285016138c7565b91505092915050565b600060208284031215613c2f57613c2e614c3a565b5b6000613c3d848285016138dc565b91505092915050565b600060208284031215613c5c57613c5b614c3a565b5b6000613c6a848285016138f1565b91505092915050565b600060208284031215613c8957613c88614c3a565b5b6000613c9784828501613906565b91505092915050565b60008060208385031215613cb757613cb6614c3a565b5b600083013567ffffffffffffffff811115613cd557613cd4614c35565b5b613ce185828601613949565b92509250509250929050565b600060208284031215613d0357613d02614c3a565b5b6000613d118482850161399f565b91505092915050565b600060208284031215613d3057613d2f614c3a565b5b6000613d3e848285016139b4565b91505092915050565b613d5081614915565b82525050565b613d67613d6282614915565b614ad7565b82525050565b613d7681614927565b82525050565b613d8581614933565b82525050565b613d9c613d9782614933565b614ae9565b82525050565b6000613dad82614743565b613db78185614759565b9350613dc78185602086016149ce565b613dd081614c3f565b840191505092915050565b6000613de68261474e565b613df0818561476a565b9350613e008185602086016149ce565b613e0981614c3f565b840191505092915050565b6000613e1f8261474e565b613e29818561477b565b9350613e398185602086016149ce565b80840191505092915050565b6000613e5260228361476a565b9150613e5d82614c5d565b604082019050919050565b6000613e7560268361476a565b9150613e8082614cac565b604082019050919050565b6000613e98602a8361476a565b9150613ea382614cfb565b604082019050919050565b6000613ebb60118361476a565b9150613ec682614d4a565b602082019050919050565b6000613ede60238361476a565b9150613ee982614d73565b604082019050919050565b6000613f0160258361476a565b9150613f0c82614dc2565b604082019050919050565b6000613f2460128361476a565b9150613f2f82614e11565b602082019050919050565b6000613f4760108361476a565b9150613f5282614e3a565b602082019050919050565b6000613f6a60398361476a565b9150613f7582614e63565b604082019050919050565b6000613f8d60158361476a565b9150613f9882614eb2565b602082019050919050565b6000613fb0602b8361476a565b9150613fbb82614edb565b604082019050919050565b6000613fd360268361476a565b9150613fde82614f2a565b604082019050919050565b6000613ff660208361476a565b915061400182614f79565b602082019050919050565b6000614019602f8361476a565b915061402482614fa2565b604082019050919050565b600061403c601a8361476a565b915061404782614ff1565b602082019050919050565b600061405f60328361476a565b915061406a8261501a565b604082019050919050565b600061408260228361476a565b915061408d82615069565b604082019050919050565b60006140a5601f8361476a565b91506140b0826150b8565b602082019050919050565b60006140c860338361476a565b91506140d3826150e1565b604082019050919050565b60006140eb601d8361476a565b91506140f682615130565b602082019050919050565b600061410e60218361476a565b915061411982615159565b604082019050919050565b6000614131602e8361476a565b915061413c826151a8565b604082019050919050565b600061415460178361476a565b915061415f826151f7565b602082019050919050565b6000614177602f8361476a565b915061418282615220565b604082019050919050565b600061419a602d8361476a565b91506141a58261526f565b604082019050919050565b60006141bd60188361476a565b91506141c8826152be565b602082019050919050565b60006141e060098361476a565b91506141eb826152e7565b602082019050919050565b600061420360188361476a565b915061420e82615310565b602082019050919050565b614222816149a5565b82525050565b60006142348284613d56565b60148201915081905092915050565b600061424f8285613d8b565b60208201915061425f8284613d8b565b6020820191508190509392505050565b600061427b8285613e14565b91506142878284613e14565b91508190509392505050565b60006020820190506142a86000830184613d47565b92915050565b60006080820190506142c36000830187613d47565b6142d06020830186613d47565b6142dd6040830185614219565b81810360608301526142ef8184613da2565b905095945050505050565b600060208201905061430f6000830184613d6d565b92915050565b600060208201905061432a6000830184613d7c565b92915050565b6000602082019050818103600083015261434a8184613ddb565b905092915050565b6000602082019050818103600083015261436b81613e45565b9050919050565b6000602082019050818103600083015261438b81613e68565b9050919050565b600060208201905081810360008301526143ab81613e8b565b9050919050565b600060208201905081810360008301526143cb81613eae565b9050919050565b600060208201905081810360008301526143eb81613ed1565b9050919050565b6000602082019050818103600083015261440b81613ef4565b9050919050565b6000602082019050818103600083015261442b81613f17565b9050919050565b6000602082019050818103600083015261444b81613f3a565b9050919050565b6000602082019050818103600083015261446b81613f5d565b9050919050565b6000602082019050818103600083015261448b81613f80565b9050919050565b600060208201905081810360008301526144ab81613fa3565b9050919050565b600060208201905081810360008301526144cb81613fc6565b9050919050565b600060208201905081810360008301526144eb81613fe9565b9050919050565b6000602082019050818103600083015261450b8161400c565b9050919050565b6000602082019050818103600083015261452b8161402f565b9050919050565b6000602082019050818103600083015261454b81614052565b9050919050565b6000602082019050818103600083015261456b81614075565b9050919050565b6000602082019050818103600083015261458b81614098565b9050919050565b600060208201905081810360008301526145ab816140bb565b9050919050565b600060208201905081810360008301526145cb816140de565b9050919050565b600060208201905081810360008301526145eb81614101565b9050919050565b6000602082019050818103600083015261460b81614124565b9050919050565b6000602082019050818103600083015261462b81614147565b9050919050565b6000602082019050818103600083015261464b8161416a565b9050919050565b6000602082019050818103600083015261466b8161418d565b9050919050565b6000602082019050818103600083015261468b816141b0565b9050919050565b600060208201905081810360008301526146ab816141d3565b9050919050565b600060208201905081810360008301526146cb816141f6565b9050919050565b60006020820190506146e76000830184614219565b92915050565b60006146f7614708565b90506147038282614a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561472d5761472c614bf2565b5b61473682614c3f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061479182614969565b915061479c83614969565b9250826fffffffffffffffffffffffffffffffff038211156147c1576147c0614b36565b5b828201905092915050565b60006147d7826149a5565b91506147e2836149a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481757614816614b36565b5b828201905092915050565b600061482d826149a5565b9150614838836149a5565b92508261484857614847614b65565b5b828204905092915050565b600061485e826149a5565b9150614869836149a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a2576148a1614b36565b5b828202905092915050565b60006148b882614969565b91506148c383614969565b9250828210156148d6576148d5614b36565b5b828203905092915050565b60006148ec826149a5565b91506148f7836149a5565b92508282101561490a57614909614b36565b5b828203905092915050565b600061492082614985565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156149ec5780820151818401526020810190506149d1565b838111156149fb576000848401525b50505050565b6000614a0c826149a5565b91506000821415614a2057614a1f614b36565b5b600182039050919050565b60006002820490506001821680614a4357607f821691505b60208210811415614a5757614a56614b94565b5b50919050565b614a6682614c3f565b810181811067ffffffffffffffff82111715614a8557614a84614bf2565b5b80604052505050565b6000614a99826149a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614acc57614acb614b36565b5b600182019050919050565b6000614ae282614af3565b9050919050565b6000819050919050565b6000614afe82614c50565b9050919050565b6000614b10826149a5565b9150614b1b836149a5565b925082614b2b57614b2a614b65565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d6178696d756d206c696d697420726561636865640000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e7420686173206e6f7420737461727465642100600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f457863656564207472616e73616374696f6e206c696d69740000000000000000600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4e6f7420656c696769626c6520666f722070726573616c650000000000000000600082015250565b61534281614915565b811461534d57600080fd5b50565b61535981614927565b811461536457600080fd5b50565b61537081614933565b811461537b57600080fd5b50565b6153878161493d565b811461539257600080fd5b50565b61539e816149a5565b81146153a957600080fd5b50565b6153b5816149af565b81146153c057600080fd5b5056fea26469706673582212208cdc3a73172c17f80270cf73025f5dc0e37efc3524c67ea69ec0f824356ac4dd64736f6c63430008070033697066733a2f2f516d58646467693469436631434539506d394b7752333239384c4a3452377846746366335366764e6271454168532f

Deployed Bytecode

0x60806040526004361061023b5760003560e01c8063777cd9811161012e578063b187bd26116100ab578063c75a20b31161006f578063c75a20b314610817578063c87b56dd14610854578063d7224ba014610891578063e985e9c5146108bc578063f2fde38b146108f95761023b565b8063b187bd2614610746578063b3c11d3a14610771578063b88d4fde1461079a578063bbb79262146107c3578063c6275255146107ee5761023b565b80638da5cb5b116100f25780638da5cb5b1461068f57806395d89b41146106ba578063a0712d68146106e5578063a22cb46514610701578063ad7f1ea11461072a5761023b565b8063777cd981146105d05780637cb64759146105fb5780637db5a6361461062457806384054d3d146106615780638456cb59146106785761023b565b80633f4ba83a116101bc5780635d56d55e116101805780635d56d55e146104ed5780636352211e1461051657806370a0823114610553578063715018a614610590578063717d57d3146105a75761023b565b80633f4ba83a1461041e57806342842e0e146104355780634f6ccce71461045e578063547520fe1461049b57806355f804b3146104c45761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632eb4a7ab1461038b5780632f745c59146103b657806330a0ef06146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630e2d56cf1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c46565b610922565b60405161027491906142fa565b60405180910390f35b34801561028957600080fd5b50610292610a6c565b60405161029f9190614330565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613ced565b610afe565b6040516102dc9190614293565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613b4c565b610b83565b005b34801561031a57600080fd5b5061033560048036038101906103309190613bec565b610c9c565b005b34801561034357600080fd5b5061034c610d35565b60405161035991906146d2565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613a36565b610d3f565b005b34801561039757600080fd5b506103a0610d4f565b6040516103ad9190614315565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613b4c565b610d55565b6040516103ea91906146d2565b60405180910390f35b3480156103ff57600080fd5b50610408610f53565b60405161041591906142fa565b60405180910390f35b34801561042a57600080fd5b50610433610f6a565b005b34801561044157600080fd5b5061045c60048036038101906104579190613a36565b611003565b005b34801561046a57600080fd5b5061048560048036038101906104809190613ced565b611023565b60405161049291906146d2565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190613ced565b611076565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613ca0565b6110fc565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613bec565b61118e565b005b34801561052257600080fd5b5061053d60048036038101906105389190613ced565b611227565b60405161054a9190614293565b60405180910390f35b34801561055f57600080fd5b5061057a600480360381019061057591906139c9565b61123d565b60405161058791906146d2565b60405180910390f35b34801561059c57600080fd5b506105a5611326565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613ced565b6113ae565b005b3480156105dc57600080fd5b506105e5611434565b6040516105f291906142fa565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190613c19565b611447565b005b34801561063057600080fd5b5061064b600480360381019061064691906139c9565b6114cd565b60405161065891906146d2565b60405180910390f35b34801561066d57600080fd5b506106766114e5565b005b34801561068457600080fd5b5061068d6115cc565b005b34801561069b57600080fd5b506106a4611665565b6040516106b19190614293565b60405180910390f35b3480156106c657600080fd5b506106cf61168e565b6040516106dc9190614330565b60405180910390f35b6106ff60048036038101906106fa9190613ced565b611720565b005b34801561070d57600080fd5b5061072860048036038101906107239190613b0c565b6119ee565b005b610744600480360381019061073f9190613b8c565b611b6f565b005b34801561075257600080fd5b5061075b611fd6565b60405161076891906142fa565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d1a565b611fe9565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190613a89565b612078565b005b3480156107cf57600080fd5b506107d86120d4565b6040516107e591906142fa565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613ced565b6120e7565b005b34801561082357600080fd5b5061083e600480360381019061083991906139c9565b61216d565b60405161084b9190614293565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190613ced565b612234565b6040516108889190614330565b60405180910390f35b34801561089d57600080fd5b506108a66122db565b6040516108b391906146d2565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de91906139f6565b6122e1565b6040516108f091906142fa565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b91906139c9565b612375565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a655750610a648261246d565b5b9050919050565b606060028054610a7b90614a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa790614a2b565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b5050505050905090565b6000610b09826124d7565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90614652565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8e82611227565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690614552565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1e6124e5565b73ffffffffffffffffffffffffffffffffffffffff161480610c4d5750610c4c81610c476124e5565b6122e1565b5b610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390614452565b60405180910390fd5b610c978383836124ed565b505050565b610ca46124e5565b73ffffffffffffffffffffffffffffffffffffffff16610cc2611665565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906144d2565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000600154905090565b610d4a83838361259f565b505050565b600f5481565b6000610d608361123d565b8210610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9890614352565b60405180910390fd5b6000610dab610d35565b905060008060005b83811015610f11576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ea557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efd5786841415610eee578195505050505050610f4d565b8380610ef990614a8e565b9450505b508080610f0990614a8e565b915050610db3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f44906145f2565b60405180910390fd5b92915050565b6000600c60019054906101000a900460ff16905090565b610f726124e5565b73ffffffffffffffffffffffffffffffffffffffff16610f90611665565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906144d2565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b61101e83838360405180602001604052806000815250612078565b505050565b600061102d610d35565b821061106e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611065906143d2565b60405180910390fd5b819050919050565b61107e6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661109c611665565b73ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906144d2565b60405180910390fd5b80600d8190555050565b6111046124e5565b73ffffffffffffffffffffffffffffffffffffffff16611122611665565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f906144d2565b60405180910390fd5b81816012919061118992919061373d565b505050565b6111966124e5565b73ffffffffffffffffffffffffffffffffffffffff166111b4611665565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611201906144d2565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600061123282612b58565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590614492565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61132e6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661134c611665565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906144d2565b60405180910390fd5b6113ac6000612d5b565b565b6113b66124e5565b73ffffffffffffffffffffffffffffffffffffffff166113d4611665565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906144d2565b60405180910390fd5b80600b8190555050565b600c60009054906101000a900460ff1681565b61144f6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661146d611665565b73ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906144d2565b60405180910390fd5b80600f8190555050565b60106020528060005260406000206000915090505481565b6114ed6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661150b611665565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906144d2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156115c9573d6000803e3d6000fd5b50565b6115d46124e5565b73ffffffffffffffffffffffffffffffffffffffff166115f2611665565b73ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906144d2565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461169d90614a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546116c990614a2b565b80156117165780601f106116eb57610100808354040283529160200191611716565b820191906000526020600020905b8154815290600101906020018083116116f957829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890614432565b60405180910390fd5b600081118015611782575060028111155b6117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890614612565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906143b2565b60405180910390fd5b600c60019054906101000a900460ff1615611899573481600a546118539190614853565b1115611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90614412565b60405180910390fd5b6118ea565b3481600b546118a89190614853565b11156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614412565b60405180910390fd5b5b6001600d546118f991906147cc565b81611902610d35565b61190c91906147cc565b111561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614692565b60405180910390fd5b600c60019054906101000a900460ff1661199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614432565b60405180910390fd5b60028211156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790614672565b60405180910390fd5b6119ea3383612e1f565b5050565b6119f66124e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614512565b60405180910390fd5b8060076000611a716124e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b1e6124e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6391906142fa565b60405180910390a35050565b80601160009054906101000a900460ff1615611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614432565b60405180910390fd5b600081118015611bd1575060028111155b611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614612565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c75906143b2565b60405180910390fd5b600c60019054906101000a900460ff1615611ce8573481600a54611ca29190614853565b1115611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90614412565b60405180910390fd5b611d39565b3481600b54611cf79190614853565b1115611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614412565b60405180910390fd5b5b6001600d54611d4891906147cc565b81611d51610d35565b611d5b91906147cc565b1115611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614692565b60405180910390fd5b600c60009054906101000a900460ff16611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614572565b60405180910390fd5b6001821115611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2690614672565b60405180910390fd5b600182601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e7c91906147cc565b1115611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490614472565b60405180910390fd5b611f31848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5433604051602001611f169190614228565b60405160208183030381529060405280519060200120612e3d565b611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906146b2565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fbf91906147cc565b92505081905550611fd03383612e1f565b50505050565b601160009054906101000a900460ff1681565b611ff16124e5565b73ffffffffffffffffffffffffffffffffffffffff1661200f611665565b73ffffffffffffffffffffffffffffffffffffffff1614612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906144d2565b60405180910390fd5b612075338263ffffffff16612e1f565b50565b61208384848461259f565b61208f84848484612e54565b6120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614592565b60405180910390fd5b50505050565b600c60019054906101000a900460ff1681565b6120ef6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661210d611665565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a906144d2565b60405180910390fd5b80600a8190555050565b60006121776124e5565b73ffffffffffffffffffffffffffffffffffffffff16612195611665565b73ffffffffffffffffffffffffffffffffffffffff16146121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e2906144d2565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061223f826124d7565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906144f2565b60405180910390fd5b6000612288612feb565b905060008151116122a857604051806020016040528060008152506122d3565b806122b28461307d565b6040516020016122c392919061426f565b6040516020818303038152906040525b915050919050565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61237d6124e5565b73ffffffffffffffffffffffffffffffffffffffff1661239b611665565b73ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614372565b60405180910390fd5b61246a81612d5b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125aa82612b58565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125d16124e5565b73ffffffffffffffffffffffffffffffffffffffff16148061262d57506125f66124e5565b73ffffffffffffffffffffffffffffffffffffffff1661261584610afe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612649575061264882600001516126436124e5565b6122e1565b5b90508061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614532565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906144b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561276d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612764906143f2565b60405180910390fd5b61277a85858560016131de565b61278a60008484600001516124ed565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127f891906148ad565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661289c9190614786565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129a291906147cc565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ae857612a18816124d7565b15612ae7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b5086868660016131e4565b505050505050565b612b606137c3565b612b69826124d7565b612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614392565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000028310612c0c5760017f000000000000000000000000000000000000000000000000000000000000000284612bff91906148e1565b612c0991906147cc565b90505b60008390505b818110612d1a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d0657809350505050612d56565b508080612d1290614a01565b915050612c12565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90614632565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e398282604051806020016040528060008152506131ea565b5050565b600082612e4a8584613667565b1490509392505050565b6000612e758473ffffffffffffffffffffffffffffffffffffffff1661371a565b15612fde578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9e6124e5565b8786866040518563ffffffff1660e01b8152600401612ec094939291906142ae565b602060405180830381600087803b158015612eda57600080fd5b505af1925050508015612f0b57506040513d601f19601f82011682018060405250810190612f089190613c73565b60015b612f8e573d8060008114612f3b576040519150601f19603f3d011682016040523d82523d6000602084013e612f40565b606091505b50600081511415612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d90614592565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe3565b600190505b949350505050565b606060128054612ffa90614a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461302690614a2b565b80156130735780601f1061304857610100808354040283529160200191613073565b820191906000526020600020905b81548152906001019060200180831161305657829003601f168201915b5050505050905090565b606060008214156130c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d9565b600082905060005b600082146130f75780806130e090614a8e565b915050600a826130f09190614822565b91506130cd565b60008167ffffffffffffffff81111561311357613112614bf2565b5b6040519080825280601f01601f1916602001820160405280156131455781602001600182028036833780820191505090505b5090505b600085146131d25760018261315e91906148e1565b9150600a8561316d9190614b05565b603061317991906147cc565b60f81b81838151811061318f5761318e614bc3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131cb9190614822565b9450613149565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613261576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613258906145d2565b60405180910390fd5b61326a816124d7565b156132aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a1906145b2565b60405180910390fd5b6132b760008583866131de565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133b49190614786565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133db9190614786565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561364a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ea6000888488612e54565b613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614592565b60405180910390fd5b818061363490614a8e565b925050808061364290614a8e565b915050613579565b508060018190555061365f60008785886131e4565b505050505050565b60008082905060005b845181101561370f57600085828151811061368e5761368d614bc3565b5b602002602001015190508083116136cf5782816040516020016136b2929190614243565b6040516020818303038152906040528051906020012092506136fb565b80836040516020016136e2929190614243565b6040516020818303038152906040528051906020012092505b50808061370790614a8e565b915050613670565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461374990614a2b565b90600052602060002090601f01602090048101928261376b57600085556137b2565b82601f1061378457803560ff19168380011785556137b2565b828001600101855582156137b2579182015b828111156137b1578235825591602001919060010190613796565b5b5090506137bf91906137fd565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156138165760008160009055506001016137fe565b5090565b600061382d61382884614712565b6146ed565b90508281526020810184848401111561384957613848614c30565b5b6138548482856149bf565b509392505050565b60008135905061386b81615339565b92915050565b60008083601f84011261388757613886614c26565b5b8235905067ffffffffffffffff8111156138a4576138a3614c21565b5b6020830191508360208202830111156138c0576138bf614c2b565b5b9250929050565b6000813590506138d681615350565b92915050565b6000813590506138eb81615367565b92915050565b6000813590506139008161537e565b92915050565b6000815190506139158161537e565b92915050565b600082601f8301126139305761392f614c26565b5b813561394084826020860161381a565b91505092915050565b60008083601f84011261395f5761395e614c26565b5b8235905067ffffffffffffffff81111561397c5761397b614c21565b5b60208301915083600182028301111561399857613997614c2b565b5b9250929050565b6000813590506139ae81615395565b92915050565b6000813590506139c3816153ac565b92915050565b6000602082840312156139df576139de614c3a565b5b60006139ed8482850161385c565b91505092915050565b60008060408385031215613a0d57613a0c614c3a565b5b6000613a1b8582860161385c565b9250506020613a2c8582860161385c565b9150509250929050565b600080600060608486031215613a4f57613a4e614c3a565b5b6000613a5d8682870161385c565b9350506020613a6e8682870161385c565b9250506040613a7f8682870161399f565b9150509250925092565b60008060008060808587031215613aa357613aa2614c3a565b5b6000613ab18782880161385c565b9450506020613ac28782880161385c565b9350506040613ad38782880161399f565b925050606085013567ffffffffffffffff811115613af457613af3614c35565b5b613b008782880161391b565b91505092959194509250565b60008060408385031215613b2357613b22614c3a565b5b6000613b318582860161385c565b9250506020613b42858286016138c7565b9150509250929050565b60008060408385031215613b6357613b62614c3a565b5b6000613b718582860161385c565b9250506020613b828582860161399f565b9150509250929050565b600080600060408486031215613ba557613ba4614c3a565b5b600084013567ffffffffffffffff811115613bc357613bc2614c35565b5b613bcf86828701613871565b93509350506020613be28682870161399f565b9150509250925092565b600060208284031215613c0257613c01614c3a565b5b6000613c10848285016138c7565b91505092915050565b600060208284031215613c2f57613c2e614c3a565b5b6000613c3d848285016138dc565b91505092915050565b600060208284031215613c5c57613c5b614c3a565b5b6000613c6a848285016138f1565b91505092915050565b600060208284031215613c8957613c88614c3a565b5b6000613c9784828501613906565b91505092915050565b60008060208385031215613cb757613cb6614c3a565b5b600083013567ffffffffffffffff811115613cd557613cd4614c35565b5b613ce185828601613949565b92509250509250929050565b600060208284031215613d0357613d02614c3a565b5b6000613d118482850161399f565b91505092915050565b600060208284031215613d3057613d2f614c3a565b5b6000613d3e848285016139b4565b91505092915050565b613d5081614915565b82525050565b613d67613d6282614915565b614ad7565b82525050565b613d7681614927565b82525050565b613d8581614933565b82525050565b613d9c613d9782614933565b614ae9565b82525050565b6000613dad82614743565b613db78185614759565b9350613dc78185602086016149ce565b613dd081614c3f565b840191505092915050565b6000613de68261474e565b613df0818561476a565b9350613e008185602086016149ce565b613e0981614c3f565b840191505092915050565b6000613e1f8261474e565b613e29818561477b565b9350613e398185602086016149ce565b80840191505092915050565b6000613e5260228361476a565b9150613e5d82614c5d565b604082019050919050565b6000613e7560268361476a565b9150613e8082614cac565b604082019050919050565b6000613e98602a8361476a565b9150613ea382614cfb565b604082019050919050565b6000613ebb60118361476a565b9150613ec682614d4a565b602082019050919050565b6000613ede60238361476a565b9150613ee982614d73565b604082019050919050565b6000613f0160258361476a565b9150613f0c82614dc2565b604082019050919050565b6000613f2460128361476a565b9150613f2f82614e11565b602082019050919050565b6000613f4760108361476a565b9150613f5282614e3a565b602082019050919050565b6000613f6a60398361476a565b9150613f7582614e63565b604082019050919050565b6000613f8d60158361476a565b9150613f9882614eb2565b602082019050919050565b6000613fb0602b8361476a565b9150613fbb82614edb565b604082019050919050565b6000613fd360268361476a565b9150613fde82614f2a565b604082019050919050565b6000613ff660208361476a565b915061400182614f79565b602082019050919050565b6000614019602f8361476a565b915061402482614fa2565b604082019050919050565b600061403c601a8361476a565b915061404782614ff1565b602082019050919050565b600061405f60328361476a565b915061406a8261501a565b604082019050919050565b600061408260228361476a565b915061408d82615069565b604082019050919050565b60006140a5601f8361476a565b91506140b0826150b8565b602082019050919050565b60006140c860338361476a565b91506140d3826150e1565b604082019050919050565b60006140eb601d8361476a565b91506140f682615130565b602082019050919050565b600061410e60218361476a565b915061411982615159565b604082019050919050565b6000614131602e8361476a565b915061413c826151a8565b604082019050919050565b600061415460178361476a565b915061415f826151f7565b602082019050919050565b6000614177602f8361476a565b915061418282615220565b604082019050919050565b600061419a602d8361476a565b91506141a58261526f565b604082019050919050565b60006141bd60188361476a565b91506141c8826152be565b602082019050919050565b60006141e060098361476a565b91506141eb826152e7565b602082019050919050565b600061420360188361476a565b915061420e82615310565b602082019050919050565b614222816149a5565b82525050565b60006142348284613d56565b60148201915081905092915050565b600061424f8285613d8b565b60208201915061425f8284613d8b565b6020820191508190509392505050565b600061427b8285613e14565b91506142878284613e14565b91508190509392505050565b60006020820190506142a86000830184613d47565b92915050565b60006080820190506142c36000830187613d47565b6142d06020830186613d47565b6142dd6040830185614219565b81810360608301526142ef8184613da2565b905095945050505050565b600060208201905061430f6000830184613d6d565b92915050565b600060208201905061432a6000830184613d7c565b92915050565b6000602082019050818103600083015261434a8184613ddb565b905092915050565b6000602082019050818103600083015261436b81613e45565b9050919050565b6000602082019050818103600083015261438b81613e68565b9050919050565b600060208201905081810360008301526143ab81613e8b565b9050919050565b600060208201905081810360008301526143cb81613eae565b9050919050565b600060208201905081810360008301526143eb81613ed1565b9050919050565b6000602082019050818103600083015261440b81613ef4565b9050919050565b6000602082019050818103600083015261442b81613f17565b9050919050565b6000602082019050818103600083015261444b81613f3a565b9050919050565b6000602082019050818103600083015261446b81613f5d565b9050919050565b6000602082019050818103600083015261448b81613f80565b9050919050565b600060208201905081810360008301526144ab81613fa3565b9050919050565b600060208201905081810360008301526144cb81613fc6565b9050919050565b600060208201905081810360008301526144eb81613fe9565b9050919050565b6000602082019050818103600083015261450b8161400c565b9050919050565b6000602082019050818103600083015261452b8161402f565b9050919050565b6000602082019050818103600083015261454b81614052565b9050919050565b6000602082019050818103600083015261456b81614075565b9050919050565b6000602082019050818103600083015261458b81614098565b9050919050565b600060208201905081810360008301526145ab816140bb565b9050919050565b600060208201905081810360008301526145cb816140de565b9050919050565b600060208201905081810360008301526145eb81614101565b9050919050565b6000602082019050818103600083015261460b81614124565b9050919050565b6000602082019050818103600083015261462b81614147565b9050919050565b6000602082019050818103600083015261464b8161416a565b9050919050565b6000602082019050818103600083015261466b8161418d565b9050919050565b6000602082019050818103600083015261468b816141b0565b9050919050565b600060208201905081810360008301526146ab816141d3565b9050919050565b600060208201905081810360008301526146cb816141f6565b9050919050565b60006020820190506146e76000830184614219565b92915050565b60006146f7614708565b90506147038282614a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561472d5761472c614bf2565b5b61473682614c3f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061479182614969565b915061479c83614969565b9250826fffffffffffffffffffffffffffffffff038211156147c1576147c0614b36565b5b828201905092915050565b60006147d7826149a5565b91506147e2836149a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481757614816614b36565b5b828201905092915050565b600061482d826149a5565b9150614838836149a5565b92508261484857614847614b65565b5b828204905092915050565b600061485e826149a5565b9150614869836149a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a2576148a1614b36565b5b828202905092915050565b60006148b882614969565b91506148c383614969565b9250828210156148d6576148d5614b36565b5b828203905092915050565b60006148ec826149a5565b91506148f7836149a5565b92508282101561490a57614909614b36565b5b828203905092915050565b600061492082614985565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156149ec5780820151818401526020810190506149d1565b838111156149fb576000848401525b50505050565b6000614a0c826149a5565b91506000821415614a2057614a1f614b36565b5b600182039050919050565b60006002820490506001821680614a4357607f821691505b60208210811415614a5757614a56614b94565b5b50919050565b614a6682614c3f565b810181811067ffffffffffffffff82111715614a8557614a84614bf2565b5b80604052505050565b6000614a99826149a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614acc57614acb614b36565b5b600182019050919050565b6000614ae282614af3565b9050919050565b6000819050919050565b6000614afe82614c50565b9050919050565b6000614b10826149a5565b9150614b1b836149a5565b925082614b2b57614b2a614b65565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d6178696d756d206c696d697420726561636865640000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e7420686173206e6f7420737461727465642100600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f457863656564207472616e73616374696f6e206c696d69740000000000000000600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4e6f7420656c696769626c6520666f722070726573616c650000000000000000600082015250565b61534281614915565b811461534d57600080fd5b50565b61535981614927565b811461536457600080fd5b50565b61537081614933565b811461537b57600080fd5b50565b6153878161493d565b811461539257600080fd5b50565b61539e816149a5565b81146153a957600080fd5b50565b6153b5816149af565b81146153c057600080fd5b5056fea26469706673582212208cdc3a73172c17f80270cf73025f5dc0e37efc3524c67ea69ec0f824356ac4dd64736f6c63430008070033

Deployed Bytecode Sourcemap

29835:3772:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15760:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17486:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19011:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18574:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30755:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14321:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19861:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30323:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14952:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30864:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31059:73;;;;;;;;;;;;;:::i;:::-;;20066:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14484:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33283:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33384:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30640:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17309:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16186:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3875:103;;;;;;;;;;;;;:::i;:::-;;31140:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29998:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33183:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30361:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32840:103;;;;;;;;;;;;;:::i;:::-;;30981:70;;;;;;;;;;;;;:::i;:::-;;3652:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17641:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31964:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19279:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32220:612;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30426:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33082:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20286:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30047:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31250:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32951:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17802:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24704:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19616:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3986:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15760:370;15887:4;15932:25;15917:40;;;:11;:40;;;;:99;;;;15983:33;15968:48;;;:11;:48;;;;15917:99;:160;;;;16042:35;16027:50;;;:11;:50;;;;15917:160;:207;;;;16088:36;16112:11;16088:23;:36::i;:::-;15917:207;15903:221;;15760:370;;;:::o;17486:94::-;17540:13;17569:5;17562:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17486:94;:::o;19011:204::-;19079:7;19103:16;19111:7;19103;:16::i;:::-;19095:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19185:15;:24;19201:7;19185:24;;;;;;;;;;;;;;;;;;;;;19178:31;;19011:204;;;:::o;18574:379::-;18643:13;18659:24;18675:7;18659:15;:24::i;:::-;18643:40;;18704:5;18698:11;;:2;:11;;;;18690:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18789:5;18773:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;18798:37;18815:5;18822:12;:10;:12::i;:::-;18798:16;:37::i;:::-;18773:62;18757:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;18919:28;18928:2;18932:7;18941:5;18919:8;:28::i;:::-;18636:317;18574:379;;:::o;30755:101::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30843:5:::1;30821:19;;:27;;;;;;;;;;;;;;;;;;30755:101:::0;:::o;14321:94::-;14374:7;14397:12;;14390:19;;14321:94;:::o;19861:142::-;19969:28;19979:4;19985:2;19989:7;19969:9;:28::i;:::-;19861:142;;;:::o;30323:31::-;;;;:::o;14952:744::-;15061:7;15096:16;15106:5;15096:9;:16::i;:::-;15088:5;:24;15080:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15158:22;15183:13;:11;:13::i;:::-;15158:38;;15203:19;15233:25;15283:9;15278:350;15302:14;15298:1;:18;15278:350;;;15332:31;15366:11;:14;15378:1;15366:14;;;;;;;;;;;15332:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15419:1;15393:28;;:9;:14;;;:28;;;15389:89;;15454:9;:14;;;15434:34;;15389:89;15511:5;15490:26;;:17;:26;;;15486:135;;;15548:5;15533:11;:20;15529:59;;;15575:1;15568:8;;;;;;;;;15529:59;15598:13;;;;;:::i;:::-;;;;15486:135;15323:305;15318:3;;;;;:::i;:::-;;;;15278:350;;;;15634:56;;;;;;;;;;:::i;:::-;;;;;;;;14952:744;;;;;:::o;30864:109::-;30922:4;30946:19;;;;;;;;;;;30939:26;;30864:109;:::o;31059:73::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31119:5:::1;31108:8;;:16;;;;;;;;;;;;;;;;;;31059:73::o:0;20066:157::-;20178:39;20195:4;20201:2;20205:7;20178:39;;;;;;;;;;;;:16;:39::i;:::-;20066:157;;;:::o;14484:177::-;14551:7;14583:13;:11;:13::i;:::-;14575:5;:21;14567:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14650:5;14643:12;;14484:177;;;:::o;33283:93::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33361:7:::1;33350:8;:18;;;;33283:93:::0;:::o;33384:102::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33471:7:::1;;33459:9;:19;;;;;;;:::i;:::-;;33384:102:::0;;:::o;30640:107::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30734:5:::1;30709:22;;:30;;;;;;;;;;;;;;;;;;30640:107:::0;:::o;17309:118::-;17373:7;17396:20;17408:7;17396:11;:20::i;:::-;:25;;;17389:32;;17309:118;;;:::o;16186:211::-;16250:7;16291:1;16274:19;;:5;:19;;;;16266:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16363:12;:19;16376:5;16363:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;16355:36;;16348:43;;16186:211;;;:::o;3875:103::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3940:30:::1;3967:1;3940:18;:30::i;:::-;3875:103::o:0;31140:102::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31229:5:::1;31213:13;:21;;;;31140:102:::0;:::o;29998:42::-;;;;;;;;;;;;;:::o;33183:92::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33263:4:::1;33250:10;:17;;;;33183:92:::0;:::o;30361:58::-;;;;;;;;;;;;;;;;;:::o;32840:103::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32897:5:::1;;;;;;;;;;;32889:23;;:46;32913:21;32889:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32840:103::o:0;30981:70::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31039:4:::1;31028:8;;:15;;;;;;;;;;;;;;;;;;30981:70::o:0;3652:87::-;3698:7;3725:6;;;;;;;;;;;3718:13;;3652:87;:::o;17641:98::-;17697:13;17726:7;17719:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17641:98;:::o;31964:248::-;32021:6;31415:8;;;;;;;;;;;31414:9;31406:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31476:1;31463:10;:14;:50;;;;;30204:1;31481:10;:32;;31463:50;31455:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31574:9;31560:23;;:10;:23;;;31552:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31644:19;;;;;;;;;;;31640:224;;;31717:9;31703:10;31688:12;;:25;;;;:::i;:::-;:38;;31680:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31640:224;;;31820:9;31806:10;31790:13;;:26;;;;:::i;:::-;:39;;31782:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31640:224;31921:1;31912:8;;:10;;;;:::i;:::-;31898;31882:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;31874:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32048:19:::1;;;;;;;;;;;32040:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30204:1;32107:6;:28;;32099:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32175:29;32185:10;32197:6;32175:9;:29::i;:::-;31964:248:::0;;:::o;19279:274::-;19382:12;:10;:12::i;:::-;19370:24;;:8;:24;;;;19362:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19479:8;19434:18;:32;19453:12;:10;:12::i;:::-;19434:32;;;;;;;;;;;;;;;:42;19467:8;19434:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19528:8;19499:48;;19514:12;:10;:12::i;:::-;19499:48;;;19538:8;19499:48;;;;;;:::i;:::-;;;;;;;;19279:274;;:::o;32220:612::-;32310:6;31415:8;;;;;;;;;;;31414:9;31406:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31476:1;31463:10;:14;:50;;;;;30204:1;31481:10;:32;;31463:50;31455:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31574:9;31560:23;;:10;:23;;;31552:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31644:19;;;;;;;;;;;31640:224;;;31717:9;31703:10;31688:12;;:25;;;;:::i;:::-;:38;;31680:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31640:224;;;31820:9;31806:10;31790:13;;:26;;;;:::i;:::-;:39;;31782:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31640:224;31921:1;31912:8;;:10;;;;:::i;:::-;31898;31882:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;31874:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32337:22:::1;;;;;;;;;;;32329:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30150:1;32414:6;:37;;32406:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30150:1;32537:6;32499:23;:35;32523:10;32499:35;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:75;;32491:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:78;32638:5;;32619:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32645:10;;32684;32667:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;32657:39;;;;;;32619:18;:78::i;:::-;32611:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;32778:6;32739:23;:35;32763:10;32739:35;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;32795:29;32805:10;32817:6;32795:9;:29::i;:::-;32220:612:::0;;;;:::o;30426:28::-;;;;;;;;;;;;;:::o;33082:93::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33141:26:::1;33151:10;33163:3;33141:26;;:9;:26::i;:::-;33082:93:::0;:::o;20286:311::-;20423:28;20433:4;20439:2;20443:7;20423:9;:28::i;:::-;20474:48;20497:4;20503:2;20507:7;20516:5;20474:22;:48::i;:::-;20458:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;20286:311;;;;:::o;30047:39::-;;;;;;;;;;;;;:::o;31250:98::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31335:5:::1;31320:12;:20;;;;31250:98:::0;:::o;32951:123::-;33012:7;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33040:4:::1;33032:5;;:12;;;;;;;;;;;;;;;;;;33062:4;33055:11;;32951:123:::0;;;:::o;17802:394::-;17900:13;17941:16;17949:7;17941;:16::i;:::-;17925:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;18031:21;18055:10;:8;:10::i;:::-;18031:34;;18110:1;18092:7;18086:21;:25;:104;;;;;;;;;;;;;;;;;18147:7;18156:18;:7;:16;:18::i;:::-;18130:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18086:104;18072:118;;;17802:394;;;:::o;24704:43::-;;;;:::o;19616:186::-;19738:4;19761:18;:25;19780:5;19761:25;;;;;;;;;;;;;;;:35;19787:8;19761:35;;;;;;;;;;;;;;;;;;;;;;;;;19754:42;;19616:186;;;;:::o;3986:201::-;3798:12;:10;:12::i;:::-;3787:23;;:7;:5;:7::i;:::-;:23;;;3779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4095:1:::1;4075:22;;:8;:22;;;;4067:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4151:28;4170:8;4151:18;:28::i;:::-;3986:201:::0;:::o;9299:157::-;9384:4;9423:25;9408:40;;;:11;:40;;;;9401:47;;9299:157;;;:::o;20836:105::-;20893:4;20923:12;;20913:7;:22;20906:29;;20836:105;;;:::o;3130:98::-;3183:7;3210:10;3203:17;;3130:98;:::o;24526:172::-;24650:2;24623:15;:24;24639:7;24623:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24684:7;24680:2;24664:28;;24673:5;24664:28;;;;;;;;;;;;24526:172;;;:::o;22891:1529::-;22988:35;23026:20;23038:7;23026:11;:20::i;:::-;22988:58;;23055:22;23097:13;:18;;;23081:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;23150:12;:10;:12::i;:::-;23126:36;;:20;23138:7;23126:11;:20::i;:::-;:36;;;23081:81;:142;;;;23173:50;23190:13;:18;;;23210:12;:10;:12::i;:::-;23173:16;:50::i;:::-;23081:142;23055:169;;23249:17;23233:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23381:4;23359:26;;:13;:18;;;:26;;;23343:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;23470:1;23456:16;;:2;:16;;;;23448:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23523:43;23545:4;23551:2;23555:7;23564:1;23523:21;:43::i;:::-;23623:49;23640:1;23644:7;23653:13;:18;;;23623:8;:49::i;:::-;23711:1;23681:12;:18;23694:4;23681:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23747:1;23719:12;:16;23732:2;23719:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23778:43;;;;;;;;23793:2;23778:43;;;;;;23804:15;23778:43;;;;;23755:11;:20;23767:7;23755:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24049:19;24081:1;24071:7;:11;;;;:::i;:::-;24049:33;;24134:1;24093:43;;:11;:24;24105:11;24093:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;24089:236;;;24151:20;24159:11;24151:7;:20::i;:::-;24147:171;;;24211:97;;;;;;;;24238:13;:18;;;24211:97;;;;;;24269:13;:28;;;24211:97;;;;;24184:11;:24;24196:11;24184:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24147:171;24089:236;24357:7;24353:2;24338:27;;24347:4;24338:27;;;;;;;;;;;;24372:42;24393:4;24399:2;24403:7;24412:1;24372:20;:42::i;:::-;22981:1439;;;22891:1529;;;:::o;16649:606::-;16725:21;;:::i;:::-;16766:16;16774:7;16766;:16::i;:::-;16758:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16838:26;16886:12;16875:7;:23;16871:93;;16955:1;16940:12;16930:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;16909:47;;16871:93;16977:12;16992:7;16977:22;;16972:212;17009:18;17001:4;:26;16972:212;;17046:31;17080:11;:17;17092:4;17080:17;;;;;;;;;;;17046:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17136:1;17110:28;;:9;:14;;;:28;;;17106:71;;17158:9;17151:16;;;;;;;17106:71;17037:147;17029:6;;;;;:::i;:::-;;;;16972:212;;;;17192:57;;;;;;;;;;:::i;:::-;;;;;;;;16649:606;;;;:::o;4195:191::-;4269:16;4288:6;;;;;;;;;;;4269:25;;4314:8;4305:6;;:17;;;;;;;;;;;;;;;;;;4369:8;4338:40;;4359:8;4338:40;;;;;;;;;;;;4258:128;4195:191;:::o;20947:98::-;21012:27;21022:2;21026:8;21012:27;;;;;;;;;;;;:9;:27::i;:::-;20947:98;;:::o;28496:190::-;28621:4;28674;28645:25;28658:5;28665:4;28645:12;:25::i;:::-;:33;28638:40;;28496:190;;;;;:::o;26241:690::-;26378:4;26395:15;:2;:13;;;:15::i;:::-;26391:535;;;26450:2;26434:36;;;26471:12;:10;:12::i;:::-;26485:4;26491:7;26500:5;26434:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26421:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26682:1;26665:6;:13;:18;26661:215;;;26698:61;;;;;;;;;;:::i;:::-;;;;;;;;26661:215;26844:6;26838:13;26829:6;26825:2;26821:15;26814:38;26421:464;26566:45;;;26556:55;;;:6;:55;;;;26549:62;;;;;26391:535;26914:4;26907:11;;26241:690;;;;;;;:::o;33494:110::-;33554:13;33587:9;33580:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33494:110;:::o;1685:532::-;1741:13;1780:1;1771:5;:10;1767:53;;;1798:10;;;;;;;;;;;;;;;;;;;;;1767:53;1830:12;1845:5;1830:20;;1861:14;1886:78;1901:1;1893:4;:9;1886:78;;1919:8;;;;;:::i;:::-;;;;1950:2;1942:10;;;;;:::i;:::-;;;1886:78;;;1974:19;2006:6;1996:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:39;;2024:154;2040:1;2031:5;:10;2024:154;;2068:1;2058:11;;;;;:::i;:::-;;;2135:2;2127:5;:10;;;;:::i;:::-;2114:2;:24;;;;:::i;:::-;2101:39;;2084:6;2091;2084:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2164:2;2155:11;;;;;:::i;:::-;;;2024:154;;;2202:6;2188:21;;;;;1685:532;;;;:::o;27393:141::-;;;;;:::o;27920:140::-;;;;;:::o;21384:1275::-;21489:20;21512:12;;21489:35;;21553:1;21539:16;;:2;:16;;;;21531:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21730:21;21738:12;21730:7;:21::i;:::-;21729:22;21721:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21875:61;21905:1;21909:2;21913:12;21927:8;21875:21;:61::i;:::-;21945:30;21978:12;:16;21991:2;21978:16;;;;;;;;;;;;;;;21945:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22020:119;;;;;;;;22070:8;22040:11;:19;;;:39;;;;:::i;:::-;22020:119;;;;;;22123:8;22088:11;:24;;;:44;;;;:::i;:::-;22020:119;;;;;22001:12;:16;22014:2;22001:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22174:43;;;;;;;;22189:2;22174:43;;;;;;22200:15;22174:43;;;;;22146:11;:25;22158:12;22146:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22226:20;22249:12;22226:35;;22275:9;22270:281;22294:8;22290:1;:12;22270:281;;;22348:12;22344:2;22323:38;;22340:1;22323:38;;;;;;;;;;;;22388:59;22419:1;22423:2;22427:12;22441:5;22388:22;:59::i;:::-;22370:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;22529:14;;;;;:::i;:::-;;;;22304:3;;;;;:::i;:::-;;;;22270:281;;;;22574:12;22559;:27;;;;22593:60;22622:1;22626:2;22630:12;22644:8;22593:20;:60::i;:::-;21482:1177;;;21384:1275;;;:::o;29048:701::-;29131:7;29151:20;29174:4;29151:27;;29194:9;29189:523;29213:5;:12;29209:1;:16;29189:523;;;29247:20;29270:5;29276:1;29270:8;;;;;;;;:::i;:::-;;;;;;;;29247:31;;29313:12;29297;:28;29293:408;;29467:12;29481;29450:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29440:55;;;;;;29425:70;;29293:408;;;29657:12;29671;29640:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29630:55;;;;;;29615:70;;29293:408;29232:480;29227:3;;;;;:::i;:::-;;;;29189:523;;;;29729:12;29722:19;;;29048:701;;;;:::o;4482:115::-;4542:4;4588:1;4566:7;:19;;;:23;4559:30;;4482:115;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2104:553::-;2162:8;2172:6;2222:3;2215:4;2207:6;2203:17;2199:27;2189:122;;2230:79;;:::i;:::-;2189:122;2343:6;2330:20;2320:30;;2373:18;2365:6;2362:30;2359:117;;;2395:79;;:::i;:::-;2359:117;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:128;;;2570:79;;:::i;:::-;2523:128;2104:553;;;;;:::o;2663:139::-;2709:5;2747:6;2734:20;2725:29;;2763:33;2790:5;2763:33;:::i;:::-;2663:139;;;;:::o;2808:137::-;2853:5;2891:6;2878:20;2869:29;;2907:32;2933:5;2907:32;:::i;:::-;2808:137;;;;:::o;2951:329::-;3010:6;3059:2;3047:9;3038:7;3034:23;3030:32;3027:119;;;3065:79;;:::i;:::-;3027:119;3185:1;3210:53;3255:7;3246:6;3235:9;3231:22;3210:53;:::i;:::-;3200:63;;3156:117;2951:329;;;;:::o;3286:474::-;3354:6;3362;3411:2;3399:9;3390:7;3386:23;3382:32;3379:119;;;3417:79;;:::i;:::-;3379:119;3537:1;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3508:117;3664:2;3690:53;3735:7;3726:6;3715:9;3711:22;3690:53;:::i;:::-;3680:63;;3635:118;3286:474;;;;;:::o;3766:619::-;3843:6;3851;3859;3908:2;3896:9;3887:7;3883:23;3879:32;3876:119;;;3914:79;;:::i;:::-;3876:119;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;4161:2;4187:53;4232:7;4223:6;4212:9;4208:22;4187:53;:::i;:::-;4177:63;;4132:118;4289:2;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4260:118;3766:619;;;;;:::o;4391:943::-;4486:6;4494;4502;4510;4559:3;4547:9;4538:7;4534:23;4530:33;4527:120;;;4566:79;;:::i;:::-;4527:120;4686:1;4711:53;4756:7;4747:6;4736:9;4732:22;4711:53;:::i;:::-;4701:63;;4657:117;4813:2;4839:53;4884:7;4875:6;4864:9;4860:22;4839:53;:::i;:::-;4829:63;;4784:118;4941:2;4967:53;5012:7;5003:6;4992:9;4988:22;4967:53;:::i;:::-;4957:63;;4912:118;5097:2;5086:9;5082:18;5069:32;5128:18;5120:6;5117:30;5114:117;;;5150:79;;:::i;:::-;5114:117;5255:62;5309:7;5300:6;5289:9;5285:22;5255:62;:::i;:::-;5245:72;;5040:287;4391:943;;;;;;;:::o;5340:468::-;5405:6;5413;5462:2;5450:9;5441:7;5437:23;5433:32;5430:119;;;5468:79;;:::i;:::-;5430:119;5588:1;5613:53;5658:7;5649:6;5638:9;5634:22;5613:53;:::i;:::-;5603:63;;5559:117;5715:2;5741:50;5783:7;5774:6;5763:9;5759:22;5741:50;:::i;:::-;5731:60;;5686:115;5340:468;;;;;:::o;5814:474::-;5882:6;5890;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;6192:2;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6163:118;5814:474;;;;;:::o;6294:704::-;6389:6;6397;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6608:1;6597:9;6593:17;6580:31;6638:18;6630:6;6627:30;6624:117;;;6660:79;;:::i;:::-;6624:117;6773:80;6845:7;6836:6;6825:9;6821:22;6773:80;:::i;:::-;6755:98;;;;6551:312;6902:2;6928:53;6973:7;6964:6;6953:9;6949:22;6928:53;:::i;:::-;6918:63;;6873:118;6294:704;;;;;:::o;7004:323::-;7060:6;7109:2;7097:9;7088:7;7084:23;7080:32;7077:119;;;7115:79;;:::i;:::-;7077:119;7235:1;7260:50;7302:7;7293:6;7282:9;7278:22;7260:50;:::i;:::-;7250:60;;7206:114;7004:323;;;;:::o;7333:329::-;7392:6;7441:2;7429:9;7420:7;7416:23;7412:32;7409:119;;;7447:79;;:::i;:::-;7409:119;7567:1;7592:53;7637:7;7628:6;7617:9;7613:22;7592:53;:::i;:::-;7582:63;;7538:117;7333:329;;;;:::o;7668:327::-;7726:6;7775:2;7763:9;7754:7;7750:23;7746:32;7743:119;;;7781:79;;:::i;:::-;7743:119;7901:1;7926:52;7970:7;7961:6;7950:9;7946:22;7926:52;:::i;:::-;7916:62;;7872:116;7668:327;;;;:::o;8001:349::-;8070:6;8119:2;8107:9;8098:7;8094:23;8090:32;8087:119;;;8125:79;;:::i;:::-;8087:119;8245:1;8270:63;8325:7;8316:6;8305:9;8301:22;8270:63;:::i;:::-;8260:73;;8216:127;8001:349;;;;:::o;8356:529::-;8427:6;8435;8484:2;8472:9;8463:7;8459:23;8455:32;8452:119;;;8490:79;;:::i;:::-;8452:119;8638:1;8627:9;8623:17;8610:31;8668:18;8660:6;8657:30;8654:117;;;8690:79;;:::i;:::-;8654:117;8803:65;8860:7;8851:6;8840:9;8836:22;8803:65;:::i;:::-;8785:83;;;;8581:297;8356:529;;;;;:::o;8891:329::-;8950:6;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:53;9195:7;9186:6;9175:9;9171:22;9150:53;:::i;:::-;9140:63;;9096:117;8891:329;;;;:::o;9226:327::-;9284:6;9333:2;9321:9;9312:7;9308:23;9304:32;9301:119;;;9339:79;;:::i;:::-;9301:119;9459:1;9484:52;9528:7;9519:6;9508:9;9504:22;9484:52;:::i;:::-;9474:62;;9430:116;9226:327;;;;:::o;9559:118::-;9646:24;9664:5;9646:24;:::i;:::-;9641:3;9634:37;9559:118;;:::o;9683:157::-;9788:45;9808:24;9826:5;9808:24;:::i;:::-;9788:45;:::i;:::-;9783:3;9776:58;9683:157;;:::o;9846:109::-;9927:21;9942:5;9927:21;:::i;:::-;9922:3;9915:34;9846:109;;:::o;9961:118::-;10048:24;10066:5;10048:24;:::i;:::-;10043:3;10036:37;9961:118;;:::o;10085:157::-;10190:45;10210:24;10228:5;10210:24;:::i;:::-;10190:45;:::i;:::-;10185:3;10178:58;10085:157;;:::o;10248:360::-;10334:3;10362:38;10394:5;10362:38;:::i;:::-;10416:70;10479:6;10474:3;10416:70;:::i;:::-;10409:77;;10495:52;10540:6;10535:3;10528:4;10521:5;10517:16;10495:52;:::i;:::-;10572:29;10594:6;10572:29;:::i;:::-;10567:3;10563:39;10556:46;;10338:270;10248:360;;;;:::o;10614:364::-;10702:3;10730:39;10763:5;10730:39;:::i;:::-;10785:71;10849:6;10844:3;10785:71;:::i;:::-;10778:78;;10865:52;10910:6;10905:3;10898:4;10891:5;10887:16;10865:52;:::i;:::-;10942:29;10964:6;10942:29;:::i;:::-;10937:3;10933:39;10926:46;;10706:272;10614:364;;;;:::o;10984:377::-;11090:3;11118:39;11151:5;11118:39;:::i;:::-;11173:89;11255:6;11250:3;11173:89;:::i;:::-;11166:96;;11271:52;11316:6;11311:3;11304:4;11297:5;11293:16;11271:52;:::i;:::-;11348:6;11343:3;11339:16;11332:23;;11094:267;10984:377;;;;:::o;11367:366::-;11509:3;11530:67;11594:2;11589:3;11530:67;:::i;:::-;11523:74;;11606:93;11695:3;11606:93;:::i;:::-;11724:2;11719:3;11715:12;11708:19;;11367:366;;;:::o;11739:::-;11881:3;11902:67;11966:2;11961:3;11902:67;:::i;:::-;11895:74;;11978:93;12067:3;11978:93;:::i;:::-;12096:2;12091:3;12087:12;12080:19;;11739:366;;;:::o;12111:::-;12253:3;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12350:93;12439:3;12350:93;:::i;:::-;12468:2;12463:3;12459:12;12452:19;;12111:366;;;:::o;12483:::-;12625:3;12646:67;12710:2;12705:3;12646:67;:::i;:::-;12639:74;;12722:93;12811:3;12722:93;:::i;:::-;12840:2;12835:3;12831:12;12824:19;;12483:366;;;:::o;12855:::-;12997:3;13018:67;13082:2;13077:3;13018:67;:::i;:::-;13011:74;;13094:93;13183:3;13094:93;:::i;:::-;13212:2;13207:3;13203:12;13196:19;;12855:366;;;:::o;13227:::-;13369:3;13390:67;13454:2;13449:3;13390:67;:::i;:::-;13383:74;;13466:93;13555:3;13466:93;:::i;:::-;13584:2;13579:3;13575:12;13568:19;;13227:366;;;:::o;13599:::-;13741:3;13762:67;13826:2;13821:3;13762:67;:::i;:::-;13755:74;;13838:93;13927:3;13838:93;:::i;:::-;13956:2;13951:3;13947:12;13940:19;;13599:366;;;:::o;13971:::-;14113:3;14134:67;14198:2;14193:3;14134:67;:::i;:::-;14127:74;;14210:93;14299:3;14210:93;:::i;:::-;14328:2;14323:3;14319:12;14312:19;;13971:366;;;:::o;14343:::-;14485:3;14506:67;14570:2;14565:3;14506:67;:::i;:::-;14499:74;;14582:93;14671:3;14582:93;:::i;:::-;14700:2;14695:3;14691:12;14684:19;;14343:366;;;:::o;14715:::-;14857:3;14878:67;14942:2;14937:3;14878:67;:::i;:::-;14871:74;;14954:93;15043:3;14954:93;:::i;:::-;15072:2;15067:3;15063:12;15056:19;;14715:366;;;:::o;15087:::-;15229:3;15250:67;15314:2;15309:3;15250:67;:::i;:::-;15243:74;;15326:93;15415:3;15326:93;:::i;:::-;15444:2;15439:3;15435:12;15428:19;;15087:366;;;:::o;15459:::-;15601:3;15622:67;15686:2;15681:3;15622:67;:::i;:::-;15615:74;;15698:93;15787:3;15698:93;:::i;:::-;15816:2;15811:3;15807:12;15800:19;;15459:366;;;:::o;15831:::-;15973:3;15994:67;16058:2;16053:3;15994:67;:::i;:::-;15987:74;;16070:93;16159:3;16070:93;:::i;:::-;16188:2;16183:3;16179:12;16172:19;;15831:366;;;:::o;16203:::-;16345:3;16366:67;16430:2;16425:3;16366:67;:::i;:::-;16359:74;;16442:93;16531:3;16442:93;:::i;:::-;16560:2;16555:3;16551:12;16544:19;;16203:366;;;:::o;16575:::-;16717:3;16738:67;16802:2;16797:3;16738:67;:::i;:::-;16731:74;;16814:93;16903:3;16814:93;:::i;:::-;16932:2;16927:3;16923:12;16916:19;;16575:366;;;:::o;16947:::-;17089:3;17110:67;17174:2;17169:3;17110:67;:::i;:::-;17103:74;;17186:93;17275:3;17186:93;:::i;:::-;17304:2;17299:3;17295:12;17288:19;;16947:366;;;:::o;17319:::-;17461:3;17482:67;17546:2;17541:3;17482:67;:::i;:::-;17475:74;;17558:93;17647:3;17558:93;:::i;:::-;17676:2;17671:3;17667:12;17660:19;;17319:366;;;:::o;17691:::-;17833:3;17854:67;17918:2;17913:3;17854:67;:::i;:::-;17847:74;;17930:93;18019:3;17930:93;:::i;:::-;18048:2;18043:3;18039:12;18032:19;;17691:366;;;:::o;18063:::-;18205:3;18226:67;18290:2;18285:3;18226:67;:::i;:::-;18219:74;;18302:93;18391:3;18302:93;:::i;:::-;18420:2;18415:3;18411:12;18404:19;;18063:366;;;:::o;18435:::-;18577:3;18598:67;18662:2;18657:3;18598:67;:::i;:::-;18591:74;;18674:93;18763:3;18674:93;:::i;:::-;18792:2;18787:3;18783:12;18776:19;;18435:366;;;:::o;18807:::-;18949:3;18970:67;19034:2;19029:3;18970:67;:::i;:::-;18963:74;;19046:93;19135:3;19046:93;:::i;:::-;19164:2;19159:3;19155:12;19148:19;;18807:366;;;:::o;19179:::-;19321:3;19342:67;19406:2;19401:3;19342:67;:::i;:::-;19335:74;;19418:93;19507:3;19418:93;:::i;:::-;19536:2;19531:3;19527:12;19520:19;;19179:366;;;:::o;19551:::-;19693:3;19714:67;19778:2;19773:3;19714:67;:::i;:::-;19707:74;;19790:93;19879:3;19790:93;:::i;:::-;19908:2;19903:3;19899:12;19892:19;;19551:366;;;:::o;19923:::-;20065:3;20086:67;20150:2;20145:3;20086:67;:::i;:::-;20079:74;;20162:93;20251:3;20162:93;:::i;:::-;20280:2;20275:3;20271:12;20264:19;;19923:366;;;:::o;20295:::-;20437:3;20458:67;20522:2;20517:3;20458:67;:::i;:::-;20451:74;;20534:93;20623:3;20534:93;:::i;:::-;20652:2;20647:3;20643:12;20636:19;;20295:366;;;:::o;20667:::-;20809:3;20830:67;20894:2;20889:3;20830:67;:::i;:::-;20823:74;;20906:93;20995:3;20906:93;:::i;:::-;21024:2;21019:3;21015:12;21008:19;;20667:366;;;:::o;21039:365::-;21181:3;21202:66;21266:1;21261:3;21202:66;:::i;:::-;21195:73;;21277:93;21366:3;21277:93;:::i;:::-;21395:2;21390:3;21386:12;21379:19;;21039:365;;;:::o;21410:366::-;21552:3;21573:67;21637:2;21632:3;21573:67;:::i;:::-;21566:74;;21649:93;21738:3;21649:93;:::i;:::-;21767:2;21762:3;21758:12;21751:19;;21410:366;;;:::o;21782:118::-;21869:24;21887:5;21869:24;:::i;:::-;21864:3;21857:37;21782:118;;:::o;21906:256::-;22018:3;22033:75;22104:3;22095:6;22033:75;:::i;:::-;22133:2;22128:3;22124:12;22117:19;;22153:3;22146:10;;21906:256;;;;:::o;22168:397::-;22308:3;22323:75;22394:3;22385:6;22323:75;:::i;:::-;22423:2;22418:3;22414:12;22407:19;;22436:75;22507:3;22498:6;22436:75;:::i;:::-;22536:2;22531:3;22527:12;22520:19;;22556:3;22549:10;;22168:397;;;;;:::o;22571:435::-;22751:3;22773:95;22864:3;22855:6;22773:95;:::i;:::-;22766:102;;22885:95;22976:3;22967:6;22885:95;:::i;:::-;22878:102;;22997:3;22990:10;;22571:435;;;;;:::o;23012:222::-;23105:4;23143:2;23132:9;23128:18;23120:26;;23156:71;23224:1;23213:9;23209:17;23200:6;23156:71;:::i;:::-;23012:222;;;;:::o;23240:640::-;23435:4;23473:3;23462:9;23458:19;23450:27;;23487:71;23555:1;23544:9;23540:17;23531:6;23487:71;:::i;:::-;23568:72;23636:2;23625:9;23621:18;23612:6;23568:72;:::i;:::-;23650;23718:2;23707:9;23703:18;23694:6;23650:72;:::i;:::-;23769:9;23763:4;23759:20;23754:2;23743:9;23739:18;23732:48;23797:76;23868:4;23859:6;23797:76;:::i;:::-;23789:84;;23240:640;;;;;;;:::o;23886:210::-;23973:4;24011:2;24000:9;23996:18;23988:26;;24024:65;24086:1;24075:9;24071:17;24062:6;24024:65;:::i;:::-;23886:210;;;;:::o;24102:222::-;24195:4;24233:2;24222:9;24218:18;24210:26;;24246:71;24314:1;24303:9;24299:17;24290:6;24246:71;:::i;:::-;24102:222;;;;:::o;24330:313::-;24443:4;24481:2;24470:9;24466:18;24458:26;;24530:9;24524:4;24520:20;24516:1;24505:9;24501:17;24494:47;24558:78;24631:4;24622:6;24558:78;:::i;:::-;24550:86;;24330:313;;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24649:419;;;:::o;25074:::-;25240:4;25278:2;25267:9;25263:18;25255:26;;25327:9;25321:4;25317:20;25313:1;25302:9;25298:17;25291:47;25355:131;25481:4;25355:131;:::i;:::-;25347:139;;25074:419;;;:::o;25499:::-;25665:4;25703:2;25692:9;25688:18;25680:26;;25752:9;25746:4;25742:20;25738:1;25727:9;25723:17;25716:47;25780:131;25906:4;25780:131;:::i;:::-;25772:139;;25499:419;;;:::o;25924:::-;26090:4;26128:2;26117:9;26113:18;26105:26;;26177:9;26171:4;26167:20;26163:1;26152:9;26148:17;26141:47;26205:131;26331:4;26205:131;:::i;:::-;26197:139;;25924:419;;;:::o;26349:::-;26515:4;26553:2;26542:9;26538:18;26530:26;;26602:9;26596:4;26592:20;26588:1;26577:9;26573:17;26566:47;26630:131;26756:4;26630:131;:::i;:::-;26622:139;;26349:419;;;:::o;26774:::-;26940:4;26978:2;26967:9;26963:18;26955:26;;27027:9;27021:4;27017:20;27013:1;27002:9;26998:17;26991:47;27055:131;27181:4;27055:131;:::i;:::-;27047:139;;26774:419;;;:::o;27199:::-;27365:4;27403:2;27392:9;27388:18;27380:26;;27452:9;27446:4;27442:20;27438:1;27427:9;27423:17;27416:47;27480:131;27606:4;27480:131;:::i;:::-;27472:139;;27199:419;;;:::o;27624:::-;27790:4;27828:2;27817:9;27813:18;27805:26;;27877:9;27871:4;27867:20;27863:1;27852:9;27848:17;27841:47;27905:131;28031:4;27905:131;:::i;:::-;27897:139;;27624:419;;;:::o;28049:::-;28215:4;28253:2;28242:9;28238:18;28230:26;;28302:9;28296:4;28292:20;28288:1;28277:9;28273:17;28266:47;28330:131;28456:4;28330:131;:::i;:::-;28322:139;;28049:419;;;:::o;28474:::-;28640:4;28678:2;28667:9;28663:18;28655:26;;28727:9;28721:4;28717:20;28713:1;28702:9;28698:17;28691:47;28755:131;28881:4;28755:131;:::i;:::-;28747:139;;28474:419;;;:::o;28899:::-;29065:4;29103:2;29092:9;29088:18;29080:26;;29152:9;29146:4;29142:20;29138:1;29127:9;29123:17;29116:47;29180:131;29306:4;29180:131;:::i;:::-;29172:139;;28899:419;;;:::o;29324:::-;29490:4;29528:2;29517:9;29513:18;29505:26;;29577:9;29571:4;29567:20;29563:1;29552:9;29548:17;29541:47;29605:131;29731:4;29605:131;:::i;:::-;29597:139;;29324:419;;;:::o;29749:::-;29915:4;29953:2;29942:9;29938:18;29930:26;;30002:9;29996:4;29992:20;29988:1;29977:9;29973:17;29966:47;30030:131;30156:4;30030:131;:::i;:::-;30022:139;;29749:419;;;:::o;30174:::-;30340:4;30378:2;30367:9;30363:18;30355:26;;30427:9;30421:4;30417:20;30413:1;30402:9;30398:17;30391:47;30455:131;30581:4;30455:131;:::i;:::-;30447:139;;30174:419;;;:::o;30599:::-;30765:4;30803:2;30792:9;30788:18;30780:26;;30852:9;30846:4;30842:20;30838:1;30827:9;30823:17;30816:47;30880:131;31006:4;30880:131;:::i;:::-;30872:139;;30599:419;;;:::o;31024:::-;31190:4;31228:2;31217:9;31213:18;31205:26;;31277:9;31271:4;31267:20;31263:1;31252:9;31248:17;31241:47;31305:131;31431:4;31305:131;:::i;:::-;31297:139;;31024:419;;;:::o;31449:::-;31615:4;31653:2;31642:9;31638:18;31630:26;;31702:9;31696:4;31692:20;31688:1;31677:9;31673:17;31666:47;31730:131;31856:4;31730:131;:::i;:::-;31722:139;;31449:419;;;:::o;31874:::-;32040:4;32078:2;32067:9;32063:18;32055:26;;32127:9;32121:4;32117:20;32113:1;32102:9;32098:17;32091:47;32155:131;32281:4;32155:131;:::i;:::-;32147:139;;31874:419;;;:::o;32299:::-;32465:4;32503:2;32492:9;32488:18;32480:26;;32552:9;32546:4;32542:20;32538:1;32527:9;32523:17;32516:47;32580:131;32706:4;32580:131;:::i;:::-;32572:139;;32299:419;;;:::o;32724:::-;32890:4;32928:2;32917:9;32913:18;32905:26;;32977:9;32971:4;32967:20;32963:1;32952:9;32948:17;32941:47;33005:131;33131:4;33005:131;:::i;:::-;32997:139;;32724:419;;;:::o;33149:::-;33315:4;33353:2;33342:9;33338:18;33330:26;;33402:9;33396:4;33392:20;33388:1;33377:9;33373:17;33366:47;33430:131;33556:4;33430:131;:::i;:::-;33422:139;;33149:419;;;:::o;33574:::-;33740:4;33778:2;33767:9;33763:18;33755:26;;33827:9;33821:4;33817:20;33813:1;33802:9;33798:17;33791:47;33855:131;33981:4;33855:131;:::i;:::-;33847:139;;33574:419;;;:::o;33999:::-;34165:4;34203:2;34192:9;34188:18;34180:26;;34252:9;34246:4;34242:20;34238:1;34227:9;34223:17;34216:47;34280:131;34406:4;34280:131;:::i;:::-;34272:139;;33999:419;;;:::o;34424:::-;34590:4;34628:2;34617:9;34613:18;34605:26;;34677:9;34671:4;34667:20;34663:1;34652:9;34648:17;34641:47;34705:131;34831:4;34705:131;:::i;:::-;34697:139;;34424:419;;;:::o;34849:::-;35015:4;35053:2;35042:9;35038:18;35030:26;;35102:9;35096:4;35092:20;35088:1;35077:9;35073:17;35066:47;35130:131;35256:4;35130:131;:::i;:::-;35122:139;;34849:419;;;:::o;35274:::-;35440:4;35478:2;35467:9;35463:18;35455:26;;35527:9;35521:4;35517:20;35513:1;35502:9;35498:17;35491:47;35555:131;35681:4;35555:131;:::i;:::-;35547:139;;35274:419;;;:::o;35699:::-;35865:4;35903:2;35892:9;35888:18;35880:26;;35952:9;35946:4;35942:20;35938:1;35927:9;35923:17;35916:47;35980:131;36106:4;35980:131;:::i;:::-;35972:139;;35699:419;;;:::o;36124:::-;36290:4;36328:2;36317:9;36313:18;36305:26;;36377:9;36371:4;36367:20;36363:1;36352:9;36348:17;36341:47;36405:131;36531:4;36405:131;:::i;:::-;36397:139;;36124:419;;;:::o;36549:222::-;36642:4;36680:2;36669:9;36665:18;36657:26;;36693:71;36761:1;36750:9;36746:17;36737:6;36693:71;:::i;:::-;36549:222;;;;:::o;36777:129::-;36811:6;36838:20;;:::i;:::-;36828:30;;36867:33;36895:4;36887:6;36867:33;:::i;:::-;36777:129;;;:::o;36912:75::-;36945:6;36978:2;36972:9;36962:19;;36912:75;:::o;36993:307::-;37054:4;37144:18;37136:6;37133:30;37130:56;;;37166:18;;:::i;:::-;37130:56;37204:29;37226:6;37204:29;:::i;:::-;37196:37;;37288:4;37282;37278:15;37270:23;;36993:307;;;:::o;37306:98::-;37357:6;37391:5;37385:12;37375:22;;37306:98;;;:::o;37410:99::-;37462:6;37496:5;37490:12;37480:22;;37410:99;;;:::o;37515:168::-;37598:11;37632:6;37627:3;37620:19;37672:4;37667:3;37663:14;37648:29;;37515:168;;;;:::o;37689:169::-;37773:11;37807:6;37802:3;37795:19;37847:4;37842:3;37838:14;37823:29;;37689:169;;;;:::o;37864:148::-;37966:11;38003:3;37988:18;;37864:148;;;;:::o;38018:273::-;38058:3;38077:20;38095:1;38077:20;:::i;:::-;38072:25;;38111:20;38129:1;38111:20;:::i;:::-;38106:25;;38233:1;38197:34;38193:42;38190:1;38187:49;38184:75;;;38239:18;;:::i;:::-;38184:75;38283:1;38280;38276:9;38269:16;;38018:273;;;;:::o;38297:305::-;38337:3;38356:20;38374:1;38356:20;:::i;:::-;38351:25;;38390:20;38408:1;38390:20;:::i;:::-;38385:25;;38544:1;38476:66;38472:74;38469:1;38466:81;38463:107;;;38550:18;;:::i;:::-;38463:107;38594:1;38591;38587:9;38580:16;;38297:305;;;;:::o;38608:185::-;38648:1;38665:20;38683:1;38665:20;:::i;:::-;38660:25;;38699:20;38717:1;38699:20;:::i;:::-;38694:25;;38738:1;38728:35;;38743:18;;:::i;:::-;38728:35;38785:1;38782;38778:9;38773:14;;38608:185;;;;:::o;38799:348::-;38839:7;38862:20;38880:1;38862:20;:::i;:::-;38857:25;;38896:20;38914:1;38896:20;:::i;:::-;38891:25;;39084:1;39016:66;39012:74;39009:1;39006:81;39001:1;38994:9;38987:17;38983:105;38980:131;;;39091:18;;:::i;:::-;38980:131;39139:1;39136;39132:9;39121:20;;38799:348;;;;:::o;39153:191::-;39193:4;39213:20;39231:1;39213:20;:::i;:::-;39208:25;;39247:20;39265:1;39247:20;:::i;:::-;39242:25;;39286:1;39283;39280:8;39277:34;;;39291:18;;:::i;:::-;39277:34;39336:1;39333;39329:9;39321:17;;39153:191;;;;:::o;39350:::-;39390:4;39410:20;39428:1;39410:20;:::i;:::-;39405:25;;39444:20;39462:1;39444:20;:::i;:::-;39439:25;;39483:1;39480;39477:8;39474:34;;;39488:18;;:::i;:::-;39474:34;39533:1;39530;39526:9;39518:17;;39350:191;;;;:::o;39547:96::-;39584:7;39613:24;39631:5;39613:24;:::i;:::-;39602:35;;39547:96;;;:::o;39649:90::-;39683:7;39726:5;39719:13;39712:21;39701:32;;39649:90;;;:::o;39745:77::-;39782:7;39811:5;39800:16;;39745:77;;;:::o;39828:149::-;39864:7;39904:66;39897:5;39893:78;39882:89;;39828:149;;;:::o;39983:118::-;40020:7;40060:34;40053:5;40049:46;40038:57;;39983:118;;;:::o;40107:126::-;40144:7;40184:42;40177:5;40173:54;40162:65;;40107:126;;;:::o;40239:77::-;40276:7;40305:5;40294:16;;40239:77;;;:::o;40322:93::-;40358:7;40398:10;40391:5;40387:22;40376:33;;40322:93;;;:::o;40421:154::-;40505:6;40500:3;40495;40482:30;40567:1;40558:6;40553:3;40549:16;40542:27;40421:154;;;:::o;40581:307::-;40649:1;40659:113;40673:6;40670:1;40667:13;40659:113;;;40758:1;40753:3;40749:11;40743:18;40739:1;40734:3;40730:11;40723:39;40695:2;40692:1;40688:10;40683:15;;40659:113;;;40790:6;40787:1;40784:13;40781:101;;;40870:1;40861:6;40856:3;40852:16;40845:27;40781:101;40630:258;40581:307;;;:::o;40894:171::-;40933:3;40956:24;40974:5;40956:24;:::i;:::-;40947:33;;41002:4;40995:5;40992:15;40989:41;;;41010:18;;:::i;:::-;40989:41;41057:1;41050:5;41046:13;41039:20;;40894:171;;;:::o;41071:320::-;41115:6;41152:1;41146:4;41142:12;41132:22;;41199:1;41193:4;41189:12;41220:18;41210:81;;41276:4;41268:6;41264:17;41254:27;;41210:81;41338:2;41330:6;41327:14;41307:18;41304:38;41301:84;;;41357:18;;:::i;:::-;41301:84;41122:269;41071:320;;;:::o;41397:281::-;41480:27;41502:4;41480:27;:::i;:::-;41472:6;41468:40;41610:6;41598:10;41595:22;41574:18;41562:10;41559:34;41556:62;41553:88;;;41621:18;;:::i;:::-;41553:88;41661:10;41657:2;41650:22;41440:238;41397:281;;:::o;41684:233::-;41723:3;41746:24;41764:5;41746:24;:::i;:::-;41737:33;;41792:66;41785:5;41782:77;41779:103;;;41862:18;;:::i;:::-;41779:103;41909:1;41902:5;41898:13;41891:20;;41684:233;;;:::o;41923:100::-;41962:7;41991:26;42011:5;41991:26;:::i;:::-;41980:37;;41923:100;;;:::o;42029:79::-;42068:7;42097:5;42086:16;;42029:79;;;:::o;42114:94::-;42153:7;42182:20;42196:5;42182:20;:::i;:::-;42171:31;;42114:94;;;:::o;42214:176::-;42246:1;42263:20;42281:1;42263:20;:::i;:::-;42258:25;;42297:20;42315:1;42297:20;:::i;:::-;42292:25;;42336:1;42326:35;;42341:18;;:::i;:::-;42326:35;42382:1;42379;42375:9;42370:14;;42214:176;;;;:::o;42396:180::-;42444:77;42441:1;42434:88;42541:4;42538:1;42531:15;42565:4;42562:1;42555:15;42582:180;42630:77;42627:1;42620:88;42727:4;42724:1;42717:15;42751:4;42748:1;42741:15;42768:180;42816:77;42813:1;42806:88;42913:4;42910:1;42903:15;42937:4;42934:1;42927:15;42954:180;43002:77;42999:1;42992:88;43099:4;43096:1;43089:15;43123:4;43120:1;43113:15;43140:180;43188:77;43185:1;43178:88;43285:4;43282:1;43275:15;43309:4;43306:1;43299:15;43326:117;43435:1;43432;43425:12;43449:117;43558:1;43555;43548:12;43572:117;43681:1;43678;43671:12;43695:117;43804:1;43801;43794:12;43818:117;43927:1;43924;43917:12;43941:117;44050:1;44047;44040:12;44064:102;44105:6;44156:2;44152:7;44147:2;44140:5;44136:14;44132:28;44122:38;;44064:102;;;:::o;44172:94::-;44205:8;44253:5;44249:2;44245:14;44224:35;;44172:94;;;:::o;44272:221::-;44412:34;44408:1;44400:6;44396:14;44389:58;44481:4;44476:2;44468:6;44464:15;44457:29;44272:221;:::o;44499:225::-;44639:34;44635:1;44627:6;44623:14;44616:58;44708:8;44703:2;44695:6;44691:15;44684:33;44499:225;:::o;44730:229::-;44870:34;44866:1;44858:6;44854:14;44847:58;44939:12;44934:2;44926:6;44922:15;44915:37;44730:229;:::o;44965:167::-;45105:19;45101:1;45093:6;45089:14;45082:43;44965:167;:::o;45138:222::-;45278:34;45274:1;45266:6;45262:14;45255:58;45347:5;45342:2;45334:6;45330:15;45323:30;45138:222;:::o;45366:224::-;45506:34;45502:1;45494:6;45490:14;45483:58;45575:7;45570:2;45562:6;45558:15;45551:32;45366:224;:::o;45596:168::-;45736:20;45732:1;45724:6;45720:14;45713:44;45596:168;:::o;45770:166::-;45910:18;45906:1;45898:6;45894:14;45887:42;45770:166;:::o;45942:244::-;46082:34;46078:1;46070:6;46066:14;46059:58;46151:27;46146:2;46138:6;46134:15;46127:52;45942:244;:::o;46192:171::-;46332:23;46328:1;46320:6;46316:14;46309:47;46192:171;:::o;46369:230::-;46509:34;46505:1;46497:6;46493:14;46486:58;46578:13;46573:2;46565:6;46561:15;46554:38;46369:230;:::o;46605:225::-;46745:34;46741:1;46733:6;46729:14;46722:58;46814:8;46809:2;46801:6;46797:15;46790:33;46605:225;:::o;46836:182::-;46976:34;46972:1;46964:6;46960:14;46953:58;46836:182;:::o;47024:234::-;47164:34;47160:1;47152:6;47148:14;47141:58;47233:17;47228:2;47220:6;47216:15;47209:42;47024:234;:::o;47264:176::-;47404:28;47400:1;47392:6;47388:14;47381:52;47264:176;:::o;47446:237::-;47586:34;47582:1;47574:6;47570:14;47563:58;47655:20;47650:2;47642:6;47638:15;47631:45;47446:237;:::o;47689:221::-;47829:34;47825:1;47817:6;47813:14;47806:58;47898:4;47893:2;47885:6;47881:15;47874:29;47689:221;:::o;47916:181::-;48056:33;48052:1;48044:6;48040:14;48033:57;47916:181;:::o;48103:238::-;48243:34;48239:1;48231:6;48227:14;48220:58;48312:21;48307:2;48299:6;48295:15;48288:46;48103:238;:::o;48347:179::-;48487:31;48483:1;48475:6;48471:14;48464:55;48347:179;:::o;48532:220::-;48672:34;48668:1;48660:6;48656:14;48649:58;48741:3;48736:2;48728:6;48724:15;48717:28;48532:220;:::o;48758:233::-;48898:34;48894:1;48886:6;48882:14;48875:58;48967:16;48962:2;48954:6;48950:15;48943:41;48758:233;:::o;48997:173::-;49137:25;49133:1;49125:6;49121:14;49114:49;48997:173;:::o;49176:234::-;49316:34;49312:1;49304:6;49300:14;49293:58;49385:17;49380:2;49372:6;49368:15;49361:42;49176:234;:::o;49416:232::-;49556:34;49552:1;49544:6;49540:14;49533:58;49625:15;49620:2;49612:6;49608:15;49601:40;49416:232;:::o;49654:174::-;49794:26;49790:1;49782:6;49778:14;49771:50;49654:174;:::o;49834:159::-;49974:11;49970:1;49962:6;49958:14;49951:35;49834:159;:::o;49999:174::-;50139:26;50135:1;50127:6;50123:14;50116:50;49999:174;:::o;50179:122::-;50252:24;50270:5;50252:24;:::i;:::-;50245:5;50242:35;50232:63;;50291:1;50288;50281:12;50232:63;50179:122;:::o;50307:116::-;50377:21;50392:5;50377:21;:::i;:::-;50370:5;50367:32;50357:60;;50413:1;50410;50403:12;50357:60;50307:116;:::o;50429:122::-;50502:24;50520:5;50502:24;:::i;:::-;50495:5;50492:35;50482:63;;50541:1;50538;50531:12;50482:63;50429:122;:::o;50557:120::-;50629:23;50646:5;50629:23;:::i;:::-;50622:5;50619:34;50609:62;;50667:1;50664;50657:12;50609:62;50557:120;:::o;50683:122::-;50756:24;50774:5;50756:24;:::i;:::-;50749:5;50746:35;50736:63;;50795:1;50792;50785:12;50736:63;50683:122;:::o;50811:120::-;50883:23;50900:5;50883:23;:::i;:::-;50876:5;50873:34;50863:62;;50921:1;50918;50911:12;50863:62;50811:120;:::o

Swarm Source

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