Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
2,043 SNA
Holders
102
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 SNALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CheekySnails
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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 @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ 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 @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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 erc721a/contracts/[email protected] // Creator: Chiru Labs 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..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ 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 internal currentIndex; // 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) internal _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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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(totalSupply). 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; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; 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); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); unchecked { for (uint256 curr = tokenId; curr >= 0; 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 Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); require(quantity != 0, "ERC721A: quantity must be greater than 0"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { 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); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = 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].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = 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); } /** * @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 @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/CheekySnails.sol pragma solidity ^0.8.4; contract CheekySnails is ERC721A, Ownable { uint256 public MAXSUPPLY = 7777; uint256 public FREE_LIMIT = 777; uint256 public EARLY_LIMIT = 2777; uint256 public EARLY_PRICE = 0.01 ether; uint256 public MAX_MINTS = 20; uint256 public EARLY_MINTS = 10; uint256 public PRICE = 0.02 ether; string public projName = "Cheeky Snails"; string public projSym = "SNA"; bool public DROP_ACTIVE = false; string public uriPrefix = ""; mapping(address => uint256) addressToReservedMints; constructor() ERC721A(projName, projSym) { setUriPrefix( "https://ipfs.io/ipfs/QmPfewkZGMk9MTpp2eLzKyNfN2Yf8tew4E363iCfvn4qUM/" ); } function mint(uint256 numTokens) public payable { require(DROP_ACTIVE, "Sale not started"); if (totalSupply() < FREE_LIMIT) { require( numTokens > 0 && numTokens <= EARLY_MINTS, "mint max 10 tokens" ); } else if (totalSupply() < EARLY_LIMIT) { require( numTokens > 0 && numTokens <= MAX_MINTS, "mint max 20 tokens" ); require( msg.value >= EARLY_PRICE * numTokens, "not enough ether, price is 0.01 eth" ); } else { require( numTokens > 0 && numTokens <= MAX_MINTS, "mint max 20 tokens" ); require(totalSupply() + numTokens <= MAXSUPPLY, "Sold Out"); require( msg.value >= PRICE * numTokens, "not enough ether, price 0.02 eth" ); } _safeMint(msg.sender, numTokens); } function flipDropState() public onlyOwner { DROP_ACTIVE = !DROP_ACTIVE; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string(abi.encodePacked(_baseURI(), Strings.toString(_tokenId))); } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setPrice(uint256 newPrice) public onlyOwner { PRICE = newPrice; } function setMaxMints(uint256 newMax) public onlyOwner { MAX_MINTS = newMax; } function setSupply(uint256 newSupply) public onlyOwner { MAXSUPPLY = newSupply; } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Nothing to withdraw"); Address.sendValue(payable(owner()), balance); } fallback() external payable {} receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DROP_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EARLY_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EARLY_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EARLY_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipDropState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projSym","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052611e61600855610309600955610ad9600a55662386f26fc10000600b556014600c55600a600d5566470de4df820000600e556040518060400160405280600d81526020017f436865656b7920536e61696c7300000000000000000000000000000000000000815250600f90805190602001906200008392919062000470565b506040518060400160405280600381526020017f534e41000000000000000000000000000000000000000000000000000000000081525060109080519060200190620000d192919062000470565b506000601160006101000a81548160ff02191690831515021790555060405180602001604052806000815250601290805190602001906200011492919062000470565b503480156200012257600080fd5b50600f805462000132906200057a565b80601f016020809104026020016040519081016040528092919081815260200182805462000160906200057a565b8015620001b15780601f106200018557610100808354040283529160200191620001b1565b820191906000526020600020905b8154815290600101906020018083116200019357829003601f168201915b505050505060108054620001c5906200057a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001f3906200057a565b8015620002445780601f10620002185761010080835404028352916020019162000244565b820191906000526020600020905b8154815290600101906020018083116200022657829003601f168201915b505050505081600190805190602001906200026192919062000470565b5080600290805190602001906200027a92919062000470565b5050506200029d62000291620002cd60201b60201c565b620002d560201b60201c565b620002c760405180608001604052806044815260200162004e54604491396200039b60201b60201c565b62000608565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003ab620002cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d16200044660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200042a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004219062000547565b60405180910390fd5b80601290805190602001906200044292919062000470565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200047e906200057a565b90600052602060002090601f016020900481019282620004a25760008555620004ee565b82601f10620004bd57805160ff1916838001178555620004ee565b82800160010185558215620004ee579182015b82811115620004ed578251825591602001919060010190620004d0565b5b509050620004fd919062000501565b5090565b5b808211156200051c57600081600090555060010162000502565b5090565b60006200052f60208362000569565b91506200053c82620005df565b602082019050919050565b60006020820190508181036000830152620005628162000520565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200059357607f821691505b60208210811415620005aa57620005a9620005b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61483c80620006186000396000f3fe60806040526004361061021e5760003560e01c80637ec4a65911610123578063a6ab43e0116100ab578063e03c69e81161006f578063e03c69e8146107a8578063e6215756146107d3578063e985e9c5146107fe578063f2fde38b1461083b578063f7cd09c71461086457610225565b8063a6ab43e0146106c1578063b88d4fde146106ec578063c87b56dd14610715578063cce132d114610752578063da241d061461077d57610225565b806391b7f5ed116100f257806391b7f5ed1461061157806395d89b411461063a57806396f8f6dd14610665578063a0712d681461067c578063a22cb4651461069857610225565b80637ec4a659146105675780638d859f3e146105905780638da5cb5b146105bb57806390061a0a146105e657610225565b806342842e0e116101a65780636352211e116101755780636352211e1461048257806370a08231146104bf578063715018a6146104fc578063758b4e861461051357806379c9cb7b1461053e57610225565b806342842e0e146103c65780634f6ccce7146103ef578063501e44c41461042c57806362b99ad41461045757610225565b806318160ddd116101ed57806318160ddd146102f557806323b872dd146103205780632f745c59146103495780633b4c4b25146103865780633ccfd60b146103af57610225565b806301ffc9a71461022757806306fdde0314610264578063081812fc1461028f578063095ea7b3146102cc57610225565b3661022557005b005b34801561023357600080fd5b5061024e600480360381019061024991906131bd565b61088f565b60405161025b91906137f4565b60405180910390f35b34801561027057600080fd5b506102796109d9565b604051610286919061380f565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613260565b610a6b565b6040516102c3919061378d565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee919061317d565b610af0565b005b34801561030157600080fd5b5061030a610c09565b6040516103179190613bb1565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613067565b610c12565b005b34801561035557600080fd5b50610370600480360381019061036b919061317d565b610c22565b60405161037d9190613bb1565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613260565b610e14565b005b3480156103bb57600080fd5b506103c4610e9a565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613067565b610f72565b005b3480156103fb57600080fd5b5061041660048036038101906104119190613260565b610f92565b6040516104239190613bb1565b60405180910390f35b34801561043857600080fd5b50610441610fe5565b60405161044e9190613bb1565b60405180910390f35b34801561046357600080fd5b5061046c610feb565b604051610479919061380f565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613260565b611079565b6040516104b6919061378d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190612ffa565b61108f565b6040516104f39190613bb1565b60405180910390f35b34801561050857600080fd5b50610511611178565b005b34801561051f57600080fd5b50610528611200565b6040516105359190613bb1565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613260565b611206565b005b34801561057357600080fd5b5061058e60048036038101906105899190613217565b61128c565b005b34801561059c57600080fd5b506105a5611322565b6040516105b29190613bb1565b60405180910390f35b3480156105c757600080fd5b506105d0611328565b6040516105dd919061378d565b60405180910390f35b3480156105f257600080fd5b506105fb611352565b6040516106089190613bb1565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190613260565b611358565b005b34801561064657600080fd5b5061064f6113de565b60405161065c919061380f565b60405180910390f35b34801561067157600080fd5b5061067a611470565b005b61069660048036038101906106919190613260565b611518565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061313d565b61178c565b005b3480156106cd57600080fd5b506106d661190d565b6040516106e39190613bb1565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906130ba565b611913565b005b34801561072157600080fd5b5061073c60048036038101906107379190613260565b61196f565b604051610749919061380f565b60405180910390f35b34801561075e57600080fd5b506107676119f1565b6040516107749190613bb1565b60405180910390f35b34801561078957600080fd5b506107926119f7565b60405161079f919061380f565b60405180910390f35b3480156107b457600080fd5b506107bd611a85565b6040516107ca919061380f565b60405180910390f35b3480156107df57600080fd5b506107e8611b13565b6040516107f59190613bb1565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613027565b611b19565b60405161083291906137f4565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190612ffa565b611bad565b005b34801561087057600080fd5b50610879611ca5565b60405161088691906137f4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061095a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d257506109d182611cb8565b5b9050919050565b6060600180546109e890613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613e6c565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000610a7682611d22565b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac90613b91565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afb82611079565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6390613a91565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8b611d2f565b73ffffffffffffffffffffffffffffffffffffffff161480610bba5750610bb981610bb4611d2f565b611b19565b5b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613991565b60405180910390fd5b610c04838383611d37565b505050565b60008054905090565b610c1d838383611de9565b505050565b6000610c2d8361108f565b8210610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613831565b60405180910390fd5b6000610c78610c09565b905060008060005b83811015610dd2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc45786841415610dbb578195505050505050610e0e565b83806001019450505b508080600101915050610c80565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590613b31565b60405180910390fd5b92915050565b610e1c611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610e3a611328565b73ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e87906139f1565b60405180910390fd5b8060088190555050565b610ea2611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610ec0611328565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906139f1565b60405180910390fd5b600047905060008111610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613851565b60405180910390fd5b610f6f610f69611328565b82612329565b50565b610f8d83838360405180602001604052806000815250611913565b505050565b6000610f9c610c09565b8210610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd4906138f1565b60405180910390fd5b819050919050565b600d5481565b60128054610ff890613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461102490613e6c565b80156110715780601f1061104657610100808354040283529160200191611071565b820191906000526020600020905b81548152906001019060200180831161105457829003601f168201915b505050505081565b60006110848261241d565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f7906139b1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611180611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661119e611328565b73ffffffffffffffffffffffffffffffffffffffff16146111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906139f1565b60405180910390fd5b6111fe60006125b7565b565b60085481565b61120e611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661122c611328565b73ffffffffffffffffffffffffffffffffffffffff1614611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906139f1565b60405180910390fd5b80600c8190555050565b611294611d2f565b73ffffffffffffffffffffffffffffffffffffffff166112b2611328565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff906139f1565b60405180910390fd5b806012908051906020019061131e929190612dd4565b5050565b600e5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b611360611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661137e611328565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb906139f1565b60405180910390fd5b80600e8190555050565b6060600280546113ed90613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461141990613e6c565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b5050505050905090565b611478611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611496611328565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e3906139f1565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b601160009054906101000a900460ff16611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90613971565b60405180910390fd5b600954611572610c09565b10156115ce5760008111801561158a5750600d548111155b6115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613871565b60405180910390fd5b61177f565b600a546115d9610c09565b1015611685576000811180156115f15750600c548111155b611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613ad1565b60405180910390fd5b80600b5461163e9190613d28565b341015611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613a71565b60405180910390fd5b61177e565b6000811180156116975750600c548111155b6116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613ad1565b60405180910390fd5b600854816116e2610c09565b6116ec9190613ca1565b111561172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613891565b60405180910390fd5b80600e5461173b9190613d28565b34101561177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613b51565b60405180910390fd5b5b5b611789338261267d565b50565b611794611d2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613a31565b60405180910390fd5b806006600061180f611d2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118bc611d2f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190191906137f4565b60405180910390a35050565b600a5481565b61191e848484611de9565b61192a8484848461269b565b611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090613ab1565b60405180910390fd5b50505050565b606061197a82611d22565b6119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090613a11565b60405180910390fd5b6119c1612832565b6119ca836128c4565b6040516020016119db929190613754565b6040516020818303038152906040529050919050565b600c5481565b60108054611a0490613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3090613e6c565b8015611a7d5780601f10611a5257610100808354040283529160200191611a7d565b820191906000526020600020905b815481529060010190602001808311611a6057829003601f168201915b505050505081565b600f8054611a9290613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611abe90613e6c565b8015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b505050505081565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bb5611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611bd3611328565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906139f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906138b1565b60405180910390fd5b611ca2816125b7565b50565b601160009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611df48261241d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e1b611d2f565b73ffffffffffffffffffffffffffffffffffffffff161480611e775750611e40611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611e5f84610a6b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e935750611e928260000151611e8d611d2f565b611b19565b5b905080611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613a51565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90613911565b60405180910390fd5b611fc48585856001612a25565b611fd46000848460000151611d37565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122b95761221881611d22565b156122b85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123228585856001612a2b565b5050505050565b8047101561236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390613951565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161239290613778565b60006040518083038185875af1925050503d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b5050905080612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90613931565b60405180910390fd5b505050565b612425612e5a565b61242e82611d22565b61246d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612464906138d1565b60405180910390fd5b60008290505b60008110612576576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125675780925050506125b2565b50808060019003915050612473565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990613b71565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612697828260405180602001604052806000815250612a31565b5050565b60006126bc8473ffffffffffffffffffffffffffffffffffffffff16612a43565b15612825578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126e5611d2f565b8786866040518563ffffffff1660e01b815260040161270794939291906137a8565b602060405180830381600087803b15801561272157600080fd5b505af192505050801561275257506040513d601f19601f8201168201806040525081019061274f91906131ea565b60015b6127d5573d8060008114612782576040519150601f19603f3d011682016040523d82523d6000602084013e612787565b606091505b506000815114156127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490613ab1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061282a565b600190505b949350505050565b60606012805461284190613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90613e6c565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b5050505050905090565b6060600082141561290c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a20565b600082905060005b6000821461293e57808061292790613ecf565b915050600a826129379190613cf7565b9150612914565b60008167ffffffffffffffff81111561295a57612959614005565b5b6040519080825280601f01601f19166020018201604052801561298c5781602001600182028036833780820191505090505b5090505b60008514612a19576001826129a59190613d82565b9150600a856129b49190613f18565b60306129c09190613ca1565b60f81b8183815181106129d6576129d5613fd6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a129190613cf7565b9450612990565b8093505050505b919050565b50505050565b50505050565b612a3e8383836001612a56565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390613af1565b60405180910390fd5b6000841415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790613b11565b60405180910390fd5b612b1d6000868387612a25565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612db757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612da257612d62600088848861269b565b612da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9890613ab1565b60405180910390fd5b5b81806001019250508080600101915050612ceb565b508060008190555050612dcd6000868387612a2b565b5050505050565b828054612de090613e6c565b90600052602060002090601f016020900481019282612e025760008555612e49565b82601f10612e1b57805160ff1916838001178555612e49565b82800160010185558215612e49579182015b82811115612e48578251825591602001919060010190612e2d565b5b509050612e569190612e94565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ead576000816000905550600101612e95565b5090565b6000612ec4612ebf84613bf1565b613bcc565b905082815260208101848484011115612ee057612edf614039565b5b612eeb848285613e2a565b509392505050565b6000612f06612f0184613c22565b613bcc565b905082815260208101848484011115612f2257612f21614039565b5b612f2d848285613e2a565b509392505050565b600081359050612f44816147aa565b92915050565b600081359050612f59816147c1565b92915050565b600081359050612f6e816147d8565b92915050565b600081519050612f83816147d8565b92915050565b600082601f830112612f9e57612f9d614034565b5b8135612fae848260208601612eb1565b91505092915050565b600082601f830112612fcc57612fcb614034565b5b8135612fdc848260208601612ef3565b91505092915050565b600081359050612ff4816147ef565b92915050565b6000602082840312156130105761300f614043565b5b600061301e84828501612f35565b91505092915050565b6000806040838503121561303e5761303d614043565b5b600061304c85828601612f35565b925050602061305d85828601612f35565b9150509250929050565b6000806000606084860312156130805761307f614043565b5b600061308e86828701612f35565b935050602061309f86828701612f35565b92505060406130b086828701612fe5565b9150509250925092565b600080600080608085870312156130d4576130d3614043565b5b60006130e287828801612f35565b94505060206130f387828801612f35565b935050604061310487828801612fe5565b925050606085013567ffffffffffffffff8111156131255761312461403e565b5b61313187828801612f89565b91505092959194509250565b6000806040838503121561315457613153614043565b5b600061316285828601612f35565b925050602061317385828601612f4a565b9150509250929050565b6000806040838503121561319457613193614043565b5b60006131a285828601612f35565b92505060206131b385828601612fe5565b9150509250929050565b6000602082840312156131d3576131d2614043565b5b60006131e184828501612f5f565b91505092915050565b600060208284031215613200576131ff614043565b5b600061320e84828501612f74565b91505092915050565b60006020828403121561322d5761322c614043565b5b600082013567ffffffffffffffff81111561324b5761324a61403e565b5b61325784828501612fb7565b91505092915050565b60006020828403121561327657613275614043565b5b600061328484828501612fe5565b91505092915050565b61329681613db6565b82525050565b6132a581613dc8565b82525050565b60006132b682613c53565b6132c08185613c69565b93506132d0818560208601613e39565b6132d981614048565b840191505092915050565b60006132ef82613c5e565b6132f98185613c85565b9350613309818560208601613e39565b61331281614048565b840191505092915050565b600061332882613c5e565b6133328185613c96565b9350613342818560208601613e39565b80840191505092915050565b600061335b602283613c85565b915061336682614059565b604082019050919050565b600061337e601383613c85565b9150613389826140a8565b602082019050919050565b60006133a1601283613c85565b91506133ac826140d1565b602082019050919050565b60006133c4600883613c85565b91506133cf826140fa565b602082019050919050565b60006133e7602683613c85565b91506133f282614123565b604082019050919050565b600061340a602a83613c85565b915061341582614172565b604082019050919050565b600061342d602383613c85565b9150613438826141c1565b604082019050919050565b6000613450602583613c85565b915061345b82614210565b604082019050919050565b6000613473603a83613c85565b915061347e8261425f565b604082019050919050565b6000613496601d83613c85565b91506134a1826142ae565b602082019050919050565b60006134b9601083613c85565b91506134c4826142d7565b602082019050919050565b60006134dc603983613c85565b91506134e782614300565b604082019050919050565b60006134ff602b83613c85565b915061350a8261434f565b604082019050919050565b6000613522602683613c85565b915061352d8261439e565b604082019050919050565b6000613545602083613c85565b9150613550826143ed565b602082019050919050565b6000613568602f83613c85565b915061357382614416565b604082019050919050565b600061358b601a83613c85565b915061359682614465565b602082019050919050565b60006135ae603283613c85565b91506135b98261448e565b604082019050919050565b60006135d1602383613c85565b91506135dc826144dd565b604082019050919050565b60006135f4602283613c85565b91506135ff8261452c565b604082019050919050565b6000613617600083613c7a565b91506136228261457b565b600082019050919050565b600061363a603383613c85565b91506136458261457e565b604082019050919050565b600061365d601283613c85565b9150613668826145cd565b602082019050919050565b6000613680602183613c85565b915061368b826145f6565b604082019050919050565b60006136a3602883613c85565b91506136ae82614645565b604082019050919050565b60006136c6602e83613c85565b91506136d182614694565b604082019050919050565b60006136e9602083613c85565b91506136f4826146e3565b602082019050919050565b600061370c602f83613c85565b91506137178261470c565b604082019050919050565b600061372f602d83613c85565b915061373a8261475b565b604082019050919050565b61374e81613e20565b82525050565b6000613760828561331d565b915061376c828461331d565b91508190509392505050565b60006137838261360a565b9150819050919050565b60006020820190506137a2600083018461328d565b92915050565b60006080820190506137bd600083018761328d565b6137ca602083018661328d565b6137d76040830185613745565b81810360608301526137e981846132ab565b905095945050505050565b6000602082019050613809600083018461329c565b92915050565b6000602082019050818103600083015261382981846132e4565b905092915050565b6000602082019050818103600083015261384a8161334e565b9050919050565b6000602082019050818103600083015261386a81613371565b9050919050565b6000602082019050818103600083015261388a81613394565b9050919050565b600060208201905081810360008301526138aa816133b7565b9050919050565b600060208201905081810360008301526138ca816133da565b9050919050565b600060208201905081810360008301526138ea816133fd565b9050919050565b6000602082019050818103600083015261390a81613420565b9050919050565b6000602082019050818103600083015261392a81613443565b9050919050565b6000602082019050818103600083015261394a81613466565b9050919050565b6000602082019050818103600083015261396a81613489565b9050919050565b6000602082019050818103600083015261398a816134ac565b9050919050565b600060208201905081810360008301526139aa816134cf565b9050919050565b600060208201905081810360008301526139ca816134f2565b9050919050565b600060208201905081810360008301526139ea81613515565b9050919050565b60006020820190508181036000830152613a0a81613538565b9050919050565b60006020820190508181036000830152613a2a8161355b565b9050919050565b60006020820190508181036000830152613a4a8161357e565b9050919050565b60006020820190508181036000830152613a6a816135a1565b9050919050565b60006020820190508181036000830152613a8a816135c4565b9050919050565b60006020820190508181036000830152613aaa816135e7565b9050919050565b60006020820190508181036000830152613aca8161362d565b9050919050565b60006020820190508181036000830152613aea81613650565b9050919050565b60006020820190508181036000830152613b0a81613673565b9050919050565b60006020820190508181036000830152613b2a81613696565b9050919050565b60006020820190508181036000830152613b4a816136b9565b9050919050565b60006020820190508181036000830152613b6a816136dc565b9050919050565b60006020820190508181036000830152613b8a816136ff565b9050919050565b60006020820190508181036000830152613baa81613722565b9050919050565b6000602082019050613bc66000830184613745565b92915050565b6000613bd6613be7565b9050613be28282613e9e565b919050565b6000604051905090565b600067ffffffffffffffff821115613c0c57613c0b614005565b5b613c1582614048565b9050602081019050919050565b600067ffffffffffffffff821115613c3d57613c3c614005565b5b613c4682614048565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cac82613e20565b9150613cb783613e20565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cec57613ceb613f49565b5b828201905092915050565b6000613d0282613e20565b9150613d0d83613e20565b925082613d1d57613d1c613f78565b5b828204905092915050565b6000613d3382613e20565b9150613d3e83613e20565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d7757613d76613f49565b5b828202905092915050565b6000613d8d82613e20565b9150613d9883613e20565b925082821015613dab57613daa613f49565b5b828203905092915050565b6000613dc182613e00565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e57578082015181840152602081019050613e3c565b83811115613e66576000848401525b50505050565b60006002820490506001821680613e8457607f821691505b60208210811415613e9857613e97613fa7565b5b50919050565b613ea782614048565b810181811067ffffffffffffffff82111715613ec657613ec5614005565b5b80604052505050565b6000613eda82613e20565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f0d57613f0c613f49565b5b600182019050919050565b6000613f2382613e20565b9150613f2e83613e20565b925082613f3e57613f3d613f78565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f6d696e74206d617820313020746f6b656e730000000000000000000000000000600082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c20707269636520697320302e30312060008201527f6574680000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f6d696e74206d617820323020746f6b656e730000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c20707269636520302e303220657468600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6147b381613db6565b81146147be57600080fd5b50565b6147ca81613dc8565b81146147d557600080fd5b50565b6147e181613dd4565b81146147ec57600080fd5b50565b6147f881613e20565b811461480357600080fd5b5056fea26469706673582212205cde493d6ac93b5d5c1821cab70851c6ef6f5115b2a8a720a2b9fd4bf273cb4164736f6c6343000806003368747470733a2f2f697066732e696f2f697066732f516d506665776b5a474d6b394d54707032654c7a4b794e664e325966387465773445333633694366766e3471554d2f
Deployed Bytecode
0x60806040526004361061021e5760003560e01c80637ec4a65911610123578063a6ab43e0116100ab578063e03c69e81161006f578063e03c69e8146107a8578063e6215756146107d3578063e985e9c5146107fe578063f2fde38b1461083b578063f7cd09c71461086457610225565b8063a6ab43e0146106c1578063b88d4fde146106ec578063c87b56dd14610715578063cce132d114610752578063da241d061461077d57610225565b806391b7f5ed116100f257806391b7f5ed1461061157806395d89b411461063a57806396f8f6dd14610665578063a0712d681461067c578063a22cb4651461069857610225565b80637ec4a659146105675780638d859f3e146105905780638da5cb5b146105bb57806390061a0a146105e657610225565b806342842e0e116101a65780636352211e116101755780636352211e1461048257806370a08231146104bf578063715018a6146104fc578063758b4e861461051357806379c9cb7b1461053e57610225565b806342842e0e146103c65780634f6ccce7146103ef578063501e44c41461042c57806362b99ad41461045757610225565b806318160ddd116101ed57806318160ddd146102f557806323b872dd146103205780632f745c59146103495780633b4c4b25146103865780633ccfd60b146103af57610225565b806301ffc9a71461022757806306fdde0314610264578063081812fc1461028f578063095ea7b3146102cc57610225565b3661022557005b005b34801561023357600080fd5b5061024e600480360381019061024991906131bd565b61088f565b60405161025b91906137f4565b60405180910390f35b34801561027057600080fd5b506102796109d9565b604051610286919061380f565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613260565b610a6b565b6040516102c3919061378d565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee919061317d565b610af0565b005b34801561030157600080fd5b5061030a610c09565b6040516103179190613bb1565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613067565b610c12565b005b34801561035557600080fd5b50610370600480360381019061036b919061317d565b610c22565b60405161037d9190613bb1565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613260565b610e14565b005b3480156103bb57600080fd5b506103c4610e9a565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613067565b610f72565b005b3480156103fb57600080fd5b5061041660048036038101906104119190613260565b610f92565b6040516104239190613bb1565b60405180910390f35b34801561043857600080fd5b50610441610fe5565b60405161044e9190613bb1565b60405180910390f35b34801561046357600080fd5b5061046c610feb565b604051610479919061380f565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613260565b611079565b6040516104b6919061378d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190612ffa565b61108f565b6040516104f39190613bb1565b60405180910390f35b34801561050857600080fd5b50610511611178565b005b34801561051f57600080fd5b50610528611200565b6040516105359190613bb1565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613260565b611206565b005b34801561057357600080fd5b5061058e60048036038101906105899190613217565b61128c565b005b34801561059c57600080fd5b506105a5611322565b6040516105b29190613bb1565b60405180910390f35b3480156105c757600080fd5b506105d0611328565b6040516105dd919061378d565b60405180910390f35b3480156105f257600080fd5b506105fb611352565b6040516106089190613bb1565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190613260565b611358565b005b34801561064657600080fd5b5061064f6113de565b60405161065c919061380f565b60405180910390f35b34801561067157600080fd5b5061067a611470565b005b61069660048036038101906106919190613260565b611518565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061313d565b61178c565b005b3480156106cd57600080fd5b506106d661190d565b6040516106e39190613bb1565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906130ba565b611913565b005b34801561072157600080fd5b5061073c60048036038101906107379190613260565b61196f565b604051610749919061380f565b60405180910390f35b34801561075e57600080fd5b506107676119f1565b6040516107749190613bb1565b60405180910390f35b34801561078957600080fd5b506107926119f7565b60405161079f919061380f565b60405180910390f35b3480156107b457600080fd5b506107bd611a85565b6040516107ca919061380f565b60405180910390f35b3480156107df57600080fd5b506107e8611b13565b6040516107f59190613bb1565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613027565b611b19565b60405161083291906137f4565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190612ffa565b611bad565b005b34801561087057600080fd5b50610879611ca5565b60405161088691906137f4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061095a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d257506109d182611cb8565b5b9050919050565b6060600180546109e890613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613e6c565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000610a7682611d22565b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac90613b91565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afb82611079565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6390613a91565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8b611d2f565b73ffffffffffffffffffffffffffffffffffffffff161480610bba5750610bb981610bb4611d2f565b611b19565b5b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613991565b60405180910390fd5b610c04838383611d37565b505050565b60008054905090565b610c1d838383611de9565b505050565b6000610c2d8361108f565b8210610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613831565b60405180910390fd5b6000610c78610c09565b905060008060005b83811015610dd2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc45786841415610dbb578195505050505050610e0e565b83806001019450505b508080600101915050610c80565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590613b31565b60405180910390fd5b92915050565b610e1c611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610e3a611328565b73ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e87906139f1565b60405180910390fd5b8060088190555050565b610ea2611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610ec0611328565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906139f1565b60405180910390fd5b600047905060008111610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613851565b60405180910390fd5b610f6f610f69611328565b82612329565b50565b610f8d83838360405180602001604052806000815250611913565b505050565b6000610f9c610c09565b8210610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd4906138f1565b60405180910390fd5b819050919050565b600d5481565b60128054610ff890613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461102490613e6c565b80156110715780601f1061104657610100808354040283529160200191611071565b820191906000526020600020905b81548152906001019060200180831161105457829003601f168201915b505050505081565b60006110848261241d565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f7906139b1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611180611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661119e611328565b73ffffffffffffffffffffffffffffffffffffffff16146111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906139f1565b60405180910390fd5b6111fe60006125b7565b565b60085481565b61120e611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661122c611328565b73ffffffffffffffffffffffffffffffffffffffff1614611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906139f1565b60405180910390fd5b80600c8190555050565b611294611d2f565b73ffffffffffffffffffffffffffffffffffffffff166112b2611328565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff906139f1565b60405180910390fd5b806012908051906020019061131e929190612dd4565b5050565b600e5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b611360611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661137e611328565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb906139f1565b60405180910390fd5b80600e8190555050565b6060600280546113ed90613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461141990613e6c565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b5050505050905090565b611478611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611496611328565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e3906139f1565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b601160009054906101000a900460ff16611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90613971565b60405180910390fd5b600954611572610c09565b10156115ce5760008111801561158a5750600d548111155b6115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613871565b60405180910390fd5b61177f565b600a546115d9610c09565b1015611685576000811180156115f15750600c548111155b611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613ad1565b60405180910390fd5b80600b5461163e9190613d28565b341015611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613a71565b60405180910390fd5b61177e565b6000811180156116975750600c548111155b6116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613ad1565b60405180910390fd5b600854816116e2610c09565b6116ec9190613ca1565b111561172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613891565b60405180910390fd5b80600e5461173b9190613d28565b34101561177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613b51565b60405180910390fd5b5b5b611789338261267d565b50565b611794611d2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613a31565b60405180910390fd5b806006600061180f611d2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118bc611d2f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190191906137f4565b60405180910390a35050565b600a5481565b61191e848484611de9565b61192a8484848461269b565b611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090613ab1565b60405180910390fd5b50505050565b606061197a82611d22565b6119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090613a11565b60405180910390fd5b6119c1612832565b6119ca836128c4565b6040516020016119db929190613754565b6040516020818303038152906040529050919050565b600c5481565b60108054611a0490613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3090613e6c565b8015611a7d5780601f10611a5257610100808354040283529160200191611a7d565b820191906000526020600020905b815481529060010190602001808311611a6057829003601f168201915b505050505081565b600f8054611a9290613e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611abe90613e6c565b8015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b505050505081565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bb5611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611bd3611328565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906139f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906138b1565b60405180910390fd5b611ca2816125b7565b50565b601160009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611df48261241d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e1b611d2f565b73ffffffffffffffffffffffffffffffffffffffff161480611e775750611e40611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611e5f84610a6b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e935750611e928260000151611e8d611d2f565b611b19565b5b905080611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613a51565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90613911565b60405180910390fd5b611fc48585856001612a25565b611fd46000848460000151611d37565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122b95761221881611d22565b156122b85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123228585856001612a2b565b5050505050565b8047101561236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390613951565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161239290613778565b60006040518083038185875af1925050503d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b5050905080612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90613931565b60405180910390fd5b505050565b612425612e5a565b61242e82611d22565b61246d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612464906138d1565b60405180910390fd5b60008290505b60008110612576576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125675780925050506125b2565b50808060019003915050612473565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990613b71565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612697828260405180602001604052806000815250612a31565b5050565b60006126bc8473ffffffffffffffffffffffffffffffffffffffff16612a43565b15612825578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126e5611d2f565b8786866040518563ffffffff1660e01b815260040161270794939291906137a8565b602060405180830381600087803b15801561272157600080fd5b505af192505050801561275257506040513d601f19601f8201168201806040525081019061274f91906131ea565b60015b6127d5573d8060008114612782576040519150601f19603f3d011682016040523d82523d6000602084013e612787565b606091505b506000815114156127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490613ab1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061282a565b600190505b949350505050565b60606012805461284190613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90613e6c565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b5050505050905090565b6060600082141561290c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a20565b600082905060005b6000821461293e57808061292790613ecf565b915050600a826129379190613cf7565b9150612914565b60008167ffffffffffffffff81111561295a57612959614005565b5b6040519080825280601f01601f19166020018201604052801561298c5781602001600182028036833780820191505090505b5090505b60008514612a19576001826129a59190613d82565b9150600a856129b49190613f18565b60306129c09190613ca1565b60f81b8183815181106129d6576129d5613fd6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a129190613cf7565b9450612990565b8093505050505b919050565b50505050565b50505050565b612a3e8383836001612a56565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390613af1565b60405180910390fd5b6000841415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790613b11565b60405180910390fd5b612b1d6000868387612a25565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612db757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612da257612d62600088848861269b565b612da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9890613ab1565b60405180910390fd5b5b81806001019250508080600101915050612ceb565b508060008190555050612dcd6000868387612a2b565b5050505050565b828054612de090613e6c565b90600052602060002090601f016020900481019282612e025760008555612e49565b82601f10612e1b57805160ff1916838001178555612e49565b82800160010185558215612e49579182015b82811115612e48578251825591602001919060010190612e2d565b5b509050612e569190612e94565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ead576000816000905550600101612e95565b5090565b6000612ec4612ebf84613bf1565b613bcc565b905082815260208101848484011115612ee057612edf614039565b5b612eeb848285613e2a565b509392505050565b6000612f06612f0184613c22565b613bcc565b905082815260208101848484011115612f2257612f21614039565b5b612f2d848285613e2a565b509392505050565b600081359050612f44816147aa565b92915050565b600081359050612f59816147c1565b92915050565b600081359050612f6e816147d8565b92915050565b600081519050612f83816147d8565b92915050565b600082601f830112612f9e57612f9d614034565b5b8135612fae848260208601612eb1565b91505092915050565b600082601f830112612fcc57612fcb614034565b5b8135612fdc848260208601612ef3565b91505092915050565b600081359050612ff4816147ef565b92915050565b6000602082840312156130105761300f614043565b5b600061301e84828501612f35565b91505092915050565b6000806040838503121561303e5761303d614043565b5b600061304c85828601612f35565b925050602061305d85828601612f35565b9150509250929050565b6000806000606084860312156130805761307f614043565b5b600061308e86828701612f35565b935050602061309f86828701612f35565b92505060406130b086828701612fe5565b9150509250925092565b600080600080608085870312156130d4576130d3614043565b5b60006130e287828801612f35565b94505060206130f387828801612f35565b935050604061310487828801612fe5565b925050606085013567ffffffffffffffff8111156131255761312461403e565b5b61313187828801612f89565b91505092959194509250565b6000806040838503121561315457613153614043565b5b600061316285828601612f35565b925050602061317385828601612f4a565b9150509250929050565b6000806040838503121561319457613193614043565b5b60006131a285828601612f35565b92505060206131b385828601612fe5565b9150509250929050565b6000602082840312156131d3576131d2614043565b5b60006131e184828501612f5f565b91505092915050565b600060208284031215613200576131ff614043565b5b600061320e84828501612f74565b91505092915050565b60006020828403121561322d5761322c614043565b5b600082013567ffffffffffffffff81111561324b5761324a61403e565b5b61325784828501612fb7565b91505092915050565b60006020828403121561327657613275614043565b5b600061328484828501612fe5565b91505092915050565b61329681613db6565b82525050565b6132a581613dc8565b82525050565b60006132b682613c53565b6132c08185613c69565b93506132d0818560208601613e39565b6132d981614048565b840191505092915050565b60006132ef82613c5e565b6132f98185613c85565b9350613309818560208601613e39565b61331281614048565b840191505092915050565b600061332882613c5e565b6133328185613c96565b9350613342818560208601613e39565b80840191505092915050565b600061335b602283613c85565b915061336682614059565b604082019050919050565b600061337e601383613c85565b9150613389826140a8565b602082019050919050565b60006133a1601283613c85565b91506133ac826140d1565b602082019050919050565b60006133c4600883613c85565b91506133cf826140fa565b602082019050919050565b60006133e7602683613c85565b91506133f282614123565b604082019050919050565b600061340a602a83613c85565b915061341582614172565b604082019050919050565b600061342d602383613c85565b9150613438826141c1565b604082019050919050565b6000613450602583613c85565b915061345b82614210565b604082019050919050565b6000613473603a83613c85565b915061347e8261425f565b604082019050919050565b6000613496601d83613c85565b91506134a1826142ae565b602082019050919050565b60006134b9601083613c85565b91506134c4826142d7565b602082019050919050565b60006134dc603983613c85565b91506134e782614300565b604082019050919050565b60006134ff602b83613c85565b915061350a8261434f565b604082019050919050565b6000613522602683613c85565b915061352d8261439e565b604082019050919050565b6000613545602083613c85565b9150613550826143ed565b602082019050919050565b6000613568602f83613c85565b915061357382614416565b604082019050919050565b600061358b601a83613c85565b915061359682614465565b602082019050919050565b60006135ae603283613c85565b91506135b98261448e565b604082019050919050565b60006135d1602383613c85565b91506135dc826144dd565b604082019050919050565b60006135f4602283613c85565b91506135ff8261452c565b604082019050919050565b6000613617600083613c7a565b91506136228261457b565b600082019050919050565b600061363a603383613c85565b91506136458261457e565b604082019050919050565b600061365d601283613c85565b9150613668826145cd565b602082019050919050565b6000613680602183613c85565b915061368b826145f6565b604082019050919050565b60006136a3602883613c85565b91506136ae82614645565b604082019050919050565b60006136c6602e83613c85565b91506136d182614694565b604082019050919050565b60006136e9602083613c85565b91506136f4826146e3565b602082019050919050565b600061370c602f83613c85565b91506137178261470c565b604082019050919050565b600061372f602d83613c85565b915061373a8261475b565b604082019050919050565b61374e81613e20565b82525050565b6000613760828561331d565b915061376c828461331d565b91508190509392505050565b60006137838261360a565b9150819050919050565b60006020820190506137a2600083018461328d565b92915050565b60006080820190506137bd600083018761328d565b6137ca602083018661328d565b6137d76040830185613745565b81810360608301526137e981846132ab565b905095945050505050565b6000602082019050613809600083018461329c565b92915050565b6000602082019050818103600083015261382981846132e4565b905092915050565b6000602082019050818103600083015261384a8161334e565b9050919050565b6000602082019050818103600083015261386a81613371565b9050919050565b6000602082019050818103600083015261388a81613394565b9050919050565b600060208201905081810360008301526138aa816133b7565b9050919050565b600060208201905081810360008301526138ca816133da565b9050919050565b600060208201905081810360008301526138ea816133fd565b9050919050565b6000602082019050818103600083015261390a81613420565b9050919050565b6000602082019050818103600083015261392a81613443565b9050919050565b6000602082019050818103600083015261394a81613466565b9050919050565b6000602082019050818103600083015261396a81613489565b9050919050565b6000602082019050818103600083015261398a816134ac565b9050919050565b600060208201905081810360008301526139aa816134cf565b9050919050565b600060208201905081810360008301526139ca816134f2565b9050919050565b600060208201905081810360008301526139ea81613515565b9050919050565b60006020820190508181036000830152613a0a81613538565b9050919050565b60006020820190508181036000830152613a2a8161355b565b9050919050565b60006020820190508181036000830152613a4a8161357e565b9050919050565b60006020820190508181036000830152613a6a816135a1565b9050919050565b60006020820190508181036000830152613a8a816135c4565b9050919050565b60006020820190508181036000830152613aaa816135e7565b9050919050565b60006020820190508181036000830152613aca8161362d565b9050919050565b60006020820190508181036000830152613aea81613650565b9050919050565b60006020820190508181036000830152613b0a81613673565b9050919050565b60006020820190508181036000830152613b2a81613696565b9050919050565b60006020820190508181036000830152613b4a816136b9565b9050919050565b60006020820190508181036000830152613b6a816136dc565b9050919050565b60006020820190508181036000830152613b8a816136ff565b9050919050565b60006020820190508181036000830152613baa81613722565b9050919050565b6000602082019050613bc66000830184613745565b92915050565b6000613bd6613be7565b9050613be28282613e9e565b919050565b6000604051905090565b600067ffffffffffffffff821115613c0c57613c0b614005565b5b613c1582614048565b9050602081019050919050565b600067ffffffffffffffff821115613c3d57613c3c614005565b5b613c4682614048565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cac82613e20565b9150613cb783613e20565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cec57613ceb613f49565b5b828201905092915050565b6000613d0282613e20565b9150613d0d83613e20565b925082613d1d57613d1c613f78565b5b828204905092915050565b6000613d3382613e20565b9150613d3e83613e20565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d7757613d76613f49565b5b828202905092915050565b6000613d8d82613e20565b9150613d9883613e20565b925082821015613dab57613daa613f49565b5b828203905092915050565b6000613dc182613e00565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e57578082015181840152602081019050613e3c565b83811115613e66576000848401525b50505050565b60006002820490506001821680613e8457607f821691505b60208210811415613e9857613e97613fa7565b5b50919050565b613ea782614048565b810181811067ffffffffffffffff82111715613ec657613ec5614005565b5b80604052505050565b6000613eda82613e20565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f0d57613f0c613f49565b5b600182019050919050565b6000613f2382613e20565b9150613f2e83613e20565b925082613f3e57613f3d613f78565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f6d696e74206d617820313020746f6b656e730000000000000000000000000000600082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c20707269636520697320302e30312060008201527f6574680000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f6d696e74206d617820323020746f6b656e730000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c20707269636520302e303220657468600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6147b381613db6565b81146147be57600080fd5b50565b6147ca81613dc8565b81146147d557600080fd5b50565b6147e181613dd4565b81146147ec57600080fd5b50565b6147f881613e20565b811461480357600080fd5b5056fea26469706673582212205cde493d6ac93b5d5c1821cab70851c6ef6f5115b2a8a720a2b9fd4bf273cb4164736f6c63430008060033
Deployed Bytecode Sourcemap
41061:3037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24667:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26709:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28405:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27926:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22842:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29432:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23547:1048;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43595:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43816:204;;;;;;;;;;;;;:::i;:::-;;29665:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23019:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41308:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41511:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26518:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25153:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40330:94;;;;;;;;;;;;;:::i;:::-;;41110:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43496:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43286:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41346:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39679:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41148:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43400:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26878:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42829:87;;;;;;;;;;;;;:::i;:::-;;41783:1038;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28769:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29913:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42924:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41272:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41433;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41386:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41226:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29151:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40579:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41471:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24667:422;24814:4;24871:25;24856:40;;;:11;:40;;;;:105;;;;24928:33;24913:48;;;:11;:48;;;;24856:105;:172;;;;24993:35;24978:50;;;:11;:50;;;;24856:172;:225;;;;25045:36;25069:11;25045:23;:36::i;:::-;24856:225;24836:245;;24667:422;;;:::o;26709:100::-;26763:13;26796:5;26789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26709:100;:::o;28405:292::-;28509:7;28556:16;28564:7;28556;:16::i;:::-;28534:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28665:15;:24;28681:7;28665:24;;;;;;;;;;;;;;;;;;;;;28658:31;;28405:292;;;:::o;27926:413::-;27999:13;28015:24;28031:7;28015:15;:24::i;:::-;27999:40;;28064:5;28058:11;;:2;:11;;;;28050:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28159:5;28143:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28168:37;28185:5;28192:12;:10;:12::i;:::-;28168:16;:37::i;:::-;28143:62;28121:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28303:28;28312:2;28316:7;28325:5;28303:8;:28::i;:::-;27988:351;27926:413;;:::o;22842:100::-;22895:7;22922:12;;22915:19;;22842:100;:::o;29432:162::-;29558:28;29568:4;29574:2;29578:7;29558:9;:28::i;:::-;29432:162;;;:::o;23547:1048::-;23672:7;23713:16;23723:5;23713:9;:16::i;:::-;23705:5;:24;23697:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23779:22;23804:13;:11;:13::i;:::-;23779:38;;23828:19;23858:25;24047:9;24042:466;24062:14;24058:1;:18;24042:466;;;24102:31;24136:11;:14;24148:1;24136:14;;;;;;;;;;;24102:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24199:1;24173:28;;:9;:14;;;:28;;;24169:111;;24246:9;:14;;;24226:34;;24169:111;24323:5;24302:26;;:17;:26;;;24298:195;;;24372:5;24357:11;:20;24353:85;;;24413:1;24406:8;;;;;;;;;24353:85;24460:13;;;;;;;24298:195;24083:425;24078:3;;;;;;;24042:466;;;;24531:56;;;;;;;;;;:::i;:::-;;;;;;;;23547:1048;;;;;:::o;43595:95::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43673:9:::1;43661;:21;;;;43595:95:::0;:::o;43816:204::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43864:15:::1;43882:21;43864:39;;43932:1;43922:7;:11;43914:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43968:44;43994:7;:5;:7::i;:::-;44004;43968:17;:44::i;:::-;43853:167;43816:204::o:0;29665:177::-;29795:39;29812:4;29818:2;29822:7;29795:39;;;;;;;;;;;;:16;:39::i;:::-;29665:177;;;:::o;23019:228::-;23122:7;23163:13;:11;:13::i;:::-;23155:5;:21;23147:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23234:5;23227:12;;23019:228;;;:::o;41308:31::-;;;;:::o;41511:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26518:124::-;26582:7;26609:20;26621:7;26609:11;:20::i;:::-;:25;;;26602:32;;26518:124;;;:::o;25153:258::-;25217:7;25276:1;25259:19;;:5;:19;;;;25237:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25375:12;:19;25388:5;25375:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25367:36;;25360:43;;25153:258;;;:::o;40330:94::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40395:21:::1;40413:1;40395:9;:21::i;:::-;40330:94::o:0;41110:31::-;;;;:::o;43496:91::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43573:6:::1;43561:9;:18;;;;43496:91:::0;:::o;43286:106::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43374:10:::1;43362:9;:22;;;;;;;;;;;;:::i;:::-;;43286:106:::0;:::o;41346:33::-;;;;:::o;39679:87::-;39725:7;39752:6;;;;;;;;;;;39745:13;;39679:87;:::o;41148:31::-;;;;:::o;43400:88::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43472:8:::1;43464:5;:16;;;;43400:88:::0;:::o;26878:104::-;26934:13;26967:7;26960:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26878:104;:::o;42829:87::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42897:11:::1;;;;;;;;;;;42896:12;42882:11;;:26;;;;;;;;;;;;;;;;;;42829:87::o:0;41783:1038::-;41850:11;;;;;;;;;;;41842:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;41913:10;;41897:13;:11;:13::i;:::-;:26;41893:878;;;41978:1;41966:9;:13;:41;;;;;41996:11;;41983:9;:24;;41966:41;41940:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;41893:878;;;42099:11;;42083:13;:11;:13::i;:::-;:27;42079:692;;;42165:1;42153:9;:13;:39;;;;;42183:9;;42170;:22;;42153:39;42127:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;42314:9;42300:11;;:23;;;;:::i;:::-;42287:9;:36;;42261:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;42079:692;;;42465:1;42453:9;:13;:39;;;;;42483:9;;42470;:22;;42453:39;42427:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;42598:9;;42585;42569:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;42561:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42682:9;42674:5;;:17;;;;:::i;:::-;42661:9;:30;;42635:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;42079:692;41893:878;42781:32;42791:10;42803:9;42781;:32::i;:::-;41783:1038;:::o;28769:311::-;28899:12;:10;:12::i;:::-;28887:24;;:8;:24;;;;28879:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29000:8;28955:18;:32;28974:12;:10;:12::i;:::-;28955:32;;;;;;;;;;;;;;;:42;28988:8;28955:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29053:8;29024:48;;29039:12;:10;:12::i;:::-;29024:48;;;29063:8;29024:48;;;;;;:::i;:::-;;;;;;;;28769:311;;:::o;41186:33::-;;;;:::o;29913:355::-;30072:28;30082:4;30088:2;30092:7;30072:9;:28::i;:::-;30133:48;30156:4;30162:2;30166:7;30175:5;30133:22;:48::i;:::-;30111:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29913:355;;;;:::o;42924:354::-;43043:13;43096:17;43104:8;43096:7;:17::i;:::-;43074:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;43230:10;:8;:10::i;:::-;43242:26;43259:8;43242:16;:26::i;:::-;43213:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43199:71;;42924:354;;;:::o;41272:29::-;;;;:::o;41433:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41386:40::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41226:39::-;;;;:::o;29151:214::-;29293:4;29322:18;:25;29341:5;29322:25;;;;;;;;;;;;;;;:35;29348:8;29322:35;;;;;;;;;;;;;;;;;;;;;;;;;29315:42;;29151:214;;;;:::o;40579:229::-;39910:12;:10;:12::i;:::-;39899:23;;:7;:5;:7::i;:::-;:23;;;39891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40702:1:::1;40682:22;;:8;:22;;;;40660:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;40781:19;40791:8;40781:9;:19::i;:::-;40579:229:::0;:::o;41471:31::-;;;;;;;;;;;;;:::o;20793:207::-;20923:4;20967:25;20952:40;;;:11;:40;;;;20945:47;;20793:207;;;:::o;30523:111::-;30580:4;30614:12;;30604:7;:22;30597:29;;30523:111;;;:::o;17677:98::-;17730:7;17757:10;17750:17;;17677:98;:::o;35686:196::-;35828:2;35801:15;:24;35817:7;35801:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35866:7;35862:2;35846:28;;35855:5;35846:28;;;;;;;;;;;;35686:196;;;:::o;33466:2102::-;33581:35;33619:20;33631:7;33619:11;:20::i;:::-;33581:58;;33652:22;33694:13;:18;;;33678:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33753:12;:10;:12::i;:::-;33729:36;;:20;33741:7;33729:11;:20::i;:::-;:36;;;33678:87;:154;;;;33782:50;33799:13;:18;;;33819:12;:10;:12::i;:::-;33782:16;:50::i;:::-;33678:154;33652:181;;33868:17;33846:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;34020:4;33998:26;;:13;:18;;;:26;;;33976:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;34123:1;34109:16;;:2;:16;;;;34101:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34180:43;34202:4;34208:2;34212:7;34221:1;34180:21;:43::i;:::-;34288:49;34305:1;34309:7;34318:13;:18;;;34288:8;:49::i;:::-;34663:1;34633:12;:18;34646:4;34633:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34707:1;34679:12;:16;34692:2;34679:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34753:2;34725:11;:20;34737:7;34725:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34815:15;34770:11;:20;34782:7;34770:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;35083:19;35115:1;35105:7;:11;35083:33;;35176:1;35135:43;;:11;:24;35147:11;35135:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35131:321;;;35203:20;35211:11;35203:7;:20::i;:::-;35199:238;;;35280:13;:18;;;35248:11;:24;35260:11;35248:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;35363:13;:54;;;35321:11;:24;35333:11;35321:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;35199:238;35131:321;34608:855;35499:7;35495:2;35480:27;;35489:4;35480:27;;;;;;;;;;;;35518:42;35539:4;35545:2;35549:7;35558:1;35518:20;:42::i;:::-;33570:1998;;33466:2102;;;:::o;10574:391::-;10703:6;10678:21;:31;;10656:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10780:12;10798:9;:14;;10820:6;10798:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10779:52;;;10864:7;10842:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;10645:320;10574:391;;:::o;25887:569::-;25975:21;;:::i;:::-;26022:16;26030:7;26022;:16::i;:::-;26014:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26128:12;26143:7;26128:22;;26123:245;26160:1;26152:4;:9;26123:245;;26190:31;26224:11;:17;26236:4;26224:17;;;;;;;;;;;26190:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26290:1;26264:28;;:9;:14;;;:28;;;26260:93;;26324:9;26317:16;;;;;;26260:93;26171:197;26163:6;;;;;;;;26123:245;;;;26391:57;;;;;;;;;;:::i;:::-;;;;;;;;25887:569;;;;:::o;40816:173::-;40872:16;40891:6;;;;;;;;;;;40872:25;;40917:8;40908:6;;:17;;;;;;;;;;;;;;;;;;40972:8;40941:40;;40962:8;40941:40;;;;;;;;;;;;40861:128;40816:173;:::o;30642:104::-;30711:27;30721:2;30725:8;30711:27;;;;;;;;;;;;:9;:27::i;:::-;30642:104;;:::o;36447:985::-;36602:4;36623:15;:2;:13;;;:15::i;:::-;36619:806;;;36692:2;36676:36;;;36735:12;:10;:12::i;:::-;36770:4;36797:7;36827:5;36676:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36655:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37055:1;37038:6;:13;:18;37034:321;;;37081:109;;;;;;;;;;:::i;:::-;;;;;;;;37034:321;37305:6;37299:13;37290:6;37286:2;37282:15;37275:38;36655:715;36925:45;;;36915:55;;;:6;:55;;;;36908:62;;;;;36619:806;37409:4;37402:11;;36447:985;;;;;;;:::o;43698:110::-;43758:13;43791:9;43784:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43698:110;:::o;18204:723::-;18260:13;18490:1;18481:5;:10;18477:53;;;18508:10;;;;;;;;;;;;;;;;;;;;;18477:53;18540:12;18555:5;18540:20;;18571:14;18596:78;18611:1;18603:4;:9;18596:78;;18629:8;;;;;:::i;:::-;;;;18660:2;18652:10;;;;;:::i;:::-;;;18596:78;;;18684:19;18716:6;18706:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18684:39;;18734:154;18750:1;18741:5;:10;18734:154;;18778:1;18768:11;;;;;:::i;:::-;;;18845:2;18837:5;:10;;;;:::i;:::-;18824:2;:24;;;;:::i;:::-;18811:39;;18794:6;18801;18794:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18874:2;18865:11;;;;;:::i;:::-;;;18734:154;;;18912:6;18898:21;;;;;18204:723;;;;:::o;37920:159::-;;;;;:::o;38491:158::-;;;;;:::o;31109:163::-;31232:32;31238:2;31242:8;31252:5;31259:4;31232:5;:32::i;:::-;31109:163;;;:::o;9252:387::-;9312:4;9520:12;9587:7;9575:20;9567:28;;9630:1;9623:4;:8;9616:15;;;9252:387;;;:::o;31531:1681::-;31670:20;31693:12;;31670:35;;31738:1;31724:16;;:2;:16;;;;31716:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31809:1;31797:8;:13;;31789:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31868:61;31898:1;31902:2;31906:12;31920:8;31868:21;:61::i;:::-;32243:8;32207:12;:16;32220:2;32207:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32308:8;32267:12;:16;32280:2;32267:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32367:2;32334:11;:25;32346:12;32334:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32434:15;32384:11;:25;32396:12;32384:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32467:20;32490:12;32467:35;;32524:9;32519:558;32539:8;32535:1;:12;32519:558;;;32603:12;32599:2;32578:38;;32595:1;32578:38;;;;;;;;;;;;32639:4;32635:392;;;32702:202;32763:1;32796:2;32829:12;32872:5;32702:22;:202::i;:::-;32668:339;;;;;;;;;;;;:::i;:::-;;;;;;;;;32635:392;33047:14;;;;;;;32549:3;;;;;;;32519:558;;;;33108:12;33093;:27;;;;32182:950;33144:60;33173:1;33177:2;33181:12;33195:8;33144:20;:60::i;:::-;31659:1553;31531:1681;;;;:::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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7223:53;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7341:50;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8662:220;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;9034:220;;;:::o;9260:366::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9406:220;;;:::o;9632:365::-;9774:3;9795:66;9859:1;9854:3;9795:66;:::i;:::-;9788:73;;9870:93;9959:3;9870:93;:::i;:::-;9988:2;9983:3;9979:12;9972:19;;9778:219;;;:::o;10003:366::-;10145:3;10166:67;10230:2;10225:3;10166:67;:::i;:::-;10159:74;;10242:93;10331:3;10242:93;:::i;:::-;10360:2;10355:3;10351:12;10344:19;;10149:220;;;:::o;10375:366::-;10517:3;10538:67;10602:2;10597:3;10538:67;:::i;:::-;10531:74;;10614:93;10703:3;10614:93;:::i;:::-;10732:2;10727:3;10723:12;10716:19;;10521:220;;;:::o;10747:366::-;10889:3;10910:67;10974:2;10969:3;10910:67;:::i;:::-;10903:74;;10986:93;11075:3;10986:93;:::i;:::-;11104:2;11099:3;11095:12;11088:19;;10893:220;;;:::o;11119:366::-;11261:3;11282:67;11346:2;11341:3;11282:67;:::i;:::-;11275:74;;11358:93;11447:3;11358:93;:::i;:::-;11476:2;11471:3;11467:12;11460:19;;11265:220;;;:::o;11491:366::-;11633:3;11654:67;11718:2;11713:3;11654:67;:::i;:::-;11647:74;;11730:93;11819:3;11730:93;:::i;:::-;11848:2;11843:3;11839:12;11832:19;;11637:220;;;:::o;11863:366::-;12005:3;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12102:93;12191:3;12102:93;:::i;:::-;12220:2;12215:3;12211:12;12204:19;;12009:220;;;:::o;12235:366::-;12377:3;12398:67;12462:2;12457:3;12398:67;:::i;:::-;12391:74;;12474:93;12563:3;12474:93;:::i;:::-;12592:2;12587:3;12583:12;12576:19;;12381:220;;;:::o;12607:366::-;12749:3;12770:67;12834:2;12829:3;12770:67;:::i;:::-;12763:74;;12846:93;12935:3;12846:93;:::i;:::-;12964:2;12959:3;12955:12;12948:19;;12753:220;;;:::o;12979:366::-;13121:3;13142:67;13206:2;13201:3;13142:67;:::i;:::-;13135:74;;13218:93;13307:3;13218:93;:::i;:::-;13336:2;13331:3;13327:12;13320:19;;13125:220;;;:::o;13351:366::-;13493:3;13514:67;13578:2;13573:3;13514:67;:::i;:::-;13507:74;;13590:93;13679:3;13590:93;:::i;:::-;13708:2;13703:3;13699:12;13692:19;;13497:220;;;:::o;13723:366::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13869:220;;;:::o;14095:366::-;14237:3;14258:67;14322:2;14317:3;14258:67;:::i;:::-;14251:74;;14334:93;14423:3;14334:93;:::i;:::-;14452:2;14447:3;14443:12;14436:19;;14241:220;;;:::o;14467:366::-;14609:3;14630:67;14694:2;14689:3;14630:67;:::i;:::-;14623:74;;14706:93;14795:3;14706:93;:::i;:::-;14824:2;14819:3;14815:12;14808:19;;14613:220;;;:::o;14839:366::-;14981:3;15002:67;15066:2;15061:3;15002:67;:::i;:::-;14995:74;;15078:93;15167:3;15078:93;:::i;:::-;15196:2;15191:3;15187:12;15180:19;;14985:220;;;:::o;15211:366::-;15353:3;15374:67;15438:2;15433:3;15374:67;:::i;:::-;15367:74;;15450:93;15539:3;15450:93;:::i;:::-;15568:2;15563:3;15559:12;15552:19;;15357:220;;;:::o;15583:366::-;15725:3;15746:67;15810:2;15805:3;15746:67;:::i;:::-;15739:74;;15822:93;15911:3;15822:93;:::i;:::-;15940:2;15935:3;15931:12;15924:19;;15729:220;;;:::o;15955:398::-;16114:3;16135:83;16216:1;16211:3;16135:83;:::i;:::-;16128:90;;16227:93;16316:3;16227:93;:::i;:::-;16345:1;16340:3;16336:11;16329:18;;16118:235;;;:::o;16359:366::-;16501:3;16522:67;16586:2;16581:3;16522:67;:::i;:::-;16515:74;;16598:93;16687:3;16598:93;:::i;:::-;16716:2;16711:3;16707:12;16700:19;;16505:220;;;:::o;16731:366::-;16873:3;16894:67;16958:2;16953:3;16894:67;:::i;:::-;16887:74;;16970:93;17059:3;16970:93;:::i;:::-;17088:2;17083:3;17079:12;17072:19;;16877:220;;;:::o;17103:366::-;17245:3;17266:67;17330:2;17325:3;17266:67;:::i;:::-;17259:74;;17342:93;17431:3;17342:93;:::i;:::-;17460:2;17455:3;17451:12;17444:19;;17249:220;;;:::o;17475:366::-;17617:3;17638:67;17702:2;17697:3;17638:67;:::i;:::-;17631:74;;17714:93;17803:3;17714:93;:::i;:::-;17832:2;17827:3;17823:12;17816:19;;17621:220;;;:::o;17847:366::-;17989:3;18010:67;18074:2;18069:3;18010:67;:::i;:::-;18003:74;;18086:93;18175:3;18086:93;:::i;:::-;18204:2;18199:3;18195:12;18188:19;;17993:220;;;:::o;18219:366::-;18361:3;18382:67;18446:2;18441:3;18382:67;:::i;:::-;18375:74;;18458:93;18547:3;18458:93;:::i;:::-;18576:2;18571:3;18567:12;18560:19;;18365:220;;;:::o;18591:366::-;18733:3;18754:67;18818:2;18813:3;18754:67;:::i;:::-;18747:74;;18830:93;18919:3;18830:93;:::i;:::-;18948:2;18943:3;18939:12;18932:19;;18737:220;;;:::o;18963:366::-;19105:3;19126:67;19190:2;19185:3;19126:67;:::i;:::-;19119:74;;19202:93;19291:3;19202:93;:::i;:::-;19320:2;19315:3;19311:12;19304:19;;19109:220;;;:::o;19335:118::-;19422:24;19440:5;19422:24;:::i;:::-;19417:3;19410:37;19400:53;;:::o;19459:435::-;19639:3;19661:95;19752:3;19743:6;19661:95;:::i;:::-;19654:102;;19773:95;19864:3;19855:6;19773:95;:::i;:::-;19766:102;;19885:3;19878:10;;19643:251;;;;;:::o;19900:379::-;20084:3;20106:147;20249:3;20106:147;:::i;:::-;20099:154;;20270:3;20263:10;;20088:191;;;:::o;20285:222::-;20378:4;20416:2;20405:9;20401:18;20393:26;;20429:71;20497:1;20486:9;20482:17;20473:6;20429:71;:::i;:::-;20383:124;;;;:::o;20513:640::-;20708:4;20746:3;20735:9;20731:19;20723:27;;20760:71;20828:1;20817:9;20813:17;20804:6;20760:71;:::i;:::-;20841:72;20909:2;20898:9;20894:18;20885:6;20841:72;:::i;:::-;20923;20991:2;20980:9;20976:18;20967:6;20923:72;:::i;:::-;21042:9;21036:4;21032:20;21027:2;21016:9;21012:18;21005:48;21070:76;21141:4;21132:6;21070:76;:::i;:::-;21062:84;;20713:440;;;;;;;:::o;21159:210::-;21246:4;21284:2;21273:9;21269:18;21261:26;;21297:65;21359:1;21348:9;21344:17;21335:6;21297:65;:::i;:::-;21251:118;;;;:::o;21375:313::-;21488:4;21526:2;21515:9;21511:18;21503:26;;21575:9;21569:4;21565:20;21561:1;21550:9;21546:17;21539:47;21603:78;21676:4;21667:6;21603:78;:::i;:::-;21595:86;;21493:195;;;;:::o;21694:419::-;21860:4;21898:2;21887:9;21883:18;21875:26;;21947:9;21941:4;21937:20;21933:1;21922:9;21918:17;21911:47;21975:131;22101:4;21975:131;:::i;:::-;21967:139;;21865:248;;;:::o;22119:419::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22290:248;;;:::o;22544:419::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22715:248;;;:::o;22969:419::-;23135:4;23173:2;23162:9;23158:18;23150:26;;23222:9;23216:4;23212:20;23208:1;23197:9;23193:17;23186:47;23250:131;23376:4;23250:131;:::i;:::-;23242:139;;23140:248;;;:::o;23394:419::-;23560:4;23598:2;23587:9;23583:18;23575:26;;23647:9;23641:4;23637:20;23633:1;23622:9;23618:17;23611:47;23675:131;23801:4;23675:131;:::i;:::-;23667:139;;23565:248;;;:::o;23819:419::-;23985:4;24023:2;24012:9;24008:18;24000:26;;24072:9;24066:4;24062:20;24058:1;24047:9;24043:17;24036:47;24100:131;24226:4;24100:131;:::i;:::-;24092:139;;23990:248;;;:::o;24244:419::-;24410:4;24448:2;24437:9;24433:18;24425:26;;24497:9;24491:4;24487:20;24483:1;24472:9;24468:17;24461:47;24525:131;24651:4;24525:131;:::i;:::-;24517:139;;24415:248;;;:::o;24669:419::-;24835:4;24873:2;24862:9;24858:18;24850:26;;24922:9;24916:4;24912:20;24908:1;24897:9;24893:17;24886:47;24950:131;25076:4;24950:131;:::i;:::-;24942:139;;24840:248;;;:::o;25094:419::-;25260:4;25298:2;25287:9;25283:18;25275:26;;25347:9;25341:4;25337:20;25333:1;25322:9;25318:17;25311:47;25375:131;25501:4;25375:131;:::i;:::-;25367:139;;25265:248;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25690:248;;;:::o;25944:419::-;26110:4;26148:2;26137:9;26133:18;26125:26;;26197:9;26191:4;26187:20;26183:1;26172:9;26168:17;26161:47;26225:131;26351:4;26225:131;:::i;:::-;26217:139;;26115:248;;;:::o;26369:419::-;26535:4;26573:2;26562:9;26558:18;26550:26;;26622:9;26616:4;26612:20;26608:1;26597:9;26593:17;26586:47;26650:131;26776:4;26650:131;:::i;:::-;26642:139;;26540:248;;;:::o;26794:419::-;26960:4;26998:2;26987:9;26983:18;26975:26;;27047:9;27041:4;27037:20;27033:1;27022:9;27018:17;27011:47;27075:131;27201:4;27075:131;:::i;:::-;27067:139;;26965:248;;;:::o;27219:419::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27472:9;27466:4;27462:20;27458:1;27447:9;27443:17;27436:47;27500:131;27626:4;27500:131;:::i;:::-;27492:139;;27390:248;;;:::o;27644:419::-;27810:4;27848:2;27837:9;27833:18;27825:26;;27897:9;27891:4;27887:20;27883:1;27872:9;27868:17;27861:47;27925:131;28051:4;27925:131;:::i;:::-;27917:139;;27815:248;;;:::o;28069:419::-;28235:4;28273:2;28262:9;28258:18;28250:26;;28322:9;28316:4;28312:20;28308:1;28297:9;28293:17;28286:47;28350:131;28476:4;28350:131;:::i;:::-;28342:139;;28240:248;;;:::o;28494:419::-;28660:4;28698:2;28687:9;28683:18;28675:26;;28747:9;28741:4;28737:20;28733:1;28722:9;28718:17;28711:47;28775:131;28901:4;28775:131;:::i;:::-;28767:139;;28665:248;;;:::o;28919:419::-;29085:4;29123:2;29112:9;29108:18;29100:26;;29172:9;29166:4;29162:20;29158:1;29147:9;29143:17;29136:47;29200:131;29326:4;29200:131;:::i;:::-;29192:139;;29090:248;;;:::o;29344:419::-;29510:4;29548:2;29537:9;29533:18;29525:26;;29597:9;29591:4;29587:20;29583:1;29572:9;29568:17;29561:47;29625:131;29751:4;29625:131;:::i;:::-;29617:139;;29515:248;;;:::o;29769:419::-;29935:4;29973:2;29962:9;29958:18;29950:26;;30022:9;30016:4;30012:20;30008:1;29997:9;29993:17;29986:47;30050:131;30176:4;30050:131;:::i;:::-;30042:139;;29940:248;;;:::o;30194:419::-;30360:4;30398:2;30387:9;30383:18;30375:26;;30447:9;30441:4;30437:20;30433:1;30422:9;30418:17;30411:47;30475:131;30601:4;30475:131;:::i;:::-;30467:139;;30365:248;;;:::o;30619:419::-;30785:4;30823:2;30812:9;30808:18;30800:26;;30872:9;30866:4;30862:20;30858:1;30847:9;30843:17;30836:47;30900:131;31026:4;30900:131;:::i;:::-;30892:139;;30790:248;;;:::o;31044:419::-;31210:4;31248:2;31237:9;31233:18;31225:26;;31297:9;31291:4;31287:20;31283:1;31272:9;31268:17;31261:47;31325:131;31451:4;31325:131;:::i;:::-;31317:139;;31215:248;;;:::o;31469:419::-;31635:4;31673:2;31662:9;31658:18;31650:26;;31722:9;31716:4;31712:20;31708:1;31697:9;31693:17;31686:47;31750:131;31876:4;31750:131;:::i;:::-;31742:139;;31640:248;;;:::o;31894:419::-;32060:4;32098:2;32087:9;32083:18;32075:26;;32147:9;32141:4;32137:20;32133:1;32122:9;32118:17;32111:47;32175:131;32301:4;32175:131;:::i;:::-;32167:139;;32065:248;;;:::o;32319:419::-;32485:4;32523:2;32512:9;32508:18;32500:26;;32572:9;32566:4;32562:20;32558:1;32547:9;32543:17;32536:47;32600:131;32726:4;32600:131;:::i;:::-;32592:139;;32490:248;;;:::o;32744:419::-;32910:4;32948:2;32937:9;32933:18;32925:26;;32997:9;32991:4;32987:20;32983:1;32972:9;32968:17;32961:47;33025:131;33151:4;33025:131;:::i;:::-;33017:139;;32915:248;;;:::o;33169:419::-;33335:4;33373:2;33362:9;33358:18;33350:26;;33422:9;33416:4;33412:20;33408:1;33397:9;33393:17;33386:47;33450:131;33576:4;33450:131;:::i;:::-;33442:139;;33340:248;;;:::o;33594:222::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33738:71;33806:1;33795:9;33791:17;33782:6;33738:71;:::i;:::-;33692:124;;;;:::o;33822:129::-;33856:6;33883:20;;:::i;:::-;33873:30;;33912:33;33940:4;33932:6;33912:33;:::i;:::-;33863:88;;;:::o;33957:75::-;33990:6;34023:2;34017:9;34007:19;;33997:35;:::o;34038:307::-;34099:4;34189:18;34181:6;34178:30;34175:2;;;34211:18;;:::i;:::-;34175:2;34249:29;34271:6;34249:29;:::i;:::-;34241:37;;34333:4;34327;34323:15;34315:23;;34104:241;;;:::o;34351:308::-;34413:4;34503:18;34495:6;34492:30;34489:2;;;34525:18;;:::i;:::-;34489:2;34563:29;34585:6;34563:29;:::i;:::-;34555:37;;34647:4;34641;34637:15;34629:23;;34418:241;;;:::o;34665:98::-;34716:6;34750:5;34744:12;34734:22;;34723:40;;;:::o;34769:99::-;34821:6;34855:5;34849:12;34839:22;;34828:40;;;:::o;34874:168::-;34957:11;34991:6;34986:3;34979:19;35031:4;35026:3;35022:14;35007:29;;34969:73;;;;:::o;35048:147::-;35149:11;35186:3;35171:18;;35161:34;;;;:::o;35201:169::-;35285:11;35319:6;35314:3;35307:19;35359:4;35354:3;35350:14;35335:29;;35297:73;;;;:::o;35376:148::-;35478:11;35515:3;35500:18;;35490:34;;;;:::o;35530:305::-;35570:3;35589:20;35607:1;35589:20;:::i;:::-;35584:25;;35623:20;35641:1;35623:20;:::i;:::-;35618:25;;35777:1;35709:66;35705:74;35702:1;35699:81;35696:2;;;35783:18;;:::i;:::-;35696:2;35827:1;35824;35820:9;35813:16;;35574:261;;;;:::o;35841:185::-;35881:1;35898:20;35916:1;35898:20;:::i;:::-;35893:25;;35932:20;35950:1;35932:20;:::i;:::-;35927:25;;35971:1;35961:2;;35976:18;;:::i;:::-;35961:2;36018:1;36015;36011:9;36006:14;;35883:143;;;;:::o;36032:348::-;36072:7;36095:20;36113:1;36095:20;:::i;:::-;36090:25;;36129:20;36147:1;36129:20;:::i;:::-;36124:25;;36317:1;36249:66;36245:74;36242:1;36239:81;36234:1;36227:9;36220:17;36216:105;36213:2;;;36324:18;;:::i;:::-;36213:2;36372:1;36369;36365:9;36354:20;;36080:300;;;;:::o;36386:191::-;36426:4;36446:20;36464:1;36446:20;:::i;:::-;36441:25;;36480:20;36498:1;36480:20;:::i;:::-;36475:25;;36519:1;36516;36513:8;36510:2;;;36524:18;;:::i;:::-;36510:2;36569:1;36566;36562:9;36554:17;;36431:146;;;;:::o;36583:96::-;36620:7;36649:24;36667:5;36649:24;:::i;:::-;36638:35;;36628:51;;;:::o;36685:90::-;36719:7;36762:5;36755:13;36748:21;36737:32;;36727:48;;;:::o;36781:149::-;36817:7;36857:66;36850:5;36846:78;36835:89;;36825:105;;;:::o;36936:126::-;36973:7;37013:42;37006:5;37002:54;36991:65;;36981:81;;;:::o;37068:77::-;37105:7;37134:5;37123:16;;37113:32;;;:::o;37151:154::-;37235:6;37230:3;37225;37212:30;37297:1;37288:6;37283:3;37279:16;37272:27;37202:103;;;:::o;37311:307::-;37379:1;37389:113;37403:6;37400:1;37397:13;37389:113;;;37488:1;37483:3;37479:11;37473:18;37469:1;37464:3;37460:11;37453:39;37425:2;37422:1;37418:10;37413:15;;37389:113;;;37520:6;37517:1;37514:13;37511:2;;;37600:1;37591:6;37586:3;37582:16;37575:27;37511:2;37360:258;;;;:::o;37624:320::-;37668:6;37705:1;37699:4;37695:12;37685:22;;37752:1;37746:4;37742:12;37773:18;37763:2;;37829:4;37821:6;37817:17;37807:27;;37763:2;37891;37883:6;37880:14;37860:18;37857:38;37854:2;;;37910:18;;:::i;:::-;37854:2;37675:269;;;;:::o;37950:281::-;38033:27;38055:4;38033:27;:::i;:::-;38025:6;38021:40;38163:6;38151:10;38148:22;38127:18;38115:10;38112:34;38109:62;38106:2;;;38174:18;;:::i;:::-;38106:2;38214:10;38210:2;38203:22;37993:238;;;:::o;38237:233::-;38276:3;38299:24;38317:5;38299:24;:::i;:::-;38290:33;;38345:66;38338:5;38335:77;38332:2;;;38415:18;;:::i;:::-;38332:2;38462:1;38455:5;38451:13;38444:20;;38280:190;;;:::o;38476:176::-;38508:1;38525:20;38543:1;38525:20;:::i;:::-;38520:25;;38559:20;38577:1;38559:20;:::i;:::-;38554:25;;38598:1;38588:2;;38603:18;;:::i;:::-;38588:2;38644:1;38641;38637:9;38632:14;;38510:142;;;;:::o;38658:180::-;38706:77;38703:1;38696:88;38803:4;38800:1;38793:15;38827:4;38824:1;38817:15;38844:180;38892:77;38889:1;38882:88;38989:4;38986:1;38979:15;39013:4;39010:1;39003:15;39030:180;39078:77;39075:1;39068:88;39175:4;39172:1;39165:15;39199:4;39196:1;39189:15;39216:180;39264:77;39261:1;39254:88;39361:4;39358:1;39351:15;39385:4;39382:1;39375:15;39402:180;39450:77;39447:1;39440:88;39547:4;39544:1;39537:15;39571:4;39568:1;39561:15;39588:117;39697:1;39694;39687:12;39711:117;39820:1;39817;39810:12;39834:117;39943:1;39940;39933:12;39957:117;40066:1;40063;40056:12;40080:102;40121:6;40172:2;40168:7;40163:2;40156:5;40152:14;40148:28;40138:38;;40128:54;;;:::o;40188:221::-;40328:34;40324:1;40316:6;40312:14;40305:58;40397:4;40392:2;40384:6;40380:15;40373:29;40294:115;:::o;40415:169::-;40555:21;40551:1;40543:6;40539:14;40532:45;40521:63;:::o;40590:168::-;40730:20;40726:1;40718:6;40714:14;40707:44;40696:62;:::o;40764:158::-;40904:10;40900:1;40892:6;40888:14;40881:34;40870:52;:::o;40928:225::-;41068:34;41064:1;41056:6;41052:14;41045:58;41137:8;41132:2;41124:6;41120:15;41113:33;41034:119;:::o;41159:229::-;41299:34;41295:1;41287:6;41283:14;41276:58;41368:12;41363:2;41355:6;41351:15;41344:37;41265:123;:::o;41394:222::-;41534:34;41530:1;41522:6;41518:14;41511:58;41603:5;41598:2;41590:6;41586:15;41579:30;41500:116;:::o;41622:224::-;41762:34;41758:1;41750:6;41746:14;41739:58;41831:7;41826:2;41818:6;41814:15;41807:32;41728:118;:::o;41852:245::-;41992:34;41988:1;41980:6;41976:14;41969:58;42061:28;42056:2;42048:6;42044:15;42037:53;41958:139;:::o;42103:179::-;42243:31;42239:1;42231:6;42227:14;42220:55;42209:73;:::o;42288:166::-;42428:18;42424:1;42416:6;42412:14;42405:42;42394:60;:::o;42460:244::-;42600:34;42596:1;42588:6;42584:14;42577:58;42669:27;42664:2;42656:6;42652:15;42645:52;42566:138;:::o;42710:230::-;42850:34;42846:1;42838:6;42834:14;42827:58;42919:13;42914:2;42906:6;42902:15;42895:38;42816:124;:::o;42946:225::-;43086:34;43082:1;43074:6;43070:14;43063:58;43155:8;43150:2;43142:6;43138:15;43131:33;43052:119;:::o;43177:182::-;43317:34;43313:1;43305:6;43301:14;43294:58;43283:76;:::o;43365:234::-;43505:34;43501:1;43493:6;43489:14;43482:58;43574:17;43569:2;43561:6;43557:15;43550:42;43471:128;:::o;43605:176::-;43745:28;43741:1;43733:6;43729:14;43722:52;43711:70;:::o;43787:237::-;43927:34;43923:1;43915:6;43911:14;43904:58;43996:20;43991:2;43983:6;43979:15;43972:45;43893:131;:::o;44030:222::-;44170:34;44166:1;44158:6;44154:14;44147:58;44239:5;44234:2;44226:6;44222:15;44215:30;44136:116;:::o;44258:221::-;44398:34;44394:1;44386:6;44382:14;44375:58;44467:4;44462:2;44454:6;44450:15;44443:29;44364:115;:::o;44485:114::-;44591:8;:::o;44605:238::-;44745:34;44741:1;44733:6;44729:14;44722:58;44814:21;44809:2;44801:6;44797:15;44790:46;44711:132;:::o;44849:168::-;44989:20;44985:1;44977:6;44973:14;44966:44;44955:62;:::o;45023:220::-;45163:34;45159:1;45151:6;45147:14;45140:58;45232:3;45227:2;45219:6;45215:15;45208:28;45129:114;:::o;45249:227::-;45389:34;45385:1;45377:6;45373:14;45366:58;45458:10;45453:2;45445:6;45441:15;45434:35;45355:121;:::o;45482:233::-;45622:34;45618:1;45610:6;45606:14;45599:58;45691:16;45686:2;45678:6;45674:15;45667:41;45588:127;:::o;45721:182::-;45861:34;45857:1;45849:6;45845:14;45838:58;45827:76;:::o;45909:234::-;46049:34;46045:1;46037:6;46033:14;46026:58;46118:17;46113:2;46105:6;46101:15;46094:42;46015:128;:::o;46149:232::-;46289:34;46285:1;46277:6;46273:14;46266:58;46358:15;46353:2;46345:6;46341:15;46334:40;46255:126;:::o;46387:122::-;46460:24;46478:5;46460:24;:::i;:::-;46453:5;46450:35;46440:2;;46499:1;46496;46489:12;46440:2;46430:79;:::o;46515:116::-;46585:21;46600:5;46585:21;:::i;:::-;46578:5;46575:32;46565:2;;46621:1;46618;46611:12;46565:2;46555:76;:::o;46637:120::-;46709:23;46726:5;46709:23;:::i;:::-;46702:5;46699:34;46689:2;;46747:1;46744;46737:12;46689:2;46679:78;:::o;46763:122::-;46836:24;46854:5;46836:24;:::i;:::-;46829:5;46826:35;46816:2;;46875:1;46872;46865:12;46816:2;46806:79;:::o
Swarm Source
ipfs://5cde493d6ac93b5d5c1821cab70851c6ef6f5115b2a8a720a2b9fd4bf273cb41
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.