Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 KEVIN
Holders
80
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 KEVINLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Kevin
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-04 */ // SPDX-License-Identifier: None pragma solidity ^0.8.0; 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); } } library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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; } 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); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract Kevin is ERC721, Ownable { using SafeMath for uint256; using Address for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; string private baseURI; uint256 public constant supplyLimit = 1001; uint256 public constant mintPrice = 0.025 ether;//0.025 ether; bool public mintOpen = false; mapping(address => uint256) private _royaltyShares; address[] private _royaltyAddresses = [ 0x092C256Ab4fB3cb775646C01F18e8FD921eeD5d6, // J 0xE3a912f41Bd85836FB7FF88026386C0108A4e1F4, // S 0x913C06CeD76cb9A547A8d6D8C038F49862D1708D, // T 0x2791BDDd24b95C393fAa4600C9231D1936768fAe // S ]; constructor(string memory name, string memory symbol) ERC721(name, symbol) { _royaltyShares[_royaltyAddresses[0]] = 25; // Royalty for Wallet 1 _royaltyShares[_royaltyAddresses[1]] = 25; // Royalty for Wallet 2 _royaltyShares[_royaltyAddresses[2]] = 25; // Royalty for Wallet 3 _royaltyShares[_royaltyAddresses[3]] = 25; // Royalty for Wallet 4 } function mint(uint numberOfMints) public payable { uint256 supply = _tokenSupply.current() + 1; require(mintOpen, "Sale needs to be active"); require(numberOfMints > 0 && numberOfMints < 11, "Invalid purchase amount"); require(supply.add(numberOfMints) <= supplyLimit, "Payment exceeds total supply"); if(supply >= 500){ require(msg.value >= mintPrice.mul(numberOfMints), "Incorrect Eth amount"); } for(uint256 i = 1; i <= numberOfMints; i++){ _safeMint(msg.sender, supply + i); _tokenSupply.increment(); } } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string calldata newBaseUri) external onlyOwner { baseURI = newBaseUri; } function toggleSale() public onlyOwner { mintOpen = !mintOpen; } function returnbalance() external view returns(uint256){ uint256 balance = address(this).balance; return balance; } function returnCounter() external view returns(uint256){ return _tokenSupply.current(); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override { ERC721.safeTransferFrom(from, to, tokenId, data); } function withdraw() external onlyOwner { require(address(this).balance > 0, "EMPTY_BALANCE"); uint256 balance = address(this).balance; for (uint256 i = 0; i < _royaltyAddresses.length; i++) { payable(_royaltyAddresses[i]).transfer( balance.div(100).mul(_royaltyShares[_royaltyAddresses[i]]) ); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"returnbalance","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600960006101000a81548160ff021916908315150217905550604051806080016040528073092c256ab4fb3cb775646c01f18e8fd921eed5d673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e3a912f41bd85836fb7ff88026386c0108a4e1f473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173913c06ced76cb9a547a8d6d8c038f49862d1708d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732791bddd24b95c393faa4600c9231d1936768fae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600b90600462000152929190620004ce565b503480156200016057600080fd5b5060405162004013380380620040138339818101604052810190620001869190620007aa565b81818160009080519060200190620001a09291906200055d565b508060019080519060200190620001b99291906200055d565b505050620001dc620001d06200040060201b60201c565b6200040860201b60201c565b6019600a6000600b600081548110620001fa57620001f96200082f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506019600a6000600b6001815481106200028157620002806200082f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506019600a6000600b6002815481106200030857620003076200082f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506019600a6000600b6003815481106200038f576200038e6200082f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050620008c3565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280548282559060005260206000209081019282156200054a579160200282015b82811115620005495782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004ef565b5b509050620005599190620005ee565b5090565b8280546200056b906200088d565b90600052602060002090601f0160209004810192826200058f5760008555620005db565b82601f10620005aa57805160ff1916838001178555620005db565b82800160010185558215620005db579182015b82811115620005da578251825591602001919060010190620005bd565b5b509050620005ea9190620005ee565b5090565b5b8082111562000609576000816000905550600101620005ef565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000676826200062b565b810181811067ffffffffffffffff821117156200069857620006976200063c565b5b80604052505050565b6000620006ad6200060d565b9050620006bb82826200066b565b919050565b600067ffffffffffffffff821115620006de57620006dd6200063c565b5b620006e9826200062b565b9050602081019050919050565b60005b8381101562000716578082015181840152602081019050620006f9565b8381111562000726576000848401525b50505050565b6000620007436200073d84620006c0565b620006a1565b90508281526020810184848401111562000762576200076162000626565b5b6200076f848285620006f6565b509392505050565b600082601f8301126200078f576200078e62000621565b5b8151620007a18482602086016200072c565b91505092915050565b60008060408385031215620007c457620007c362000617565b5b600083015167ffffffffffffffff811115620007e557620007e46200061c565b5b620007f38582860162000777565b925050602083015167ffffffffffffffff8111156200081757620008166200061c565b5b620008258582860162000777565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008a657607f821691505b60208210811415620008bd57620008bc6200085e565b5b50919050565b61374080620008d36000396000f3fe6080604052600436106101665760003560e01c806370a08231116100d1578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146104e3578063e985e9c514610520578063ea601ce01461055d578063f2fde38b1461058857610166565b8063a22cb46514610466578063a4f58a351461048f578063b88d4fde146104ba57610166565b806370a0823114610389578063715018a6146103c65780637d8966e4146103dd5780638da5cb5b146103f457806395d89b411461041f578063a0712d681461044a57610166565b806324bbd0491161012357806324bbd0491461028d5780633ccfd60b146102b857806342842e0e146102cf57806355f804b3146102f85780636352211e146103215780636817c76c1461035e57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806319d1997a1461023957806323b872dd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906122a2565b6105b1565b60405161019f91906122ea565b60405180910390f35b3480156101b457600080fd5b506101bd610693565b6040516101ca919061239e565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f591906123f6565b610725565b6040516102079190612464565b60405180910390f35b34801561021c57600080fd5b50610237600480360381019061023291906124ab565b6107aa565b005b34801561024557600080fd5b5061024e6108c2565b60405161025b91906124fa565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190612515565b6108c8565b005b34801561029957600080fd5b506102a2610928565b6040516102af91906122ea565b60405180910390f35b3480156102c457600080fd5b506102cd61093b565b005b3480156102db57600080fd5b506102f660048036038101906102f19190612515565b610b4d565b005b34801561030457600080fd5b5061031f600480360381019061031a91906125cd565b610b6d565b005b34801561032d57600080fd5b50610348600480360381019061034391906123f6565b610bff565b6040516103559190612464565b60405180910390f35b34801561036a57600080fd5b50610373610cb1565b60405161038091906124fa565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab919061261a565b610cbc565b6040516103bd91906124fa565b60405180910390f35b3480156103d257600080fd5b506103db610d74565b005b3480156103e957600080fd5b506103f2610dfc565b005b34801561040057600080fd5b50610409610ea4565b6040516104169190612464565b60405180910390f35b34801561042b57600080fd5b50610434610ece565b604051610441919061239e565b60405180910390f35b610464600480360381019061045f91906123f6565b610f60565b005b34801561047257600080fd5b5061048d60048036038101906104889190612673565b61111a565b005b34801561049b57600080fd5b506104a461129b565b6040516104b191906124fa565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906127e3565b6112a8565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906123f6565b6112ba565b604051610517919061239e565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612866565b611361565b60405161055491906122ea565b60405180910390f35b34801561056957600080fd5b506105726113f5565b60405161057f91906124fa565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa919061261a565b611406565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061067c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061068c575061068b826114fe565b5b9050919050565b6060600080546106a2906128d5565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce906128d5565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050905090565b600061073082611568565b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690612979565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b582610bff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612a0b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108456115d4565b73ffffffffffffffffffffffffffffffffffffffff16148061087457506108738161086e6115d4565b611361565b5b6108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90612a9d565b60405180910390fd5b6108bd83836115dc565b505050565b6103e981565b6108d96108d36115d4565b82611695565b610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90612b2f565b60405180910390fd5b610923838383611773565b505050565b600960009054906101000a900460ff1681565b6109436115d4565b73ffffffffffffffffffffffffffffffffffffffff16610961610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612b9b565b60405180910390fd5b600047116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190612c07565b60405180910390fd5b600047905060005b600b80549050811015610b4957600b8181548110610a2357610a22612c27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610b0a600a6000600b8681548110610a8257610a81612c27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610afc6064876119cf90919063ffffffff16565b6119e590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610b35573d6000803e3d6000fd5b508080610b4190612c85565b915050610a02565b5050565b610b68838383604051806020016040528060008152506112a8565b505050565b610b756115d4565b73ffffffffffffffffffffffffffffffffffffffff16610b93610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090612b9b565b60405180910390fd5b818160089190610bfa929190612193565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612d40565b60405180910390fd5b80915050919050565b6658d15e1762800081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490612dd2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d7c6115d4565b73ffffffffffffffffffffffffffffffffffffffff16610d9a610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612b9b565b60405180910390fd5b610dfa60006119fb565b565b610e046115d4565b73ffffffffffffffffffffffffffffffffffffffff16610e22610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90612b9b565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610edd906128d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f09906128d5565b8015610f565780601f10610f2b57610100808354040283529160200191610f56565b820191906000526020600020905b815481529060010190602001808311610f3957829003601f168201915b5050505050905090565b60006001610f6e6007611ac1565b610f789190612df2565b9050600960009054906101000a900460ff16610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090612e94565b60405180910390fd5b600082118015610fd95750600b82105b611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612f00565b60405180910390fd5b6103e961102e8383611acf90919063ffffffff16565b111561106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690612f6c565b60405180910390fd5b6101f481106110d557611092826658d15e176280006119e590919063ffffffff16565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612fd8565b60405180910390fd5b5b6000600190505b828111611115576110f83382846110f39190612df2565b611ae5565b6111026007611b03565b808061110d90612c85565b9150506110dc565b505050565b6111226115d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613044565b60405180910390fd5b806005600061119d6115d4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661124a6115d4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161128f91906122ea565b60405180910390a35050565b6000804790508091505090565b6112b484848484611b19565b50505050565b60606112c582611568565b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906130d6565b60405180910390fd5b600061130e611b7b565b9050600081511161132e5760405180602001604052806000815250611359565b8061133884611c0d565b604051602001611349929190613132565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006114016007611ac1565b905090565b61140e6115d4565b73ffffffffffffffffffffffffffffffffffffffff1661142c610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990612b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906131c8565b60405180910390fd5b6114fb816119fb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661164f83610bff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116a082611568565b6116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061325a565b60405180910390fd5b60006116ea83610bff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061175957508373ffffffffffffffffffffffffffffffffffffffff1661174184610725565b73ffffffffffffffffffffffffffffffffffffffff16145b8061176a57506117698185611361565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179382610bff565b73ffffffffffffffffffffffffffffffffffffffff16146117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e0906132ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061337e565b60405180910390fd5b611864838383611d6e565b61186f6000826115dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bf919061339e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119169190612df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119dd9190613401565b905092915050565b600081836119f39190613432565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b60008183611add9190612df2565b905092915050565b611aff828260405180602001604052806000815250611d73565b5050565b6001816000016000828254019250508190555050565b611b2a611b246115d4565b83611695565b611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090612b2f565b60405180910390fd5b611b7584848484611dce565b50505050565b606060088054611b8a906128d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb6906128d5565b8015611c035780601f10611bd857610100808354040283529160200191611c03565b820191906000526020600020905b815481529060010190602001808311611be657829003601f168201915b5050505050905090565b60606000821415611c55576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d69565b600082905060005b60008214611c87578080611c7090612c85565b915050600a82611c809190613401565b9150611c5d565b60008167ffffffffffffffff811115611ca357611ca26126b8565b5b6040519080825280601f01601f191660200182016040528015611cd55781602001600182028036833780820191505090505b5090505b60008514611d6257600182611cee919061339e565b9150600a85611cfd919061348c565b6030611d099190612df2565b60f81b818381518110611d1f57611d1e612c27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d5b9190613401565b9450611cd9565b8093505050505b919050565b505050565b611d7d8383611e2a565b611d8a6000848484611ff8565b611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc09061352f565b60405180910390fd5b505050565b611dd9848484611773565b611de584848484611ff8565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b9061352f565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e919061359b565b60405180910390fd5b611ea381611568565b15611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613607565b60405180910390fd5b611eef60008383611d6e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f9190612df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006120198473ffffffffffffffffffffffffffffffffffffffff16612180565b15612173578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120426115d4565b8786866040518563ffffffff1660e01b8152600401612064949392919061367c565b6020604051808303816000875af19250505080156120a057506040513d601f19601f8201168201806040525081019061209d91906136dd565b60015b612123573d80600081146120d0576040519150601f19603f3d011682016040523d82523d6000602084013e6120d5565b606091505b5060008151141561211b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121129061352f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612178565b600190505b949350505050565b600080823b905060008111915050919050565b82805461219f906128d5565b90600052602060002090601f0160209004810192826121c15760008555612208565b82601f106121da57803560ff1916838001178555612208565b82800160010185558215612208579182015b828111156122075782358255916020019190600101906121ec565b5b5090506122159190612219565b5090565b5b8082111561223257600081600090555060010161221a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61227f8161224a565b811461228a57600080fd5b50565b60008135905061229c81612276565b92915050565b6000602082840312156122b8576122b7612240565b5b60006122c68482850161228d565b91505092915050565b60008115159050919050565b6122e4816122cf565b82525050565b60006020820190506122ff60008301846122db565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561233f578082015181840152602081019050612324565b8381111561234e576000848401525b50505050565b6000601f19601f8301169050919050565b600061237082612305565b61237a8185612310565b935061238a818560208601612321565b61239381612354565b840191505092915050565b600060208201905081810360008301526123b88184612365565b905092915050565b6000819050919050565b6123d3816123c0565b81146123de57600080fd5b50565b6000813590506123f0816123ca565b92915050565b60006020828403121561240c5761240b612240565b5b600061241a848285016123e1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061244e82612423565b9050919050565b61245e81612443565b82525050565b60006020820190506124796000830184612455565b92915050565b61248881612443565b811461249357600080fd5b50565b6000813590506124a58161247f565b92915050565b600080604083850312156124c2576124c1612240565b5b60006124d085828601612496565b92505060206124e1858286016123e1565b9150509250929050565b6124f4816123c0565b82525050565b600060208201905061250f60008301846124eb565b92915050565b60008060006060848603121561252e5761252d612240565b5b600061253c86828701612496565b935050602061254d86828701612496565b925050604061255e868287016123e1565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261258d5761258c612568565b5b8235905067ffffffffffffffff8111156125aa576125a961256d565b5b6020830191508360018202830111156125c6576125c5612572565b5b9250929050565b600080602083850312156125e4576125e3612240565b5b600083013567ffffffffffffffff81111561260257612601612245565b5b61260e85828601612577565b92509250509250929050565b6000602082840312156126305761262f612240565b5b600061263e84828501612496565b91505092915050565b612650816122cf565b811461265b57600080fd5b50565b60008135905061266d81612647565b92915050565b6000806040838503121561268a57612689612240565b5b600061269885828601612496565b92505060206126a98582860161265e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126f082612354565b810181811067ffffffffffffffff8211171561270f5761270e6126b8565b5b80604052505050565b6000612722612236565b905061272e82826126e7565b919050565b600067ffffffffffffffff82111561274e5761274d6126b8565b5b61275782612354565b9050602081019050919050565b82818337600083830152505050565b600061278661278184612733565b612718565b9050828152602081018484840111156127a2576127a16126b3565b5b6127ad848285612764565b509392505050565b600082601f8301126127ca576127c9612568565b5b81356127da848260208601612773565b91505092915050565b600080600080608085870312156127fd576127fc612240565b5b600061280b87828801612496565b945050602061281c87828801612496565b935050604061282d878288016123e1565b925050606085013567ffffffffffffffff81111561284e5761284d612245565b5b61285a878288016127b5565b91505092959194509250565b6000806040838503121561287d5761287c612240565b5b600061288b85828601612496565b925050602061289c85828601612496565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128ed57607f821691505b60208210811415612901576129006128a6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612963602c83612310565b915061296e82612907565b604082019050919050565b6000602082019050818103600083015261299281612956565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006129f5602183612310565b9150612a0082612999565b604082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612a87603883612310565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b19603183612310565b9150612b2482612abd565b604082019050919050565b60006020820190508181036000830152612b4881612b0c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b85602083612310565b9150612b9082612b4f565b602082019050919050565b60006020820190508181036000830152612bb481612b78565b9050919050565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b6000612bf1600d83612310565b9150612bfc82612bbb565b602082019050919050565b60006020820190508181036000830152612c2081612be4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c90826123c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cc357612cc2612c56565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612d2a602983612310565b9150612d3582612cce565b604082019050919050565b60006020820190508181036000830152612d5981612d1d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612dbc602a83612310565b9150612dc782612d60565b604082019050919050565b60006020820190508181036000830152612deb81612daf565b9050919050565b6000612dfd826123c0565b9150612e08836123c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e3d57612e3c612c56565b5b828201905092915050565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b6000612e7e601783612310565b9150612e8982612e48565b602082019050919050565b60006020820190508181036000830152612ead81612e71565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000612eea601783612310565b9150612ef582612eb4565b602082019050919050565b60006020820190508181036000830152612f1981612edd565b9050919050565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b6000612f56601c83612310565b9150612f6182612f20565b602082019050919050565b60006020820190508181036000830152612f8581612f49565b9050919050565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b6000612fc2601483612310565b9150612fcd82612f8c565b602082019050919050565b60006020820190508181036000830152612ff181612fb5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061302e601983612310565b915061303982612ff8565b602082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006130c0602f83612310565b91506130cb82613064565b604082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b600081905092915050565b600061310c82612305565b61311681856130f6565b9350613126818560208601612321565b80840191505092915050565b600061313e8285613101565b915061314a8284613101565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131b2602683612310565b91506131bd82613156565b604082019050919050565b600060208201905081810360008301526131e1816131a5565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613244602c83612310565b915061324f826131e8565b604082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006132d6602983612310565b91506132e18261327a565b604082019050919050565b60006020820190508181036000830152613305816132c9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613368602483612310565b91506133738261330c565b604082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b60006133a9826123c0565b91506133b4836123c0565b9250828210156133c7576133c6612c56565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061340c826123c0565b9150613417836123c0565b925082613427576134266133d2565b5b828204905092915050565b600061343d826123c0565b9150613448836123c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561348157613480612c56565b5b828202905092915050565b6000613497826123c0565b91506134a2836123c0565b9250826134b2576134b16133d2565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613519603283612310565b9150613524826134bd565b604082019050919050565b600060208201905081810360008301526135488161350c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613585602083612310565b91506135908261354f565b602082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006135f1601c83612310565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061364e82613627565b6136588185613632565b9350613668818560208601612321565b61367181612354565b840191505092915050565b60006080820190506136916000830187612455565b61369e6020830186612455565b6136ab60408301856124eb565b81810360608301526136bd8184613643565b905095945050505050565b6000815190506136d781612276565b92915050565b6000602082840312156136f3576136f2612240565b5b6000613701848285016136c8565b9150509291505056fea2646970667358221220905a786a23be508bc40b409ec3b01d6be0aeb8e819ecf7f452970bc306a2827a64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011416476656e74757265734f664b6576696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b4556494e000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101665760003560e01c806370a08231116100d1578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146104e3578063e985e9c514610520578063ea601ce01461055d578063f2fde38b1461058857610166565b8063a22cb46514610466578063a4f58a351461048f578063b88d4fde146104ba57610166565b806370a0823114610389578063715018a6146103c65780637d8966e4146103dd5780638da5cb5b146103f457806395d89b411461041f578063a0712d681461044a57610166565b806324bbd0491161012357806324bbd0491461028d5780633ccfd60b146102b857806342842e0e146102cf57806355f804b3146102f85780636352211e146103215780636817c76c1461035e57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806319d1997a1461023957806323b872dd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906122a2565b6105b1565b60405161019f91906122ea565b60405180910390f35b3480156101b457600080fd5b506101bd610693565b6040516101ca919061239e565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f591906123f6565b610725565b6040516102079190612464565b60405180910390f35b34801561021c57600080fd5b50610237600480360381019061023291906124ab565b6107aa565b005b34801561024557600080fd5b5061024e6108c2565b60405161025b91906124fa565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190612515565b6108c8565b005b34801561029957600080fd5b506102a2610928565b6040516102af91906122ea565b60405180910390f35b3480156102c457600080fd5b506102cd61093b565b005b3480156102db57600080fd5b506102f660048036038101906102f19190612515565b610b4d565b005b34801561030457600080fd5b5061031f600480360381019061031a91906125cd565b610b6d565b005b34801561032d57600080fd5b50610348600480360381019061034391906123f6565b610bff565b6040516103559190612464565b60405180910390f35b34801561036a57600080fd5b50610373610cb1565b60405161038091906124fa565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab919061261a565b610cbc565b6040516103bd91906124fa565b60405180910390f35b3480156103d257600080fd5b506103db610d74565b005b3480156103e957600080fd5b506103f2610dfc565b005b34801561040057600080fd5b50610409610ea4565b6040516104169190612464565b60405180910390f35b34801561042b57600080fd5b50610434610ece565b604051610441919061239e565b60405180910390f35b610464600480360381019061045f91906123f6565b610f60565b005b34801561047257600080fd5b5061048d60048036038101906104889190612673565b61111a565b005b34801561049b57600080fd5b506104a461129b565b6040516104b191906124fa565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906127e3565b6112a8565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906123f6565b6112ba565b604051610517919061239e565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612866565b611361565b60405161055491906122ea565b60405180910390f35b34801561056957600080fd5b506105726113f5565b60405161057f91906124fa565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa919061261a565b611406565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061067c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061068c575061068b826114fe565b5b9050919050565b6060600080546106a2906128d5565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce906128d5565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050905090565b600061073082611568565b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690612979565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b582610bff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612a0b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108456115d4565b73ffffffffffffffffffffffffffffffffffffffff16148061087457506108738161086e6115d4565b611361565b5b6108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90612a9d565b60405180910390fd5b6108bd83836115dc565b505050565b6103e981565b6108d96108d36115d4565b82611695565b610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90612b2f565b60405180910390fd5b610923838383611773565b505050565b600960009054906101000a900460ff1681565b6109436115d4565b73ffffffffffffffffffffffffffffffffffffffff16610961610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612b9b565b60405180910390fd5b600047116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190612c07565b60405180910390fd5b600047905060005b600b80549050811015610b4957600b8181548110610a2357610a22612c27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610b0a600a6000600b8681548110610a8257610a81612c27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610afc6064876119cf90919063ffffffff16565b6119e590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610b35573d6000803e3d6000fd5b508080610b4190612c85565b915050610a02565b5050565b610b68838383604051806020016040528060008152506112a8565b505050565b610b756115d4565b73ffffffffffffffffffffffffffffffffffffffff16610b93610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090612b9b565b60405180910390fd5b818160089190610bfa929190612193565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612d40565b60405180910390fd5b80915050919050565b6658d15e1762800081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490612dd2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d7c6115d4565b73ffffffffffffffffffffffffffffffffffffffff16610d9a610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612b9b565b60405180910390fd5b610dfa60006119fb565b565b610e046115d4565b73ffffffffffffffffffffffffffffffffffffffff16610e22610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90612b9b565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610edd906128d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f09906128d5565b8015610f565780601f10610f2b57610100808354040283529160200191610f56565b820191906000526020600020905b815481529060010190602001808311610f3957829003601f168201915b5050505050905090565b60006001610f6e6007611ac1565b610f789190612df2565b9050600960009054906101000a900460ff16610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090612e94565b60405180910390fd5b600082118015610fd95750600b82105b611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612f00565b60405180910390fd5b6103e961102e8383611acf90919063ffffffff16565b111561106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690612f6c565b60405180910390fd5b6101f481106110d557611092826658d15e176280006119e590919063ffffffff16565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612fd8565b60405180910390fd5b5b6000600190505b828111611115576110f83382846110f39190612df2565b611ae5565b6111026007611b03565b808061110d90612c85565b9150506110dc565b505050565b6111226115d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613044565b60405180910390fd5b806005600061119d6115d4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661124a6115d4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161128f91906122ea565b60405180910390a35050565b6000804790508091505090565b6112b484848484611b19565b50505050565b60606112c582611568565b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906130d6565b60405180910390fd5b600061130e611b7b565b9050600081511161132e5760405180602001604052806000815250611359565b8061133884611c0d565b604051602001611349929190613132565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006114016007611ac1565b905090565b61140e6115d4565b73ffffffffffffffffffffffffffffffffffffffff1661142c610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990612b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906131c8565b60405180910390fd5b6114fb816119fb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661164f83610bff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116a082611568565b6116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061325a565b60405180910390fd5b60006116ea83610bff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061175957508373ffffffffffffffffffffffffffffffffffffffff1661174184610725565b73ffffffffffffffffffffffffffffffffffffffff16145b8061176a57506117698185611361565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179382610bff565b73ffffffffffffffffffffffffffffffffffffffff16146117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e0906132ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061337e565b60405180910390fd5b611864838383611d6e565b61186f6000826115dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bf919061339e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119169190612df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119dd9190613401565b905092915050565b600081836119f39190613432565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b60008183611add9190612df2565b905092915050565b611aff828260405180602001604052806000815250611d73565b5050565b6001816000016000828254019250508190555050565b611b2a611b246115d4565b83611695565b611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090612b2f565b60405180910390fd5b611b7584848484611dce565b50505050565b606060088054611b8a906128d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb6906128d5565b8015611c035780601f10611bd857610100808354040283529160200191611c03565b820191906000526020600020905b815481529060010190602001808311611be657829003601f168201915b5050505050905090565b60606000821415611c55576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d69565b600082905060005b60008214611c87578080611c7090612c85565b915050600a82611c809190613401565b9150611c5d565b60008167ffffffffffffffff811115611ca357611ca26126b8565b5b6040519080825280601f01601f191660200182016040528015611cd55781602001600182028036833780820191505090505b5090505b60008514611d6257600182611cee919061339e565b9150600a85611cfd919061348c565b6030611d099190612df2565b60f81b818381518110611d1f57611d1e612c27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d5b9190613401565b9450611cd9565b8093505050505b919050565b505050565b611d7d8383611e2a565b611d8a6000848484611ff8565b611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc09061352f565b60405180910390fd5b505050565b611dd9848484611773565b611de584848484611ff8565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b9061352f565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e919061359b565b60405180910390fd5b611ea381611568565b15611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613607565b60405180910390fd5b611eef60008383611d6e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f9190612df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006120198473ffffffffffffffffffffffffffffffffffffffff16612180565b15612173578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120426115d4565b8786866040518563ffffffff1660e01b8152600401612064949392919061367c565b6020604051808303816000875af19250505080156120a057506040513d601f19601f8201168201806040525081019061209d91906136dd565b60015b612123573d80600081146120d0576040519150601f19603f3d011682016040523d82523d6000602084013e6120d5565b606091505b5060008151141561211b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121129061352f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612178565b600190505b949350505050565b600080823b905060008111915050919050565b82805461219f906128d5565b90600052602060002090601f0160209004810192826121c15760008555612208565b82601f106121da57803560ff1916838001178555612208565b82800160010185558215612208579182015b828111156122075782358255916020019190600101906121ec565b5b5090506122159190612219565b5090565b5b8082111561223257600081600090555060010161221a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61227f8161224a565b811461228a57600080fd5b50565b60008135905061229c81612276565b92915050565b6000602082840312156122b8576122b7612240565b5b60006122c68482850161228d565b91505092915050565b60008115159050919050565b6122e4816122cf565b82525050565b60006020820190506122ff60008301846122db565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561233f578082015181840152602081019050612324565b8381111561234e576000848401525b50505050565b6000601f19601f8301169050919050565b600061237082612305565b61237a8185612310565b935061238a818560208601612321565b61239381612354565b840191505092915050565b600060208201905081810360008301526123b88184612365565b905092915050565b6000819050919050565b6123d3816123c0565b81146123de57600080fd5b50565b6000813590506123f0816123ca565b92915050565b60006020828403121561240c5761240b612240565b5b600061241a848285016123e1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061244e82612423565b9050919050565b61245e81612443565b82525050565b60006020820190506124796000830184612455565b92915050565b61248881612443565b811461249357600080fd5b50565b6000813590506124a58161247f565b92915050565b600080604083850312156124c2576124c1612240565b5b60006124d085828601612496565b92505060206124e1858286016123e1565b9150509250929050565b6124f4816123c0565b82525050565b600060208201905061250f60008301846124eb565b92915050565b60008060006060848603121561252e5761252d612240565b5b600061253c86828701612496565b935050602061254d86828701612496565b925050604061255e868287016123e1565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261258d5761258c612568565b5b8235905067ffffffffffffffff8111156125aa576125a961256d565b5b6020830191508360018202830111156125c6576125c5612572565b5b9250929050565b600080602083850312156125e4576125e3612240565b5b600083013567ffffffffffffffff81111561260257612601612245565b5b61260e85828601612577565b92509250509250929050565b6000602082840312156126305761262f612240565b5b600061263e84828501612496565b91505092915050565b612650816122cf565b811461265b57600080fd5b50565b60008135905061266d81612647565b92915050565b6000806040838503121561268a57612689612240565b5b600061269885828601612496565b92505060206126a98582860161265e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126f082612354565b810181811067ffffffffffffffff8211171561270f5761270e6126b8565b5b80604052505050565b6000612722612236565b905061272e82826126e7565b919050565b600067ffffffffffffffff82111561274e5761274d6126b8565b5b61275782612354565b9050602081019050919050565b82818337600083830152505050565b600061278661278184612733565b612718565b9050828152602081018484840111156127a2576127a16126b3565b5b6127ad848285612764565b509392505050565b600082601f8301126127ca576127c9612568565b5b81356127da848260208601612773565b91505092915050565b600080600080608085870312156127fd576127fc612240565b5b600061280b87828801612496565b945050602061281c87828801612496565b935050604061282d878288016123e1565b925050606085013567ffffffffffffffff81111561284e5761284d612245565b5b61285a878288016127b5565b91505092959194509250565b6000806040838503121561287d5761287c612240565b5b600061288b85828601612496565b925050602061289c85828601612496565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128ed57607f821691505b60208210811415612901576129006128a6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612963602c83612310565b915061296e82612907565b604082019050919050565b6000602082019050818103600083015261299281612956565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006129f5602183612310565b9150612a0082612999565b604082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612a87603883612310565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b19603183612310565b9150612b2482612abd565b604082019050919050565b60006020820190508181036000830152612b4881612b0c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b85602083612310565b9150612b9082612b4f565b602082019050919050565b60006020820190508181036000830152612bb481612b78565b9050919050565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b6000612bf1600d83612310565b9150612bfc82612bbb565b602082019050919050565b60006020820190508181036000830152612c2081612be4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c90826123c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cc357612cc2612c56565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612d2a602983612310565b9150612d3582612cce565b604082019050919050565b60006020820190508181036000830152612d5981612d1d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612dbc602a83612310565b9150612dc782612d60565b604082019050919050565b60006020820190508181036000830152612deb81612daf565b9050919050565b6000612dfd826123c0565b9150612e08836123c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e3d57612e3c612c56565b5b828201905092915050565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b6000612e7e601783612310565b9150612e8982612e48565b602082019050919050565b60006020820190508181036000830152612ead81612e71565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000612eea601783612310565b9150612ef582612eb4565b602082019050919050565b60006020820190508181036000830152612f1981612edd565b9050919050565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b6000612f56601c83612310565b9150612f6182612f20565b602082019050919050565b60006020820190508181036000830152612f8581612f49565b9050919050565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b6000612fc2601483612310565b9150612fcd82612f8c565b602082019050919050565b60006020820190508181036000830152612ff181612fb5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061302e601983612310565b915061303982612ff8565b602082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006130c0602f83612310565b91506130cb82613064565b604082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b600081905092915050565b600061310c82612305565b61311681856130f6565b9350613126818560208601612321565b80840191505092915050565b600061313e8285613101565b915061314a8284613101565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131b2602683612310565b91506131bd82613156565b604082019050919050565b600060208201905081810360008301526131e1816131a5565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613244602c83612310565b915061324f826131e8565b604082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006132d6602983612310565b91506132e18261327a565b604082019050919050565b60006020820190508181036000830152613305816132c9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613368602483612310565b91506133738261330c565b604082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b60006133a9826123c0565b91506133b4836123c0565b9250828210156133c7576133c6612c56565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061340c826123c0565b9150613417836123c0565b925082613427576134266133d2565b5b828204905092915050565b600061343d826123c0565b9150613448836123c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561348157613480612c56565b5b828202905092915050565b6000613497826123c0565b91506134a2836123c0565b9250826134b2576134b16133d2565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613519603283612310565b9150613524826134bd565b604082019050919050565b600060208201905081810360008301526135488161350c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613585602083612310565b91506135908261354f565b602082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006135f1601c83612310565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061364e82613627565b6136588185613632565b9350613668818560208601612321565b61367181612354565b840191505092915050565b60006080820190506136916000830187612455565b61369e6020830186612455565b6136ab60408301856124eb565b81810360608301526136bd8184613643565b905095945050505050565b6000815190506136d781612276565b92915050565b6000602082840312156136f3576136f2612240565b5b6000613701848285016136c8565b9150509291505056fea2646970667358221220905a786a23be508bc40b409ec3b01d6be0aeb8e819ecf7f452970bc306a2827a64736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011416476656e74757265734f664b6576696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b4556494e000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): AdventuresOfKevin
Arg [1] : symbol (string): KEVIN
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [3] : 416476656e74757265734f664b6576696e000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4b4556494e000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39055:2902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25249:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26194:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27276:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39286:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39405:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41569:383;;;;;;;;;;;;;:::i;:::-;;29053:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40933:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25888:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39335:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25618:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38426:94;;;;;;;;;;;;;:::i;:::-;;41047:78;;;;;;;;;;;;;:::i;:::-;;37775:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26363:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40185:632;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28046:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41133:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41390:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26538:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28412:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41279:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38675:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25249:305;25351:4;25403:25;25388:40;;;:11;:40;;;;:105;;;;25460:33;25445:48;;;:11;:48;;;;25388:105;:158;;;;25510:36;25534:11;25510:23;:36::i;:::-;25388:158;25368:178;;25249:305;;;:::o;26194:100::-;26248:13;26281:5;26274:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:100;:::o;27753:221::-;27829:7;27857:16;27865:7;27857;:16::i;:::-;27849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27942:15;:24;27958:7;27942:24;;;;;;;;;;;;;;;;;;;;;27935:31;;27753:221;;;:::o;27276:411::-;27357:13;27373:23;27388:7;27373:14;:23::i;:::-;27357:39;;27421:5;27415:11;;:2;:11;;;;27407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27515:5;27499:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27524:37;27541:5;27548:12;:10;:12::i;:::-;27524:16;:37::i;:::-;27499:62;27477:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27658:21;27667:2;27671:7;27658:8;:21::i;:::-;27346:341;27276:411;;:::o;39286:42::-;39324:4;39286:42;:::o;28643:339::-;28838:41;28857:12;:10;:12::i;:::-;28871:7;28838:18;:41::i;:::-;28830:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28946:28;28956:4;28962:2;28966:7;28946:9;:28::i;:::-;28643:339;;;:::o;39405:28::-;;;;;;;;;;;;;:::o;41569:383::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41651:1:::1;41627:21;:25;41619:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41681:15;41699:21;41681:39;;41738:9;41733:212;41757:17;:24;;;;41753:1;:28;41733:212;;;41811:17;41829:1;41811:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41803:38;;:130;41860:58;41881:14;:36;41896:17;41914:1;41896:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41881:36;;;;;;;;;;;;;;;;41860:16;41872:3;41860:7;:11;;:16;;;;:::i;:::-;:20;;:58;;;;:::i;:::-;41803:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41783:3;;;;;:::i;:::-;;;;41733:212;;;;41608:344;41569:383::o:0;29053:185::-;29191:39;29208:4;29214:2;29218:7;29191:39;;;;;;;;;;;;:16;:39::i;:::-;29053:185;;;:::o;40933:106::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41021:10:::1;;41011:7;:20;;;;;;;:::i;:::-;;40933:106:::0;;:::o;25888:239::-;25960:7;25980:13;25996:7;:16;26004:7;25996:16;;;;;;;;;;;;;;;;;;;;;25980:32;;26048:1;26031:19;;:5;:19;;;;26023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26114:5;26107:12;;;25888:239;;;:::o;39335:47::-;39371:11;39335:47;:::o;25618:208::-;25690:7;25735:1;25718:19;;:5;:19;;;;25710:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25802:9;:16;25812:5;25802:16;;;;;;;;;;;;;;;;25795:23;;25618:208;;;:::o;38426:94::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38491:21:::1;38509:1;38491:9;:21::i;:::-;38426:94::o:0;41047:78::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41109:8:::1;;;;;;;;;;;41108:9;41097:8;;:20;;;;;;;;;;;;;;;;;;41047:78::o:0;37775:87::-;37821:7;37848:6;;;;;;;;;;;37841:13;;37775:87;:::o;26363:104::-;26419:13;26452:7;26445:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26363:104;:::o;40185:632::-;40245:14;40287:1;40262:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40245:43;;40307:8;;;;;;;;;;;40299:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40378:1;40362:13;:17;:39;;;;;40399:2;40383:13;:18;40362:39;40354:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;39324:4;40452:25;40463:13;40452:6;:10;;:25;;;;:::i;:::-;:40;;40444:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40551:3;40541:6;:13;40538:117;;40590:28;40604:13;39371:11;40590:13;;:28;;;;:::i;:::-;40577:9;:41;;40569:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40538:117;40670:9;40682:1;40670:13;;40666:142;40690:13;40685:1;:18;40666:142;;40724:33;40734:10;40755:1;40746:6;:10;;;;:::i;:::-;40724:9;:33::i;:::-;40772:24;:12;:22;:24::i;:::-;40705:3;;;;;:::i;:::-;;;;40666:142;;;;40234:583;40185:632;:::o;28046:295::-;28161:12;:10;:12::i;:::-;28149:24;;:8;:24;;;;28141:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:8;28216:18;:32;28235:12;:10;:12::i;:::-;28216:32;;;;;;;;;;;;;;;:42;28249:8;28216:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28314:8;28285:48;;28300:12;:10;:12::i;:::-;28285:48;;;28324:8;28285:48;;;;;;:::i;:::-;;;;;;;;28046:295;;:::o;41133:138::-;41180:7;41199:15;41217:21;41199:39;;41256:7;41249:14;;;41133:138;:::o;41390:171::-;41505:48;41529:4;41535:2;41539:7;41548:4;41505:23;:48::i;:::-;41390:171;;;;:::o;26538:334::-;26611:13;26645:16;26653:7;26645;:16::i;:::-;26637:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26726:21;26750:10;:8;:10::i;:::-;26726:34;;26802:1;26784:7;26778:21;:25;:86;;;;;;;;;;;;;;;;;26830:7;26839:18;:7;:16;:18::i;:::-;26813:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26778:86;26771:93;;;26538:334;;;:::o;28412:164::-;28509:4;28533:18;:25;28552:5;28533:25;;;;;;;;;;;;;;;:35;28559:8;28533:35;;;;;;;;;;;;;;;;;;;;;;;;;28526:42;;28412:164;;;;:::o;41279:103::-;41326:7;41352:22;:12;:20;:22::i;:::-;41345:29;;41279:103;:::o;38675:192::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:1:::1;38764:22;;:8;:22;;;;38756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:19;38850:8;38840:9;:19::i;:::-;38675:192:::0;:::o;11770:157::-;11855:4;11894:25;11879:40;;;:11;:40;;;;11872:47;;11770:157;;;:::o;31147:127::-;31212:4;31264:1;31236:30;;:7;:16;31244:7;31236:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31229:37;;31147:127;;;:::o;3047:98::-;3100:7;3127:10;3120:17;;3047:98;:::o;35129:174::-;35231:2;35204:15;:24;35220:7;35204:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35287:7;35283:2;35249:46;;35258:23;35273:7;35258:14;:23::i;:::-;35249:46;;;;;;;;;;;;35129:174;;:::o;31441:348::-;31534:4;31559:16;31567:7;31559;:16::i;:::-;31551:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31635:13;31651:23;31666:7;31651:14;:23::i;:::-;31635:39;;31704:5;31693:16;;:7;:16;;;:51;;;;31737:7;31713:31;;:20;31725:7;31713:11;:20::i;:::-;:31;;;31693:51;:87;;;;31748:32;31765:5;31772:7;31748:16;:32::i;:::-;31693:87;31685:96;;;31441:348;;;;:::o;34433:578::-;34592:4;34565:31;;:23;34580:7;34565:14;:23::i;:::-;:31;;;34557:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34675:1;34661:16;;:2;:16;;;;34653:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34731:39;34752:4;34758:2;34762:7;34731:20;:39::i;:::-;34835:29;34852:1;34856:7;34835:8;:29::i;:::-;34896:1;34877:9;:15;34887:4;34877:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34925:1;34908:9;:13;34918:2;34908:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34956:2;34937:7;:16;34945:7;34937:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34995:7;34991:2;34976:27;;34985:4;34976:27;;;;;;;;;;;;34433:578;;;:::o;20540:98::-;20598:7;20629:1;20625;:5;;;;:::i;:::-;20618:12;;20540:98;;;;:::o;20141:::-;20199:7;20230:1;20226;:5;;;;:::i;:::-;20219:12;;20141:98;;;;:::o;38875:173::-;38931:16;38950:6;;;;;;;;;;;38931:25;;38976:8;38967:6;;:17;;;;;;;;;;;;;;;;;;39031:8;39000:40;;39021:8;39000:40;;;;;;;;;;;;38920:128;38875:173;:::o;2421:114::-;2486:7;2513;:14;;;2506:21;;2421:114;;;:::o;19403:98::-;19461:7;19492:1;19488;:5;;;;:::i;:::-;19481:12;;19403:98;;;;:::o;32131:110::-;32207:26;32217:2;32221:7;32207:26;;;;;;;;;;;;:9;:26::i;:::-;32131:110;;:::o;2543:127::-;2650:1;2632:7;:14;;;:19;;;;;;;;;;;2543:127;:::o;29309:328::-;29484:41;29503:12;:10;:12::i;:::-;29517:7;29484:18;:41::i;:::-;29476:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29590:39;29604:4;29610:2;29614:7;29623:5;29590:13;:39::i;:::-;29309:328;;;;:::o;40825:100::-;40877:13;40910:7;40903:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40825:100;:::o;251:723::-;307:13;537:1;528:5;:10;524:53;;;555:10;;;;;;;;;;;;;;;;;;;;;524:53;587:12;602:5;587:20;;618:14;643:78;658:1;650:4;:9;643:78;;676:8;;;;;:::i;:::-;;;;707:2;699:10;;;;;:::i;:::-;;;643:78;;;731:19;763:6;753:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;731:39;;781:154;797:1;788:5;:10;781:154;;825:1;815:11;;;;;:::i;:::-;;;892:2;884:5;:10;;;;:::i;:::-;871:2;:24;;;;:::i;:::-;858:39;;841:6;848;841:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;921:2;912:11;;;;;:::i;:::-;;;781:154;;;959:6;945:21;;;;;251:723;;;;:::o;37239:126::-;;;;:::o;32468:321::-;32598:18;32604:2;32608:7;32598:5;:18::i;:::-;32649:54;32680:1;32684:2;32688:7;32697:5;32649:22;:54::i;:::-;32627:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32468:321;;;:::o;30519:315::-;30676:28;30686:4;30692:2;30696:7;30676:9;:28::i;:::-;30723:48;30746:4;30752:2;30756:7;30765:5;30723:22;:48::i;:::-;30715:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30519:315;;;;:::o;33125:382::-;33219:1;33205:16;;:2;:16;;;;33197:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33278:16;33286:7;33278;:16::i;:::-;33277:17;33269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:45;33369:1;33373:2;33377:7;33340:20;:45::i;:::-;33415:1;33398:9;:13;33408:2;33398:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33446:2;33427:7;:16;33435:7;33427:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33491:7;33487:2;33466:33;;33483:1;33466:33;;;;;;;;;;;;33125:382;;:::o;35868:799::-;36023:4;36044:15;:2;:13;;;:15::i;:::-;36040:620;;;36096:2;36080:36;;;36117:12;:10;:12::i;:::-;36131:4;36137:7;36146:5;36080:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36076:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36339:1;36322:6;:13;:18;36318:272;;;36365:60;;;;;;;;;;:::i;:::-;;;;;;;;36318:272;36540:6;36534:13;36525:6;36521:2;36517:15;36510:38;36076:529;36213:41;;;36203:51;;;:6;:51;;;;36196:58;;;;;36040:620;36644:4;36637:11;;35868:799;;;;;;;:::o;3871:387::-;3931:4;4139:12;4206:7;4194:20;4186:28;;4249:1;4242:4;:8;4235:15;;;3871:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6298:553;6356:8;6366:6;6416:3;6409:4;6401:6;6397:17;6393:27;6383:122;;6424:79;;:::i;:::-;6383:122;6537:6;6524:20;6514:30;;6567:18;6559:6;6556:30;6553:117;;;6589:79;;:::i;:::-;6553:117;6703:4;6695:6;6691:17;6679:29;;6757:3;6749:4;6741:6;6737:17;6727:8;6723:32;6720:41;6717:128;;;6764:79;;:::i;:::-;6717:128;6298:553;;;;;:::o;6857:529::-;6928:6;6936;6985:2;6973:9;6964:7;6960:23;6956:32;6953:119;;;6991:79;;:::i;:::-;6953:119;7139:1;7128:9;7124:17;7111:31;7169:18;7161:6;7158:30;7155:117;;;7191:79;;:::i;:::-;7155:117;7304:65;7361:7;7352:6;7341:9;7337:22;7304:65;:::i;:::-;7286:83;;;;7082:297;6857:529;;;;;:::o;7392:329::-;7451:6;7500:2;7488:9;7479:7;7475:23;7471:32;7468:119;;;7506:79;;:::i;:::-;7468:119;7626:1;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7597:117;7392:329;;;;:::o;7727:116::-;7797:21;7812:5;7797:21;:::i;:::-;7790:5;7787:32;7777:60;;7833:1;7830;7823:12;7777:60;7727:116;:::o;7849:133::-;7892:5;7930:6;7917:20;7908:29;;7946:30;7970:5;7946:30;:::i;:::-;7849:133;;;;:::o;7988:468::-;8053:6;8061;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8236:1;8261:53;8306:7;8297:6;8286:9;8282:22;8261:53;:::i;:::-;8251:63;;8207:117;8363:2;8389:50;8431:7;8422:6;8411:9;8407:22;8389:50;:::i;:::-;8379:60;;8334:115;7988:468;;;;;:::o;8462:117::-;8571:1;8568;8561:12;8585:180;8633:77;8630:1;8623:88;8730:4;8727:1;8720:15;8754:4;8751:1;8744:15;8771:281;8854:27;8876:4;8854:27;:::i;:::-;8846:6;8842:40;8984:6;8972:10;8969:22;8948:18;8936:10;8933:34;8930:62;8927:88;;;8995:18;;:::i;:::-;8927:88;9035:10;9031:2;9024:22;8814:238;8771:281;;:::o;9058:129::-;9092:6;9119:20;;:::i;:::-;9109:30;;9148:33;9176:4;9168:6;9148:33;:::i;:::-;9058:129;;;:::o;9193:307::-;9254:4;9344:18;9336:6;9333:30;9330:56;;;9366:18;;:::i;:::-;9330:56;9404:29;9426:6;9404:29;:::i;:::-;9396:37;;9488:4;9482;9478:15;9470:23;;9193:307;;;:::o;9506:154::-;9590:6;9585:3;9580;9567:30;9652:1;9643:6;9638:3;9634:16;9627:27;9506:154;;;:::o;9666:410::-;9743:5;9768:65;9784:48;9825:6;9784:48;:::i;:::-;9768:65;:::i;:::-;9759:74;;9856:6;9849:5;9842:21;9894:4;9887:5;9883:16;9932:3;9923:6;9918:3;9914:16;9911:25;9908:112;;;9939:79;;:::i;:::-;9908:112;10029:41;10063:6;10058:3;10053;10029:41;:::i;:::-;9749:327;9666:410;;;;;:::o;10095:338::-;10150:5;10199:3;10192:4;10184:6;10180:17;10176:27;10166:122;;10207:79;;:::i;:::-;10166:122;10324:6;10311:20;10349:78;10423:3;10415:6;10408:4;10400:6;10396:17;10349:78;:::i;:::-;10340:87;;10156:277;10095:338;;;;:::o;10439:943::-;10534:6;10542;10550;10558;10607:3;10595:9;10586:7;10582:23;10578:33;10575:120;;;10614:79;;:::i;:::-;10575:120;10734:1;10759:53;10804:7;10795:6;10784:9;10780:22;10759:53;:::i;:::-;10749:63;;10705:117;10861:2;10887:53;10932:7;10923:6;10912:9;10908:22;10887:53;:::i;:::-;10877:63;;10832:118;10989:2;11015:53;11060:7;11051:6;11040:9;11036:22;11015:53;:::i;:::-;11005:63;;10960:118;11145:2;11134:9;11130:18;11117:32;11176:18;11168:6;11165:30;11162:117;;;11198:79;;:::i;:::-;11162:117;11303:62;11357:7;11348:6;11337:9;11333:22;11303:62;:::i;:::-;11293:72;;11088:287;10439:943;;;;;;;:::o;11388:474::-;11456:6;11464;11513:2;11501:9;11492:7;11488:23;11484:32;11481:119;;;11519:79;;:::i;:::-;11481:119;11639:1;11664:53;11709:7;11700:6;11689:9;11685:22;11664:53;:::i;:::-;11654:63;;11610:117;11766:2;11792:53;11837:7;11828:6;11817:9;11813:22;11792:53;:::i;:::-;11782:63;;11737:118;11388:474;;;;;:::o;11868:180::-;11916:77;11913:1;11906:88;12013:4;12010:1;12003:15;12037:4;12034:1;12027:15;12054:320;12098:6;12135:1;12129:4;12125:12;12115:22;;12182:1;12176:4;12172:12;12203:18;12193:81;;12259:4;12251:6;12247:17;12237:27;;12193:81;12321:2;12313:6;12310:14;12290:18;12287:38;12284:84;;;12340:18;;:::i;:::-;12284:84;12105:269;12054:320;;;:::o;12380:231::-;12520:34;12516:1;12508:6;12504:14;12497:58;12589:14;12584:2;12576:6;12572:15;12565:39;12380:231;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12617:366;;;:::o;12989:419::-;13155:4;13193:2;13182:9;13178:18;13170:26;;13242:9;13236:4;13232:20;13228:1;13217:9;13213:17;13206:47;13270:131;13396:4;13270:131;:::i;:::-;13262:139;;12989:419;;;:::o;13414:220::-;13554:34;13550:1;13542:6;13538:14;13531:58;13623:3;13618:2;13610:6;13606:15;13599:28;13414:220;:::o;13640:366::-;13782:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13879:93;13968:3;13879:93;:::i;:::-;13997:2;13992:3;13988:12;13981:19;;13640:366;;;:::o;14012:419::-;14178:4;14216:2;14205:9;14201:18;14193:26;;14265:9;14259:4;14255:20;14251:1;14240:9;14236:17;14229:47;14293:131;14419:4;14293:131;:::i;:::-;14285:139;;14012:419;;;:::o;14437:243::-;14577:34;14573:1;14565:6;14561:14;14554:58;14646:26;14641:2;14633:6;14629:15;14622:51;14437:243;:::o;14686:366::-;14828:3;14849:67;14913:2;14908:3;14849:67;:::i;:::-;14842:74;;14925:93;15014:3;14925:93;:::i;:::-;15043:2;15038:3;15034:12;15027:19;;14686:366;;;:::o;15058:419::-;15224:4;15262:2;15251:9;15247:18;15239:26;;15311:9;15305:4;15301:20;15297:1;15286:9;15282:17;15275:47;15339:131;15465:4;15339:131;:::i;:::-;15331:139;;15058:419;;;:::o;15483:236::-;15623:34;15619:1;15611:6;15607:14;15600:58;15692:19;15687:2;15679:6;15675:15;15668:44;15483:236;:::o;15725:366::-;15867:3;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15725:366;;;:::o;16097:419::-;16263:4;16301:2;16290:9;16286:18;16278:26;;16350:9;16344:4;16340:20;16336:1;16325:9;16321:17;16314:47;16378:131;16504:4;16378:131;:::i;:::-;16370:139;;16097:419;;;:::o;16522:182::-;16662:34;16658:1;16650:6;16646:14;16639:58;16522:182;:::o;16710:366::-;16852:3;16873:67;16937:2;16932:3;16873:67;:::i;:::-;16866:74;;16949:93;17038:3;16949:93;:::i;:::-;17067:2;17062:3;17058:12;17051:19;;16710:366;;;:::o;17082:419::-;17248:4;17286:2;17275:9;17271:18;17263:26;;17335:9;17329:4;17325:20;17321:1;17310:9;17306:17;17299:47;17363:131;17489:4;17363:131;:::i;:::-;17355:139;;17082:419;;;:::o;17507:163::-;17647:15;17643:1;17635:6;17631:14;17624:39;17507:163;:::o;17676:366::-;17818:3;17839:67;17903:2;17898:3;17839:67;:::i;:::-;17832:74;;17915:93;18004:3;17915:93;:::i;:::-;18033:2;18028:3;18024:12;18017:19;;17676:366;;;:::o;18048:419::-;18214:4;18252:2;18241:9;18237:18;18229:26;;18301:9;18295:4;18291:20;18287:1;18276:9;18272:17;18265:47;18329:131;18455:4;18329:131;:::i;:::-;18321:139;;18048:419;;;:::o;18473:180::-;18521:77;18518:1;18511:88;18618:4;18615:1;18608:15;18642:4;18639:1;18632:15;18659:180;18707:77;18704:1;18697:88;18804:4;18801:1;18794:15;18828:4;18825:1;18818:15;18845:233;18884:3;18907:24;18925:5;18907:24;:::i;:::-;18898:33;;18953:66;18946:5;18943:77;18940:103;;;19023:18;;:::i;:::-;18940:103;19070:1;19063:5;19059:13;19052:20;;18845:233;;;:::o;19084:228::-;19224:34;19220:1;19212:6;19208:14;19201:58;19293:11;19288:2;19280:6;19276:15;19269:36;19084:228;:::o;19318:366::-;19460:3;19481:67;19545:2;19540:3;19481:67;:::i;:::-;19474:74;;19557:93;19646:3;19557:93;:::i;:::-;19675:2;19670:3;19666:12;19659:19;;19318:366;;;:::o;19690:419::-;19856:4;19894:2;19883:9;19879:18;19871:26;;19943:9;19937:4;19933:20;19929:1;19918:9;19914:17;19907:47;19971:131;20097:4;19971:131;:::i;:::-;19963:139;;19690:419;;;:::o;20115:229::-;20255:34;20251:1;20243:6;20239:14;20232:58;20324:12;20319:2;20311:6;20307:15;20300:37;20115:229;:::o;20350:366::-;20492:3;20513:67;20577:2;20572:3;20513:67;:::i;:::-;20506:74;;20589:93;20678:3;20589:93;:::i;:::-;20707:2;20702:3;20698:12;20691:19;;20350:366;;;:::o;20722:419::-;20888:4;20926:2;20915:9;20911:18;20903:26;;20975:9;20969:4;20965:20;20961:1;20950:9;20946:17;20939:47;21003:131;21129:4;21003:131;:::i;:::-;20995:139;;20722:419;;;:::o;21147:305::-;21187:3;21206:20;21224:1;21206:20;:::i;:::-;21201:25;;21240:20;21258:1;21240:20;:::i;:::-;21235:25;;21394:1;21326:66;21322:74;21319:1;21316:81;21313:107;;;21400:18;;:::i;:::-;21313:107;21444:1;21441;21437:9;21430:16;;21147:305;;;;:::o;21458:173::-;21598:25;21594:1;21586:6;21582:14;21575:49;21458:173;:::o;21637:366::-;21779:3;21800:67;21864:2;21859:3;21800:67;:::i;:::-;21793:74;;21876:93;21965:3;21876:93;:::i;:::-;21994:2;21989:3;21985:12;21978:19;;21637:366;;;:::o;22009:419::-;22175:4;22213:2;22202:9;22198:18;22190:26;;22262:9;22256:4;22252:20;22248:1;22237:9;22233:17;22226:47;22290:131;22416:4;22290:131;:::i;:::-;22282:139;;22009:419;;;:::o;22434:173::-;22574:25;22570:1;22562:6;22558:14;22551:49;22434:173;:::o;22613:366::-;22755:3;22776:67;22840:2;22835:3;22776:67;:::i;:::-;22769:74;;22852:93;22941:3;22852:93;:::i;:::-;22970:2;22965:3;22961:12;22954:19;;22613:366;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;22985:419;;;:::o;23410:178::-;23550:30;23546:1;23538:6;23534:14;23527:54;23410:178;:::o;23594:366::-;23736:3;23757:67;23821:2;23816:3;23757:67;:::i;:::-;23750:74;;23833:93;23922:3;23833:93;:::i;:::-;23951:2;23946:3;23942:12;23935:19;;23594:366;;;:::o;23966:419::-;24132:4;24170:2;24159:9;24155:18;24147:26;;24219:9;24213:4;24209:20;24205:1;24194:9;24190:17;24183:47;24247:131;24373:4;24247:131;:::i;:::-;24239:139;;23966:419;;;:::o;24391:170::-;24531:22;24527:1;24519:6;24515:14;24508:46;24391:170;:::o;24567:366::-;24709:3;24730:67;24794:2;24789:3;24730:67;:::i;:::-;24723:74;;24806:93;24895:3;24806:93;:::i;:::-;24924:2;24919:3;24915:12;24908:19;;24567:366;;;:::o;24939:419::-;25105:4;25143:2;25132:9;25128:18;25120:26;;25192:9;25186:4;25182:20;25178:1;25167:9;25163:17;25156:47;25220:131;25346:4;25220:131;:::i;:::-;25212:139;;24939:419;;;:::o;25364:175::-;25504:27;25500:1;25492:6;25488:14;25481:51;25364:175;:::o;25545:366::-;25687:3;25708:67;25772:2;25767:3;25708:67;:::i;:::-;25701:74;;25784:93;25873:3;25784:93;:::i;:::-;25902:2;25897:3;25893:12;25886:19;;25545:366;;;:::o;25917:419::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:131;26324:4;26198:131;:::i;:::-;26190:139;;25917:419;;;:::o;26342:234::-;26482:34;26478:1;26470:6;26466:14;26459:58;26551:17;26546:2;26538:6;26534:15;26527:42;26342:234;:::o;26582:366::-;26724:3;26745:67;26809:2;26804:3;26745:67;:::i;:::-;26738:74;;26821:93;26910:3;26821:93;:::i;:::-;26939:2;26934:3;26930:12;26923:19;;26582:366;;;:::o;26954:419::-;27120:4;27158:2;27147:9;27143:18;27135:26;;27207:9;27201:4;27197:20;27193:1;27182:9;27178:17;27171:47;27235:131;27361:4;27235:131;:::i;:::-;27227:139;;26954:419;;;:::o;27379:148::-;27481:11;27518:3;27503:18;;27379:148;;;;:::o;27533:377::-;27639:3;27667:39;27700:5;27667:39;:::i;:::-;27722:89;27804:6;27799:3;27722:89;:::i;:::-;27715:96;;27820:52;27865:6;27860:3;27853:4;27846:5;27842:16;27820:52;:::i;:::-;27897:6;27892:3;27888:16;27881:23;;27643:267;27533:377;;;;:::o;27916:435::-;28096:3;28118:95;28209:3;28200:6;28118:95;:::i;:::-;28111:102;;28230:95;28321:3;28312:6;28230:95;:::i;:::-;28223:102;;28342:3;28335:10;;27916:435;;;;;:::o;28357:225::-;28497:34;28493:1;28485:6;28481:14;28474:58;28566:8;28561:2;28553:6;28549:15;28542:33;28357:225;:::o;28588:366::-;28730:3;28751:67;28815:2;28810:3;28751:67;:::i;:::-;28744:74;;28827:93;28916:3;28827:93;:::i;:::-;28945:2;28940:3;28936:12;28929:19;;28588:366;;;:::o;28960:419::-;29126:4;29164:2;29153:9;29149:18;29141:26;;29213:9;29207:4;29203:20;29199:1;29188:9;29184:17;29177:47;29241:131;29367:4;29241:131;:::i;:::-;29233:139;;28960:419;;;:::o;29385:231::-;29525:34;29521:1;29513:6;29509:14;29502:58;29594:14;29589:2;29581:6;29577:15;29570:39;29385:231;:::o;29622:366::-;29764:3;29785:67;29849:2;29844:3;29785:67;:::i;:::-;29778:74;;29861:93;29950:3;29861:93;:::i;:::-;29979:2;29974:3;29970:12;29963:19;;29622:366;;;:::o;29994:419::-;30160:4;30198:2;30187:9;30183:18;30175:26;;30247:9;30241:4;30237:20;30233:1;30222:9;30218:17;30211:47;30275:131;30401:4;30275:131;:::i;:::-;30267:139;;29994:419;;;:::o;30419:228::-;30559:34;30555:1;30547:6;30543:14;30536:58;30628:11;30623:2;30615:6;30611:15;30604:36;30419:228;:::o;30653:366::-;30795:3;30816:67;30880:2;30875:3;30816:67;:::i;:::-;30809:74;;30892:93;30981:3;30892:93;:::i;:::-;31010:2;31005:3;31001:12;30994:19;;30653:366;;;:::o;31025:419::-;31191:4;31229:2;31218:9;31214:18;31206:26;;31278:9;31272:4;31268:20;31264:1;31253:9;31249:17;31242:47;31306:131;31432:4;31306:131;:::i;:::-;31298:139;;31025:419;;;:::o;31450:223::-;31590:34;31586:1;31578:6;31574:14;31567:58;31659:6;31654:2;31646:6;31642:15;31635:31;31450:223;:::o;31679:366::-;31821:3;31842:67;31906:2;31901:3;31842:67;:::i;:::-;31835:74;;31918:93;32007:3;31918:93;:::i;:::-;32036:2;32031:3;32027:12;32020:19;;31679:366;;;:::o;32051:419::-;32217:4;32255:2;32244:9;32240:18;32232:26;;32304:9;32298:4;32294:20;32290:1;32279:9;32275:17;32268:47;32332:131;32458:4;32332:131;:::i;:::-;32324:139;;32051:419;;;:::o;32476:191::-;32516:4;32536:20;32554:1;32536:20;:::i;:::-;32531:25;;32570:20;32588:1;32570:20;:::i;:::-;32565:25;;32609:1;32606;32603:8;32600:34;;;32614:18;;:::i;:::-;32600:34;32659:1;32656;32652:9;32644:17;;32476:191;;;;:::o;32673:180::-;32721:77;32718:1;32711:88;32818:4;32815:1;32808:15;32842:4;32839:1;32832:15;32859:185;32899:1;32916:20;32934:1;32916:20;:::i;:::-;32911:25;;32950:20;32968:1;32950:20;:::i;:::-;32945:25;;32989:1;32979:35;;32994:18;;:::i;:::-;32979:35;33036:1;33033;33029:9;33024:14;;32859:185;;;;:::o;33050:348::-;33090:7;33113:20;33131:1;33113:20;:::i;:::-;33108:25;;33147:20;33165:1;33147:20;:::i;:::-;33142:25;;33335:1;33267:66;33263:74;33260:1;33257:81;33252:1;33245:9;33238:17;33234:105;33231:131;;;33342:18;;:::i;:::-;33231:131;33390:1;33387;33383:9;33372:20;;33050:348;;;;:::o;33404:176::-;33436:1;33453:20;33471:1;33453:20;:::i;:::-;33448:25;;33487:20;33505:1;33487:20;:::i;:::-;33482:25;;33526:1;33516:35;;33531:18;;:::i;:::-;33516:35;33572:1;33569;33565:9;33560:14;;33404:176;;;;:::o;33586:237::-;33726:34;33722:1;33714:6;33710:14;33703:58;33795:20;33790:2;33782:6;33778:15;33771:45;33586:237;:::o;33829:366::-;33971:3;33992:67;34056:2;34051:3;33992:67;:::i;:::-;33985:74;;34068:93;34157:3;34068:93;:::i;:::-;34186:2;34181:3;34177:12;34170:19;;33829:366;;;:::o;34201:419::-;34367:4;34405:2;34394:9;34390:18;34382:26;;34454:9;34448:4;34444:20;34440:1;34429:9;34425:17;34418:47;34482:131;34608:4;34482:131;:::i;:::-;34474:139;;34201:419;;;:::o;34626:182::-;34766:34;34762:1;34754:6;34750:14;34743:58;34626:182;:::o;34814:366::-;34956:3;34977:67;35041:2;35036:3;34977:67;:::i;:::-;34970:74;;35053:93;35142:3;35053:93;:::i;:::-;35171:2;35166:3;35162:12;35155:19;;34814:366;;;:::o;35186:419::-;35352:4;35390:2;35379:9;35375:18;35367:26;;35439:9;35433:4;35429:20;35425:1;35414:9;35410:17;35403:47;35467:131;35593:4;35467:131;:::i;:::-;35459:139;;35186:419;;;:::o;35611:178::-;35751:30;35747:1;35739:6;35735:14;35728:54;35611:178;:::o;35795:366::-;35937:3;35958:67;36022:2;36017:3;35958:67;:::i;:::-;35951:74;;36034:93;36123:3;36034:93;:::i;:::-;36152:2;36147:3;36143:12;36136:19;;35795:366;;;:::o;36167:419::-;36333:4;36371:2;36360:9;36356:18;36348:26;;36420:9;36414:4;36410:20;36406:1;36395:9;36391:17;36384:47;36448:131;36574:4;36448:131;:::i;:::-;36440:139;;36167:419;;;:::o;36592:98::-;36643:6;36677:5;36671:12;36661:22;;36592:98;;;:::o;36696:168::-;36779:11;36813:6;36808:3;36801:19;36853:4;36848:3;36844:14;36829:29;;36696:168;;;;:::o;36870:360::-;36956:3;36984:38;37016:5;36984:38;:::i;:::-;37038:70;37101:6;37096:3;37038:70;:::i;:::-;37031:77;;37117:52;37162:6;37157:3;37150:4;37143:5;37139:16;37117:52;:::i;:::-;37194:29;37216:6;37194:29;:::i;:::-;37189:3;37185:39;37178:46;;36960:270;36870:360;;;;:::o;37236:640::-;37431:4;37469:3;37458:9;37454:19;37446:27;;37483:71;37551:1;37540:9;37536:17;37527:6;37483:71;:::i;:::-;37564:72;37632:2;37621:9;37617:18;37608:6;37564:72;:::i;:::-;37646;37714:2;37703:9;37699:18;37690:6;37646:72;:::i;:::-;37765:9;37759:4;37755:20;37750:2;37739:9;37735:18;37728:48;37793:76;37864:4;37855:6;37793:76;:::i;:::-;37785:84;;37236:640;;;;;;;:::o;37882:141::-;37938:5;37969:6;37963:13;37954:22;;37985:32;38011:5;37985:32;:::i;:::-;37882:141;;;;:::o;38029:349::-;38098:6;38147:2;38135:9;38126:7;38122:23;38118:32;38115:119;;;38153:79;;:::i;:::-;38115:119;38273:1;38298:63;38353:7;38344:6;38333:9;38329:22;38298:63;:::i;:::-;38288:73;;38244:127;38029:349;;;;:::o
Swarm Source
ipfs://905a786a23be508bc40b409ec3b01d6be0aeb8e819ecf7f452970bc306a2827a
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.