ERC-721
Overview
Max Total Supply
3,300 AVAC
Holders
784
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 AVACLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Voyage
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-24 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @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/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @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/Address.sol /** * @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/token/ERC721/extensions/IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @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/utils/Context.sol /** * @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/token/ERC721/ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract Voyage is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.07 ether; uint256 public maxSupply = 3300; uint256 public maxMintAmount = 10; bool public paused = true; bool public revealed = false; mapping(address => uint256) public addressMintedBalance; constructor() ERC721("Atlantic Voyage Ape Club", "AVAC") { setNotRevealedURI("ipfs://QmQGoNj55uTDvjqsQezYzuBHQPwQXHPGEnMvE5DjQ5V2f6/hidden.json"); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { // This will payout the owner the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200033f565b5066f8b0a10e470000600e55610ce4600f55600a6010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550348015620000ab57600080fd5b506040518060400160405280601881526020017f41746c616e74696320566f796167652041706520436c756200000000000000008152506040518060400160405280600481526020017f41564143000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001309291906200033f565b508060019080519060200190620001499291906200033f565b5050506200016c620001606200019c60201b60201c565b620001a460201b60201c565b6200019660405180608001604052806041815260200162004cc0604191396200026a60201b60201c565b620004c9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027a6200019c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a06200031560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f09062000431565b60405180910390fd5b80600d9080519060200190620003119291906200033f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034d9062000464565b90600052602060002090601f016020900481019282620003715760008555620003bd565b82601f106200038c57805160ff1916838001178555620003bd565b82800160010185558215620003bd579182015b82811115620003bc5782518255916020019190600101906200039f565b5b509050620003cc9190620003d0565b5090565b5b80821115620003eb576000816000905550600101620003d1565b5090565b6000620003fe60208362000453565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200044c81620003ef565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200047d57607f821691505b602082108114156200049457620004936200049a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147e780620004d96000396000f3fe6080604052600436106102255760003560e01c80635c975abb11610123578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146107ed578063da3ef23f14610818578063e985e9c514610841578063f2c4ce1e1461087e578063f2fde38b146108a757610225565b8063a22cb4651461071c578063a475b5dd14610745578063b88d4fde1461075c578063c668286214610785578063c87b56dd146107b057610225565b8063715018a6116100f2578063715018a61461066a5780637f00c7a6146106815780638da5cb5b146106aa57806395d89b41146106d5578063a0712d681461070057610225565b80635c975abb1461059a5780636352211e146105c55780636c0360eb1461060257806370a082311461062d57610225565b8063239c70ae116101b1578063438b630011610175578063438b6300146104a357806344a0d68a146104e05780634f6ccce714610509578063518302271461054657806355f804b31461057157610225565b8063239c70ae146103df57806323b872dd1461040a5780632f745c59146104335780633ccfd60b1461047057806342842e0e1461047a57610225565b8063081c8c44116101f8578063081c8c44146102f8578063095ea7b31461032357806313faede61461034c57806318160ddd1461037757806318cae269146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613439565b6108d0565b60405161025e9190613fac565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613410565b61094a565b005b34801561029c57600080fd5b506102a56109e3565b6040516102b29190613fc7565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906134cc565b610a75565b6040516102ef9190613f23565b60405180910390f35b34801561030457600080fd5b5061030d610afa565b60405161031a9190613fc7565b60405180910390f35b34801561032f57600080fd5b5061034a600480360381019061034591906133d4565b610b88565b005b34801561035857600080fd5b50610361610ca0565b60405161036e91906142c9565b60405180910390f35b34801561038357600080fd5b5061038c610ca6565b60405161039991906142c9565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613269565b610cb3565b6040516103d691906142c9565b60405180910390f35b3480156103eb57600080fd5b506103f4610ccb565b60405161040191906142c9565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906132ce565b610cd1565b005b34801561043f57600080fd5b5061045a600480360381019061045591906133d4565b610d31565b60405161046791906142c9565b60405180910390f35b610478610dd6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906132ce565b610ed2565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613269565b610ef2565b6040516104d79190613f8a565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906134cc565b610fec565b005b34801561051557600080fd5b50610530600480360381019061052b91906134cc565b611072565b60405161053d91906142c9565b60405180910390f35b34801561055257600080fd5b5061055b611109565b6040516105689190613fac565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061348b565b61111c565b005b3480156105a657600080fd5b506105af6111b2565b6040516105bc9190613fac565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906134cc565b6111c5565b6040516105f99190613f23565b60405180910390f35b34801561060e57600080fd5b50610617611277565b6040516106249190613fc7565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613269565b611305565b60405161066191906142c9565b60405180910390f35b34801561067657600080fd5b5061067f6113bd565b005b34801561068d57600080fd5b506106a860048036038101906106a391906134cc565b611445565b005b3480156106b657600080fd5b506106bf6114cb565b6040516106cc9190613f23565b60405180910390f35b3480156106e157600080fd5b506106ea6114f5565b6040516106f79190613fc7565b60405180910390f35b61071a600480360381019061071591906134cc565b611587565b005b34801561072857600080fd5b50610743600480360381019061073e9190613398565b6117d6565b005b34801561075157600080fd5b5061075a611957565b005b34801561076857600080fd5b50610783600480360381019061077e919061331d565b6119f0565b005b34801561079157600080fd5b5061079a611a52565b6040516107a79190613fc7565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906134cc565b611ae0565b6040516107e49190613fc7565b60405180910390f35b3480156107f957600080fd5b50610802611c39565b60405161080f91906142c9565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061348b565b611c3f565b005b34801561084d57600080fd5b5061086860048036038101906108639190613292565b611cd5565b6040516108759190613fac565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a0919061348b565b611d69565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613269565b611dff565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610943575061094282611ef7565b5b9050919050565b610952611fd9565b73ffffffffffffffffffffffffffffffffffffffff166109706114cb565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906141a9565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f2906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e906145dc565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a8082611fe1565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690614189565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b07906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906145dc565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b505050505081565b6000610b93826111c5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90614229565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c23611fd9565b73ffffffffffffffffffffffffffffffffffffffff161480610c525750610c5181610c4c611fd9565b611cd5565b5b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906140c9565b60405180910390fd5b610c9b838361204d565b505050565b600e5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b60105481565b610ce2610cdc611fd9565b82612106565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890614269565b60405180910390fd5b610d2c8383836121e4565b505050565b6000610d3c83611305565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613fe9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dde611fd9565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e49906141a9565b60405180910390fd5b6000610e5c6114cb565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e7f90613f0e565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b5050905080610ecf57600080fd5b50565b610eed838383604051806020016040528060008152506119f0565b505050565b60606000610eff83611305565b905060008167ffffffffffffffff811115610f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f715781602001602082028036833780820191505090505b50905060005b82811015610fe157610f898582610d31565b828281518110610fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610fd99061460e565b915050610f77565b508092505050919050565b610ff4611fd9565b73ffffffffffffffffffffffffffffffffffffffff166110126114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f906141a9565b60405180910390fd5b80600e8190555050565b600061107c610ca6565b82106110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614289565b60405180910390fd5b600882815481106110f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611124611fd9565b73ffffffffffffffffffffffffffffffffffffffff166111426114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906141a9565b60405180910390fd5b80600b90805190602001906111ae92919061308d565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614109565b60405180910390fd5b80915050919050565b600b8054611284906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546112b0906145dc565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906140e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c5611fd9565b73ffffffffffffffffffffffffffffffffffffffff166113e36114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906141a9565b60405180910390fd5b6114436000612440565b565b61144d611fd9565b73ffffffffffffffffffffffffffffffffffffffff1661146b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906141a9565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611504906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611530906145dc565b801561157d5780601f106115525761010080835404028352916020019161157d565b820191906000526020600020905b81548152906001019060200180831161156057829003601f168201915b5050505050905090565b601160009054906101000a900460ff16156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce906141c9565b60405180910390fd5b60006115e1610ca6565b905060008211611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d906142a9565b60405180910390fd5b60105482111561166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290614149565b60405180910390fd5b600f54828261167a9190614411565b11156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614129565b60405180910390fd5b6116c36114cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117465781600e546117039190614498565b341015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614249565b60405180910390fd5b5b6000600190505b8281116117d157601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906117a49061460e565b91905055506117be3382846117b99190614411565b612506565b80806117c99061460e565b91505061174d565b505050565b6117de611fd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390614089565b60405180910390fd5b8060056000611859611fd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611906611fd9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194b9190613fac565b60405180910390a35050565b61195f611fd9565b73ffffffffffffffffffffffffffffffffffffffff1661197d6114cb565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906141a9565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b611a016119fb611fd9565b83612106565b611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3790614269565b60405180910390fd5b611a4c84848484612524565b50505050565b600c8054611a5f906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8b906145dc565b8015611ad85780601f10611aad57610100808354040283529160200191611ad8565b820191906000526020600020905b815481529060010190602001808311611abb57829003601f168201915b505050505081565b6060611aeb82611fe1565b611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614209565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611bd857600d8054611b53906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7f906145dc565b8015611bcc5780601f10611ba157610100808354040283529160200191611bcc565b820191906000526020600020905b815481529060010190602001808311611baf57829003601f168201915b50505050509050611c34565b6000611be2612580565b90506000815111611c025760405180602001604052806000815250611c30565b80611c0c84612612565b600c604051602001611c2093929190613edd565b6040516020818303038152906040525b9150505b919050565b600f5481565b611c47611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611c656114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb2906141a9565b60405180910390fd5b80600c9080519060200190611cd192919061308d565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d71611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611d8f6114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906141a9565b60405180910390fd5b80600d9080519060200190611dfb92919061308d565b5050565b611e07611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611e256114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e72906141a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290614029565b60405180910390fd5b611ef481612440565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fc257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fd25750611fd1826127bf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c0836111c5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061211182611fe1565b612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140a9565b60405180910390fd5b600061215b836111c5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ca57508373ffffffffffffffffffffffffffffffffffffffff166121b284610a75565b73ffffffffffffffffffffffffffffffffffffffff16145b806121db57506121da8185611cd5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612204826111c5565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614069565b60405180910390fd5b6122d5838383612829565b6122e060008261204d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233091906144f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123879190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252082826040518060200160405280600081525061293d565b5050565b61252f8484846121e4565b61253b84848484612998565b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190614009565b60405180910390fd5b50505050565b6060600b805461258f906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546125bb906145dc565b80156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b5050505050905090565b6060600082141561265a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ba565b600082905060005b6000821461268c5780806126759061460e565b915050600a826126859190614467565b9150612662565b60008167ffffffffffffffff8111156126ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127005781602001600182028036833780820191505090505b5090505b600085146127b35760018261271991906144f2565b9150600a856127289190614657565b60306127349190614411565b60f81b818381518110612770577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ac9190614467565b9450612704565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b34565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cea565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612e2d565b5b5b505050565b6129478383612eac565b6129546000848484612998565b612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614009565b60405180910390fd5b505050565b60006129b98473ffffffffffffffffffffffffffffffffffffffff1661307a565b15612b22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e2611fd9565b8786866040518563ffffffff1660e01b8152600401612a049493929190613f3e565b602060405180830381600087803b158015612a1e57600080fd5b505af1925050508015612a4f57506040513d601f19601f82011682018060405250810190612a4c9190613462565b60015b612ad2573d8060008114612a7f576040519150601f19603f3d011682016040523d82523d6000602084013e612a84565b606091505b50600081511415612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614009565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b27565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8a84611305565b612b9491906144f2565b9050600060076000848152602001908152602001600020549050818114612c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cfe91906144f2565b9050600060096000848152602001908152602001600020549050600060088381548110612d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e3883611305565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1390614169565b60405180910390fd5b612f2581611fe1565b15612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c90614049565b60405180910390fd5b612f7160008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc19190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613099906145dc565b90600052602060002090601f0160209004810192826130bb5760008555613102565b82601f106130d457805160ff1916838001178555613102565b82800160010185558215613102579182015b828111156131015782518255916020019190600101906130e6565b5b50905061310f9190613113565b5090565b5b8082111561312c576000816000905550600101613114565b5090565b600061314361313e84614315565b6142e4565b90508281526020810184848401111561315b57600080fd5b61316684828561459a565b509392505050565b600061318161317c84614345565b6142e4565b90508281526020810184848401111561319957600080fd5b6131a484828561459a565b509392505050565b6000813590506131bb81614755565b92915050565b6000813590506131d08161476c565b92915050565b6000813590506131e581614783565b92915050565b6000815190506131fa81614783565b92915050565b600082601f83011261321157600080fd5b8135613221848260208601613130565b91505092915050565b600082601f83011261323b57600080fd5b813561324b84826020860161316e565b91505092915050565b6000813590506132638161479a565b92915050565b60006020828403121561327b57600080fd5b6000613289848285016131ac565b91505092915050565b600080604083850312156132a557600080fd5b60006132b3858286016131ac565b92505060206132c4858286016131ac565b9150509250929050565b6000806000606084860312156132e357600080fd5b60006132f1868287016131ac565b9350506020613302868287016131ac565b925050604061331386828701613254565b9150509250925092565b6000806000806080858703121561333357600080fd5b6000613341878288016131ac565b9450506020613352878288016131ac565b935050604061336387828801613254565b925050606085013567ffffffffffffffff81111561338057600080fd5b61338c87828801613200565b91505092959194509250565b600080604083850312156133ab57600080fd5b60006133b9858286016131ac565b92505060206133ca858286016131c1565b9150509250929050565b600080604083850312156133e757600080fd5b60006133f5858286016131ac565b925050602061340685828601613254565b9150509250929050565b60006020828403121561342257600080fd5b6000613430848285016131c1565b91505092915050565b60006020828403121561344b57600080fd5b6000613459848285016131d6565b91505092915050565b60006020828403121561347457600080fd5b6000613482848285016131eb565b91505092915050565b60006020828403121561349d57600080fd5b600082013567ffffffffffffffff8111156134b757600080fd5b6134c38482850161322a565b91505092915050565b6000602082840312156134de57600080fd5b60006134ec84828501613254565b91505092915050565b60006135018383613ebf565b60208301905092915050565b61351681614526565b82525050565b60006135278261439a565b61353181856143c8565b935061353c83614375565b8060005b8381101561356d57815161355488826134f5565b975061355f836143bb565b925050600181019050613540565b5085935050505092915050565b61358381614538565b82525050565b6000613594826143a5565b61359e81856143d9565b93506135ae8185602086016145a9565b6135b781614744565b840191505092915050565b60006135cd826143b0565b6135d781856143f5565b93506135e78185602086016145a9565b6135f081614744565b840191505092915050565b6000613606826143b0565b6136108185614406565b93506136208185602086016145a9565b80840191505092915050565b60008154613639816145dc565b6136438186614406565b9450600182166000811461365e576001811461366f576136a2565b60ff198316865281860193506136a2565b61367885614385565b60005b8381101561369a5781548189015260018201915060208101905061367b565b838801955050505b50505092915050565b60006136b8602b836143f5565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061371e6032836143f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006137846026836143f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137ea601c836143f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061382a6024836143f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138906019836143f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006138d0602c836143f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139366038836143f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061399c602a836143f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a026029836143f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a686016836143f5565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000613aa86024836143f5565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b0e6020836143f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613b4e602c836143f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613bb46020836143f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613bf46016836143f5565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b6000613c346029836143f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c9a602f836143f5565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d006021836143f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d666000836143ea565b9150600082019050919050565b6000613d806012836143f5565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613dc06031836143f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e26602c836143f5565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613e8c601b836143f5565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b613ec881614590565b82525050565b613ed781614590565b82525050565b6000613ee982866135fb565b9150613ef582856135fb565b9150613f01828461362c565b9150819050949350505050565b6000613f1982613d59565b9150819050919050565b6000602082019050613f38600083018461350d565b92915050565b6000608082019050613f53600083018761350d565b613f60602083018661350d565b613f6d6040830185613ece565b8181036060830152613f7f8184613589565b905095945050505050565b60006020820190508181036000830152613fa4818461351c565b905092915050565b6000602082019050613fc1600083018461357a565b92915050565b60006020820190508181036000830152613fe181846135c2565b905092915050565b60006020820190508181036000830152614002816136ab565b9050919050565b6000602082019050818103600083015261402281613711565b9050919050565b6000602082019050818103600083015261404281613777565b9050919050565b60006020820190508181036000830152614062816137dd565b9050919050565b600060208201905081810360008301526140828161381d565b9050919050565b600060208201905081810360008301526140a281613883565b9050919050565b600060208201905081810360008301526140c2816138c3565b9050919050565b600060208201905081810360008301526140e281613929565b9050919050565b600060208201905081810360008301526141028161398f565b9050919050565b60006020820190508181036000830152614122816139f5565b9050919050565b6000602082019050818103600083015261414281613a5b565b9050919050565b6000602082019050818103600083015261416281613a9b565b9050919050565b6000602082019050818103600083015261418281613b01565b9050919050565b600060208201905081810360008301526141a281613b41565b9050919050565b600060208201905081810360008301526141c281613ba7565b9050919050565b600060208201905081810360008301526141e281613be7565b9050919050565b6000602082019050818103600083015261420281613c27565b9050919050565b6000602082019050818103600083015261422281613c8d565b9050919050565b6000602082019050818103600083015261424281613cf3565b9050919050565b6000602082019050818103600083015261426281613d73565b9050919050565b6000602082019050818103600083015261428281613db3565b9050919050565b600060208201905081810360008301526142a281613e19565b9050919050565b600060208201905081810360008301526142c281613e7f565b9050919050565b60006020820190506142de6000830184613ece565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561430b5761430a614715565b5b8060405250919050565b600067ffffffffffffffff8211156143305761432f614715565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143605761435f614715565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061441c82614590565b915061442783614590565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445c5761445b614688565b5b828201905092915050565b600061447282614590565b915061447d83614590565b92508261448d5761448c6146b7565b5b828204905092915050565b60006144a382614590565b91506144ae83614590565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e7576144e6614688565b5b828202905092915050565b60006144fd82614590565b915061450883614590565b92508282101561451b5761451a614688565b5b828203905092915050565b600061453182614570565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145c75780820151818401526020810190506145ac565b838111156145d6576000848401525b50505050565b600060028204905060018216806145f457607f821691505b60208210811415614608576146076146e6565b5b50919050565b600061461982614590565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464c5761464b614688565b5b600182019050919050565b600061466282614590565b915061466d83614590565b92508261467d5761467c6146b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61475e81614526565b811461476957600080fd5b50565b61477581614538565b811461478057600080fd5b50565b61478c81614544565b811461479757600080fd5b50565b6147a381614590565b81146147ae57600080fd5b5056fea2646970667358221220c48b576a1a4e2474f335d6dc676a683fe2c0dfe95087db37f010864c3f3d836d64736f6c63430008000033697066733a2f2f516d51476f4e6a3535755444766a717351657a597a7542485150775158485047456e4d764535446a5135563266362f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102255760003560e01c80635c975abb11610123578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146107ed578063da3ef23f14610818578063e985e9c514610841578063f2c4ce1e1461087e578063f2fde38b146108a757610225565b8063a22cb4651461071c578063a475b5dd14610745578063b88d4fde1461075c578063c668286214610785578063c87b56dd146107b057610225565b8063715018a6116100f2578063715018a61461066a5780637f00c7a6146106815780638da5cb5b146106aa57806395d89b41146106d5578063a0712d681461070057610225565b80635c975abb1461059a5780636352211e146105c55780636c0360eb1461060257806370a082311461062d57610225565b8063239c70ae116101b1578063438b630011610175578063438b6300146104a357806344a0d68a146104e05780634f6ccce714610509578063518302271461054657806355f804b31461057157610225565b8063239c70ae146103df57806323b872dd1461040a5780632f745c59146104335780633ccfd60b1461047057806342842e0e1461047a57610225565b8063081c8c44116101f8578063081c8c44146102f8578063095ea7b31461032357806313faede61461034c57806318160ddd1461037757806318cae269146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613439565b6108d0565b60405161025e9190613fac565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613410565b61094a565b005b34801561029c57600080fd5b506102a56109e3565b6040516102b29190613fc7565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906134cc565b610a75565b6040516102ef9190613f23565b60405180910390f35b34801561030457600080fd5b5061030d610afa565b60405161031a9190613fc7565b60405180910390f35b34801561032f57600080fd5b5061034a600480360381019061034591906133d4565b610b88565b005b34801561035857600080fd5b50610361610ca0565b60405161036e91906142c9565b60405180910390f35b34801561038357600080fd5b5061038c610ca6565b60405161039991906142c9565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613269565b610cb3565b6040516103d691906142c9565b60405180910390f35b3480156103eb57600080fd5b506103f4610ccb565b60405161040191906142c9565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906132ce565b610cd1565b005b34801561043f57600080fd5b5061045a600480360381019061045591906133d4565b610d31565b60405161046791906142c9565b60405180910390f35b610478610dd6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906132ce565b610ed2565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613269565b610ef2565b6040516104d79190613f8a565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906134cc565b610fec565b005b34801561051557600080fd5b50610530600480360381019061052b91906134cc565b611072565b60405161053d91906142c9565b60405180910390f35b34801561055257600080fd5b5061055b611109565b6040516105689190613fac565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061348b565b61111c565b005b3480156105a657600080fd5b506105af6111b2565b6040516105bc9190613fac565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906134cc565b6111c5565b6040516105f99190613f23565b60405180910390f35b34801561060e57600080fd5b50610617611277565b6040516106249190613fc7565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613269565b611305565b60405161066191906142c9565b60405180910390f35b34801561067657600080fd5b5061067f6113bd565b005b34801561068d57600080fd5b506106a860048036038101906106a391906134cc565b611445565b005b3480156106b657600080fd5b506106bf6114cb565b6040516106cc9190613f23565b60405180910390f35b3480156106e157600080fd5b506106ea6114f5565b6040516106f79190613fc7565b60405180910390f35b61071a600480360381019061071591906134cc565b611587565b005b34801561072857600080fd5b50610743600480360381019061073e9190613398565b6117d6565b005b34801561075157600080fd5b5061075a611957565b005b34801561076857600080fd5b50610783600480360381019061077e919061331d565b6119f0565b005b34801561079157600080fd5b5061079a611a52565b6040516107a79190613fc7565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906134cc565b611ae0565b6040516107e49190613fc7565b60405180910390f35b3480156107f957600080fd5b50610802611c39565b60405161080f91906142c9565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061348b565b611c3f565b005b34801561084d57600080fd5b5061086860048036038101906108639190613292565b611cd5565b6040516108759190613fac565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a0919061348b565b611d69565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613269565b611dff565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610943575061094282611ef7565b5b9050919050565b610952611fd9565b73ffffffffffffffffffffffffffffffffffffffff166109706114cb565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906141a9565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f2906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e906145dc565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a8082611fe1565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690614189565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b07906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906145dc565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b505050505081565b6000610b93826111c5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90614229565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c23611fd9565b73ffffffffffffffffffffffffffffffffffffffff161480610c525750610c5181610c4c611fd9565b611cd5565b5b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906140c9565b60405180910390fd5b610c9b838361204d565b505050565b600e5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b60105481565b610ce2610cdc611fd9565b82612106565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890614269565b60405180910390fd5b610d2c8383836121e4565b505050565b6000610d3c83611305565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613fe9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dde611fd9565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e49906141a9565b60405180910390fd5b6000610e5c6114cb565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e7f90613f0e565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b5050905080610ecf57600080fd5b50565b610eed838383604051806020016040528060008152506119f0565b505050565b60606000610eff83611305565b905060008167ffffffffffffffff811115610f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f715781602001602082028036833780820191505090505b50905060005b82811015610fe157610f898582610d31565b828281518110610fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610fd99061460e565b915050610f77565b508092505050919050565b610ff4611fd9565b73ffffffffffffffffffffffffffffffffffffffff166110126114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f906141a9565b60405180910390fd5b80600e8190555050565b600061107c610ca6565b82106110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614289565b60405180910390fd5b600882815481106110f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611124611fd9565b73ffffffffffffffffffffffffffffffffffffffff166111426114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906141a9565b60405180910390fd5b80600b90805190602001906111ae92919061308d565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614109565b60405180910390fd5b80915050919050565b600b8054611284906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546112b0906145dc565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906140e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c5611fd9565b73ffffffffffffffffffffffffffffffffffffffff166113e36114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906141a9565b60405180910390fd5b6114436000612440565b565b61144d611fd9565b73ffffffffffffffffffffffffffffffffffffffff1661146b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906141a9565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611504906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611530906145dc565b801561157d5780601f106115525761010080835404028352916020019161157d565b820191906000526020600020905b81548152906001019060200180831161156057829003601f168201915b5050505050905090565b601160009054906101000a900460ff16156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce906141c9565b60405180910390fd5b60006115e1610ca6565b905060008211611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d906142a9565b60405180910390fd5b60105482111561166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290614149565b60405180910390fd5b600f54828261167a9190614411565b11156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614129565b60405180910390fd5b6116c36114cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117465781600e546117039190614498565b341015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614249565b60405180910390fd5b5b6000600190505b8281116117d157601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906117a49061460e565b91905055506117be3382846117b99190614411565b612506565b80806117c99061460e565b91505061174d565b505050565b6117de611fd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390614089565b60405180910390fd5b8060056000611859611fd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611906611fd9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194b9190613fac565b60405180910390a35050565b61195f611fd9565b73ffffffffffffffffffffffffffffffffffffffff1661197d6114cb565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906141a9565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b611a016119fb611fd9565b83612106565b611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3790614269565b60405180910390fd5b611a4c84848484612524565b50505050565b600c8054611a5f906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8b906145dc565b8015611ad85780601f10611aad57610100808354040283529160200191611ad8565b820191906000526020600020905b815481529060010190602001808311611abb57829003601f168201915b505050505081565b6060611aeb82611fe1565b611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614209565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611bd857600d8054611b53906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7f906145dc565b8015611bcc5780601f10611ba157610100808354040283529160200191611bcc565b820191906000526020600020905b815481529060010190602001808311611baf57829003601f168201915b50505050509050611c34565b6000611be2612580565b90506000815111611c025760405180602001604052806000815250611c30565b80611c0c84612612565b600c604051602001611c2093929190613edd565b6040516020818303038152906040525b9150505b919050565b600f5481565b611c47611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611c656114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb2906141a9565b60405180910390fd5b80600c9080519060200190611cd192919061308d565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d71611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611d8f6114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906141a9565b60405180910390fd5b80600d9080519060200190611dfb92919061308d565b5050565b611e07611fd9565b73ffffffffffffffffffffffffffffffffffffffff16611e256114cb565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e72906141a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290614029565b60405180910390fd5b611ef481612440565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fc257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fd25750611fd1826127bf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c0836111c5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061211182611fe1565b612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140a9565b60405180910390fd5b600061215b836111c5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ca57508373ffffffffffffffffffffffffffffffffffffffff166121b284610a75565b73ffffffffffffffffffffffffffffffffffffffff16145b806121db57506121da8185611cd5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612204826111c5565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614069565b60405180910390fd5b6122d5838383612829565b6122e060008261204d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233091906144f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123879190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252082826040518060200160405280600081525061293d565b5050565b61252f8484846121e4565b61253b84848484612998565b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190614009565b60405180910390fd5b50505050565b6060600b805461258f906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546125bb906145dc565b80156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b5050505050905090565b6060600082141561265a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ba565b600082905060005b6000821461268c5780806126759061460e565b915050600a826126859190614467565b9150612662565b60008167ffffffffffffffff8111156126ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127005781602001600182028036833780820191505090505b5090505b600085146127b35760018261271991906144f2565b9150600a856127289190614657565b60306127349190614411565b60f81b818381518110612770577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ac9190614467565b9450612704565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b34565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cea565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612e2d565b5b5b505050565b6129478383612eac565b6129546000848484612998565b612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614009565b60405180910390fd5b505050565b60006129b98473ffffffffffffffffffffffffffffffffffffffff1661307a565b15612b22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e2611fd9565b8786866040518563ffffffff1660e01b8152600401612a049493929190613f3e565b602060405180830381600087803b158015612a1e57600080fd5b505af1925050508015612a4f57506040513d601f19601f82011682018060405250810190612a4c9190613462565b60015b612ad2573d8060008114612a7f576040519150601f19603f3d011682016040523d82523d6000602084013e612a84565b606091505b50600081511415612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614009565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b27565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8a84611305565b612b9491906144f2565b9050600060076000848152602001908152602001600020549050818114612c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cfe91906144f2565b9050600060096000848152602001908152602001600020549050600060088381548110612d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e3883611305565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1390614169565b60405180910390fd5b612f2581611fe1565b15612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c90614049565b60405180910390fd5b612f7160008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc19190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613099906145dc565b90600052602060002090601f0160209004810192826130bb5760008555613102565b82601f106130d457805160ff1916838001178555613102565b82800160010185558215613102579182015b828111156131015782518255916020019190600101906130e6565b5b50905061310f9190613113565b5090565b5b8082111561312c576000816000905550600101613114565b5090565b600061314361313e84614315565b6142e4565b90508281526020810184848401111561315b57600080fd5b61316684828561459a565b509392505050565b600061318161317c84614345565b6142e4565b90508281526020810184848401111561319957600080fd5b6131a484828561459a565b509392505050565b6000813590506131bb81614755565b92915050565b6000813590506131d08161476c565b92915050565b6000813590506131e581614783565b92915050565b6000815190506131fa81614783565b92915050565b600082601f83011261321157600080fd5b8135613221848260208601613130565b91505092915050565b600082601f83011261323b57600080fd5b813561324b84826020860161316e565b91505092915050565b6000813590506132638161479a565b92915050565b60006020828403121561327b57600080fd5b6000613289848285016131ac565b91505092915050565b600080604083850312156132a557600080fd5b60006132b3858286016131ac565b92505060206132c4858286016131ac565b9150509250929050565b6000806000606084860312156132e357600080fd5b60006132f1868287016131ac565b9350506020613302868287016131ac565b925050604061331386828701613254565b9150509250925092565b6000806000806080858703121561333357600080fd5b6000613341878288016131ac565b9450506020613352878288016131ac565b935050604061336387828801613254565b925050606085013567ffffffffffffffff81111561338057600080fd5b61338c87828801613200565b91505092959194509250565b600080604083850312156133ab57600080fd5b60006133b9858286016131ac565b92505060206133ca858286016131c1565b9150509250929050565b600080604083850312156133e757600080fd5b60006133f5858286016131ac565b925050602061340685828601613254565b9150509250929050565b60006020828403121561342257600080fd5b6000613430848285016131c1565b91505092915050565b60006020828403121561344b57600080fd5b6000613459848285016131d6565b91505092915050565b60006020828403121561347457600080fd5b6000613482848285016131eb565b91505092915050565b60006020828403121561349d57600080fd5b600082013567ffffffffffffffff8111156134b757600080fd5b6134c38482850161322a565b91505092915050565b6000602082840312156134de57600080fd5b60006134ec84828501613254565b91505092915050565b60006135018383613ebf565b60208301905092915050565b61351681614526565b82525050565b60006135278261439a565b61353181856143c8565b935061353c83614375565b8060005b8381101561356d57815161355488826134f5565b975061355f836143bb565b925050600181019050613540565b5085935050505092915050565b61358381614538565b82525050565b6000613594826143a5565b61359e81856143d9565b93506135ae8185602086016145a9565b6135b781614744565b840191505092915050565b60006135cd826143b0565b6135d781856143f5565b93506135e78185602086016145a9565b6135f081614744565b840191505092915050565b6000613606826143b0565b6136108185614406565b93506136208185602086016145a9565b80840191505092915050565b60008154613639816145dc565b6136438186614406565b9450600182166000811461365e576001811461366f576136a2565b60ff198316865281860193506136a2565b61367885614385565b60005b8381101561369a5781548189015260018201915060208101905061367b565b838801955050505b50505092915050565b60006136b8602b836143f5565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061371e6032836143f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006137846026836143f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137ea601c836143f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061382a6024836143f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138906019836143f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006138d0602c836143f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139366038836143f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061399c602a836143f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a026029836143f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a686016836143f5565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000613aa86024836143f5565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b0e6020836143f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613b4e602c836143f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613bb46020836143f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613bf46016836143f5565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b6000613c346029836143f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c9a602f836143f5565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d006021836143f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d666000836143ea565b9150600082019050919050565b6000613d806012836143f5565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613dc06031836143f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e26602c836143f5565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613e8c601b836143f5565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b613ec881614590565b82525050565b613ed781614590565b82525050565b6000613ee982866135fb565b9150613ef582856135fb565b9150613f01828461362c565b9150819050949350505050565b6000613f1982613d59565b9150819050919050565b6000602082019050613f38600083018461350d565b92915050565b6000608082019050613f53600083018761350d565b613f60602083018661350d565b613f6d6040830185613ece565b8181036060830152613f7f8184613589565b905095945050505050565b60006020820190508181036000830152613fa4818461351c565b905092915050565b6000602082019050613fc1600083018461357a565b92915050565b60006020820190508181036000830152613fe181846135c2565b905092915050565b60006020820190508181036000830152614002816136ab565b9050919050565b6000602082019050818103600083015261402281613711565b9050919050565b6000602082019050818103600083015261404281613777565b9050919050565b60006020820190508181036000830152614062816137dd565b9050919050565b600060208201905081810360008301526140828161381d565b9050919050565b600060208201905081810360008301526140a281613883565b9050919050565b600060208201905081810360008301526140c2816138c3565b9050919050565b600060208201905081810360008301526140e281613929565b9050919050565b600060208201905081810360008301526141028161398f565b9050919050565b60006020820190508181036000830152614122816139f5565b9050919050565b6000602082019050818103600083015261414281613a5b565b9050919050565b6000602082019050818103600083015261416281613a9b565b9050919050565b6000602082019050818103600083015261418281613b01565b9050919050565b600060208201905081810360008301526141a281613b41565b9050919050565b600060208201905081810360008301526141c281613ba7565b9050919050565b600060208201905081810360008301526141e281613be7565b9050919050565b6000602082019050818103600083015261420281613c27565b9050919050565b6000602082019050818103600083015261422281613c8d565b9050919050565b6000602082019050818103600083015261424281613cf3565b9050919050565b6000602082019050818103600083015261426281613d73565b9050919050565b6000602082019050818103600083015261428281613db3565b9050919050565b600060208201905081810360008301526142a281613e19565b9050919050565b600060208201905081810360008301526142c281613e7f565b9050919050565b60006020820190506142de6000830184613ece565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561430b5761430a614715565b5b8060405250919050565b600067ffffffffffffffff8211156143305761432f614715565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143605761435f614715565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061441c82614590565b915061442783614590565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445c5761445b614688565b5b828201905092915050565b600061447282614590565b915061447d83614590565b92508261448d5761448c6146b7565b5b828204905092915050565b60006144a382614590565b91506144ae83614590565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e7576144e6614688565b5b828202905092915050565b60006144fd82614590565b915061450883614590565b92508282101561451b5761451a614688565b5b828203905092915050565b600061453182614570565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145c75780820151818401526020810190506145ac565b838111156145d6576000848401525b50505050565b600060028204905060018216806145f457607f821691505b60208210811415614608576146076146e6565b5b50919050565b600061461982614590565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464c5761464b614688565b5b600182019050919050565b600061466282614590565b915061466d83614590565b92508261467d5761467c6146b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61475e81614526565b811461476957600080fd5b50565b61477581614538565b811461478057600080fd5b50565b61478c81614544565b811461479757600080fd5b50565b6147a381614590565b81146147ae57600080fd5b5056fea2646970667358221220c48b576a1a4e2474f335d6dc676a683fe2c0dfe95087db37f010864c3f3d836d64736f6c63430008000033
Deployed Bytecode Sourcemap
42781:3402:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34388:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45645:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22315:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23874:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42931:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23397:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42964:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35028:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43138:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43037:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24764:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34696:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45725:455;;;:::i;:::-;;25174:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44131:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45077:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35218:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43105:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45285:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43075:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22009:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42863:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21739:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42152:94;;;;;;;;;;;;;:::i;:::-;;45163:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41501:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22484:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43504:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24167:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45004:65;;;;;;;;;;;;;:::i;:::-;;25430:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42889:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44485:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43001:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45389:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24533:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45519:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42401:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34388:224;34490:4;34529:35;34514:50;;;:11;:50;;;;:90;;;;34568:36;34592:11;34568:23;:36::i;:::-;34514:90;34507:97;;34388:224;;;:::o;45645:73::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45706:6:::1;45697;;:15;;;;;;;;;;;;;;;;;;45645:73:::0;:::o;22315:100::-;22369:13;22402:5;22395:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22315:100;:::o;23874:221::-;23950:7;23978:16;23986:7;23978;:16::i;:::-;23970:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24063:15;:24;24079:7;24063:24;;;;;;;;;;;;;;;;;;;;;24056:31;;23874:221;;;:::o;42931:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23397:411::-;23478:13;23494:23;23509:7;23494:14;:23::i;:::-;23478:39;;23542:5;23536:11;;:2;:11;;;;23528:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:5;23620:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23645:37;23662:5;23669:12;:10;:12::i;:::-;23645:16;:37::i;:::-;23620:62;23598:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23779:21;23788:2;23792:7;23779:8;:21::i;:::-;23397:411;;;:::o;42964:32::-;;;;:::o;35028:113::-;35089:7;35116:10;:17;;;;35109:24;;35028:113;:::o;43138:55::-;;;;;;;;;;;;;;;;;:::o;43037:33::-;;;;:::o;24764:339::-;24959:41;24978:12;:10;:12::i;:::-;24992:7;24959:18;:41::i;:::-;24951:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25067:28;25077:4;25083:2;25087:7;25067:9;:28::i;:::-;24764:339;;;:::o;34696:256::-;34793:7;34829:23;34846:5;34829:16;:23::i;:::-;34821:5;:31;34813:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34918:12;:19;34931:5;34918:19;;;;;;;;;;;;;;;:26;34938:5;34918:26;;;;;;;;;;;;34911:33;;34696:256;;;;:::o;45725:455::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46002:7:::1;46023;:5;:7::i;:::-;46015:21;;46044;46015:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46001:69;;;46085:2;46077:11;;;::::0;::::1;;41792:1;45725:455::o:0;25174:185::-;25312:39;25329:4;25335:2;25339:7;25312:39;;;;;;;;;;;;:16;:39::i;:::-;25174:185;;;:::o;44131:348::-;44206:16;44234:23;44260:17;44270:6;44260:9;:17::i;:::-;44234:43;;44284:25;44326:15;44312:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44284:58;;44354:9;44349:103;44369:15;44365:1;:19;44349:103;;;44414:30;44434:6;44442:1;44414:19;:30::i;:::-;44400:8;44409:1;44400:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44386:3;;;;;:::i;:::-;;;;44349:103;;;;44465:8;44458:15;;;;44131:348;;;:::o;45077:80::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45143:8:::1;45136:4;:15;;;;45077:80:::0;:::o;35218:233::-;35293:7;35329:30;:28;:30::i;:::-;35321:5;:38;35313:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:10;35437:5;35426:17;;;;;;;;;;;;;;;;;;;;;;;;35419:24;;35218:233;;;:::o;43105:28::-;;;;;;;;;;;;;:::o;45285:98::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45366:11:::1;45356:7;:21;;;;;;;;;;;;:::i;:::-;;45285:98:::0;:::o;43075:25::-;;;;;;;;;;;;;:::o;22009:239::-;22081:7;22101:13;22117:7;:16;22125:7;22117:16;;;;;;;;;;;;;;;;;;;;;22101:32;;22169:1;22152:19;;:5;:19;;;;22144:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22235:5;22228:12;;;22009:239;;;:::o;42863:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21739:208::-;21811:7;21856:1;21839:19;;:5;:19;;;;21831:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21923:9;:16;21933:5;21923:16;;;;;;;;;;;;;;;;21916:23;;21739:208;;;:::o;42152:94::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42217:21:::1;42235:1;42217:9;:21::i;:::-;42152:94::o:0;45163:116::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45256:17:::1;45240:13;:33;;;;45163:116:::0;:::o;41501:87::-;41547:7;41574:6;;;;;;;;;;;41567:13;;41501:87;:::o;22484:104::-;22540:13;22573:7;22566:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22484:104;:::o;43504:621::-;43570:6;;;;;;;;;;;43569:7;43561:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;43610:14;43627:13;:11;:13::i;:::-;43610:30;;43669:1;43655:11;:15;43647:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43732:13;;43717:11;:28;;43709:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43825:9;;43810:11;43801:6;:20;;;;:::i;:::-;:33;;43793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43886:7;:5;:7::i;:::-;43872:21;;:10;:21;;;43868:108;;43934:11;43927:4;;:18;;;;:::i;:::-;43914:9;:31;;43906:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43868:108;43989:9;44001:1;43989:13;;43984:136;44009:11;44004:1;:16;43984:136;;44036:20;:32;44057:10;44036:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44079:33;44089:10;44110:1;44101:6;:10;;;;:::i;:::-;44079:9;:33::i;:::-;44022:3;;;;;:::i;:::-;;;;43984:136;;;;43504:621;;:::o;24167:295::-;24282:12;:10;:12::i;:::-;24270:24;;:8;:24;;;;24262:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24382:8;24337:18;:32;24356:12;:10;:12::i;:::-;24337:32;;;;;;;;;;;;;;;:42;24370:8;24337:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24435:8;24406:48;;24421:12;:10;:12::i;:::-;24406:48;;;24445:8;24406:48;;;;;;:::i;:::-;;;;;;;;24167:295;;:::o;45004:65::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45059:4:::1;45048:8;;:15;;;;;;;;;;;;;;;;;;45004:65::o:0;25430:328::-;25605:41;25624:12;:10;:12::i;:::-;25638:7;25605:18;:41::i;:::-;25597:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25711:39;25725:4;25731:2;25735:7;25744:5;25711:13;:39::i;:::-;25430:328;;;;:::o;42889:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44485:497::-;44583:13;44624:16;44632:7;44624;:16::i;:::-;44608:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44733:5;44721:17;;:8;;;;;;;;;;;:17;;;44718:62;;;44758:14;44751:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44718:62;44788:28;44819:10;:8;:10::i;:::-;44788:41;;44874:1;44849:14;44843:28;:32;:133;;;;;;;;;;;;;;;;;44911:14;44927:18;:7;:16;:18::i;:::-;44947:13;44894:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44843:133;44836:140;;;44485:497;;;;:::o;43001:31::-;;;;:::o;45389:122::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45488:17:::1;45472:13;:33;;;;;;;;;;;;:::i;:::-;;45389:122:::0;:::o;24533:164::-;24630:4;24654:18;:25;24673:5;24654:25;;;;;;;;;;;;;;;:35;24680:8;24654:35;;;;;;;;;;;;;;;;;;;;;;;;;24647:42;;24533:164;;;;:::o;45519:120::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45618:15:::1;45601:14;:32;;;;;;;;;;;;:::i;:::-;;45519:120:::0;:::o;42401:192::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42510:1:::1;42490:22;;:8;:22;;;;42482:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42566:19;42576:8;42566:9;:19::i;:::-;42401:192:::0;:::o;21370:305::-;21472:4;21524:25;21509:40;;;:11;:40;;;;:105;;;;21581:33;21566:48;;;:11;:48;;;;21509:105;:158;;;;21631:36;21655:11;21631:23;:36::i;:::-;21509:158;21489:178;;21370:305;;;:::o;19869:98::-;19922:7;19949:10;19942:17;;19869:98;:::o;27268:127::-;27333:4;27385:1;27357:30;;:7;:16;27365:7;27357:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27350:37;;27268:127;;;:::o;31250:174::-;31352:2;31325:15;:24;31341:7;31325:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31408:7;31404:2;31370:46;;31379:23;31394:7;31379:14;:23::i;:::-;31370:46;;;;;;;;;;;;31250:174;;:::o;27562:348::-;27655:4;27680:16;27688:7;27680;:16::i;:::-;27672:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27756:13;27772:23;27787:7;27772:14;:23::i;:::-;27756:39;;27825:5;27814:16;;:7;:16;;;:51;;;;27858:7;27834:31;;:20;27846:7;27834:11;:20::i;:::-;:31;;;27814:51;:87;;;;27869:32;27886:5;27893:7;27869:16;:32::i;:::-;27814:87;27806:96;;;27562:348;;;;:::o;30554:578::-;30713:4;30686:31;;:23;30701:7;30686:14;:23::i;:::-;:31;;;30678:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30796:1;30782:16;;:2;:16;;;;30774:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30852:39;30873:4;30879:2;30883:7;30852:20;:39::i;:::-;30956:29;30973:1;30977:7;30956:8;:29::i;:::-;31017:1;30998:9;:15;31008:4;30998:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31046:1;31029:9;:13;31039:2;31029:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31077:2;31058:7;:16;31066:7;31058:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31116:7;31112:2;31097:27;;31106:4;31097:27;;;;;;;;;;;;30554:578;;;:::o;42601:173::-;42657:16;42676:6;;;;;;;;;;;42657:25;;42702:8;42693:6;;:17;;;;;;;;;;;;;;;;;;42757:8;42726:40;;42747:8;42726:40;;;;;;;;;;;;42601:173;;:::o;28252:110::-;28328:26;28338:2;28342:7;28328:26;;;;;;;;;;;;:9;:26::i;:::-;28252:110;;:::o;26640:315::-;26797:28;26807:4;26813:2;26817:7;26797:9;:28::i;:::-;26844:48;26867:4;26873:2;26877:7;26886:5;26844:22;:48::i;:::-;26836:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26640:315;;;;:::o;43383:102::-;43443:13;43472:7;43465:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43383:102;:::o;7821:723::-;7877:13;8107:1;8098:5;:10;8094:53;;;8125:10;;;;;;;;;;;;;;;;;;;;;8094:53;8157:12;8172:5;8157:20;;8188:14;8213:78;8228:1;8220:4;:9;8213:78;;8246:8;;;;;:::i;:::-;;;;8277:2;8269:10;;;;;:::i;:::-;;;8213:78;;;8301:19;8333:6;8323:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8301:39;;8351:154;8367:1;8358:5;:10;8351:154;;8395:1;8385:11;;;;;:::i;:::-;;;8462:2;8454:5;:10;;;;:::i;:::-;8441:2;:24;;;;:::i;:::-;8428:39;;8411:6;8418;8411:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;8491:2;8482:11;;;;;:::i;:::-;;;8351:154;;;8529:6;8515:21;;;;;7821:723;;;;:::o;7377:157::-;7462:4;7501:25;7486:40;;;:11;:40;;;;7479:47;;7377:157;;;:::o;36064:589::-;36208:45;36235:4;36241:2;36245:7;36208:26;:45::i;:::-;36286:1;36270:18;;:4;:18;;;36266:187;;;36305:40;36337:7;36305:31;:40::i;:::-;36266:187;;;36375:2;36367:10;;:4;:10;;;36363:90;;36394:47;36427:4;36433:7;36394:32;:47::i;:::-;36363:90;36266:187;36481:1;36467:16;;:2;:16;;;36463:183;;;36500:45;36537:7;36500:36;:45::i;:::-;36463:183;;;36573:4;36567:10;;:2;:10;;;36563:83;;36594:40;36622:2;36626:7;36594:27;:40::i;:::-;36563:83;36463:183;36064:589;;;:::o;28589:321::-;28719:18;28725:2;28729:7;28719:5;:18::i;:::-;28770:54;28801:1;28805:2;28809:7;28818:5;28770:22;:54::i;:::-;28748:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28589:321;;;:::o;31989:799::-;32144:4;32165:15;:2;:13;;;:15::i;:::-;32161:620;;;32217:2;32201:36;;;32238:12;:10;:12::i;:::-;32252:4;32258:7;32267:5;32201:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32197:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32460:1;32443:6;:13;:18;32439:272;;;32486:60;;;;;;;;;;:::i;:::-;;;;;;;;32439:272;32661:6;32655:13;32646:6;32642:2;32638:15;32631:38;32197:529;32334:41;;;32324:51;;;:6;:51;;;;32317:58;;;;;32161:620;32765:4;32758:11;;31989:799;;;;;;;:::o;33360:126::-;;;;:::o;37376:164::-;37480:10;:17;;;;37453:15;:24;37469:7;37453:24;;;;;;;;;;;:44;;;;37508:10;37524:7;37508:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37376:164;:::o;38167:988::-;38433:22;38483:1;38458:22;38475:4;38458:16;:22::i;:::-;:26;;;;:::i;:::-;38433:51;;38495:18;38516:17;:26;38534:7;38516:26;;;;;;;;;;;;38495:47;;38663:14;38649:10;:28;38645:328;;38694:19;38716:12;:18;38729:4;38716:18;;;;;;;;;;;;;;;:34;38735:14;38716:34;;;;;;;;;;;;38694:56;;38800:11;38767:12;:18;38780:4;38767:18;;;;;;;;;;;;;;;:30;38786:10;38767:30;;;;;;;;;;;:44;;;;38917:10;38884:17;:30;38902:11;38884:30;;;;;;;;;;;:43;;;;38645:328;;39069:17;:26;39087:7;39069:26;;;;;;;;;;;39062:33;;;39113:12;:18;39126:4;39113:18;;;;;;;;;;;;;;;:34;39132:14;39113:34;;;;;;;;;;;39106:41;;;38167:988;;;;:::o;39450:1079::-;39703:22;39748:1;39728:10;:17;;;;:21;;;;:::i;:::-;39703:46;;39760:18;39781:15;:24;39797:7;39781:24;;;;;;;;;;;;39760:45;;40132:19;40154:10;40165:14;40154:26;;;;;;;;;;;;;;;;;;;;;;;;40132:48;;40218:11;40193:10;40204;40193:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40329:10;40298:15;:28;40314:11;40298:28;;;;;;;;;;;:41;;;;40470:15;:24;40486:7;40470:24;;;;;;;;;;;40463:31;;;40505:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39450:1079;;;;:::o;36954:221::-;37039:14;37056:20;37073:2;37056:16;:20::i;:::-;37039:37;;37114:7;37087:12;:16;37100:2;37087:16;;;;;;;;;;;;;;;:24;37104:6;37087:24;;;;;;;;;;;:34;;;;37161:6;37132:17;:26;37150:7;37132:26;;;;;;;;;;;:35;;;;36954:221;;;:::o;29246:382::-;29340:1;29326:16;;:2;:16;;;;29318:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29399:16;29407:7;29399;:16::i;:::-;29398:17;29390:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29461:45;29490:1;29494:2;29498:7;29461:20;:45::i;:::-;29536:1;29519:9;:13;29529:2;29519:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29567:2;29548:7;:16;29556:7;29548:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29612:7;29608:2;29587:33;;29604:1;29587:33;;;;;;;;;;;;29246:382;;:::o;10315:387::-;10375:4;10583:12;10650:7;10638:20;10630:28;;10693:1;10686:4;:8;10679:15;;;10315:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8681:845::-;;8821:5;8815:12;8850:36;8876:9;8850:36;:::i;:::-;8902:89;8984:6;8979:3;8902:89;:::i;:::-;8895:96;;9022:1;9011:9;9007:17;9038:1;9033:137;;;;9184:1;9179:341;;;;9000:520;;9033:137;9117:4;9113:9;9102;9098:25;9093:3;9086:38;9153:6;9148:3;9144:16;9137:23;;9033:137;;9179:341;9246:38;9278:5;9246:38;:::i;:::-;9306:1;9320:154;9334:6;9331:1;9328:13;9320:154;;;9408:7;9402:14;9398:1;9393:3;9389:11;9382:35;9458:1;9449:7;9445:15;9434:26;;9356:4;9353:1;9349:12;9344:17;;9320:154;;;9503:6;9498:3;9494:16;9487:23;;9186:334;;9000:520;;8788:738;;;;;;:::o;9532:375::-;;9695:67;9759:2;9754:3;9695:67;:::i;:::-;9688:74;;9792:34;9788:1;9783:3;9779:11;9772:55;9858:13;9853:2;9848:3;9844:12;9837:35;9898:2;9893:3;9889:12;9882:19;;9678:229;;;:::o;9913:382::-;;10076:67;10140:2;10135:3;10076:67;:::i;:::-;10069:74;;10173:34;10169:1;10164:3;10160:11;10153:55;10239:20;10234:2;10229:3;10225:12;10218:42;10286:2;10281:3;10277:12;10270:19;;10059:236;;;:::o;10301:370::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:8;10622:2;10617:3;10613:12;10606:30;10662:2;10657:3;10653:12;10646:19;;10447:224;;;:::o;10677:326::-;;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10937:30;10933:1;10928:3;10924:11;10917:51;10994:2;10989:3;10985:12;10978:19;;10823:180;;;:::o;11009:368::-;;11172:67;11236:2;11231:3;11172:67;:::i;:::-;11165:74;;11269:34;11265:1;11260:3;11256:11;11249:55;11335:6;11330:2;11325:3;11321:12;11314:28;11368:2;11363:3;11359:12;11352:19;;11155:222;;;:::o;11383:323::-;;11546:67;11610:2;11605:3;11546:67;:::i;:::-;11539:74;;11643:27;11639:1;11634:3;11630:11;11623:48;11697:2;11692:3;11688:12;11681:19;;11529:177;;;:::o;11712:376::-;;11875:67;11939:2;11934:3;11875:67;:::i;:::-;11868:74;;11972:34;11968:1;11963:3;11959:11;11952:55;12038:14;12033:2;12028:3;12024:12;12017:36;12079:2;12074:3;12070:12;12063:19;;11858:230;;;:::o;12094:388::-;;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12354:34;12350:1;12345:3;12341:11;12334:55;12420:26;12415:2;12410:3;12406:12;12399:48;12473:2;12468:3;12464:12;12457:19;;12240:242;;;:::o;12488:374::-;;12651:67;12715:2;12710:3;12651:67;:::i;:::-;12644:74;;12748:34;12744:1;12739:3;12735:11;12728:55;12814:12;12809:2;12804:3;12800:12;12793:34;12853:2;12848:3;12844:12;12837:19;;12634:228;;;:::o;12868:373::-;;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13128:34;13124:1;13119:3;13115:11;13108:55;13194:11;13189:2;13184:3;13180:12;13173:33;13232:2;13227:3;13223:12;13216:19;;13014:227;;;:::o;13247:320::-;;13410:67;13474:2;13469:3;13410:67;:::i;:::-;13403:74;;13507:24;13503:1;13498:3;13494:11;13487:45;13558:2;13553:3;13549:12;13542:19;;13393:174;;;:::o;13573:368::-;;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13833:34;13829:1;13824:3;13820:11;13813:55;13899:6;13894:2;13889:3;13885:12;13878:28;13932:2;13927:3;13923:12;13916:19;;13719:222;;;:::o;13947:330::-;;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14207:34;14203:1;14198:3;14194:11;14187:55;14268:2;14263:3;14259:12;14252:19;;14093:184;;;:::o;14283:376::-;;14446:67;14510:2;14505:3;14446:67;:::i;:::-;14439:74;;14543:34;14539:1;14534:3;14530:11;14523:55;14609:14;14604:2;14599:3;14595:12;14588:36;14650:2;14645:3;14641:12;14634:19;;14429:230;;;:::o;14665:330::-;;14828:67;14892:2;14887:3;14828:67;:::i;:::-;14821:74;;14925:34;14921:1;14916:3;14912:11;14905:55;14986:2;14981:3;14977:12;14970:19;;14811:184;;;:::o;15001:320::-;;15164:67;15228:2;15223:3;15164:67;:::i;:::-;15157:74;;15261:24;15257:1;15252:3;15248:11;15241:45;15312:2;15307:3;15303:12;15296:19;;15147:174;;;:::o;15327:373::-;;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15587:34;15583:1;15578:3;15574:11;15567:55;15653:11;15648:2;15643:3;15639:12;15632:33;15691:2;15686:3;15682:12;15675:19;;15473:227;;;:::o;15706:379::-;;15869:67;15933:2;15928:3;15869:67;:::i;:::-;15862:74;;15966:34;15962:1;15957:3;15953:11;15946:55;16032:17;16027:2;16022:3;16018:12;16011:39;16076:2;16071:3;16067:12;16060:19;;15852:233;;;:::o;16091:365::-;;16254:67;16318:2;16313:3;16254:67;:::i;:::-;16247:74;;16351:34;16347:1;16342:3;16338:11;16331:55;16417:3;16412:2;16407:3;16403:12;16396:25;16447:2;16442:3;16438:12;16431:19;;16237:219;;;:::o;16462:297::-;;16642:83;16723:1;16718:3;16642:83;:::i;:::-;16635:90;;16751:1;16746:3;16742:11;16735:18;;16625:134;;;:::o;16765:316::-;;16928:67;16992:2;16987:3;16928:67;:::i;:::-;16921:74;;17025:20;17021:1;17016:3;17012:11;17005:41;17072:2;17067:3;17063:12;17056:19;;16911:170;;;:::o;17087:381::-;;17250:67;17314:2;17309:3;17250:67;:::i;:::-;17243:74;;17347:34;17343:1;17338:3;17334:11;17327:55;17413:19;17408:2;17403:3;17399:12;17392:41;17459:2;17454:3;17450:12;17443:19;;17233:235;;;:::o;17474:376::-;;17637:67;17701:2;17696:3;17637:67;:::i;:::-;17630:74;;17734:34;17730:1;17725:3;17721:11;17714:55;17800:14;17795:2;17790:3;17786:12;17779:36;17841:2;17836:3;17832:12;17825:19;;17620:230;;;:::o;17856:325::-;;18019:67;18083:2;18078:3;18019:67;:::i;:::-;18012:74;;18116:29;18112:1;18107:3;18103:11;18096:50;18172:2;18167:3;18163:12;18156:19;;18002:179;;;:::o;18187:108::-;18264:24;18282:5;18264:24;:::i;:::-;18259:3;18252:37;18242:53;;:::o;18301:118::-;18388:24;18406:5;18388:24;:::i;:::-;18383:3;18376:37;18366:53;;:::o;18425:589::-;;18672:95;18763:3;18754:6;18672:95;:::i;:::-;18665:102;;18784:95;18875:3;18866:6;18784:95;:::i;:::-;18777:102;;18896:92;18984:3;18975:6;18896:92;:::i;:::-;18889:99;;19005:3;18998:10;;18654:360;;;;;;:::o;19020:379::-;;19226:147;19369:3;19226:147;:::i;:::-;19219:154;;19390:3;19383:10;;19208:191;;;:::o;19405:222::-;;19536:2;19525:9;19521:18;19513:26;;19549:71;19617:1;19606:9;19602:17;19593:6;19549:71;:::i;:::-;19503:124;;;;:::o;19633:640::-;;19866:3;19855:9;19851:19;19843:27;;19880:71;19948:1;19937:9;19933:17;19924:6;19880:71;:::i;:::-;19961:72;20029:2;20018:9;20014:18;20005:6;19961:72;:::i;:::-;20043;20111:2;20100:9;20096:18;20087:6;20043:72;:::i;:::-;20162:9;20156:4;20152:20;20147:2;20136:9;20132:18;20125:48;20190:76;20261:4;20252:6;20190:76;:::i;:::-;20182:84;;19833:440;;;;;;;:::o;20279:373::-;;20460:2;20449:9;20445:18;20437:26;;20509:9;20503:4;20499:20;20495:1;20484:9;20480:17;20473:47;20537:108;20640:4;20631:6;20537:108;:::i;:::-;20529:116;;20427:225;;;;:::o;20658:210::-;;20783:2;20772:9;20768:18;20760:26;;20796:65;20858:1;20847:9;20843:17;20834:6;20796:65;:::i;:::-;20750:118;;;;:::o;20874:313::-;;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:78;21175:4;21166:6;21102:78;:::i;:::-;21094:86;;20992:195;;;;:::o;21193:419::-;;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:131;21600:4;21474:131;:::i;:::-;21466:139;;21364:248;;;:::o;21618:419::-;;21822:2;21811:9;21807:18;21799:26;;21871:9;21865:4;21861:20;21857:1;21846:9;21842:17;21835:47;21899:131;22025:4;21899:131;:::i;:::-;21891:139;;21789:248;;;:::o;22043:419::-;;22247:2;22236:9;22232:18;22224:26;;22296:9;22290:4;22286:20;22282:1;22271:9;22267:17;22260:47;22324:131;22450:4;22324:131;:::i;:::-;22316:139;;22214:248;;;:::o;22468:419::-;;22672:2;22661:9;22657:18;22649:26;;22721:9;22715:4;22711:20;22707:1;22696:9;22692:17;22685:47;22749:131;22875:4;22749:131;:::i;:::-;22741:139;;22639:248;;;:::o;22893:419::-;;23097:2;23086:9;23082:18;23074:26;;23146:9;23140:4;23136:20;23132:1;23121:9;23117:17;23110:47;23174:131;23300:4;23174:131;:::i;:::-;23166:139;;23064:248;;;:::o;23318:419::-;;23522:2;23511:9;23507:18;23499:26;;23571:9;23565:4;23561:20;23557:1;23546:9;23542:17;23535:47;23599:131;23725:4;23599:131;:::i;:::-;23591:139;;23489:248;;;:::o;23743:419::-;;23947:2;23936:9;23932:18;23924:26;;23996:9;23990:4;23986:20;23982:1;23971:9;23967:17;23960:47;24024:131;24150:4;24024:131;:::i;:::-;24016:139;;23914:248;;;:::o;24168:419::-;;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24339:248;;;:::o;24593:419::-;;24797:2;24786:9;24782:18;24774:26;;24846:9;24840:4;24836:20;24832:1;24821:9;24817:17;24810:47;24874:131;25000:4;24874:131;:::i;:::-;24866:139;;24764:248;;;:::o;25018:419::-;;25222:2;25211:9;25207:18;25199:26;;25271:9;25265:4;25261:20;25257:1;25246:9;25242:17;25235:47;25299:131;25425:4;25299:131;:::i;:::-;25291:139;;25189:248;;;:::o;25443:419::-;;25647:2;25636:9;25632:18;25624:26;;25696:9;25690:4;25686:20;25682:1;25671:9;25667:17;25660:47;25724:131;25850:4;25724:131;:::i;:::-;25716:139;;25614:248;;;:::o;25868:419::-;;26072:2;26061:9;26057:18;26049:26;;26121:9;26115:4;26111:20;26107:1;26096:9;26092:17;26085:47;26149:131;26275:4;26149:131;:::i;:::-;26141:139;;26039:248;;;:::o;26293:419::-;;26497:2;26486:9;26482:18;26474:26;;26546:9;26540:4;26536:20;26532:1;26521:9;26517:17;26510:47;26574:131;26700:4;26574:131;:::i;:::-;26566:139;;26464:248;;;:::o;26718:419::-;;26922:2;26911:9;26907:18;26899:26;;26971:9;26965:4;26961:20;26957:1;26946:9;26942:17;26935:47;26999:131;27125:4;26999:131;:::i;:::-;26991:139;;26889:248;;;:::o;27143:419::-;;27347:2;27336:9;27332:18;27324:26;;27396:9;27390:4;27386:20;27382:1;27371:9;27367:17;27360:47;27424:131;27550:4;27424:131;:::i;:::-;27416:139;;27314:248;;;:::o;27568:419::-;;27772:2;27761:9;27757:18;27749:26;;27821:9;27815:4;27811:20;27807:1;27796:9;27792:17;27785:47;27849:131;27975:4;27849:131;:::i;:::-;27841:139;;27739:248;;;:::o;27993:419::-;;28197:2;28186:9;28182:18;28174:26;;28246:9;28240:4;28236:20;28232:1;28221:9;28217:17;28210:47;28274:131;28400:4;28274:131;:::i;:::-;28266:139;;28164:248;;;:::o;28418:419::-;;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28589:248;;;:::o;28843:419::-;;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;29014:248;;;:::o;29268:419::-;;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29439:248;;;:::o;29693:419::-;;29897:2;29886:9;29882:18;29874:26;;29946:9;29940:4;29936:20;29932:1;29921:9;29917:17;29910:47;29974:131;30100:4;29974:131;:::i;:::-;29966:139;;29864:248;;;:::o;30118:419::-;;30322:2;30311:9;30307:18;30299:26;;30371:9;30365:4;30361:20;30357:1;30346:9;30342:17;30335:47;30399:131;30525:4;30399:131;:::i;:::-;30391:139;;30289:248;;;:::o;30543:419::-;;30747:2;30736:9;30732:18;30724:26;;30796:9;30790:4;30786:20;30782:1;30771:9;30767:17;30760:47;30824:131;30950:4;30824:131;:::i;:::-;30816:139;;30714:248;;;:::o;30968:222::-;;31099:2;31088:9;31084:18;31076:26;;31112:71;31180:1;31169:9;31165:17;31156:6;31112:71;:::i;:::-;31066:124;;;;:::o;31196:283::-;;31262:2;31256:9;31246:19;;31304:4;31296:6;31292:17;31411:6;31399:10;31396:22;31375:18;31363:10;31360:34;31357:62;31354:2;;;31422:18;;:::i;:::-;31354:2;31462:10;31458:2;31451:22;31236:243;;;;:::o;31485:331::-;;31636:18;31628:6;31625:30;31622:2;;;31658:18;;:::i;:::-;31622:2;31743:4;31739:9;31732:4;31724:6;31720:17;31716:33;31708:41;;31804:4;31798;31794:15;31786:23;;31551:265;;;:::o;31822:332::-;;31974:18;31966:6;31963:30;31960:2;;;31996:18;;:::i;:::-;31960:2;32081:4;32077:9;32070:4;32062:6;32058:17;32054:33;32046:41;;32142:4;32136;32132:15;32124:23;;31889:265;;;:::o;32160:132::-;;32250:3;32242:11;;32280:4;32275:3;32271:14;32263:22;;32232:60;;;:::o;32298:141::-;;32370:3;32362:11;;32393:3;32390:1;32383:14;32427:4;32424:1;32414:18;32406:26;;32352:87;;;:::o;32445:114::-;;32546:5;32540:12;32530:22;;32519:40;;;:::o;32565:98::-;;32650:5;32644:12;32634:22;;32623:40;;;:::o;32669:99::-;;32755:5;32749:12;32739:22;;32728:40;;;:::o;32774:113::-;;32876:4;32871:3;32867:14;32859:22;;32849:38;;;:::o;32893:184::-;;33026:6;33021:3;33014:19;33066:4;33061:3;33057:14;33042:29;;33004:73;;;;:::o;33083:168::-;;33200:6;33195:3;33188:19;33240:4;33235:3;33231:14;33216:29;;33178:73;;;;:::o;33257:147::-;;33395:3;33380:18;;33370:34;;;;:::o;33410:169::-;;33528:6;33523:3;33516:19;33568:4;33563:3;33559:14;33544:29;;33506:73;;;;:::o;33585:148::-;;33724:3;33709:18;;33699:34;;;;:::o;33739:305::-;;33798:20;33816:1;33798:20;:::i;:::-;33793:25;;33832:20;33850:1;33832:20;:::i;:::-;33827:25;;33986:1;33918:66;33914:74;33911:1;33908:81;33905:2;;;33992:18;;:::i;:::-;33905:2;34036:1;34033;34029:9;34022:16;;33783:261;;;;:::o;34050:185::-;;34107:20;34125:1;34107:20;:::i;:::-;34102:25;;34141:20;34159:1;34141:20;:::i;:::-;34136:25;;34180:1;34170:2;;34185:18;;:::i;:::-;34170:2;34227:1;34224;34220:9;34215:14;;34092:143;;;;:::o;34241:348::-;;34304:20;34322:1;34304:20;:::i;:::-;34299:25;;34338:20;34356:1;34338:20;:::i;:::-;34333:25;;34526:1;34458:66;34454:74;34451:1;34448:81;34443:1;34436:9;34429:17;34425:105;34422:2;;;34533:18;;:::i;:::-;34422:2;34581:1;34578;34574:9;34563:20;;34289:300;;;;:::o;34595:191::-;;34655:20;34673:1;34655:20;:::i;:::-;34650:25;;34689:20;34707:1;34689:20;:::i;:::-;34684:25;;34728:1;34725;34722:8;34719:2;;;34733:18;;:::i;:::-;34719:2;34778:1;34775;34771:9;34763:17;;34640:146;;;;:::o;34792:96::-;;34858:24;34876:5;34858:24;:::i;:::-;34847:35;;34837:51;;;:::o;34894:90::-;;34971:5;34964:13;34957:21;34946:32;;34936:48;;;:::o;34990:149::-;;35066:66;35059:5;35055:78;35044:89;;35034:105;;;:::o;35145:126::-;;35222:42;35215:5;35211:54;35200:65;;35190:81;;;:::o;35277:77::-;;35343:5;35332:16;;35322:32;;;:::o;35360:154::-;35444:6;35439:3;35434;35421:30;35506:1;35497:6;35492:3;35488:16;35481:27;35411:103;;;:::o;35520:307::-;35588:1;35598:113;35612:6;35609:1;35606:13;35598:113;;;35697:1;35692:3;35688:11;35682:18;35678:1;35673:3;35669:11;35662:39;35634:2;35631:1;35627:10;35622:15;;35598:113;;;35729:6;35726:1;35723:13;35720:2;;;35809:1;35800:6;35795:3;35791:16;35784:27;35720:2;35569:258;;;;:::o;35833:320::-;;35914:1;35908:4;35904:12;35894:22;;35961:1;35955:4;35951:12;35982:18;35972:2;;36038:4;36030:6;36026:17;36016:27;;35972:2;36100;36092:6;36089:14;36069:18;36066:38;36063:2;;;36119:18;;:::i;:::-;36063:2;35884:269;;;;:::o;36159:233::-;;36221:24;36239:5;36221:24;:::i;:::-;36212:33;;36267:66;36260:5;36257:77;36254:2;;;36337:18;;:::i;:::-;36254:2;36384:1;36377:5;36373:13;36366:20;;36202:190;;;:::o;36398:176::-;;36447:20;36465:1;36447:20;:::i;:::-;36442:25;;36481:20;36499:1;36481:20;:::i;:::-;36476:25;;36520:1;36510:2;;36525:18;;:::i;:::-;36510:2;36566:1;36563;36559:9;36554:14;;36432:142;;;;:::o;36580:180::-;36628:77;36625:1;36618:88;36725:4;36722:1;36715:15;36749:4;36746:1;36739:15;36766:180;36814:77;36811:1;36804:88;36911:4;36908:1;36901:15;36935:4;36932:1;36925:15;36952:180;37000:77;36997:1;36990:88;37097:4;37094:1;37087:15;37121:4;37118:1;37111:15;37138:180;37186:77;37183:1;37176:88;37283:4;37280:1;37273:15;37307:4;37304:1;37297:15;37324:102;;37416:2;37412:7;37407:2;37400:5;37396:14;37392:28;37382:38;;37372:54;;;:::o;37432:122::-;37505:24;37523:5;37505:24;:::i;:::-;37498:5;37495:35;37485:2;;37544:1;37541;37534:12;37485:2;37475:79;:::o;37560:116::-;37630:21;37645:5;37630:21;:::i;:::-;37623:5;37620:32;37610:2;;37666:1;37663;37656:12;37610:2;37600:76;:::o;37682:120::-;37754:23;37771:5;37754:23;:::i;:::-;37747:5;37744:34;37734:2;;37792:1;37789;37782:12;37734:2;37724:78;:::o;37808:122::-;37881:24;37899:5;37881:24;:::i;:::-;37874:5;37871:35;37861:2;;37920:1;37917;37910:12;37861:2;37851:79;:::o
Swarm Source
ipfs://c48b576a1a4e2474f335d6dc676a683fe2c0dfe95087db37f010864c3f3d836d
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.