Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,197 VENUS
Holders
481
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 VENUSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CryptoVenus
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-22 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: contracts/Address.sol pragma solidity ^0.8.6; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } // File: contracts/ERC721.sol pragma solidity ^0.8.7; abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; 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 (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ) ++count; } return count; } /** * @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 {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 tokenId < _owners.length && _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); _owners.push(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); _owners[tokenId] = address(0); 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); _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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @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: contracts/ERC721Enumerable.sol pragma solidity ^0.8.7; /** * @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @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-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } } // File: contracts/CryptoVenus.sol /** SPDX-License-Identifier: GPL-3.0 Artist & Creator: ericareiling.eth Developer: jabeo.eth CryptoVenus NFT ////////////////////////////////////////////////-//----------------------------- //////////////////////////////////////////////////-/---------------------------- ///////////////////////////////////////////////////----------------------------- -///////////////////////////////////////////////-//----------------/------------ .,-////////////////////////@@@@@@@@@@@/-//-------------------------//// .,--/@@@@@@@@@@@@@@@@@////---/-/-//----/-/--//////// @@@@@@@@@@@@@@@@@@@@@@@-/-//////////////////////// ,@@@@@@@@@@@.....,-/((#@@@@ .--///-///////////////// @@@@@@@@@@@@@,%##..,-///(##@@@ .---///////////// @@@@@@@@@@@@@@/.,,-.-,,-///###@@@ ,----/-// @@@@@@@@@@@@@@-, .--(..-(#(###@@@ #@@@@@@@@@@-,,,,/-(,,(#((-#@@@ . . .. (@@@@@@@%,,.,.%(/(((#((/@@@@ . . .... ... .. .@@@@@@(#,...&-%%&%%#/-@@@ . . . ...... @@@-,.#..--%%%%@/--@@@@. . .. . ......... ... %%%....,((,#%%(-#-. . . .... . .. .. . /(%%%%#.,-, (.#%/#-(- . ..... . ... ..-((/(////######((, (((#%-(/////((((((((((((/(/#(###(((#(%% . . . ..... .-((/////////%/(/((///- .--///-,-------/////(/(////////((((((((( . . . .,,##((#(###-//--/////(/////#--,,---/(,/-/--------((/(/(((////////////// ###%%%##((((((((#(/(-/(--/--////////--,-,%/-(--,--------(/(-((/((/(((((((((///(/ ((((((((((((-/(((/-/--#(//----/-(--/-,,--/%//--.-//----(((/-///((((((((/(//////( ###(#(((#((##((///#-/--(//-----------,-(--/---, -------(//-((//(&%%&%&%###%&&&&& #(##%&%%##%##(//(%//%-(#(-------------,#,//--/------/--(/---//##########&%&%%%%% @#&%%&@&%####((##((/%//(-----/--------#%,#----,(/-/(---/(/--/(((###%##&%&%&%%%&& #%%%%%#####%##(/(#(//(###/////--------#(//-//-/-/--/////(/-//###%%%#%#%%&%%%#%&% #//########%#((##/%/#///(%%%%####%%#-/(&/--%((%%%%,-----///-/###%%##%##%&%%%%%%% &((&&(#@%%#%((####/%(%%#####(//(((/--,%(#----%%-((-%%%%%(--//#####(############# (@#@&&%%%%%%/(##%///&#%%/#####/-,-----%-#--/(,----#(#%%#/---/(#####(#(%######((( -(&@#&&%%%%%%((/#(/(&%(%%(/%####---//--/-////-%/%#(##-/--/-/(#(#%%&&%#%(##%%%%%& %%##%##%#%%%%%#//(((%%%#%(#(#%#(///---((-//(/--,-##---//////(#//#%(&(&%%@%%&%@#% &%(%###%%%%%#%%%%#(/###%@@@@@@@@@@-&&&/-/@@@@#--@#/#%%&%%%//((((%%%&@/@-@/&@/@.% ##%##%%%%%#%%#%((#%%%/(%/((/%((////-//&,(/-&@%&/@#@@@@@&&%%###((#%##(((((#(#((## &@@#%%%((((%/((((//(%%/(-%%/(/(////-//--(((#/%,#&&#(&@@@/(##%%%###(#(#((((((((## /@#%@&%#(((%(((%%%%%(/((//%(((/((((/--(,%((#-(#%((%&((##(#/((#%#&######(#((((((( %%@@&%%#(((#%#((/(//(/(//##//(((((#(/-,-((/#(%(,/((#(((((((((((((((#@@##%%%&#%#% */ pragma solidity ^0.8.7; contract CryptoVenus is ERC721Enumerable, Ownable { string public baseURI; address public proxyRegistryAddress; bytes32 public giftlistMerkleRoot; bytes32 public allowlistMerkleRoot; bool public isPublicMintOpen = false; uint256 public constant MAX_SUPPLY = 10000; uint256 public constant MINT_ALLOWANCE = 10; uint256 public constant GIFT_ALLOWANCE = 1; uint256 public constant allowlistPrice = 0.08 ether; uint256 public constant mintPrice = 0.1 ether; mapping(address => bool) public projectProxy; mapping(address => uint) public giftAddressToMinted; mapping(address => uint) public addressToMinted; constructor( string memory _baseURI, address _proxyRegistryAddress ) ERC721("CryptoVenus", "VENUS") { baseURI = _baseURI; proxyRegistryAddress = _proxyRegistryAddress; } // Token URI function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return string(abi.encodePacked(baseURI, Strings.toString(_tokenId))); } // Proxy Registry function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner { proxyRegistryAddress = _proxyRegistryAddress; } function flipProxyState(address proxyAddress) public onlyOwner { projectProxy[proxyAddress] = !projectProxy[proxyAddress]; } // Merkle Trees function _leaf(string memory payload) internal pure returns (bytes32) { return keccak256(abi.encodePacked(payload)); } // Gift List function setGiftListMerkleRoot(bytes32 _giftlistMerkleRoot) external onlyOwner { giftlistMerkleRoot = _giftlistMerkleRoot; } function giftlistMint(uint256 count, bytes32[] calldata proof) public { uint256 totalSupply = _owners.length; string memory payload = string(abi.encodePacked(_msgSender())); require(MerkleProof.verify(proof, giftlistMerkleRoot, _leaf(payload)), "Invalid Merkle Tree proof supplied."); require(giftAddressToMinted[_msgSender()] + count <= GIFT_ALLOWANCE, "Exceeds gift allowance"); require(totalSupply + count <= MAX_SUPPLY, "Exceeds max supply."); giftAddressToMinted[_msgSender()] += count; for(uint i; i < count; i++) { _mint(_msgSender(), totalSupply + i); } } // Allow List function setAllowlistMerkleRoot(bytes32 _allowlistMerkleRoot) external onlyOwner { allowlistMerkleRoot = _allowlistMerkleRoot; } function allowlistMint(uint256 count, bytes32[] calldata proof) public payable { uint256 totalSupply = _owners.length; string memory payload = string(abi.encodePacked(_msgSender())); require(MerkleProof.verify(proof, allowlistMerkleRoot, _leaf(payload)), "Invalid Merkle Tree proof supplied."); require(addressToMinted[_msgSender()] + count <= MINT_ALLOWANCE, "Exceeds minting allowance"); require(totalSupply + count <= MAX_SUPPLY, "Exceeds max supply."); require(count * allowlistPrice == msg.value, "Insufficient funds provided."); addressToMinted[_msgSender()] += count; for(uint i; i < count; i++) { _mint(_msgSender(), totalSupply + i); } } // Dev function devMint(uint256 count, address _to) external onlyOwner { uint256 totalSupply = _owners.length; require(totalSupply + count <= MAX_SUPPLY, "Exceeds max supply."); for(uint256 i; i < count; i++) _mint(_to, totalSupply + i); } // Public function publicMint(uint256 count) public payable { uint256 totalSupply = _owners.length; require(isPublicMintOpen, "Public mint is not open!"); require(totalSupply + count <= MAX_SUPPLY, "Exceeds max supply."); require(addressToMinted[_msgSender()] + count <= MINT_ALLOWANCE, "Exceeds mint supply"); require(count * mintPrice == msg.value, "Invalid funds provided."); for(uint i; i < count; i++) { _mint(_msgSender(), totalSupply + i); } } function togglePublicSale() external onlyOwner { delete allowlistMerkleRoot; isPublicMintOpen = true; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) return new uint256[](0); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public { for (uint256 i = 0; i < _tokenIds.length; i++) { transferFrom(_from, _to, _tokenIds[i]); } } function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public { for (uint256 i = 0; i < _tokenIds.length; i++) { safeTransferFrom(_from, _to, _tokenIds[i], data_); } } function isOwnerOf(address account, uint256[] calldata _tokenIds) external view returns (bool){ for(uint256 i; i < _tokenIds.length; ++i){ if(_owners[_tokenIds[i]] != account) return false; } return true; } function isApprovedForAll(address _owner, address operator) public view override returns (bool) { OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true; return super.isApprovedForAll(_owner, operator); } function _mint(address to, uint256 tokenId) internal virtual override { _owners.push(to); emit Transfer(address(0), to, tokenId); } function withdraw(address _wallet) public payable onlyOwner { require(payable(_wallet).send(address(this).balance)); } } contract OwnableDelegateProxy { } contract OpenSeaProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GIFT_ALLOWANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_ALLOWANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"allowlistPrice","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"giftAddressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"giftlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_allowlistMerkleRoot","type":"bytes32"}],"name":"setAllowlistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_giftlistMerkleRoot","type":"bytes32"}],"name":"setGiftListMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","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":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","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":"tokenId","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":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200572338038062005723833981810160405281019062000052919062000387565b6040518060400160405280600b81526020017f43727970746f56656e75730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f56454e55530000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d692919062000242565b508060019080519060200190620000ef92919062000242565b50505062000112620001066200017460201b60201c565b6200017c60201b60201c565b81600690805190602001906200012a92919062000242565b5080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620005bf565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025090620004b6565b90600052602060002090601f016020900481019282620002745760008555620002c0565b82601f106200028f57805160ff1916838001178555620002c0565b82800160010185558215620002c0579182015b82811115620002bf578251825591602001919060010190620002a2565b5b509050620002cf9190620002d3565b5090565b5b80821115620002ee576000816000905550600101620002d4565b5090565b600062000309620003038462000416565b620003ed565b90508281526020810184848401111562000328576200032762000585565b5b6200033584828562000480565b509392505050565b6000815190506200034e81620005a5565b92915050565b600082601f8301126200036c576200036b62000580565b5b81516200037e848260208601620002f2565b91505092915050565b60008060408385031215620003a157620003a06200058f565b5b600083015167ffffffffffffffff811115620003c257620003c16200058a565b5b620003d08582860162000354565b9250506020620003e3858286016200033d565b9150509250929050565b6000620003f96200040c565b9050620004078282620004ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000434576200043362000551565b5b6200043f8262000594565b9050602081019050919050565b6000620004598262000460565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004a057808201518184015260208101905062000483565b83811115620004b0576000848401525b50505050565b60006002820490506001821680620004cf57607f821691505b60208210811415620004e657620004e562000522565b5b50919050565b620004f78262000594565b810181811067ffffffffffffffff8211171562000519576200051862000551565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005b0816200044c565b8114620005bc57600080fd5b50565b61515480620005cf6000396000f3fe6080604052600436106102885760003560e01c806368a085e61161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109cb578063f2fde38b14610a08578063f3993d1114610a31578063f73c814b14610a5a578063f782960014610a83578063f95df41414610ac057610288565b8063c87b56dd146108cf578063cd7c03261461090c578063d07176aa14610937578063d26ea6c014610960578063d8e93a0514610989578063e222c7f9146109b457610288565b806390967a521161011357806390967a52146107bf57806395d89b41146107ea5780639ec00c9514610815578063a22cb46514610852578063a4435dfd1461087b578063b88d4fde146108a657610288565b806368a085e6146106d05780636c0360eb146106f957806370a0823114610724578063715018a6146107615780637bc9200e146107785780638da5cb5b1461079457610288565b80633846ee30116101fe57806351cff8d9116101b757806351cff8d9146105bd57806355f804b3146105d95780635a4fee30146106025780635bab26e21461062b5780636352211e146106685780636817c76c146106a557610288565b80633846ee301461048757806342842e0e146104b2578063438b6300146104db5780634401ce32146105185780634d44660c146105435780634f6ccce71461058057610288565b806323b872dd1161025057806323b872dd14610386578063293108e0146103af5780632d1a12f6146103da5780632db11544146104035780632f745c591461041f57806332cb6b0c1461045c57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b31461033257806318160ddd1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613a24565b610ae9565b6040516102c191906141e2565b60405180910390f35b3480156102d657600080fd5b506102df610b63565b6040516102ec9190614218565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613af4565b610bf5565b6040516103299190614159565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906139b7565b610c7a565b005b34801561036757600080fd5b50610370610d92565b60405161037d919061453a565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613841565b610d9f565b005b3480156103bb57600080fd5b506103c4610dff565b6040516103d191906141fd565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613b21565b610e05565b005b61041d60048036038101906104189190613af4565b610f14565b005b34801561042b57600080fd5b50610446600480360381019061044191906139b7565b6110e6565b604051610453919061453a565b60405180910390f35b34801561046857600080fd5b5061047161122b565b60405161047e919061453a565b60405180910390f35b34801561049357600080fd5b5061049c611231565b6040516104a991906141fd565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613841565b611237565b005b3480156104e757600080fd5b5061050260048036038101906104fd91906136c6565b611257565b60405161050f91906141c0565b60405180910390f35b34801561052457600080fd5b5061052d611361565b60405161053a919061453a565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613917565b611366565b60405161057791906141e2565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613af4565b611427565b6040516105b4919061453a565b60405180910390f35b6105d760048036038101906105d291906136c6565b611478565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190613aab565b611535565b005b34801561060e57600080fd5b50610629600480360381019061062491906137a2565b6115cb565b005b34801561063757600080fd5b50610652600480360381019061064d91906136c6565b611617565b60405161065f91906141e2565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613af4565b611637565b60405161069c9190614159565b60405180910390f35b3480156106b157600080fd5b506106ba6116f4565b6040516106c7919061453a565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906139f7565b611700565b005b34801561070557600080fd5b5061070e611786565b60405161071b9190614218565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906136c6565b611814565b604051610758919061453a565b60405180910390f35b34801561076d57600080fd5b50610776611930565b005b610792600480360381019061078d9190613b61565b6119b8565b005b3480156107a057600080fd5b506107a9611c5b565b6040516107b69190614159565b60405180910390f35b3480156107cb57600080fd5b506107d4611c85565b6040516107e1919061453a565b60405180910390f35b3480156107f657600080fd5b506107ff611c91565b60405161080c9190614218565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906136c6565b611d23565b604051610849919061453a565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613977565b611d3b565b005b34801561088757600080fd5b50610890611ebc565b60405161089d91906141e2565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190613894565b611ecf565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613af4565b611f31565b6040516109039190614218565b60405180910390f35b34801561091857600080fd5b50610921611fad565b60405161092e9190614159565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613b61565b611fd3565b005b34801561096c57600080fd5b50610987600480360381019061098291906136c6565b612221565b005b34801561099557600080fd5b5061099e6122e1565b6040516109ab919061453a565b60405180910390f35b3480156109c057600080fd5b506109c96122e6565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906136f3565b612385565b6040516109ff91906141e2565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906136c6565b6124db565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190613733565b6125d3565b005b348015610a6657600080fd5b50610a816004803603810190610a7c91906136c6565b61261d565b005b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906136c6565b612740565b604051610ab7919061453a565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae291906139f7565b612758565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5c5750610b5b826127de565b5b9050919050565b606060008054610b7290614880565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e90614880565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b5050505050905090565b6000610c00826128c0565b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906143fa565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8582611637565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced9061447a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d15612948565b73ffffffffffffffffffffffffffffffffffffffff161480610d445750610d4381610d3e612948565b612385565b5b610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061433a565b60405180910390fd5b610d8d8383612950565b505050565b6000600280549050905090565b610db0610daa612948565b82612a09565b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de6906144ba565b60405180910390fd5b610dfa838383612ae7565b505050565b60095481565b610e0d612948565b73ffffffffffffffffffffffffffffffffffffffff16610e2b611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e789061441a565b60405180910390fd5b600060028054905090506127108382610e9a9190614699565b1115610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed29061445a565b60405180910390fd5b60005b83811015610f0e57610efb838284610ef69190614699565b612ca0565b8080610f06906148e3565b915050610ede565b50505050565b60006002805490509050600a60009054906101000a900460ff16610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f649061451a565b60405180910390fd5b6127108282610f7c9190614699565b1115610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb49061445a565b60405180910390fd5b600a82600d6000610fcc612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110119190614699565b1115611052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110499061435a565b60405180910390fd5b3467016345785d8a0000836110679190614720565b146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e906143ba565b60405180910390fd5b60005b828110156110e1576110ce6110bd612948565b82846110c99190614699565b612ca0565b80806110d9906148e3565b9150506110aa565b505050565b60006110f183611814565b8210611132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111299061425a565b60405180910390fd5b6000805b6002805490508110156111e9576002818154811061115757611156614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156111d657838214156111c7578092505050611225565b81806111d2906148e3565b9250505b80806111e1906148e3565b915050611136565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c9061425a565b60405180910390fd5b92915050565b61271081565b60085481565b61125283838360405180602001604052806000815250611ecf565b505050565b6060600061126483611814565b905060008114156112c157600067ffffffffffffffff81111561128a57611289614a3d565b5b6040519080825280602002602001820160405280156112b85781602001602082028036833780820191505090505b5091505061135c565b60008167ffffffffffffffff8111156112dd576112dc614a3d565b5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b828110156113555761132385826110e6565b82828151811061133657611335614a0e565b5b602002602001018181525050808061134d906148e3565b915050611311565b5080925050505b919050565b600a81565b6000805b8383905081101561141a578473ffffffffffffffffffffffffffffffffffffffff1660028585848181106113a1576113a0614a0e565b5b90506020020135815481106113b9576113b8614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611409576000915050611420565b80611413906148e3565b905061136a565b50600190505b9392505050565b60006002805490508210611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906144da565b60405180910390fd5b819050919050565b611480612948565b73ffffffffffffffffffffffffffffffffffffffff1661149e611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061441a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061153257600080fd5b50565b61153d612948565b73ffffffffffffffffffffffffffffffffffffffff1661155b611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a89061441a565b60405180910390fd5b80600690805190602001906115c7929190613366565b5050565b60005b8251811015611610576115fd85858584815181106115ef576115ee614a0e565b5b602002602001015185611ecf565b8080611608906148e3565b9150506115ce565b5050505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806002838154811061164e5761164d614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061439a565b60405180910390fd5b80915050919050565b67016345785d8a000081565b611708612948565b73ffffffffffffffffffffffffffffffffffffffff16611726611c5b565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117739061441a565b60405180910390fd5b8060088190555050565b6006805461179390614880565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90614880565b801561180c5780601f106117e15761010080835404028352916020019161180c565b820191906000526020600020905b8154815290600101906020018083116117ef57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061437a565b60405180910390fd5b6000805b60028054905081101561192657600281815481106118aa576118a9614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119155781611912906148e3565b91505b8061191f906148e3565b9050611889565b5080915050919050565b611938612948565b73ffffffffffffffffffffffffffffffffffffffff16611956611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061441a565b60405180910390fd5b6119b66000612d63565b565b6000600280549050905060006119cc612948565b6040516020016119dc9190614103565b6040516020818303038152906040529050611a43848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600954611a3e84612e29565b612e59565b611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a799061423a565b60405180910390fd5b600a85600d6000611a91612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad69190614699565b1115611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061449a565b60405180910390fd5b6127108583611b269190614699565b1115611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e9061445a565b60405180910390fd5b3467011c37937e08000086611b7c9190614720565b14611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb3906144fa565b60405180910390fd5b84600d6000611bc9612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c129190614699565b9250508190555060005b85811015611c5357611c40611c2f612948565b8285611c3b9190614699565b612ca0565b8080611c4b906148e3565b915050611c1c565b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b67011c37937e08000081565b606060018054611ca090614880565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccc90614880565b8015611d195780601f10611cee57610100808354040283529160200191611d19565b820191906000526020600020905b815481529060010190602001808311611cfc57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915090505481565b611d43612948565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906142fa565b60405180910390fd5b8060046000611dbe612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6b612948565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eb091906141e2565b60405180910390a35050565b600a60009054906101000a900460ff1681565b611ee0611eda612948565b83612a09565b611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f16906144ba565b60405180910390fd5b611f2b84848484612e70565b50505050565b6060611f3c826128c0565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f72906143da565b60405180910390fd5b6006611f8683612ecc565b604051602001611f97929190614135565b6040516020818303038152906040529050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028054905090506000611fe7612948565b604051602001611ff79190614103565b604051602081830303815290604052905061205e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060085461205984612e29565b612e59565b61209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061423a565b60405180910390fd5b600185600c60006120ac612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120f19190614699565b1115612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906142ba565b60405180910390fd5b61271085836121419190614699565b1115612182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121799061445a565b60405180910390fd5b84600c600061218f612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d89190614699565b9250508190555060005b85811015612219576122066121f5612948565b82856122019190614699565b612ca0565b8080612211906148e3565b9150506121e2565b505050505050565b612229612948565b73ffffffffffffffffffffffffffffffffffffffff16612247611c5b565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122949061441a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600181565b6122ee612948565b73ffffffffffffffffffffffffffffffffffffffff1661230c611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123599061441a565b60405180910390fd5b6009600090556001600a60006101000a81548160ff021916908315150217905550565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123fd9190614159565b60206040518083038186803b15801561241557600080fd5b505afa158015612429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244d9190613a7e565b73ffffffffffffffffffffffffffffffffffffffff1614806124b85750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124c75760019150506124d5565b6124d1848461302d565b9150505b92915050565b6124e3612948565b73ffffffffffffffffffffffffffffffffffffffff16612501611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061441a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be9061429a565b60405180910390fd5b6125d081612d63565b50565b60005b81518110156126175761260484848484815181106125f7576125f6614a0e565b5b6020026020010151610d9f565b808061260f906148e3565b9150506125d6565b50505050565b612625612948565b73ffffffffffffffffffffffffffffffffffffffff16612643611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126909061441a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915090505481565b612760612948565b73ffffffffffffffffffffffffffffffffffffffff1661277e611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb9061441a565b60405180910390fd5b8060098190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128b957506128b8826130c1565b5b9050919050565b6000600280549050821080156129415750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106128fd576128fc614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129c383611637565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a14826128c0565b612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a9061431a565b60405180910390fd5b6000612a5e83611637565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612acd57508373ffffffffffffffffffffffffffffffffffffffff16612ab584610bf5565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ade5750612add8185612385565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b0782611637565b73ffffffffffffffffffffffffffffffffffffffff1614612b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b549061443a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc4906142da565b60405180910390fd5b612bd883838361312b565b612be3600082612950565b8160028281548110612bf857612bf7614a0e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612e3c919061411e565b604051602081830303815290604052805190602001209050919050565b600082612e668584613130565b1490509392505050565b612e7b848484612ae7565b612e87848484846131a5565b612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd9061427a565b60405180910390fd5b50505050565b60606000821415612f14576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613028565b600082905060005b60008214612f46578080612f2f906148e3565b915050600a82612f3f91906146ef565b9150612f1c565b60008167ffffffffffffffff811115612f6257612f61614a3d565b5b6040519080825280601f01601f191660200182016040528015612f945781602001600182028036833780820191505090505b5090505b6000851461302157600182612fad919061477a565b9150600a85612fbc9190614950565b6030612fc89190614699565b60f81b818381518110612fde57612fdd614a0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561301a91906146ef565b9450612f98565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60008082905060005b845181101561319a57600085828151811061315757613156614a0e565b5b6020026020010151905080831161317957613172838261333c565b9250613186565b613183818461333c565b92505b508080613192906148e3565b915050613139565b508091505092915050565b60006131c68473ffffffffffffffffffffffffffffffffffffffff16613353565b1561332f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ef612948565b8786866040518563ffffffff1660e01b81526004016132119493929190614174565b602060405180830381600087803b15801561322b57600080fd5b505af192505050801561325c57506040513d601f19601f820116820180604052508101906132599190613a51565b60015b6132df573d806000811461328c576040519150601f19603f3d011682016040523d82523d6000602084013e613291565b606091505b506000815114156132d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ce9061427a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613334565b600190505b949350505050565b600082600052816020526040600020905092915050565b600080823b905060008111915050919050565b82805461337290614880565b90600052602060002090601f01602090048101928261339457600085556133db565b82601f106133ad57805160ff19168380011785556133db565b828001600101855582156133db579182015b828111156133da5782518255916020019190600101906133bf565b5b5090506133e891906133ec565b5090565b5b808211156134055760008160009055506001016133ed565b5090565b600061341c6134178461457a565b614555565b9050808382526020820190508285602086028201111561343f5761343e614a76565b5b60005b8581101561346f578161345588826136b1565b845260208401935060208301925050600181019050613442565b5050509392505050565b600061348c613487846145a6565b614555565b9050828152602081018484840111156134a8576134a7614a7b565b5b6134b384828561483e565b509392505050565b60006134ce6134c9846145d7565b614555565b9050828152602081018484840111156134ea576134e9614a7b565b5b6134f584828561483e565b509392505050565b60008135905061350c81615094565b92915050565b60008083601f84011261352857613527614a71565b5b8235905067ffffffffffffffff81111561354557613544614a6c565b5b60208301915083602082028301111561356157613560614a76565b5b9250929050565b60008083601f84011261357e5761357d614a71565b5b8235905067ffffffffffffffff81111561359b5761359a614a6c565b5b6020830191508360208202830111156135b7576135b6614a76565b5b9250929050565b600082601f8301126135d3576135d2614a71565b5b81356135e3848260208601613409565b91505092915050565b6000813590506135fb816150ab565b92915050565b600081359050613610816150c2565b92915050565b600081359050613625816150d9565b92915050565b60008151905061363a816150d9565b92915050565b600082601f83011261365557613654614a71565b5b8135613665848260208601613479565b91505092915050565b60008151905061367d816150f0565b92915050565b600082601f83011261369857613697614a71565b5b81356136a88482602086016134bb565b91505092915050565b6000813590506136c081615107565b92915050565b6000602082840312156136dc576136db614a85565b5b60006136ea848285016134fd565b91505092915050565b6000806040838503121561370a57613709614a85565b5b6000613718858286016134fd565b9250506020613729858286016134fd565b9150509250929050565b60008060006060848603121561374c5761374b614a85565b5b600061375a868287016134fd565b935050602061376b868287016134fd565b925050604084013567ffffffffffffffff81111561378c5761378b614a80565b5b613798868287016135be565b9150509250925092565b600080600080608085870312156137bc576137bb614a85565b5b60006137ca878288016134fd565b94505060206137db878288016134fd565b935050604085013567ffffffffffffffff8111156137fc576137fb614a80565b5b613808878288016135be565b925050606085013567ffffffffffffffff81111561382957613828614a80565b5b61383587828801613640565b91505092959194509250565b60008060006060848603121561385a57613859614a85565b5b6000613868868287016134fd565b9350506020613879868287016134fd565b925050604061388a868287016136b1565b9150509250925092565b600080600080608085870312156138ae576138ad614a85565b5b60006138bc878288016134fd565b94505060206138cd878288016134fd565b93505060406138de878288016136b1565b925050606085013567ffffffffffffffff8111156138ff576138fe614a80565b5b61390b87828801613640565b91505092959194509250565b6000806000604084860312156139305761392f614a85565b5b600061393e868287016134fd565b935050602084013567ffffffffffffffff81111561395f5761395e614a80565b5b61396b86828701613568565b92509250509250925092565b6000806040838503121561398e5761398d614a85565b5b600061399c858286016134fd565b92505060206139ad858286016135ec565b9150509250929050565b600080604083850312156139ce576139cd614a85565b5b60006139dc858286016134fd565b92505060206139ed858286016136b1565b9150509250929050565b600060208284031215613a0d57613a0c614a85565b5b6000613a1b84828501613601565b91505092915050565b600060208284031215613a3a57613a39614a85565b5b6000613a4884828501613616565b91505092915050565b600060208284031215613a6757613a66614a85565b5b6000613a758482850161362b565b91505092915050565b600060208284031215613a9457613a93614a85565b5b6000613aa28482850161366e565b91505092915050565b600060208284031215613ac157613ac0614a85565b5b600082013567ffffffffffffffff811115613adf57613ade614a80565b5b613aeb84828501613683565b91505092915050565b600060208284031215613b0a57613b09614a85565b5b6000613b18848285016136b1565b91505092915050565b60008060408385031215613b3857613b37614a85565b5b6000613b46858286016136b1565b9250506020613b57858286016134fd565b9150509250929050565b600080600060408486031215613b7a57613b79614a85565b5b6000613b88868287016136b1565b935050602084013567ffffffffffffffff811115613ba957613ba8614a80565b5b613bb586828701613512565b92509250509250925092565b6000613bcd83836140e5565b60208301905092915050565b613be2816147ae565b82525050565b613bf9613bf4826147ae565b61492c565b82525050565b6000613c0a8261462d565b613c14818561465b565b9350613c1f83614608565b8060005b83811015613c50578151613c378882613bc1565b9750613c428361464e565b925050600181019050613c23565b5085935050505092915050565b613c66816147c0565b82525050565b613c75816147cc565b82525050565b6000613c8682614638565b613c90818561466c565b9350613ca081856020860161484d565b613ca981614a8a565b840191505092915050565b6000613cbf82614643565b613cc9818561467d565b9350613cd981856020860161484d565b613ce281614a8a565b840191505092915050565b6000613cf882614643565b613d02818561468e565b9350613d1281856020860161484d565b80840191505092915050565b60008154613d2b81614880565b613d35818661468e565b94506001821660008114613d505760018114613d6157613d94565b60ff19831686528186019350613d94565b613d6a85614618565b60005b83811015613d8c57815481890152600182019150602081019050613d6d565b838801955050505b50505092915050565b6000613daa60238361467d565b9150613db582614aa8565b604082019050919050565b6000613dcd602b8361467d565b9150613dd882614af7565b604082019050919050565b6000613df060328361467d565b9150613dfb82614b46565b604082019050919050565b6000613e1360268361467d565b9150613e1e82614b95565b604082019050919050565b6000613e3660168361467d565b9150613e4182614be4565b602082019050919050565b6000613e5960248361467d565b9150613e6482614c0d565b604082019050919050565b6000613e7c60198361467d565b9150613e8782614c5c565b602082019050919050565b6000613e9f602c8361467d565b9150613eaa82614c85565b604082019050919050565b6000613ec260388361467d565b9150613ecd82614cd4565b604082019050919050565b6000613ee560138361467d565b9150613ef082614d23565b602082019050919050565b6000613f08602a8361467d565b9150613f1382614d4c565b604082019050919050565b6000613f2b60298361467d565b9150613f3682614d9b565b604082019050919050565b6000613f4e60178361467d565b9150613f5982614dea565b602082019050919050565b6000613f7160158361467d565b9150613f7c82614e13565b602082019050919050565b6000613f94602c8361467d565b9150613f9f82614e3c565b604082019050919050565b6000613fb760208361467d565b9150613fc282614e8b565b602082019050919050565b6000613fda60298361467d565b9150613fe582614eb4565b604082019050919050565b6000613ffd60138361467d565b915061400882614f03565b602082019050919050565b600061402060218361467d565b915061402b82614f2c565b604082019050919050565b600061404360198361467d565b915061404e82614f7b565b602082019050919050565b600061406660318361467d565b915061407182614fa4565b604082019050919050565b6000614089602c8361467d565b915061409482614ff3565b604082019050919050565b60006140ac601c8361467d565b91506140b782615042565b602082019050919050565b60006140cf60188361467d565b91506140da8261506b565b602082019050919050565b6140ee81614834565b82525050565b6140fd81614834565b82525050565b600061410f8284613be8565b60148201915081905092915050565b600061412a8284613ced565b915081905092915050565b60006141418285613d1e565b915061414d8284613ced565b91508190509392505050565b600060208201905061416e6000830184613bd9565b92915050565b60006080820190506141896000830187613bd9565b6141966020830186613bd9565b6141a360408301856140f4565b81810360608301526141b58184613c7b565b905095945050505050565b600060208201905081810360008301526141da8184613bff565b905092915050565b60006020820190506141f76000830184613c5d565b92915050565b60006020820190506142126000830184613c6c565b92915050565b600060208201905081810360008301526142328184613cb4565b905092915050565b6000602082019050818103600083015261425381613d9d565b9050919050565b6000602082019050818103600083015261427381613dc0565b9050919050565b6000602082019050818103600083015261429381613de3565b9050919050565b600060208201905081810360008301526142b381613e06565b9050919050565b600060208201905081810360008301526142d381613e29565b9050919050565b600060208201905081810360008301526142f381613e4c565b9050919050565b6000602082019050818103600083015261431381613e6f565b9050919050565b6000602082019050818103600083015261433381613e92565b9050919050565b6000602082019050818103600083015261435381613eb5565b9050919050565b6000602082019050818103600083015261437381613ed8565b9050919050565b6000602082019050818103600083015261439381613efb565b9050919050565b600060208201905081810360008301526143b381613f1e565b9050919050565b600060208201905081810360008301526143d381613f41565b9050919050565b600060208201905081810360008301526143f381613f64565b9050919050565b6000602082019050818103600083015261441381613f87565b9050919050565b6000602082019050818103600083015261443381613faa565b9050919050565b6000602082019050818103600083015261445381613fcd565b9050919050565b6000602082019050818103600083015261447381613ff0565b9050919050565b6000602082019050818103600083015261449381614013565b9050919050565b600060208201905081810360008301526144b381614036565b9050919050565b600060208201905081810360008301526144d381614059565b9050919050565b600060208201905081810360008301526144f38161407c565b9050919050565b600060208201905081810360008301526145138161409f565b9050919050565b60006020820190508181036000830152614533816140c2565b9050919050565b600060208201905061454f60008301846140f4565b92915050565b600061455f614570565b905061456b82826148b2565b919050565b6000604051905090565b600067ffffffffffffffff82111561459557614594614a3d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145c1576145c0614a3d565b5b6145ca82614a8a565b9050602081019050919050565b600067ffffffffffffffff8211156145f2576145f1614a3d565b5b6145fb82614a8a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146a482614834565b91506146af83614834565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146e4576146e3614981565b5b828201905092915050565b60006146fa82614834565b915061470583614834565b925082614715576147146149b0565b5b828204905092915050565b600061472b82614834565b915061473683614834565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561476f5761476e614981565b5b828202905092915050565b600061478582614834565b915061479083614834565b9250828210156147a3576147a2614981565b5b828203905092915050565b60006147b982614814565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061480d826147ae565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561486b578082015181840152602081019050614850565b8381111561487a576000848401525b50505050565b6000600282049050600182168061489857607f821691505b602082108114156148ac576148ab6149df565b5b50919050565b6148bb82614a8a565b810181811067ffffffffffffffff821117156148da576148d9614a3d565b5b80604052505050565b60006148ee82614834565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561492157614920614981565b5b600182019050919050565b60006149378261493e565b9050919050565b600061494982614a9b565b9050919050565b600061495b82614834565b915061496683614834565b925082614976576149756149b0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206769667420616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f45786365656473206d696e7420737570706c7900000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d696e74696e6720616c6c6f77616e636500000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732070726f76696465642e00000000600082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e210000000000000000600082015250565b61509d816147ae565b81146150a857600080fd5b50565b6150b4816147c0565b81146150bf57600080fd5b50565b6150cb816147cc565b81146150d657600080fd5b50565b6150e2816147d6565b81146150ed57600080fd5b50565b6150f981614802565b811461510457600080fd5b50565b61511081614834565b811461511b57600080fd5b5056fea2646970667358221220a477822afa72651631ef40ac3166bfb28e307b100cb928a5fb5f6f828a47bb4864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d696e742e63727970746f76656e75736e66742e636f6d2f6170692f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c806368a085e61161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109cb578063f2fde38b14610a08578063f3993d1114610a31578063f73c814b14610a5a578063f782960014610a83578063f95df41414610ac057610288565b8063c87b56dd146108cf578063cd7c03261461090c578063d07176aa14610937578063d26ea6c014610960578063d8e93a0514610989578063e222c7f9146109b457610288565b806390967a521161011357806390967a52146107bf57806395d89b41146107ea5780639ec00c9514610815578063a22cb46514610852578063a4435dfd1461087b578063b88d4fde146108a657610288565b806368a085e6146106d05780636c0360eb146106f957806370a0823114610724578063715018a6146107615780637bc9200e146107785780638da5cb5b1461079457610288565b80633846ee30116101fe57806351cff8d9116101b757806351cff8d9146105bd57806355f804b3146105d95780635a4fee30146106025780635bab26e21461062b5780636352211e146106685780636817c76c146106a557610288565b80633846ee301461048757806342842e0e146104b2578063438b6300146104db5780634401ce32146105185780634d44660c146105435780634f6ccce71461058057610288565b806323b872dd1161025057806323b872dd14610386578063293108e0146103af5780632d1a12f6146103da5780632db11544146104035780632f745c591461041f57806332cb6b0c1461045c57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b31461033257806318160ddd1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613a24565b610ae9565b6040516102c191906141e2565b60405180910390f35b3480156102d657600080fd5b506102df610b63565b6040516102ec9190614218565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613af4565b610bf5565b6040516103299190614159565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906139b7565b610c7a565b005b34801561036757600080fd5b50610370610d92565b60405161037d919061453a565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613841565b610d9f565b005b3480156103bb57600080fd5b506103c4610dff565b6040516103d191906141fd565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613b21565b610e05565b005b61041d60048036038101906104189190613af4565b610f14565b005b34801561042b57600080fd5b50610446600480360381019061044191906139b7565b6110e6565b604051610453919061453a565b60405180910390f35b34801561046857600080fd5b5061047161122b565b60405161047e919061453a565b60405180910390f35b34801561049357600080fd5b5061049c611231565b6040516104a991906141fd565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613841565b611237565b005b3480156104e757600080fd5b5061050260048036038101906104fd91906136c6565b611257565b60405161050f91906141c0565b60405180910390f35b34801561052457600080fd5b5061052d611361565b60405161053a919061453a565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613917565b611366565b60405161057791906141e2565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190613af4565b611427565b6040516105b4919061453a565b60405180910390f35b6105d760048036038101906105d291906136c6565b611478565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190613aab565b611535565b005b34801561060e57600080fd5b50610629600480360381019061062491906137a2565b6115cb565b005b34801561063757600080fd5b50610652600480360381019061064d91906136c6565b611617565b60405161065f91906141e2565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613af4565b611637565b60405161069c9190614159565b60405180910390f35b3480156106b157600080fd5b506106ba6116f4565b6040516106c7919061453a565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906139f7565b611700565b005b34801561070557600080fd5b5061070e611786565b60405161071b9190614218565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906136c6565b611814565b604051610758919061453a565b60405180910390f35b34801561076d57600080fd5b50610776611930565b005b610792600480360381019061078d9190613b61565b6119b8565b005b3480156107a057600080fd5b506107a9611c5b565b6040516107b69190614159565b60405180910390f35b3480156107cb57600080fd5b506107d4611c85565b6040516107e1919061453a565b60405180910390f35b3480156107f657600080fd5b506107ff611c91565b60405161080c9190614218565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906136c6565b611d23565b604051610849919061453a565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613977565b611d3b565b005b34801561088757600080fd5b50610890611ebc565b60405161089d91906141e2565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190613894565b611ecf565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613af4565b611f31565b6040516109039190614218565b60405180910390f35b34801561091857600080fd5b50610921611fad565b60405161092e9190614159565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613b61565b611fd3565b005b34801561096c57600080fd5b50610987600480360381019061098291906136c6565b612221565b005b34801561099557600080fd5b5061099e6122e1565b6040516109ab919061453a565b60405180910390f35b3480156109c057600080fd5b506109c96122e6565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906136f3565b612385565b6040516109ff91906141e2565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906136c6565b6124db565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190613733565b6125d3565b005b348015610a6657600080fd5b50610a816004803603810190610a7c91906136c6565b61261d565b005b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906136c6565b612740565b604051610ab7919061453a565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae291906139f7565b612758565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5c5750610b5b826127de565b5b9050919050565b606060008054610b7290614880565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e90614880565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b5050505050905090565b6000610c00826128c0565b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906143fa565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8582611637565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced9061447a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d15612948565b73ffffffffffffffffffffffffffffffffffffffff161480610d445750610d4381610d3e612948565b612385565b5b610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061433a565b60405180910390fd5b610d8d8383612950565b505050565b6000600280549050905090565b610db0610daa612948565b82612a09565b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de6906144ba565b60405180910390fd5b610dfa838383612ae7565b505050565b60095481565b610e0d612948565b73ffffffffffffffffffffffffffffffffffffffff16610e2b611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e789061441a565b60405180910390fd5b600060028054905090506127108382610e9a9190614699565b1115610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed29061445a565b60405180910390fd5b60005b83811015610f0e57610efb838284610ef69190614699565b612ca0565b8080610f06906148e3565b915050610ede565b50505050565b60006002805490509050600a60009054906101000a900460ff16610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f649061451a565b60405180910390fd5b6127108282610f7c9190614699565b1115610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb49061445a565b60405180910390fd5b600a82600d6000610fcc612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110119190614699565b1115611052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110499061435a565b60405180910390fd5b3467016345785d8a0000836110679190614720565b146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e906143ba565b60405180910390fd5b60005b828110156110e1576110ce6110bd612948565b82846110c99190614699565b612ca0565b80806110d9906148e3565b9150506110aa565b505050565b60006110f183611814565b8210611132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111299061425a565b60405180910390fd5b6000805b6002805490508110156111e9576002818154811061115757611156614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156111d657838214156111c7578092505050611225565b81806111d2906148e3565b9250505b80806111e1906148e3565b915050611136565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c9061425a565b60405180910390fd5b92915050565b61271081565b60085481565b61125283838360405180602001604052806000815250611ecf565b505050565b6060600061126483611814565b905060008114156112c157600067ffffffffffffffff81111561128a57611289614a3d565b5b6040519080825280602002602001820160405280156112b85781602001602082028036833780820191505090505b5091505061135c565b60008167ffffffffffffffff8111156112dd576112dc614a3d565b5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b828110156113555761132385826110e6565b82828151811061133657611335614a0e565b5b602002602001018181525050808061134d906148e3565b915050611311565b5080925050505b919050565b600a81565b6000805b8383905081101561141a578473ffffffffffffffffffffffffffffffffffffffff1660028585848181106113a1576113a0614a0e565b5b90506020020135815481106113b9576113b8614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611409576000915050611420565b80611413906148e3565b905061136a565b50600190505b9392505050565b60006002805490508210611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906144da565b60405180910390fd5b819050919050565b611480612948565b73ffffffffffffffffffffffffffffffffffffffff1661149e611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061441a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061153257600080fd5b50565b61153d612948565b73ffffffffffffffffffffffffffffffffffffffff1661155b611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a89061441a565b60405180910390fd5b80600690805190602001906115c7929190613366565b5050565b60005b8251811015611610576115fd85858584815181106115ef576115ee614a0e565b5b602002602001015185611ecf565b8080611608906148e3565b9150506115ce565b5050505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806002838154811061164e5761164d614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061439a565b60405180910390fd5b80915050919050565b67016345785d8a000081565b611708612948565b73ffffffffffffffffffffffffffffffffffffffff16611726611c5b565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117739061441a565b60405180910390fd5b8060088190555050565b6006805461179390614880565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90614880565b801561180c5780601f106117e15761010080835404028352916020019161180c565b820191906000526020600020905b8154815290600101906020018083116117ef57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061437a565b60405180910390fd5b6000805b60028054905081101561192657600281815481106118aa576118a9614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119155781611912906148e3565b91505b8061191f906148e3565b9050611889565b5080915050919050565b611938612948565b73ffffffffffffffffffffffffffffffffffffffff16611956611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061441a565b60405180910390fd5b6119b66000612d63565b565b6000600280549050905060006119cc612948565b6040516020016119dc9190614103565b6040516020818303038152906040529050611a43848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600954611a3e84612e29565b612e59565b611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a799061423a565b60405180910390fd5b600a85600d6000611a91612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad69190614699565b1115611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061449a565b60405180910390fd5b6127108583611b269190614699565b1115611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e9061445a565b60405180910390fd5b3467011c37937e08000086611b7c9190614720565b14611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb3906144fa565b60405180910390fd5b84600d6000611bc9612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c129190614699565b9250508190555060005b85811015611c5357611c40611c2f612948565b8285611c3b9190614699565b612ca0565b8080611c4b906148e3565b915050611c1c565b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b67011c37937e08000081565b606060018054611ca090614880565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccc90614880565b8015611d195780601f10611cee57610100808354040283529160200191611d19565b820191906000526020600020905b815481529060010190602001808311611cfc57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915090505481565b611d43612948565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906142fa565b60405180910390fd5b8060046000611dbe612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6b612948565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eb091906141e2565b60405180910390a35050565b600a60009054906101000a900460ff1681565b611ee0611eda612948565b83612a09565b611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f16906144ba565b60405180910390fd5b611f2b84848484612e70565b50505050565b6060611f3c826128c0565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f72906143da565b60405180910390fd5b6006611f8683612ecc565b604051602001611f97929190614135565b6040516020818303038152906040529050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028054905090506000611fe7612948565b604051602001611ff79190614103565b604051602081830303815290604052905061205e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060085461205984612e29565b612e59565b61209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061423a565b60405180910390fd5b600185600c60006120ac612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120f19190614699565b1115612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906142ba565b60405180910390fd5b61271085836121419190614699565b1115612182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121799061445a565b60405180910390fd5b84600c600061218f612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d89190614699565b9250508190555060005b85811015612219576122066121f5612948565b82856122019190614699565b612ca0565b8080612211906148e3565b9150506121e2565b505050505050565b612229612948565b73ffffffffffffffffffffffffffffffffffffffff16612247611c5b565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122949061441a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600181565b6122ee612948565b73ffffffffffffffffffffffffffffffffffffffff1661230c611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123599061441a565b60405180910390fd5b6009600090556001600a60006101000a81548160ff021916908315150217905550565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123fd9190614159565b60206040518083038186803b15801561241557600080fd5b505afa158015612429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244d9190613a7e565b73ffffffffffffffffffffffffffffffffffffffff1614806124b85750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124c75760019150506124d5565b6124d1848461302d565b9150505b92915050565b6124e3612948565b73ffffffffffffffffffffffffffffffffffffffff16612501611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061441a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be9061429a565b60405180910390fd5b6125d081612d63565b50565b60005b81518110156126175761260484848484815181106125f7576125f6614a0e565b5b6020026020010151610d9f565b808061260f906148e3565b9150506125d6565b50505050565b612625612948565b73ffffffffffffffffffffffffffffffffffffffff16612643611c5b565b73ffffffffffffffffffffffffffffffffffffffff1614612699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126909061441a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915090505481565b612760612948565b73ffffffffffffffffffffffffffffffffffffffff1661277e611c5b565b73ffffffffffffffffffffffffffffffffffffffff16146127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb9061441a565b60405180910390fd5b8060098190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128b957506128b8826130c1565b5b9050919050565b6000600280549050821080156129415750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106128fd576128fc614a0e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129c383611637565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a14826128c0565b612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a9061431a565b60405180910390fd5b6000612a5e83611637565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612acd57508373ffffffffffffffffffffffffffffffffffffffff16612ab584610bf5565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ade5750612add8185612385565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b0782611637565b73ffffffffffffffffffffffffffffffffffffffff1614612b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b549061443a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc4906142da565b60405180910390fd5b612bd883838361312b565b612be3600082612950565b8160028281548110612bf857612bf7614a0e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612e3c919061411e565b604051602081830303815290604052805190602001209050919050565b600082612e668584613130565b1490509392505050565b612e7b848484612ae7565b612e87848484846131a5565b612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd9061427a565b60405180910390fd5b50505050565b60606000821415612f14576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613028565b600082905060005b60008214612f46578080612f2f906148e3565b915050600a82612f3f91906146ef565b9150612f1c565b60008167ffffffffffffffff811115612f6257612f61614a3d565b5b6040519080825280601f01601f191660200182016040528015612f945781602001600182028036833780820191505090505b5090505b6000851461302157600182612fad919061477a565b9150600a85612fbc9190614950565b6030612fc89190614699565b60f81b818381518110612fde57612fdd614a0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561301a91906146ef565b9450612f98565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60008082905060005b845181101561319a57600085828151811061315757613156614a0e565b5b6020026020010151905080831161317957613172838261333c565b9250613186565b613183818461333c565b92505b508080613192906148e3565b915050613139565b508091505092915050565b60006131c68473ffffffffffffffffffffffffffffffffffffffff16613353565b1561332f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ef612948565b8786866040518563ffffffff1660e01b81526004016132119493929190614174565b602060405180830381600087803b15801561322b57600080fd5b505af192505050801561325c57506040513d601f19601f820116820180604052508101906132599190613a51565b60015b6132df573d806000811461328c576040519150601f19603f3d011682016040523d82523d6000602084013e613291565b606091505b506000815114156132d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ce9061427a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613334565b600190505b949350505050565b600082600052816020526040600020905092915050565b600080823b905060008111915050919050565b82805461337290614880565b90600052602060002090601f01602090048101928261339457600085556133db565b82601f106133ad57805160ff19168380011785556133db565b828001600101855582156133db579182015b828111156133da5782518255916020019190600101906133bf565b5b5090506133e891906133ec565b5090565b5b808211156134055760008160009055506001016133ed565b5090565b600061341c6134178461457a565b614555565b9050808382526020820190508285602086028201111561343f5761343e614a76565b5b60005b8581101561346f578161345588826136b1565b845260208401935060208301925050600181019050613442565b5050509392505050565b600061348c613487846145a6565b614555565b9050828152602081018484840111156134a8576134a7614a7b565b5b6134b384828561483e565b509392505050565b60006134ce6134c9846145d7565b614555565b9050828152602081018484840111156134ea576134e9614a7b565b5b6134f584828561483e565b509392505050565b60008135905061350c81615094565b92915050565b60008083601f84011261352857613527614a71565b5b8235905067ffffffffffffffff81111561354557613544614a6c565b5b60208301915083602082028301111561356157613560614a76565b5b9250929050565b60008083601f84011261357e5761357d614a71565b5b8235905067ffffffffffffffff81111561359b5761359a614a6c565b5b6020830191508360208202830111156135b7576135b6614a76565b5b9250929050565b600082601f8301126135d3576135d2614a71565b5b81356135e3848260208601613409565b91505092915050565b6000813590506135fb816150ab565b92915050565b600081359050613610816150c2565b92915050565b600081359050613625816150d9565b92915050565b60008151905061363a816150d9565b92915050565b600082601f83011261365557613654614a71565b5b8135613665848260208601613479565b91505092915050565b60008151905061367d816150f0565b92915050565b600082601f83011261369857613697614a71565b5b81356136a88482602086016134bb565b91505092915050565b6000813590506136c081615107565b92915050565b6000602082840312156136dc576136db614a85565b5b60006136ea848285016134fd565b91505092915050565b6000806040838503121561370a57613709614a85565b5b6000613718858286016134fd565b9250506020613729858286016134fd565b9150509250929050565b60008060006060848603121561374c5761374b614a85565b5b600061375a868287016134fd565b935050602061376b868287016134fd565b925050604084013567ffffffffffffffff81111561378c5761378b614a80565b5b613798868287016135be565b9150509250925092565b600080600080608085870312156137bc576137bb614a85565b5b60006137ca878288016134fd565b94505060206137db878288016134fd565b935050604085013567ffffffffffffffff8111156137fc576137fb614a80565b5b613808878288016135be565b925050606085013567ffffffffffffffff81111561382957613828614a80565b5b61383587828801613640565b91505092959194509250565b60008060006060848603121561385a57613859614a85565b5b6000613868868287016134fd565b9350506020613879868287016134fd565b925050604061388a868287016136b1565b9150509250925092565b600080600080608085870312156138ae576138ad614a85565b5b60006138bc878288016134fd565b94505060206138cd878288016134fd565b93505060406138de878288016136b1565b925050606085013567ffffffffffffffff8111156138ff576138fe614a80565b5b61390b87828801613640565b91505092959194509250565b6000806000604084860312156139305761392f614a85565b5b600061393e868287016134fd565b935050602084013567ffffffffffffffff81111561395f5761395e614a80565b5b61396b86828701613568565b92509250509250925092565b6000806040838503121561398e5761398d614a85565b5b600061399c858286016134fd565b92505060206139ad858286016135ec565b9150509250929050565b600080604083850312156139ce576139cd614a85565b5b60006139dc858286016134fd565b92505060206139ed858286016136b1565b9150509250929050565b600060208284031215613a0d57613a0c614a85565b5b6000613a1b84828501613601565b91505092915050565b600060208284031215613a3a57613a39614a85565b5b6000613a4884828501613616565b91505092915050565b600060208284031215613a6757613a66614a85565b5b6000613a758482850161362b565b91505092915050565b600060208284031215613a9457613a93614a85565b5b6000613aa28482850161366e565b91505092915050565b600060208284031215613ac157613ac0614a85565b5b600082013567ffffffffffffffff811115613adf57613ade614a80565b5b613aeb84828501613683565b91505092915050565b600060208284031215613b0a57613b09614a85565b5b6000613b18848285016136b1565b91505092915050565b60008060408385031215613b3857613b37614a85565b5b6000613b46858286016136b1565b9250506020613b57858286016134fd565b9150509250929050565b600080600060408486031215613b7a57613b79614a85565b5b6000613b88868287016136b1565b935050602084013567ffffffffffffffff811115613ba957613ba8614a80565b5b613bb586828701613512565b92509250509250925092565b6000613bcd83836140e5565b60208301905092915050565b613be2816147ae565b82525050565b613bf9613bf4826147ae565b61492c565b82525050565b6000613c0a8261462d565b613c14818561465b565b9350613c1f83614608565b8060005b83811015613c50578151613c378882613bc1565b9750613c428361464e565b925050600181019050613c23565b5085935050505092915050565b613c66816147c0565b82525050565b613c75816147cc565b82525050565b6000613c8682614638565b613c90818561466c565b9350613ca081856020860161484d565b613ca981614a8a565b840191505092915050565b6000613cbf82614643565b613cc9818561467d565b9350613cd981856020860161484d565b613ce281614a8a565b840191505092915050565b6000613cf882614643565b613d02818561468e565b9350613d1281856020860161484d565b80840191505092915050565b60008154613d2b81614880565b613d35818661468e565b94506001821660008114613d505760018114613d6157613d94565b60ff19831686528186019350613d94565b613d6a85614618565b60005b83811015613d8c57815481890152600182019150602081019050613d6d565b838801955050505b50505092915050565b6000613daa60238361467d565b9150613db582614aa8565b604082019050919050565b6000613dcd602b8361467d565b9150613dd882614af7565b604082019050919050565b6000613df060328361467d565b9150613dfb82614b46565b604082019050919050565b6000613e1360268361467d565b9150613e1e82614b95565b604082019050919050565b6000613e3660168361467d565b9150613e4182614be4565b602082019050919050565b6000613e5960248361467d565b9150613e6482614c0d565b604082019050919050565b6000613e7c60198361467d565b9150613e8782614c5c565b602082019050919050565b6000613e9f602c8361467d565b9150613eaa82614c85565b604082019050919050565b6000613ec260388361467d565b9150613ecd82614cd4565b604082019050919050565b6000613ee560138361467d565b9150613ef082614d23565b602082019050919050565b6000613f08602a8361467d565b9150613f1382614d4c565b604082019050919050565b6000613f2b60298361467d565b9150613f3682614d9b565b604082019050919050565b6000613f4e60178361467d565b9150613f5982614dea565b602082019050919050565b6000613f7160158361467d565b9150613f7c82614e13565b602082019050919050565b6000613f94602c8361467d565b9150613f9f82614e3c565b604082019050919050565b6000613fb760208361467d565b9150613fc282614e8b565b602082019050919050565b6000613fda60298361467d565b9150613fe582614eb4565b604082019050919050565b6000613ffd60138361467d565b915061400882614f03565b602082019050919050565b600061402060218361467d565b915061402b82614f2c565b604082019050919050565b600061404360198361467d565b915061404e82614f7b565b602082019050919050565b600061406660318361467d565b915061407182614fa4565b604082019050919050565b6000614089602c8361467d565b915061409482614ff3565b604082019050919050565b60006140ac601c8361467d565b91506140b782615042565b602082019050919050565b60006140cf60188361467d565b91506140da8261506b565b602082019050919050565b6140ee81614834565b82525050565b6140fd81614834565b82525050565b600061410f8284613be8565b60148201915081905092915050565b600061412a8284613ced565b915081905092915050565b60006141418285613d1e565b915061414d8284613ced565b91508190509392505050565b600060208201905061416e6000830184613bd9565b92915050565b60006080820190506141896000830187613bd9565b6141966020830186613bd9565b6141a360408301856140f4565b81810360608301526141b58184613c7b565b905095945050505050565b600060208201905081810360008301526141da8184613bff565b905092915050565b60006020820190506141f76000830184613c5d565b92915050565b60006020820190506142126000830184613c6c565b92915050565b600060208201905081810360008301526142328184613cb4565b905092915050565b6000602082019050818103600083015261425381613d9d565b9050919050565b6000602082019050818103600083015261427381613dc0565b9050919050565b6000602082019050818103600083015261429381613de3565b9050919050565b600060208201905081810360008301526142b381613e06565b9050919050565b600060208201905081810360008301526142d381613e29565b9050919050565b600060208201905081810360008301526142f381613e4c565b9050919050565b6000602082019050818103600083015261431381613e6f565b9050919050565b6000602082019050818103600083015261433381613e92565b9050919050565b6000602082019050818103600083015261435381613eb5565b9050919050565b6000602082019050818103600083015261437381613ed8565b9050919050565b6000602082019050818103600083015261439381613efb565b9050919050565b600060208201905081810360008301526143b381613f1e565b9050919050565b600060208201905081810360008301526143d381613f41565b9050919050565b600060208201905081810360008301526143f381613f64565b9050919050565b6000602082019050818103600083015261441381613f87565b9050919050565b6000602082019050818103600083015261443381613faa565b9050919050565b6000602082019050818103600083015261445381613fcd565b9050919050565b6000602082019050818103600083015261447381613ff0565b9050919050565b6000602082019050818103600083015261449381614013565b9050919050565b600060208201905081810360008301526144b381614036565b9050919050565b600060208201905081810360008301526144d381614059565b9050919050565b600060208201905081810360008301526144f38161407c565b9050919050565b600060208201905081810360008301526145138161409f565b9050919050565b60006020820190508181036000830152614533816140c2565b9050919050565b600060208201905061454f60008301846140f4565b92915050565b600061455f614570565b905061456b82826148b2565b919050565b6000604051905090565b600067ffffffffffffffff82111561459557614594614a3d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145c1576145c0614a3d565b5b6145ca82614a8a565b9050602081019050919050565b600067ffffffffffffffff8211156145f2576145f1614a3d565b5b6145fb82614a8a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146a482614834565b91506146af83614834565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146e4576146e3614981565b5b828201905092915050565b60006146fa82614834565b915061470583614834565b925082614715576147146149b0565b5b828204905092915050565b600061472b82614834565b915061473683614834565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561476f5761476e614981565b5b828202905092915050565b600061478582614834565b915061479083614834565b9250828210156147a3576147a2614981565b5b828203905092915050565b60006147b982614814565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061480d826147ae565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561486b578082015181840152602081019050614850565b8381111561487a576000848401525b50505050565b6000600282049050600182168061489857607f821691505b602082108114156148ac576148ab6149df565b5b50919050565b6148bb82614a8a565b810181811067ffffffffffffffff821117156148da576148d9614a3d565b5b80604052505050565b60006148ee82614834565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561492157614920614981565b5b600182019050919050565b60006149378261493e565b9050919050565b600061494982614a9b565b9050919050565b600061495b82614834565b915061496683614834565b925082614976576149756149b0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206769667420616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f45786365656473206d696e7420737570706c7900000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d696e74696e6720616c6c6f77616e636500000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732070726f76696465642e00000000600082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e210000000000000000600082015250565b61509d816147ae565b81146150a857600080fd5b50565b6150b4816147c0565b81146150bf57600080fd5b50565b6150cb816147cc565b81146150d657600080fd5b50565b6150e2816147d6565b81146150ed57600080fd5b50565b6150f981614802565b811461510457600080fd5b50565b61511081614834565b811461511b57600080fd5b5056fea2646970667358221220a477822afa72651631ef40ac3166bfb28e307b100cb928a5fb5f6f828a47bb4864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d696e742e63727970746f76656e75736e66742e636f6d2f6170692f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): https://mint.cryptovenusnft.com/api/
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [3] : 68747470733a2f2f6d696e742e63727970746f76656e75736e66742e636f6d2f
Arg [4] : 6170692f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35833:6246:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31421:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18915:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19727:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19250:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31721:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20786:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36040:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39376:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39672:509;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32197:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36158:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35989:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21233:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40313:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36222:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41174:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31908:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41946:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36871:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40921:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36474:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18522:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36406:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37685:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35890:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18068:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:103;;;;;;;;;;;;;:::i;:::-;;38631:727;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4336:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36339:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19084:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36579:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20107:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36094:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21489:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36971:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35934:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37825:637;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37224:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36281:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40187:120;;;;;;;;;;;;;:::i;:::-;;41438:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5245:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40703:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37372:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36523:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38487:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31421:224;31523:4;31562:35;31547:50;;;:11;:50;;;;:90;;;;31601:36;31625:11;31601:23;:36::i;:::-;31547:90;31540:97;;31421:224;;;:::o;18915:100::-;18969:13;19002:5;18995:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18915:100;:::o;19727:308::-;19848:7;19895:16;19903:7;19895;:16::i;:::-;19873:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20003:15;:24;20019:7;20003:24;;;;;;;;;;;;;;;;;;;;;19996:31;;19727:308;;;:::o;19250:411::-;19331:13;19347:23;19362:7;19347:14;:23::i;:::-;19331:39;;19395:5;19389:11;;:2;:11;;;;19381:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19489:5;19473:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19498:37;19515:5;19522:12;:10;:12::i;:::-;19498:16;:37::i;:::-;19473:62;19451:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19632:21;19641:2;19645:7;19632:8;:21::i;:::-;19320:341;19250:411;;:::o;31721:110::-;31782:7;31809;:14;;;;31802:21;;31721:110;:::o;20786:376::-;20995:41;21014:12;:10;:12::i;:::-;21028:7;20995:18;:41::i;:::-;20973:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21126:28;21136:4;21142:2;21146:7;21126:9;:28::i;:::-;20786:376;;;:::o;36040:47::-;;;;:::o;39376:275::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39449:19:::1;39471:7;:14;;;;39449:36;;36210:5;39516;39502:11;:19;;;;:::i;:::-;:33;;39494:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39580:9;39576:69;39595:5;39591:1;:9;39576:69;;;39618:27;39624:3;39643:1;39629:11;:15;;;;:::i;:::-;39618:5;:27::i;:::-;39602:3;;;;;:::i;:::-;;;;39576:69;;;;39440:211;39376:275:::0;;:::o;39672:509::-;39731:19;39753:7;:14;;;;39731:36;;39784:16;;;;;;;;;;;39776:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36210:5;39860;39846:11;:19;;;;:::i;:::-;:33;;39838:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36274:2;39952:5;39920:15;:29;39936:12;:10;:12::i;:::-;39920:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:55;;39912:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40038:9;36458;40017:5;:17;;;;:::i;:::-;:30;40009:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40092:6;40088:88;40104:5;40100:1;:9;40088:88;;;40130:36;40136:12;:10;:12::i;:::-;40164:1;40150:11;:15;;;;:::i;:::-;40130:5;:36::i;:::-;40111:3;;;;;:::i;:::-;;;;40088:88;;;;39722:459;39672:509;:::o;32197:490::-;32294:15;32338:16;32348:5;32338:9;:16::i;:::-;32330:5;:24;32322:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32415:10;32440:6;32436:178;32452:7;:14;;;;32448:1;:18;32436:178;;;32499:7;32507:1;32499:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32490:19;;:5;:19;;;32487:116;;;32541:5;32532;:14;32529:58;;;32555:1;32548:8;;;;;;32529:58;32580:7;;;;;:::i;:::-;;;;32487:116;32468:3;;;;;:::i;:::-;;;;32436:178;;;;32626:53;;;;;;;;;;:::i;:::-;;;;;;;;32197:490;;;;;:::o;36158:57::-;36210:5;36158:57;:::o;35989:46::-;;;;:::o;21233:185::-;21371:39;21388:4;21394:2;21398:7;21371:39;;;;;;;;;;;;:16;:39::i;:::-;21233:185;;;:::o;40313:384::-;40373:16;40400:18;40421:17;40431:6;40421:9;:17::i;:::-;40400:38;;40465:1;40451:10;:15;40447:44;;;40489:1;40475:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40468:23;;;;;40447:44;40502:25;40544:10;40530:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40502:53;;40569:9;40564:104;40584:10;40580:1;:14;40564:104;;;40628:30;40648:6;40656:1;40628:19;:30::i;:::-;40614:8;40623:1;40614:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;40596:3;;;;;:::i;:::-;;;;40564:104;;;;40683:8;40676:15;;;;40313:384;;;;:::o;36222:54::-;36274:2;36222:54;:::o;41174:258::-;41263:4;41281:9;41277:128;41296:9;;:16;;41292:1;:20;41277:128;;;41359:7;41334:32;;:7;41342:9;;41352:1;41342:12;;;;;;;:::i;:::-;;;;;;;;41334:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;41331:64;;41390:5;41383:12;;;;;41331:64;41314:3;;;;:::i;:::-;;;41277:128;;;;41422:4;41415:11;;41174:258;;;;;;:::o;31908:205::-;31983:7;32019;:14;;;;32011:5;:22;32003:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;32100:5;32093:12;;31908:205;;;:::o;41946:128::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42031:7:::1;42023:21;;:44;42045:21;42023:44;;;;;;;;;;;;;;;;;;;;;;;42015:53;;;::::0;::::1;;41946:128:::0;:::o;36871:94::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36951:8:::1;36941:7;:18;;;;;;;;;;;;:::i;:::-;;36871:94:::0;:::o;40921:247::-;41049:9;41044:119;41068:9;:16;41064:1;:20;41044:119;;;41104:49;41121:5;41128:3;41133:9;41143:1;41133:12;;;;;;;;:::i;:::-;;;;;;;;41147:5;41104:16;:49::i;:::-;41086:3;;;;;:::i;:::-;;;;41044:119;;;;40921:247;;;;:::o;36474:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18522:326::-;18639:7;18664:13;18680:7;18688;18680:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18664:32;;18746:1;18729:19;;:5;:19;;;;18707:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18835:5;18828:12;;;18522:326;;;:::o;36406:61::-;36458:9;36406:61;:::o;37685:134::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37794:19:::1;37773:18;:40;;;;37685:134:::0;:::o;35890:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18068:392::-;18190:4;18238:1;18221:19;;:5;:19;;;;18213:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18300:10;18326:6;18321:109;18338:7;:14;;;;18334:1;:18;18321:109;;;18385:7;18393:1;18385:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18376:19;;:5;:19;;;18372:46;;;18411:7;;;;:::i;:::-;;;18372:46;18354:3;;;;:::i;:::-;;;18321:109;;;;18447:5;18440:12;;;18068:392;;;:::o;4987:103::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5052:30:::1;5079:1;5052:18;:30::i;:::-;4987:103::o:0;38631:727::-;38719:19;38741:7;:14;;;;38719:36;;38764:21;38812:12;:10;:12::i;:::-;38795:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;38764:62;;38843;38862:5;;38843:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38869:19;;38890:14;38896:7;38890:5;:14::i;:::-;38843:18;:62::i;:::-;38835:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36274:2;38994:5;38962:15;:29;38978:12;:10;:12::i;:::-;38962:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:55;;38954:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;36210:5;39079;39065:11;:19;;;;:::i;:::-;:33;;39057:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39165:9;36391:10;39139:5;:22;;;;:::i;:::-;:35;39131:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39251:5;39218:15;:29;39234:12;:10;:12::i;:::-;39218:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;39269:6;39265:88;39281:5;39277:1;:9;39265:88;;;39307:36;39313:12;:10;:12::i;:::-;39341:1;39327:11;:15;;;;:::i;:::-;39307:5;:36::i;:::-;39288:3;;;;;:::i;:::-;;;;39265:88;;;;38710:648;;38631:727;;;:::o;4336:87::-;4382:7;4409:6;;;;;;;;;;;4402:13;;4336:87;:::o;36339:62::-;36391:10;36339:62;:::o;19084:104::-;19140:13;19173:7;19166:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19084:104;:::o;36579:47::-;;;;;;;;;;;;;;;;;:::o;20107:327::-;20254:12;:10;:12::i;:::-;20242:24;;:8;:24;;;;20234:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20354:8;20309:18;:32;20328:12;:10;:12::i;:::-;20309:32;;;;;;;;;;;;;;;:42;20342:8;20309:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20407:8;20378:48;;20393:12;:10;:12::i;:::-;20378:48;;;20417:8;20378:48;;;;;;:::i;:::-;;;;;;;;20107:327;;:::o;36094:57::-;;;;;;;;;;;;;:::o;21489:365::-;21678:41;21697:12;:10;:12::i;:::-;21711:7;21678:18;:41::i;:::-;21656:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21807:39;21821:4;21827:2;21831:7;21840:5;21807:13;:39::i;:::-;21489:365;;;;:::o;36971:224::-;37037:13;37069:17;37077:8;37069:7;:17::i;:::-;37061:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37152:7;37161:26;37178:8;37161:16;:26::i;:::-;37135:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37121:68;;36971:224;;;:::o;35934:48::-;;;;;;;;;;;;;:::o;37825:637::-;37904:19;37926:7;:14;;;;37904:36;;37949:21;37997:12;:10;:12::i;:::-;37980:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;37949:62;;38028:61;38047:5;;38028:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38054:18;;38074:14;38080:7;38074:5;:14::i;:::-;38028:18;:61::i;:::-;38020:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;36333:1;38182:5;38146:19;:33;38166:12;:10;:12::i;:::-;38146:33;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:59;;38138:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;36210:5;38264;38250:11;:19;;;;:::i;:::-;:33;;38242:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38355:5;38318:19;:33;38338:12;:10;:12::i;:::-;38318:33;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;38373:6;38369:88;38385:5;38381:1;:9;38369:88;;;38411:36;38417:12;:10;:12::i;:::-;38445:1;38431:11;:15;;;;:::i;:::-;38411:5;:36::i;:::-;38392:3;;;;;:::i;:::-;;;;38369:88;;;;37895:567;;37825:637;;;:::o;37224:142::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37339:21:::1;37316:20;;:44;;;;;;;;;;;;;;;;;;37224:142:::0;:::o;36281:53::-;36333:1;36281:53;:::o;40187:120::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40250:19:::1;40243:26;;;40297:4;40278:16;;:23;;;;;;;;;;;;;;;;;;40187:120::o:0;41438:348::-;41528:4;41543:34;41601:20;;;;;;;;;;;41543:79;;41677:8;41635:50;;41643:13;:21;;;41665:6;41643:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41635:50;;;:76;;;;41689:12;:22;41702:8;41689:22;;;;;;;;;;;;;;;;;;;;;;;;;41635:76;41631:93;;;41720:4;41713:11;;;;;41631:93;41740:40;41763:6;41771:8;41740:22;:40::i;:::-;41733:47;;;41438:348;;;;;:::o;5245:201::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5354:1:::1;5334:22;;:8;:22;;;;5326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5410:28;5429:8;5410:18;:28::i;:::-;5245:201:::0;:::o;40703:212::-;40807:9;40802:108;40826:9;:16;40822:1;:20;40802:108;;;40862:38;40875:5;40882:3;40887:9;40897:1;40887:12;;;;;;;;:::i;:::-;;;;;;;;40862;:38::i;:::-;40844:3;;;;;:::i;:::-;;;;40802:108;;;;40703:212;;;:::o;37372:134::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37474:12:::1;:26;37487:12;37474:26;;;;;;;;;;;;;;;;;;;;;;;;;37473:27;37444:12;:26;37457:12;37444:26;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;37372:134:::0;:::o;36523:51::-;;;;;;;;;;;;;;;;;:::o;38487:138::-;4567:12;:10;:12::i;:::-;4556:23;;:7;:5;:7::i;:::-;:23;;;4548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38599:20:::1;38577:19;:42;;;;38487:138:::0;:::o;17649:355::-;17796:4;17853:25;17838:40;;;:11;:40;;;;:105;;;;17910:33;17895:48;;;:11;:48;;;;17838:105;:158;;;;17960:36;17984:11;17960:23;:36::i;:::-;17838:158;17818:178;;17649:355;;;:::o;23401:155::-;23466:4;23500:7;:14;;;;23490:7;:24;:58;;;;;23546:1;23518:30;;:7;23526;23518:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;23490:58;23483:65;;23401:155;;;:::o;3064:98::-;3117:7;3144:10;3137:17;;3064:98;:::o;27426:174::-;27528:2;27501:15;:24;27517:7;27501:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27584:7;27580:2;27546:46;;27555:23;27570:7;27555:14;:23::i;:::-;27546:46;;;;;;;;;;;;27426:174;;:::o;23723:452::-;23852:4;23896:16;23904:7;23896;:16::i;:::-;23874:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23995:13;24011:23;24026:7;24011:14;:23::i;:::-;23995:39;;24064:5;24053:16;;:7;:16;;;:64;;;;24110:7;24086:31;;:20;24098:7;24086:11;:20::i;:::-;:31;;;24053:64;:113;;;;24134:32;24151:5;24158:7;24134:16;:32::i;:::-;24053:113;24045:122;;;23723:452;;;;:::o;26755:553::-;26928:4;26901:31;;:23;26916:7;26901:14;:23::i;:::-;:31;;;26879:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;27034:1;27020:16;;:2;:16;;;;27012:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27090:39;27111:4;27117:2;27121:7;27090:20;:39::i;:::-;27194:29;27211:1;27215:7;27194:8;:29::i;:::-;27253:2;27234:7;27242;27234:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27292:7;27288:2;27273:27;;27282:4;27273:27;;;;;;;;;;;;26755:553;;;:::o;41792:148::-;41871:7;41884:2;41871:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41926:7;41922:2;41901:33;;41918:1;41901:33;;;;;;;;;;;;41792:148;;:::o;5606:191::-;5680:16;5699:6;;;;;;;;;;;5680:25;;5725:8;5716:6;;:17;;;;;;;;;;;;;;;;;;5780:8;5749:40;;5770:8;5749:40;;;;;;;;;;;;5669:128;5606:191;:::o;37533:128::-;37594:7;37646;37629:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;37619:36;;;;;;37612:43;;37533:128;;;:::o;921:190::-;1046:4;1099;1070:25;1083:5;1090:4;1070:12;:25::i;:::-;:33;1063:40;;921:190;;;;;:::o;22736:352::-;22893:28;22903:4;22909:2;22913:7;22893:9;:28::i;:::-;22954:48;22977:4;22983:2;22987:7;22996:5;22954:22;:48::i;:::-;22932:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;22736:352;;;;:::o;13778:723::-;13834:13;14064:1;14055:5;:10;14051:53;;;14082:10;;;;;;;;;;;;;;;;;;;;;14051:53;14114:12;14129:5;14114:20;;14145:14;14170:78;14185:1;14177:4;:9;14170:78;;14203:8;;;;;:::i;:::-;;;;14234:2;14226:10;;;;;:::i;:::-;;;14170:78;;;14258:19;14290:6;14280:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14258:39;;14308:154;14324:1;14315:5;:10;14308:154;;14352:1;14342:11;;;;;:::i;:::-;;;14419:2;14411:5;:10;;;;:::i;:::-;14398:2;:24;;;;:::i;:::-;14385:39;;14368:6;14375;14368:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14448:2;14439:11;;;;;:::i;:::-;;;14308:154;;;14486:6;14472:21;;;;;13778:723;;;;:::o;20505:214::-;20647:4;20676:18;:25;20695:5;20676:25;;;;;;;;;;;;;;;:35;20702:8;20676:35;;;;;;;;;;;;;;;;;;;;;;;;;20669:42;;20505:214;;;;:::o;16398:157::-;16483:4;16522:25;16507:40;;;:11;:40;;;;16500:47;;16398:157;;;:::o;29717:126::-;;;;:::o;1473:675::-;1556:7;1576:20;1599:4;1576:27;;1619:9;1614:497;1638:5;:12;1634:1;:16;1614:497;;;1672:20;1695:5;1701:1;1695:8;;;;;;;;:::i;:::-;;;;;;;;1672:31;;1738:12;1722;:28;1718:382;;1865:42;1880:12;1894;1865:14;:42::i;:::-;1850:57;;1718:382;;;2042:42;2057:12;2071;2042:14;:42::i;:::-;2027:57;;1718:382;1657:454;1652:3;;;;;:::i;:::-;;;;1614:497;;;;2128:12;2121:19;;;1473:675;;;;:::o;28165:980::-;28320:4;28341:15;:2;:13;;;:15::i;:::-;28337:801;;;28410:2;28394:36;;;28453:12;:10;:12::i;:::-;28488:4;28515:7;28545:5;28394:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28373:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28769:1;28752:6;:13;:18;28748:320;;;28795:108;;;;;;;;;;:::i;:::-;;;;;;;;28748:320;29018:6;29012:13;29003:6;28999:2;28995:15;28988:38;28373:710;28643:41;;;28633:51;;;:6;:51;;;;28626:58;;;;;28337:801;29122:4;29115:11;;28165:980;;;;;;;:::o;2156:224::-;2224:13;2287:1;2281:4;2274:15;2316:1;2310:4;2303:15;2357:4;2351;2341:21;2332:30;;2156:224;;;;:::o;16646:193::-;16706:4;16723:9;16787:7;16775:20;16767:28;;16830:1;16823:4;:8;16816:15;;;16646:193;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:::-;2412:8;2422:6;2472:3;2465:4;2457:6;2453:17;2449:27;2439:122;;2480:79;;:::i;:::-;2439:122;2593:6;2580:20;2570:30;;2623:18;2615:6;2612:30;2609:117;;;2645:79;;:::i;:::-;2609:117;2759:4;2751:6;2747:17;2735:29;;2813:3;2805:4;2797:6;2793:17;2783:8;2779:32;2776:41;2773:128;;;2820:79;;:::i;:::-;2773:128;2339:568;;;;;:::o;2930:370::-;3001:5;3050:3;3043:4;3035:6;3031:17;3027:27;3017:122;;3058:79;;:::i;:::-;3017:122;3175:6;3162:20;3200:94;3290:3;3282:6;3275:4;3267:6;3263:17;3200:94;:::i;:::-;3191:103;;3007:293;2930:370;;;;:::o;3306:133::-;3349:5;3387:6;3374:20;3365:29;;3403:30;3427:5;3403:30;:::i;:::-;3306:133;;;;:::o;3445:139::-;3491:5;3529:6;3516:20;3507:29;;3545:33;3572:5;3545:33;:::i;:::-;3445:139;;;;:::o;3590:137::-;3635:5;3673:6;3660:20;3651:29;;3689:32;3715:5;3689:32;:::i;:::-;3590:137;;;;:::o;3733:141::-;3789:5;3820:6;3814:13;3805:22;;3836:32;3862:5;3836:32;:::i;:::-;3733:141;;;;:::o;3893:338::-;3948:5;3997:3;3990:4;3982:6;3978:17;3974:27;3964:122;;4005:79;;:::i;:::-;3964:122;4122:6;4109:20;4147:78;4221:3;4213:6;4206:4;4198:6;4194:17;4147:78;:::i;:::-;4138:87;;3954:277;3893:338;;;;:::o;4237:201::-;4323:5;4354:6;4348:13;4339:22;;4370:62;4426:5;4370:62;:::i;:::-;4237:201;;;;:::o;4458:340::-;4514:5;4563:3;4556:4;4548:6;4544:17;4540:27;4530:122;;4571:79;;:::i;:::-;4530:122;4688:6;4675:20;4713:79;4788:3;4780:6;4773:4;4765:6;4761:17;4713:79;:::i;:::-;4704:88;;4520:278;4458:340;;;;:::o;4804:139::-;4850:5;4888:6;4875:20;4866:29;;4904:33;4931:5;4904:33;:::i;:::-;4804:139;;;;:::o;4949:329::-;5008:6;5057:2;5045:9;5036:7;5032:23;5028:32;5025:119;;;5063:79;;:::i;:::-;5025:119;5183:1;5208:53;5253:7;5244:6;5233:9;5229:22;5208:53;:::i;:::-;5198:63;;5154:117;4949:329;;;;:::o;5284:474::-;5352:6;5360;5409:2;5397:9;5388:7;5384:23;5380:32;5377:119;;;5415:79;;:::i;:::-;5377:119;5535:1;5560:53;5605:7;5596:6;5585:9;5581:22;5560:53;:::i;:::-;5550:63;;5506:117;5662:2;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;:::i;:::-;5678:63;;5633:118;5284:474;;;;;:::o;5764:829::-;5866:6;5874;5882;5931:2;5919:9;5910:7;5906:23;5902:32;5899:119;;;5937:79;;:::i;:::-;5899:119;6057:1;6082:53;6127:7;6118:6;6107:9;6103:22;6082:53;:::i;:::-;6072:63;;6028:117;6184:2;6210:53;6255:7;6246:6;6235:9;6231:22;6210:53;:::i;:::-;6200:63;;6155:118;6340:2;6329:9;6325:18;6312:32;6371:18;6363:6;6360:30;6357:117;;;6393:79;;:::i;:::-;6357:117;6498:78;6568:7;6559:6;6548:9;6544:22;6498:78;:::i;:::-;6488:88;;6283:303;5764:829;;;;;:::o;6599:1153::-;6719:6;6727;6735;6743;6792:3;6780:9;6771:7;6767:23;6763:33;6760:120;;;6799:79;;:::i;:::-;6760:120;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;7046:2;7072:53;7117:7;7108:6;7097:9;7093:22;7072:53;:::i;:::-;7062:63;;7017:118;7202:2;7191:9;7187:18;7174:32;7233:18;7225:6;7222:30;7219:117;;;7255:79;;:::i;:::-;7219:117;7360:78;7430:7;7421:6;7410:9;7406:22;7360:78;:::i;:::-;7350:88;;7145:303;7515:2;7504:9;7500:18;7487:32;7546:18;7538:6;7535:30;7532:117;;;7568:79;;:::i;:::-;7532:117;7673:62;7727:7;7718:6;7707:9;7703:22;7673:62;:::i;:::-;7663:72;;7458:287;6599:1153;;;;;;;:::o;7758:619::-;7835:6;7843;7851;7900:2;7888:9;7879:7;7875:23;7871:32;7868:119;;;7906:79;;:::i;:::-;7868:119;8026:1;8051:53;8096:7;8087:6;8076:9;8072:22;8051:53;:::i;:::-;8041:63;;7997:117;8153:2;8179:53;8224:7;8215:6;8204:9;8200:22;8179:53;:::i;:::-;8169:63;;8124:118;8281:2;8307:53;8352:7;8343:6;8332:9;8328:22;8307:53;:::i;:::-;8297:63;;8252:118;7758:619;;;;;:::o;8383:943::-;8478:6;8486;8494;8502;8551:3;8539:9;8530:7;8526:23;8522:33;8519:120;;;8558:79;;:::i;:::-;8519:120;8678:1;8703:53;8748:7;8739:6;8728:9;8724:22;8703:53;:::i;:::-;8693:63;;8649:117;8805:2;8831:53;8876:7;8867:6;8856:9;8852:22;8831:53;:::i;:::-;8821:63;;8776:118;8933:2;8959:53;9004:7;8995:6;8984:9;8980:22;8959:53;:::i;:::-;8949:63;;8904:118;9089:2;9078:9;9074:18;9061:32;9120:18;9112:6;9109:30;9106:117;;;9142:79;;:::i;:::-;9106:117;9247:62;9301:7;9292:6;9281:9;9277:22;9247:62;:::i;:::-;9237:72;;9032:287;8383:943;;;;;;;:::o;9332:704::-;9427:6;9435;9443;9492:2;9480:9;9471:7;9467:23;9463:32;9460:119;;;9498:79;;:::i;:::-;9460:119;9618:1;9643:53;9688:7;9679:6;9668:9;9664:22;9643:53;:::i;:::-;9633:63;;9589:117;9773:2;9762:9;9758:18;9745:32;9804:18;9796:6;9793:30;9790:117;;;9826:79;;:::i;:::-;9790:117;9939:80;10011:7;10002:6;9991:9;9987:22;9939:80;:::i;:::-;9921:98;;;;9716:313;9332:704;;;;;:::o;10042:468::-;10107:6;10115;10164:2;10152:9;10143:7;10139:23;10135:32;10132:119;;;10170:79;;:::i;:::-;10132:119;10290:1;10315:53;10360:7;10351:6;10340:9;10336:22;10315:53;:::i;:::-;10305:63;;10261:117;10417:2;10443:50;10485:7;10476:6;10465:9;10461:22;10443:50;:::i;:::-;10433:60;;10388:115;10042:468;;;;;:::o;10516:474::-;10584:6;10592;10641:2;10629:9;10620:7;10616:23;10612:32;10609:119;;;10647:79;;:::i;:::-;10609:119;10767:1;10792:53;10837:7;10828:6;10817:9;10813:22;10792:53;:::i;:::-;10782:63;;10738:117;10894:2;10920:53;10965:7;10956:6;10945:9;10941:22;10920:53;:::i;:::-;10910:63;;10865:118;10516:474;;;;;:::o;10996:329::-;11055:6;11104:2;11092:9;11083:7;11079:23;11075:32;11072:119;;;11110:79;;:::i;:::-;11072:119;11230:1;11255:53;11300:7;11291:6;11280:9;11276:22;11255:53;:::i;:::-;11245:63;;11201:117;10996:329;;;;:::o;11331:327::-;11389:6;11438:2;11426:9;11417:7;11413:23;11409:32;11406:119;;;11444:79;;:::i;:::-;11406:119;11564:1;11589:52;11633:7;11624:6;11613:9;11609:22;11589:52;:::i;:::-;11579:62;;11535:116;11331:327;;;;:::o;11664:349::-;11733:6;11782:2;11770:9;11761:7;11757:23;11753:32;11750:119;;;11788:79;;:::i;:::-;11750:119;11908:1;11933:63;11988:7;11979:6;11968:9;11964:22;11933:63;:::i;:::-;11923:73;;11879:127;11664:349;;;;:::o;12019:409::-;12118:6;12167:2;12155:9;12146:7;12142:23;12138:32;12135:119;;;12173:79;;:::i;:::-;12135:119;12293:1;12318:93;12403:7;12394:6;12383:9;12379:22;12318:93;:::i;:::-;12308:103;;12264:157;12019:409;;;;:::o;12434:509::-;12503:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:119;;;12558:79;;:::i;:::-;12520:119;12706:1;12695:9;12691:17;12678:31;12736:18;12728:6;12725:30;12722:117;;;12758:79;;:::i;:::-;12722:117;12863:63;12918:7;12909:6;12898:9;12894:22;12863:63;:::i;:::-;12853:73;;12649:287;12434:509;;;;:::o;12949:329::-;13008:6;13057:2;13045:9;13036:7;13032:23;13028:32;13025:119;;;13063:79;;:::i;:::-;13025:119;13183:1;13208:53;13253:7;13244:6;13233:9;13229:22;13208:53;:::i;:::-;13198:63;;13154:117;12949:329;;;;:::o;13284:474::-;13352:6;13360;13409:2;13397:9;13388:7;13384:23;13380:32;13377:119;;;13415:79;;:::i;:::-;13377:119;13535:1;13560:53;13605:7;13596:6;13585:9;13581:22;13560:53;:::i;:::-;13550:63;;13506:117;13662:2;13688:53;13733:7;13724:6;13713:9;13709:22;13688:53;:::i;:::-;13678:63;;13633:118;13284:474;;;;;:::o;13764:704::-;13859:6;13867;13875;13924:2;13912:9;13903:7;13899:23;13895:32;13892:119;;;13930:79;;:::i;:::-;13892:119;14050:1;14075:53;14120:7;14111:6;14100:9;14096:22;14075:53;:::i;:::-;14065:63;;14021:117;14205:2;14194:9;14190:18;14177:32;14236:18;14228:6;14225:30;14222:117;;;14258:79;;:::i;:::-;14222:117;14371:80;14443:7;14434:6;14423:9;14419:22;14371:80;:::i;:::-;14353:98;;;;14148:313;13764:704;;;;;:::o;14474:179::-;14543:10;14564:46;14606:3;14598:6;14564:46;:::i;:::-;14642:4;14637:3;14633:14;14619:28;;14474:179;;;;:::o;14659:118::-;14746:24;14764:5;14746:24;:::i;:::-;14741:3;14734:37;14659:118;;:::o;14783:157::-;14888:45;14908:24;14926:5;14908:24;:::i;:::-;14888:45;:::i;:::-;14883:3;14876:58;14783:157;;:::o;14976:732::-;15095:3;15124:54;15172:5;15124:54;:::i;:::-;15194:86;15273:6;15268:3;15194:86;:::i;:::-;15187:93;;15304:56;15354:5;15304:56;:::i;:::-;15383:7;15414:1;15399:284;15424:6;15421:1;15418:13;15399:284;;;15500:6;15494:13;15527:63;15586:3;15571:13;15527:63;:::i;:::-;15520:70;;15613:60;15666:6;15613:60;:::i;:::-;15603:70;;15459:224;15446:1;15443;15439:9;15434:14;;15399:284;;;15403:14;15699:3;15692:10;;15100:608;;;14976:732;;;;:::o;15714:109::-;15795:21;15810:5;15795:21;:::i;:::-;15790:3;15783:34;15714:109;;:::o;15829:118::-;15916:24;15934:5;15916:24;:::i;:::-;15911:3;15904:37;15829:118;;:::o;15953:360::-;16039:3;16067:38;16099:5;16067:38;:::i;:::-;16121:70;16184:6;16179:3;16121:70;:::i;:::-;16114:77;;16200:52;16245:6;16240:3;16233:4;16226:5;16222:16;16200:52;:::i;:::-;16277:29;16299:6;16277:29;:::i;:::-;16272:3;16268:39;16261:46;;16043:270;15953:360;;;;:::o;16319:364::-;16407:3;16435:39;16468:5;16435:39;:::i;:::-;16490:71;16554:6;16549:3;16490:71;:::i;:::-;16483:78;;16570:52;16615:6;16610:3;16603:4;16596:5;16592:16;16570:52;:::i;:::-;16647:29;16669:6;16647:29;:::i;:::-;16642:3;16638:39;16631:46;;16411:272;16319:364;;;;:::o;16689:377::-;16795:3;16823:39;16856:5;16823:39;:::i;:::-;16878:89;16960:6;16955:3;16878:89;:::i;:::-;16871:96;;16976:52;17021:6;17016:3;17009:4;17002:5;16998:16;16976:52;:::i;:::-;17053:6;17048:3;17044:16;17037:23;;16799:267;16689:377;;;;:::o;17096:845::-;17199:3;17236:5;17230:12;17265:36;17291:9;17265:36;:::i;:::-;17317:89;17399:6;17394:3;17317:89;:::i;:::-;17310:96;;17437:1;17426:9;17422:17;17453:1;17448:137;;;;17599:1;17594:341;;;;17415:520;;17448:137;17532:4;17528:9;17517;17513:25;17508:3;17501:38;17568:6;17563:3;17559:16;17552:23;;17448:137;;17594:341;17661:38;17693:5;17661:38;:::i;:::-;17721:1;17735:154;17749:6;17746:1;17743:13;17735:154;;;17823:7;17817:14;17813:1;17808:3;17804:11;17797:35;17873:1;17864:7;17860:15;17849:26;;17771:4;17768:1;17764:12;17759:17;;17735:154;;;17918:6;17913:3;17909:16;17902:23;;17601:334;;17415:520;;17203:738;;17096:845;;;;:::o;17947:366::-;18089:3;18110:67;18174:2;18169:3;18110:67;:::i;:::-;18103:74;;18186:93;18275:3;18186:93;:::i;:::-;18304:2;18299:3;18295:12;18288:19;;17947:366;;;:::o;18319:::-;18461:3;18482:67;18546:2;18541:3;18482:67;:::i;:::-;18475:74;;18558:93;18647:3;18558:93;:::i;:::-;18676:2;18671:3;18667:12;18660:19;;18319:366;;;:::o;18691:::-;18833:3;18854:67;18918:2;18913:3;18854:67;:::i;:::-;18847:74;;18930:93;19019:3;18930:93;:::i;:::-;19048:2;19043:3;19039:12;19032:19;;18691:366;;;:::o;19063:::-;19205:3;19226:67;19290:2;19285:3;19226:67;:::i;:::-;19219:74;;19302:93;19391:3;19302:93;:::i;:::-;19420:2;19415:3;19411:12;19404:19;;19063:366;;;:::o;19435:::-;19577:3;19598:67;19662:2;19657:3;19598:67;:::i;:::-;19591:74;;19674:93;19763:3;19674:93;:::i;:::-;19792:2;19787:3;19783:12;19776:19;;19435:366;;;:::o;19807:::-;19949:3;19970:67;20034:2;20029:3;19970:67;:::i;:::-;19963:74;;20046:93;20135:3;20046:93;:::i;:::-;20164:2;20159:3;20155:12;20148:19;;19807:366;;;:::o;20179:::-;20321:3;20342:67;20406:2;20401:3;20342:67;:::i;:::-;20335:74;;20418:93;20507:3;20418:93;:::i;:::-;20536:2;20531:3;20527:12;20520:19;;20179:366;;;:::o;20551:::-;20693:3;20714:67;20778:2;20773:3;20714:67;:::i;:::-;20707:74;;20790:93;20879:3;20790:93;:::i;:::-;20908:2;20903:3;20899:12;20892:19;;20551:366;;;:::o;20923:::-;21065:3;21086:67;21150:2;21145:3;21086:67;:::i;:::-;21079:74;;21162:93;21251:3;21162:93;:::i;:::-;21280:2;21275:3;21271:12;21264:19;;20923:366;;;:::o;21295:::-;21437:3;21458:67;21522:2;21517:3;21458:67;:::i;:::-;21451:74;;21534:93;21623:3;21534:93;:::i;:::-;21652:2;21647:3;21643:12;21636:19;;21295:366;;;:::o;21667:::-;21809:3;21830:67;21894:2;21889:3;21830:67;:::i;:::-;21823:74;;21906:93;21995:3;21906:93;:::i;:::-;22024:2;22019:3;22015:12;22008:19;;21667:366;;;:::o;22039:::-;22181:3;22202:67;22266:2;22261:3;22202:67;:::i;:::-;22195:74;;22278:93;22367:3;22278:93;:::i;:::-;22396:2;22391:3;22387:12;22380:19;;22039:366;;;:::o;22411:::-;22553:3;22574:67;22638:2;22633:3;22574:67;:::i;:::-;22567:74;;22650:93;22739:3;22650:93;:::i;:::-;22768:2;22763:3;22759:12;22752:19;;22411:366;;;:::o;22783:::-;22925:3;22946:67;23010:2;23005:3;22946:67;:::i;:::-;22939:74;;23022:93;23111:3;23022:93;:::i;:::-;23140:2;23135:3;23131:12;23124:19;;22783:366;;;:::o;23155:::-;23297:3;23318:67;23382:2;23377:3;23318:67;:::i;:::-;23311:74;;23394:93;23483:3;23394:93;:::i;:::-;23512:2;23507:3;23503:12;23496:19;;23155:366;;;:::o;23527:::-;23669:3;23690:67;23754:2;23749:3;23690:67;:::i;:::-;23683:74;;23766:93;23855:3;23766:93;:::i;:::-;23884:2;23879:3;23875:12;23868:19;;23527:366;;;:::o;23899:::-;24041:3;24062:67;24126:2;24121:3;24062:67;:::i;:::-;24055:74;;24138:93;24227:3;24138:93;:::i;:::-;24256:2;24251:3;24247:12;24240:19;;23899:366;;;:::o;24271:::-;24413:3;24434:67;24498:2;24493:3;24434:67;:::i;:::-;24427:74;;24510:93;24599:3;24510:93;:::i;:::-;24628:2;24623:3;24619:12;24612:19;;24271:366;;;:::o;24643:::-;24785:3;24806:67;24870:2;24865:3;24806:67;:::i;:::-;24799:74;;24882:93;24971:3;24882:93;:::i;:::-;25000:2;24995:3;24991:12;24984:19;;24643:366;;;:::o;25015:::-;25157:3;25178:67;25242:2;25237:3;25178:67;:::i;:::-;25171:74;;25254:93;25343:3;25254:93;:::i;:::-;25372:2;25367:3;25363:12;25356:19;;25015:366;;;:::o;25387:::-;25529:3;25550:67;25614:2;25609:3;25550:67;:::i;:::-;25543:74;;25626:93;25715:3;25626:93;:::i;:::-;25744:2;25739:3;25735:12;25728:19;;25387:366;;;:::o;25759:::-;25901:3;25922:67;25986:2;25981:3;25922:67;:::i;:::-;25915:74;;25998:93;26087:3;25998:93;:::i;:::-;26116:2;26111:3;26107:12;26100:19;;25759:366;;;:::o;26131:::-;26273:3;26294:67;26358:2;26353:3;26294:67;:::i;:::-;26287:74;;26370:93;26459:3;26370:93;:::i;:::-;26488:2;26483:3;26479:12;26472:19;;26131:366;;;:::o;26503:::-;26645:3;26666:67;26730:2;26725:3;26666:67;:::i;:::-;26659:74;;26742:93;26831:3;26742:93;:::i;:::-;26860:2;26855:3;26851:12;26844:19;;26503:366;;;:::o;26875:108::-;26952:24;26970:5;26952:24;:::i;:::-;26947:3;26940:37;26875:108;;:::o;26989:118::-;27076:24;27094:5;27076:24;:::i;:::-;27071:3;27064:37;26989:118;;:::o;27113:256::-;27225:3;27240:75;27311:3;27302:6;27240:75;:::i;:::-;27340:2;27335:3;27331:12;27324:19;;27360:3;27353:10;;27113:256;;;;:::o;27375:275::-;27507:3;27529:95;27620:3;27611:6;27529:95;:::i;:::-;27522:102;;27641:3;27634:10;;27375:275;;;;:::o;27656:429::-;27833:3;27855:92;27943:3;27934:6;27855:92;:::i;:::-;27848:99;;27964:95;28055:3;28046:6;27964:95;:::i;:::-;27957:102;;28076:3;28069:10;;27656:429;;;;;:::o;28091:222::-;28184:4;28222:2;28211:9;28207:18;28199:26;;28235:71;28303:1;28292:9;28288:17;28279:6;28235:71;:::i;:::-;28091:222;;;;:::o;28319:640::-;28514:4;28552:3;28541:9;28537:19;28529:27;;28566:71;28634:1;28623:9;28619:17;28610:6;28566:71;:::i;:::-;28647:72;28715:2;28704:9;28700:18;28691:6;28647:72;:::i;:::-;28729;28797:2;28786:9;28782:18;28773:6;28729:72;:::i;:::-;28848:9;28842:4;28838:20;28833:2;28822:9;28818:18;28811:48;28876:76;28947:4;28938:6;28876:76;:::i;:::-;28868:84;;28319:640;;;;;;;:::o;28965:373::-;29108:4;29146:2;29135:9;29131:18;29123:26;;29195:9;29189:4;29185:20;29181:1;29170:9;29166:17;29159:47;29223:108;29326:4;29317:6;29223:108;:::i;:::-;29215:116;;28965:373;;;;:::o;29344:210::-;29431:4;29469:2;29458:9;29454:18;29446:26;;29482:65;29544:1;29533:9;29529:17;29520:6;29482:65;:::i;:::-;29344:210;;;;:::o;29560:222::-;29653:4;29691:2;29680:9;29676:18;29668:26;;29704:71;29772:1;29761:9;29757:17;29748:6;29704:71;:::i;:::-;29560:222;;;;:::o;29788:313::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:78;30089:4;30080:6;30016:78;:::i;:::-;30008:86;;29788:313;;;;:::o;30107:419::-;30273:4;30311:2;30300:9;30296:18;30288:26;;30360:9;30354:4;30350:20;30346:1;30335:9;30331:17;30324:47;30388:131;30514:4;30388:131;:::i;:::-;30380:139;;30107:419;;;:::o;30532:::-;30698:4;30736:2;30725:9;30721:18;30713:26;;30785:9;30779:4;30775:20;30771:1;30760:9;30756:17;30749:47;30813:131;30939:4;30813:131;:::i;:::-;30805:139;;30532:419;;;:::o;30957:::-;31123:4;31161:2;31150:9;31146:18;31138:26;;31210:9;31204:4;31200:20;31196:1;31185:9;31181:17;31174:47;31238:131;31364:4;31238:131;:::i;:::-;31230:139;;30957:419;;;:::o;31382:::-;31548:4;31586:2;31575:9;31571:18;31563:26;;31635:9;31629:4;31625:20;31621:1;31610:9;31606:17;31599:47;31663:131;31789:4;31663:131;:::i;:::-;31655:139;;31382:419;;;:::o;31807:::-;31973:4;32011:2;32000:9;31996:18;31988:26;;32060:9;32054:4;32050:20;32046:1;32035:9;32031:17;32024:47;32088:131;32214:4;32088:131;:::i;:::-;32080:139;;31807:419;;;:::o;32232:::-;32398:4;32436:2;32425:9;32421:18;32413:26;;32485:9;32479:4;32475:20;32471:1;32460:9;32456:17;32449:47;32513:131;32639:4;32513:131;:::i;:::-;32505:139;;32232:419;;;:::o;32657:::-;32823:4;32861:2;32850:9;32846:18;32838:26;;32910:9;32904:4;32900:20;32896:1;32885:9;32881:17;32874:47;32938:131;33064:4;32938:131;:::i;:::-;32930:139;;32657:419;;;:::o;33082:::-;33248:4;33286:2;33275:9;33271:18;33263:26;;33335:9;33329:4;33325:20;33321:1;33310:9;33306:17;33299:47;33363:131;33489:4;33363:131;:::i;:::-;33355:139;;33082:419;;;:::o;33507:::-;33673:4;33711:2;33700:9;33696:18;33688:26;;33760:9;33754:4;33750:20;33746:1;33735:9;33731:17;33724:47;33788:131;33914:4;33788:131;:::i;:::-;33780:139;;33507:419;;;:::o;33932:::-;34098:4;34136:2;34125:9;34121:18;34113:26;;34185:9;34179:4;34175:20;34171:1;34160:9;34156:17;34149:47;34213:131;34339:4;34213:131;:::i;:::-;34205:139;;33932:419;;;:::o;34357:::-;34523:4;34561:2;34550:9;34546:18;34538:26;;34610:9;34604:4;34600:20;34596:1;34585:9;34581:17;34574:47;34638:131;34764:4;34638:131;:::i;:::-;34630:139;;34357:419;;;:::o;34782:::-;34948:4;34986:2;34975:9;34971:18;34963:26;;35035:9;35029:4;35025:20;35021:1;35010:9;35006:17;34999:47;35063:131;35189:4;35063:131;:::i;:::-;35055:139;;34782:419;;;:::o;35207:::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35207:419;;;:::o;35632:::-;35798:4;35836:2;35825:9;35821:18;35813:26;;35885:9;35879:4;35875:20;35871:1;35860:9;35856:17;35849:47;35913:131;36039:4;35913:131;:::i;:::-;35905:139;;35632:419;;;:::o;36057:::-;36223:4;36261:2;36250:9;36246:18;36238:26;;36310:9;36304:4;36300:20;36296:1;36285:9;36281:17;36274:47;36338:131;36464:4;36338:131;:::i;:::-;36330:139;;36057:419;;;:::o;36482:::-;36648:4;36686:2;36675:9;36671:18;36663:26;;36735:9;36729:4;36725:20;36721:1;36710:9;36706:17;36699:47;36763:131;36889:4;36763:131;:::i;:::-;36755:139;;36482:419;;;:::o;36907:::-;37073:4;37111:2;37100:9;37096:18;37088:26;;37160:9;37154:4;37150:20;37146:1;37135:9;37131:17;37124:47;37188:131;37314:4;37188:131;:::i;:::-;37180:139;;36907:419;;;:::o;37332:::-;37498:4;37536:2;37525:9;37521:18;37513:26;;37585:9;37579:4;37575:20;37571:1;37560:9;37556:17;37549:47;37613:131;37739:4;37613:131;:::i;:::-;37605:139;;37332:419;;;:::o;37757:::-;37923:4;37961:2;37950:9;37946:18;37938:26;;38010:9;38004:4;38000:20;37996:1;37985:9;37981:17;37974:47;38038:131;38164:4;38038:131;:::i;:::-;38030:139;;37757:419;;;:::o;38182:::-;38348:4;38386:2;38375:9;38371:18;38363:26;;38435:9;38429:4;38425:20;38421:1;38410:9;38406:17;38399:47;38463:131;38589:4;38463:131;:::i;:::-;38455:139;;38182:419;;;:::o;38607:::-;38773:4;38811:2;38800:9;38796:18;38788:26;;38860:9;38854:4;38850:20;38846:1;38835:9;38831:17;38824:47;38888:131;39014:4;38888:131;:::i;:::-;38880:139;;38607:419;;;:::o;39032:::-;39198:4;39236:2;39225:9;39221:18;39213:26;;39285:9;39279:4;39275:20;39271:1;39260:9;39256:17;39249:47;39313:131;39439:4;39313:131;:::i;:::-;39305:139;;39032:419;;;:::o;39457:::-;39623:4;39661:2;39650:9;39646:18;39638:26;;39710:9;39704:4;39700:20;39696:1;39685:9;39681:17;39674:47;39738:131;39864:4;39738:131;:::i;:::-;39730:139;;39457:419;;;:::o;39882:::-;40048:4;40086:2;40075:9;40071:18;40063:26;;40135:9;40129:4;40125:20;40121:1;40110:9;40106:17;40099:47;40163:131;40289:4;40163:131;:::i;:::-;40155:139;;39882:419;;;:::o;40307:222::-;40400:4;40438:2;40427:9;40423:18;40415:26;;40451:71;40519:1;40508:9;40504:17;40495:6;40451:71;:::i;:::-;40307:222;;;;:::o;40535:129::-;40569:6;40596:20;;:::i;:::-;40586:30;;40625:33;40653:4;40645:6;40625:33;:::i;:::-;40535:129;;;:::o;40670:75::-;40703:6;40736:2;40730:9;40720:19;;40670:75;:::o;40751:311::-;40828:4;40918:18;40910:6;40907:30;40904:56;;;40940:18;;:::i;:::-;40904:56;40990:4;40982:6;40978:17;40970:25;;41050:4;41044;41040:15;41032:23;;40751:311;;;:::o;41068:307::-;41129:4;41219:18;41211:6;41208:30;41205:56;;;41241:18;;:::i;:::-;41205:56;41279:29;41301:6;41279:29;:::i;:::-;41271:37;;41363:4;41357;41353:15;41345:23;;41068:307;;;:::o;41381:308::-;41443:4;41533:18;41525:6;41522:30;41519:56;;;41555:18;;:::i;:::-;41519:56;41593:29;41615:6;41593:29;:::i;:::-;41585:37;;41677:4;41671;41667:15;41659:23;;41381:308;;;:::o;41695:132::-;41762:4;41785:3;41777:11;;41815:4;41810:3;41806:14;41798:22;;41695:132;;;:::o;41833:141::-;41882:4;41905:3;41897:11;;41928:3;41925:1;41918:14;41962:4;41959:1;41949:18;41941:26;;41833:141;;;:::o;41980:114::-;42047:6;42081:5;42075:12;42065:22;;41980:114;;;:::o;42100:98::-;42151:6;42185:5;42179:12;42169:22;;42100:98;;;:::o;42204:99::-;42256:6;42290:5;42284:12;42274:22;;42204:99;;;:::o;42309:113::-;42379:4;42411;42406:3;42402:14;42394:22;;42309:113;;;:::o;42428:184::-;42527:11;42561:6;42556:3;42549:19;42601:4;42596:3;42592:14;42577:29;;42428:184;;;;:::o;42618:168::-;42701:11;42735:6;42730:3;42723:19;42775:4;42770:3;42766:14;42751:29;;42618:168;;;;:::o;42792:169::-;42876:11;42910:6;42905:3;42898:19;42950:4;42945:3;42941:14;42926:29;;42792:169;;;;:::o;42967:148::-;43069:11;43106:3;43091:18;;42967:148;;;;:::o;43121:305::-;43161:3;43180:20;43198:1;43180:20;:::i;:::-;43175:25;;43214:20;43232:1;43214:20;:::i;:::-;43209:25;;43368:1;43300:66;43296:74;43293:1;43290:81;43287:107;;;43374:18;;:::i;:::-;43287:107;43418:1;43415;43411:9;43404:16;;43121:305;;;;:::o;43432:185::-;43472:1;43489:20;43507:1;43489:20;:::i;:::-;43484:25;;43523:20;43541:1;43523:20;:::i;:::-;43518:25;;43562:1;43552:35;;43567:18;;:::i;:::-;43552:35;43609:1;43606;43602:9;43597:14;;43432:185;;;;:::o;43623:348::-;43663:7;43686:20;43704:1;43686:20;:::i;:::-;43681:25;;43720:20;43738:1;43720:20;:::i;:::-;43715:25;;43908:1;43840:66;43836:74;43833:1;43830:81;43825:1;43818:9;43811:17;43807:105;43804:131;;;43915:18;;:::i;:::-;43804:131;43963:1;43960;43956:9;43945:20;;43623:348;;;;:::o;43977:191::-;44017:4;44037:20;44055:1;44037:20;:::i;:::-;44032:25;;44071:20;44089:1;44071:20;:::i;:::-;44066:25;;44110:1;44107;44104:8;44101:34;;;44115:18;;:::i;:::-;44101:34;44160:1;44157;44153:9;44145:17;;43977:191;;;;:::o;44174:96::-;44211:7;44240:24;44258:5;44240:24;:::i;:::-;44229:35;;44174:96;;;:::o;44276:90::-;44310:7;44353:5;44346:13;44339:21;44328:32;;44276:90;;;:::o;44372:77::-;44409:7;44438:5;44427:16;;44372:77;;;:::o;44455:149::-;44491:7;44531:66;44524:5;44520:78;44509:89;;44455:149;;;:::o;44610:125::-;44676:7;44705:24;44723:5;44705:24;:::i;:::-;44694:35;;44610:125;;;:::o;44741:126::-;44778:7;44818:42;44811:5;44807:54;44796:65;;44741:126;;;:::o;44873:77::-;44910:7;44939:5;44928:16;;44873:77;;;:::o;44956:154::-;45040:6;45035:3;45030;45017:30;45102:1;45093:6;45088:3;45084:16;45077:27;44956:154;;;:::o;45116:307::-;45184:1;45194:113;45208:6;45205:1;45202:13;45194:113;;;45293:1;45288:3;45284:11;45278:18;45274:1;45269:3;45265:11;45258:39;45230:2;45227:1;45223:10;45218:15;;45194:113;;;45325:6;45322:1;45319:13;45316:101;;;45405:1;45396:6;45391:3;45387:16;45380:27;45316:101;45165:258;45116:307;;;:::o;45429:320::-;45473:6;45510:1;45504:4;45500:12;45490:22;;45557:1;45551:4;45547:12;45578:18;45568:81;;45634:4;45626:6;45622:17;45612:27;;45568:81;45696:2;45688:6;45685:14;45665:18;45662:38;45659:84;;;45715:18;;:::i;:::-;45659:84;45480:269;45429:320;;;:::o;45755:281::-;45838:27;45860:4;45838:27;:::i;:::-;45830:6;45826:40;45968:6;45956:10;45953:22;45932:18;45920:10;45917:34;45914:62;45911:88;;;45979:18;;:::i;:::-;45911:88;46019:10;46015:2;46008:22;45798:238;45755:281;;:::o;46042:233::-;46081:3;46104:24;46122:5;46104:24;:::i;:::-;46095:33;;46150:66;46143:5;46140:77;46137:103;;;46220:18;;:::i;:::-;46137:103;46267:1;46260:5;46256:13;46249:20;;46042:233;;;:::o;46281:100::-;46320:7;46349:26;46369:5;46349:26;:::i;:::-;46338:37;;46281:100;;;:::o;46387:94::-;46426:7;46455:20;46469:5;46455:20;:::i;:::-;46444:31;;46387:94;;;:::o;46487:176::-;46519:1;46536:20;46554:1;46536:20;:::i;:::-;46531:25;;46570:20;46588:1;46570:20;:::i;:::-;46565:25;;46609:1;46599:35;;46614:18;;:::i;:::-;46599:35;46655:1;46652;46648:9;46643:14;;46487:176;;;;:::o;46669:180::-;46717:77;46714:1;46707:88;46814:4;46811:1;46804:15;46838:4;46835:1;46828:15;46855:180;46903:77;46900:1;46893:88;47000:4;46997:1;46990:15;47024:4;47021:1;47014:15;47041:180;47089:77;47086:1;47079:88;47186:4;47183:1;47176:15;47210:4;47207:1;47200:15;47227:180;47275:77;47272:1;47265:88;47372:4;47369:1;47362:15;47396:4;47393:1;47386:15;47413:180;47461:77;47458:1;47451:88;47558:4;47555:1;47548:15;47582:4;47579:1;47572:15;47599:117;47708:1;47705;47698:12;47722:117;47831:1;47828;47821:12;47845:117;47954:1;47951;47944:12;47968:117;48077:1;48074;48067:12;48091:117;48200:1;48197;48190:12;48214:117;48323:1;48320;48313:12;48337:102;48378:6;48429:2;48425:7;48420:2;48413:5;48409:14;48405:28;48395:38;;48337:102;;;:::o;48445:94::-;48478:8;48526:5;48522:2;48518:14;48497:35;;48445:94;;;:::o;48545:222::-;48685:34;48681:1;48673:6;48669:14;48662:58;48754:5;48749:2;48741:6;48737:15;48730:30;48545:222;:::o;48773:230::-;48913:34;48909:1;48901:6;48897:14;48890:58;48982:13;48977:2;48969:6;48965:15;48958:38;48773:230;:::o;49009:237::-;49149:34;49145:1;49137:6;49133:14;49126:58;49218:20;49213:2;49205:6;49201:15;49194:45;49009:237;:::o;49252:225::-;49392:34;49388:1;49380:6;49376:14;49369:58;49461:8;49456:2;49448:6;49444:15;49437:33;49252:225;:::o;49483:172::-;49623:24;49619:1;49611:6;49607:14;49600:48;49483:172;:::o;49661:223::-;49801:34;49797:1;49789:6;49785:14;49778:58;49870:6;49865:2;49857:6;49853:15;49846:31;49661:223;:::o;49890:175::-;50030:27;50026:1;50018:6;50014:14;50007:51;49890:175;:::o;50071:231::-;50211:34;50207:1;50199:6;50195:14;50188:58;50280:14;50275:2;50267:6;50263:15;50256:39;50071:231;:::o;50308:243::-;50448:34;50444:1;50436:6;50432:14;50425:58;50517:26;50512:2;50504:6;50500:15;50493:51;50308:243;:::o;50557:169::-;50697:21;50693:1;50685:6;50681:14;50674:45;50557:169;:::o;50732:229::-;50872:34;50868:1;50860:6;50856:14;50849:58;50941:12;50936:2;50928:6;50924:15;50917:37;50732:229;:::o;50967:228::-;51107:34;51103:1;51095:6;51091:14;51084:58;51176:11;51171:2;51163:6;51159:15;51152:36;50967:228;:::o;51201:173::-;51341:25;51337:1;51329:6;51325:14;51318:49;51201:173;:::o;51380:171::-;51520:23;51516:1;51508:6;51504:14;51497:47;51380:171;:::o;51557:231::-;51697:34;51693:1;51685:6;51681:14;51674:58;51766:14;51761:2;51753:6;51749:15;51742:39;51557:231;:::o;51794:182::-;51934:34;51930:1;51922:6;51918:14;51911:58;51794:182;:::o;51982:228::-;52122:34;52118:1;52110:6;52106:14;52099:58;52191:11;52186:2;52178:6;52174:15;52167:36;51982:228;:::o;52216:169::-;52356:21;52352:1;52344:6;52340:14;52333:45;52216:169;:::o;52391:220::-;52531:34;52527:1;52519:6;52515:14;52508:58;52600:3;52595:2;52587:6;52583:15;52576:28;52391:220;:::o;52617:175::-;52757:27;52753:1;52745:6;52741:14;52734:51;52617:175;:::o;52798:236::-;52938:34;52934:1;52926:6;52922:14;52915:58;53007:19;53002:2;52994:6;52990:15;52983:44;52798:236;:::o;53040:231::-;53180:34;53176:1;53168:6;53164:14;53157:58;53249:14;53244:2;53236:6;53232:15;53225:39;53040:231;:::o;53277:178::-;53417:30;53413:1;53405:6;53401:14;53394:54;53277:178;:::o;53461:174::-;53601:26;53597:1;53589:6;53585:14;53578:50;53461:174;:::o;53641:122::-;53714:24;53732:5;53714:24;:::i;:::-;53707:5;53704:35;53694:63;;53753:1;53750;53743:12;53694:63;53641:122;:::o;53769:116::-;53839:21;53854:5;53839:21;:::i;:::-;53832:5;53829:32;53819:60;;53875:1;53872;53865:12;53819:60;53769:116;:::o;53891:122::-;53964:24;53982:5;53964:24;:::i;:::-;53957:5;53954:35;53944:63;;54003:1;54000;53993:12;53944:63;53891:122;:::o;54019:120::-;54091:23;54108:5;54091:23;:::i;:::-;54084:5;54081:34;54071:62;;54129:1;54126;54119:12;54071:62;54019:120;:::o;54145:180::-;54247:53;54294:5;54247:53;:::i;:::-;54240:5;54237:64;54227:92;;54315:1;54312;54305:12;54227:92;54145:180;:::o;54331:122::-;54404:24;54422:5;54404:24;:::i;:::-;54397:5;54394:35;54384:63;;54443:1;54440;54433:12;54384:63;54331:122;:::o
Swarm Source
ipfs://a477822afa72651631ef40ac3166bfb28e307b100cb928a5fb5f6f828a47bb48
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.