ERC-721
Overview
Max Total Supply
6,969 CDMF
Holders
23
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CDMFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CDMF
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ // ______ ______ ____ ____ ________ // .' ___ | |_ _ `. |_ \ / _| |_ __ | // / .' \_| | | `. \ | \/ | | |_ \_| // | | | | | | | |\ /| | | _| // \ `.___.'\ _ _| |_.' /_ _| |_\/_| |_ _ _| |_ // `.____ .'(_)|______.'(_)|_____||_____|(_)|_____| /** *Submitted for verification at Etherscan.io on 2021-10-11 * SPDX-License-Identifier: UNLICENSED */ pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Emitted when `owner` pays to purchase a specific image id. */ event Purchase(address indexed owner, string imageId, string name); /** * @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; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; contract Ownable { address _owner; constructor() { _owner = msg.sender; } modifier onlyOwner() { require( msg.sender == _owner, "Only the contract owner may call this function" ); _; } function owner() public view virtual returns (address) { return _owner; } function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); _owner = newOwner; } function withdrawBalance() external onlyOwner { payable(_owner).transfer(address(this).balance); } function withdrawAmountTo(address _recipient, uint256 _amount) external onlyOwner { require(address(this).balance >= _amount); payable(_recipient).transfer(_amount); } } pragma solidity ^0.8.0; contract CDMF is Context, ERC165, IERC721, IERC721Metadata, Ownable { /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ using Address for address; using Strings for uint256; // Max total supply uint256 public maxSupply = 6969; // purchase price uint256 private _purchasePrice = 20000000000000000 wei; uint256 private _maxMintsPerTx = 20; // baseURI for Metadata string private _metadataURI = "https://cdmf.s3.us-east-2.amazonaws.com/metadata/"; string private baseExtension = ".json"; // Token name string private _name; // Token symbol string private _symbol; // Token supply uint256 private _tokenSupply = 0; // 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_; } function setBaseURI(string memory newURI) external onlyOwner { _metadataURI = newURI; } function setMaxMintsPerTx(uint256 newMax) external onlyOwner { _maxMintsPerTx = newMax; } function setPurchasePrice(uint256 newPrice) external onlyOwner { _purchasePrice = newPrice; } function totalSupply() external view returns (uint256) { return maxSupply; } function tokenSupply() external view returns (uint256) { return _tokenSupply; } function purchasePrice() external view returns (uint256) { return _purchasePrice; } function _mint( address _owner ) private returns (uint256) { uint256 _newTokenId = _tokenSupply + 1; _safeMint(_owner, _newTokenId); return _newTokenId; } function mint( uint256 _amount ) external payable returns (uint256) { require(_tokenSupply+_amount < maxSupply, "Maximum supply has been reached"); require(_amount < _maxMintsPerTx, "Attempting to mint too many tokens."); require(msg.value >= _purchasePrice*_amount, "Insufficient message value"); uint256 _newTokenId = 0; for(uint i = 0; i < _amount; i++) { _newTokenId = _mint(msg.sender); } return _newTokenId; } function ownerMint( uint256 _amount ) external onlyOwner returns (uint256) { require(_tokenSupply + _amount < maxSupply, "Maximum supply has been reached"); uint256 _newTokenId = 0; for(uint i = 0; i < _amount; i++) { _newTokenId = _mint(msg.sender); } return _newTokenId; } function mintTo(address[] memory _addresses) external payable returns(uint256) { require(_tokenSupply + _addresses.length < maxSupply, "Maximum supply has been reached"); require(msg.value >= _purchasePrice*_addresses.length, "Insufficient message value"); uint256 _newTokenId = 0; for(uint i = 0; i<_addresses.length; ++i) { _newTokenId = _mint(_addresses[i]); } return _newTokenId; } /** * @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 currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } /** * @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 _metadataURI; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = CDMF.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 = CDMF.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; _tokenSupply += 1; 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 = CDMF.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( CDMF.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(CDMF.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 {} } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
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":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"imageId","type":"string"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"Purchase","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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"mintTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ownerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchasePrice","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxMintsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPurchasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAmountTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611b3960015566470de4df820000600255601460035560405180606001604052806031815260200162003c4160319139600490805190602001906200004b9291906200014c565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060059080519060200190620000999291906200014c565b506000600855348015620000ac57600080fd5b5060405162003c7238038062003c728339818101604052810190620000d291906200026e565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600690805190602001906200012a9291906200014c565b508060079080519060200190620001439291906200014c565b50505062000412565b8280546200015a906200037e565b90600052602060002090601f0160209004810192826200017e5760008555620001ca565b82601f106200019957805160ff1916838001178555620001ca565b82800160010185558215620001ca579182015b82811115620001c9578251825591602001919060010190620001ac565b5b509050620001d99190620001dd565b5090565b5b80821115620001f8576000816000905550600101620001de565b5090565b6000620002136200020d8462000315565b620002e1565b9050828152602081018484840111156200022c57600080fd5b6200023984828562000348565b509392505050565b600082601f8301126200025357600080fd5b815162000265848260208601620001fc565b91505092915050565b600080604083850312156200028257600080fd5b600083015167ffffffffffffffff8111156200029d57600080fd5b620002ab8582860162000241565b925050602083015167ffffffffffffffff811115620002c957600080fd5b620002d78582860162000241565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200030b576200030a620003e3565b5b8060405250919050565b600067ffffffffffffffff821115620003335762000332620003e3565b5b601f19601f8301169050602081019050919050565b60005b83811015620003685780820151818401526020810190506200034b565b8381111562000378576000848401525b50505050565b600060028204905060018216806200039757607f821691505b60208210811415620003ae57620003ad620003b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61381f80620004226000396000f3fe60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063d5abeb011161008a578063e465f1f511610064578063e465f1f5146105be578063e985e9c5146105e7578063f19e75d414610624578063f2fde38b146106615761019c565b8063d5abeb011461053f578063d72966621461056a578063defd6c5f146105935761019c565b8063a22cb465116100c6578063a22cb46514610480578063b88d4fde146104a9578063c87b56dd146104d2578063ce7c8b491461050f5761019c565b80638da5cb5b146103fa57806395d89b4114610425578063a0712d68146104505761019c565b806323b872dd116101595780635fd8c710116101335780635fd8c7101461033e5780636352211e1461035557806370a08231146103925780637824407f146103cf5761019c565b806323b872dd146102c357806342842e0e146102ec57806355f804b3146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063174da4a21461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c3919061278b565b61068a565b6040516101d5919061309c565b60405180910390f35b3480156101ea57600080fd5b506101f361076c565b60405161020091906130b7565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061281e565b6107fe565b60405161023d9190613035565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061270e565b610883565b005b34801561027b57600080fd5b506102966004803603810190610291919061281e565b61099b565b005b3480156102a457600080fd5b506102ad610a33565b6040516102ba9190613319565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612608565b610a3d565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612608565b610a9d565b005b34801561032157600080fd5b5061033c600480360381019061033791906127dd565b610abd565b005b34801561034a57600080fd5b50610353610b65565b005b34801561036157600080fd5b5061037c6004803603810190610377919061281e565b610c5c565b6040516103899190613035565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906125a3565b610d0e565b6040516103c69190613319565b60405180910390f35b3480156103db57600080fd5b506103e4610dc6565b6040516103f19190613319565b60405180910390f35b34801561040657600080fd5b5061040f610dd0565b60405161041c9190613035565b60405180910390f35b34801561043157600080fd5b5061043a610df9565b60405161044791906130b7565b60405180910390f35b61046a6004803603810190610465919061281e565b610e8b565b6040516104779190613319565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906126d2565b610fa6565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612657565b611127565b005b3480156104de57600080fd5b506104f960048036038101906104f4919061281e565b611189565b60405161050691906130b7565b60405180910390f35b6105296004803603810190610524919061274a565b611233565b6040516105369190613319565b60405180910390f35b34801561054b57600080fd5b5061055461134b565b6040516105619190613319565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c919061281e565b611351565b005b34801561059f57600080fd5b506105a86113e9565b6040516105b59190613319565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e0919061270e565b6113f3565b005b3480156105f357600080fd5b5061060e600480360381019061060991906125cc565b6114d9565b60405161061b919061309c565b60405180910390f35b34801561063057600080fd5b5061064b6004803603810190610646919061281e565b61156d565b6040516106589190613319565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906125a3565b611683565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076557506107648261178e565b5b9050919050565b60606006805461077b90613614565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790613614565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b5050505050905090565b6000610809826117f8565b610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f90613259565b60405180910390fd5b600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088e82610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f6906132d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091e611864565b73ffffffffffffffffffffffffffffffffffffffff16148061094d575061094c81610947611864565b6114d9565b5b61098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906131b9565b60405180910390fd5b610996838361186c565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613219565b60405180910390fd5b8060038190555050565b6000600154905090565b610a4e610a48611864565b82611925565b610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906132f9565b60405180910390fd5b610a98838383611a03565b505050565b610ab883838360405180602001604052806000815250611127565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613219565b60405180910390fd5b8060049080519060200190610b61929190612331565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613219565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c59573d6000803e3d6000fd5b50565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906131f9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d76906131d9565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e0890613614565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3490613614565b8015610e815780601f10610e5657610100808354040283529160200191610e81565b820191906000526020600020905b815481529060010190602001808311610e6457829003601f168201915b5050505050905090565b600060015482600854610e9e9190613449565b10610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906132b9565b60405180910390fd5b6003548210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613119565b60405180910390fd5b81600254610f3091906134d0565b341015610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990613139565b60405180910390fd5b6000805b83811015610f9c57610f8733611c5f565b91508080610f9490613646565b915050610f76565b5080915050919050565b610fae611864565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613179565b60405180910390fd5b80600c6000611029611864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110d6611864565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161111b919061309c565b60405180910390a35050565b611138611132611864565b83611925565b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906132f9565b60405180910390fd5b61118384848484611c86565b50505050565b6060611194826117f8565b6111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90613299565b60405180910390fd5b60006111dd611ce2565b905060008151116111fd576040518060200160405280600081525061122b565b8061120784611d74565b600560405160200161121b93929190613004565b6040516020818303038152906040525b915050919050565b600060015482516008546112479190613449565b10611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906132b9565b60405180910390fd5b815160025461129691906134d0565b3410156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90613139565b60405180910390fd5b6000805b83518110156113415761132e848281518110611321577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611c5f565b91508061133a90613646565b90506112dc565b5080915050919050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690613219565b60405180910390fd5b8060028190555050565b6000600254905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613219565b60405180910390fd5b8047101561148e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114d4573d6000803e3d6000fd5b505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590613219565b60405180910390fd5b6001548260085461160f9190613449565b1061164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906132b9565b60405180910390fd5b6000805b838110156116795761166433611c5f565b9150808061167190613646565b915050611653565b5080915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613219565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561174b57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b81600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118df83610c5c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611930826117f8565b61196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613199565b60405180910390fd5b600061197a83610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119e957508373ffffffffffffffffffffffffffffffffffffffff166119d1846107fe565b73ffffffffffffffffffffffffffffffffffffffff16145b806119fa57506119f981856114d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a2382610c5c565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090613279565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613159565b60405180910390fd5b611af4838383611f21565b611aff60008261186c565b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4f919061352a565b925050819055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ba69190613449565b92505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806001600854611c719190613449565b9050611c7d8382611f26565b80915050919050565b611c91848484611a03565b611c9d84848484611f44565b611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd3906130d9565b60405180910390fd5b50505050565b606060048054611cf190613614565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1d90613614565b8015611d6a5780601f10611d3f57610100808354040283529160200191611d6a565b820191906000526020600020905b815481529060010190602001808311611d4d57829003601f168201915b5050505050905090565b60606000821415611dbc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f1c565b600082905060005b60008214611dee578080611dd790613646565b915050600a82611de7919061349f565b9150611dc4565b60008167ffffffffffffffff811115611e30577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e625781602001600182028036833780820191505090505b5090505b60008514611f1557600182611e7b919061352a565b9150600a85611e8a919061368f565b6030611e969190613449565b60f81b818381518110611ed2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f0e919061349f565b9450611e66565b8093505050505b919050565b505050565b611f408282604051806020016040528060008152506120db565b5050565b6000611f658473ffffffffffffffffffffffffffffffffffffffff16612136565b156120ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f8e611864565b8786866040518563ffffffff1660e01b8152600401611fb09493929190613050565b602060405180830381600087803b158015611fca57600080fd5b505af1925050508015611ffb57506040513d601f19601f82011682018060405250810190611ff891906127b4565b60015b61207e573d806000811461202b576040519150601f19603f3d011682016040523d82523d6000602084013e612030565b606091505b50600081511415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d906130d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120d3565b600190505b949350505050565b6120e58383612149565b6120f26000848484611f44565b612131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612128906130d9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613239565b60405180910390fd5b6121c2816117f8565b15612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f9906130f9565b60405180910390fd5b61220e60008383611f21565b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225e9190613449565b92505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860008282546122ca9190613449565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461233d90613614565b90600052602060002090601f01602090048101928261235f57600085556123a6565b82601f1061237857805160ff19168380011785556123a6565b828001600101855582156123a6579182015b828111156123a557825182559160200191906001019061238a565b5b5090506123b391906123b7565b5090565b5b808211156123d05760008160009055506001016123b8565b5090565b60006123e76123e284613365565b613334565b9050808382526020820190508285602086028201111561240657600080fd5b60005b85811015612436578161241c88826124bc565b845260208401935060208301925050600181019050612409565b5050509392505050565b600061245361244e84613391565b613334565b90508281526020810184848401111561246b57600080fd5b6124768482856135d2565b509392505050565b600061249161248c846133c1565b613334565b9050828152602081018484840111156124a957600080fd5b6124b48482856135d2565b509392505050565b6000813590506124cb8161378d565b92915050565b600082601f8301126124e257600080fd5b81356124f28482602086016123d4565b91505092915050565b60008135905061250a816137a4565b92915050565b60008135905061251f816137bb565b92915050565b600081519050612534816137bb565b92915050565b600082601f83011261254b57600080fd5b813561255b848260208601612440565b91505092915050565b600082601f83011261257557600080fd5b813561258584826020860161247e565b91505092915050565b60008135905061259d816137d2565b92915050565b6000602082840312156125b557600080fd5b60006125c3848285016124bc565b91505092915050565b600080604083850312156125df57600080fd5b60006125ed858286016124bc565b92505060206125fe858286016124bc565b9150509250929050565b60008060006060848603121561261d57600080fd5b600061262b868287016124bc565b935050602061263c868287016124bc565b925050604061264d8682870161258e565b9150509250925092565b6000806000806080858703121561266d57600080fd5b600061267b878288016124bc565b945050602061268c878288016124bc565b935050604061269d8782880161258e565b925050606085013567ffffffffffffffff8111156126ba57600080fd5b6126c68782880161253a565b91505092959194509250565b600080604083850312156126e557600080fd5b60006126f3858286016124bc565b9250506020612704858286016124fb565b9150509250929050565b6000806040838503121561272157600080fd5b600061272f858286016124bc565b92505060206127408582860161258e565b9150509250929050565b60006020828403121561275c57600080fd5b600082013567ffffffffffffffff81111561277657600080fd5b612782848285016124d1565b91505092915050565b60006020828403121561279d57600080fd5b60006127ab84828501612510565b91505092915050565b6000602082840312156127c657600080fd5b60006127d484828501612525565b91505092915050565b6000602082840312156127ef57600080fd5b600082013567ffffffffffffffff81111561280957600080fd5b61281584828501612564565b91505092915050565b60006020828403121561283057600080fd5b600061283e8482850161258e565b91505092915050565b6128508161355e565b82525050565b61285f81613570565b82525050565b600061287082613406565b61287a818561341c565b935061288a8185602086016135e1565b6128938161377c565b840191505092915050565b60006128a982613411565b6128b3818561342d565b93506128c38185602086016135e1565b6128cc8161377c565b840191505092915050565b60006128e282613411565b6128ec818561343e565b93506128fc8185602086016135e1565b80840191505092915050565b6000815461291581613614565b61291f818661343e565b9450600182166000811461293a576001811461294b5761297e565b60ff1983168652818601935061297e565b612954856133f1565b60005b8381101561297657815481890152600182019150602081019050612957565b838801955050505b50505092915050565b600061299460328361342d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006129fa601c8361342d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612a3a60238361342d565b91507f417474656d7074696e6720746f206d696e7420746f6f206d616e7920746f6b6560008301527f6e732e00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612aa0601a8361342d565b91507f496e73756666696369656e74206d6573736167652076616c75650000000000006000830152602082019050919050565b6000612ae060248361342d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b4660198361342d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612b86602c8361342d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612bec60388361342d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612c52602a8361342d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cb860298361342d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d1e602e8361342d565b91507f4f6e6c792074686520636f6e7472616374206f776e6572206d61792063616c6c60008301527f20746869732066756e6374696f6e0000000000000000000000000000000000006020830152604082019050919050565b6000612d8460208361342d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612dc4602c8361342d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e2a60298361342d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e90602f8361342d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612ef6601f8361342d565b91507f4d6178696d756d20737570706c7920686173206265656e2072656163686564006000830152602082019050919050565b6000612f3660218361342d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f9c60318361342d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b612ffe816135c8565b82525050565b600061301082866128d7565b915061301c82856128d7565b91506130288284612908565b9150819050949350505050565b600060208201905061304a6000830184612847565b92915050565b60006080820190506130656000830187612847565b6130726020830186612847565b61307f6040830185612ff5565b81810360608301526130918184612865565b905095945050505050565b60006020820190506130b16000830184612856565b92915050565b600060208201905081810360008301526130d1818461289e565b905092915050565b600060208201905081810360008301526130f281612987565b9050919050565b60006020820190508181036000830152613112816129ed565b9050919050565b6000602082019050818103600083015261313281612a2d565b9050919050565b6000602082019050818103600083015261315281612a93565b9050919050565b6000602082019050818103600083015261317281612ad3565b9050919050565b6000602082019050818103600083015261319281612b39565b9050919050565b600060208201905081810360008301526131b281612b79565b9050919050565b600060208201905081810360008301526131d281612bdf565b9050919050565b600060208201905081810360008301526131f281612c45565b9050919050565b6000602082019050818103600083015261321281612cab565b9050919050565b6000602082019050818103600083015261323281612d11565b9050919050565b6000602082019050818103600083015261325281612d77565b9050919050565b6000602082019050818103600083015261327281612db7565b9050919050565b6000602082019050818103600083015261329281612e1d565b9050919050565b600060208201905081810360008301526132b281612e83565b9050919050565b600060208201905081810360008301526132d281612ee9565b9050919050565b600060208201905081810360008301526132f281612f29565b9050919050565b6000602082019050818103600083015261331281612f8f565b9050919050565b600060208201905061332e6000830184612ff5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561335b5761335a61374d565b5b8060405250919050565b600067ffffffffffffffff8211156133805761337f61374d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133ac576133ab61374d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156133dc576133db61374d565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613454826135c8565b915061345f836135c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613494576134936136c0565b5b828201905092915050565b60006134aa826135c8565b91506134b5836135c8565b9250826134c5576134c46136ef565b5b828204905092915050565b60006134db826135c8565b91506134e6836135c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561351f5761351e6136c0565b5b828202905092915050565b6000613535826135c8565b9150613540836135c8565b925082821015613553576135526136c0565b5b828203905092915050565b6000613569826135a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135ff5780820151818401526020810190506135e4565b8381111561360e576000848401525b50505050565b6000600282049050600182168061362c57607f821691505b602082108114156136405761363f61371e565b5b50919050565b6000613651826135c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613684576136836136c0565b5b600182019050919050565b600061369a826135c8565b91506136a5836135c8565b9250826136b5576136b46136ef565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6137968161355e565b81146137a157600080fd5b50565b6137ad81613570565b81146137b857600080fd5b50565b6137c48161357c565b81146137cf57600080fd5b50565b6137db816135c8565b81146137e657600080fd5b5056fea264697066735822122005200cf12a8f20c7cfdf819ba609c6737216fbc711e2e932115ce3428f216f8564736f6c6343000800003368747470733a2f2f63646d662e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000015436f6f6c20446f6f646c654d6f7269204672656e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000443444d4600000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063d5abeb011161008a578063e465f1f511610064578063e465f1f5146105be578063e985e9c5146105e7578063f19e75d414610624578063f2fde38b146106615761019c565b8063d5abeb011461053f578063d72966621461056a578063defd6c5f146105935761019c565b8063a22cb465116100c6578063a22cb46514610480578063b88d4fde146104a9578063c87b56dd146104d2578063ce7c8b491461050f5761019c565b80638da5cb5b146103fa57806395d89b4114610425578063a0712d68146104505761019c565b806323b872dd116101595780635fd8c710116101335780635fd8c7101461033e5780636352211e1461035557806370a08231146103925780637824407f146103cf5761019c565b806323b872dd146102c357806342842e0e146102ec57806355f804b3146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063174da4a21461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c3919061278b565b61068a565b6040516101d5919061309c565b60405180910390f35b3480156101ea57600080fd5b506101f361076c565b60405161020091906130b7565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061281e565b6107fe565b60405161023d9190613035565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061270e565b610883565b005b34801561027b57600080fd5b506102966004803603810190610291919061281e565b61099b565b005b3480156102a457600080fd5b506102ad610a33565b6040516102ba9190613319565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612608565b610a3d565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612608565b610a9d565b005b34801561032157600080fd5b5061033c600480360381019061033791906127dd565b610abd565b005b34801561034a57600080fd5b50610353610b65565b005b34801561036157600080fd5b5061037c6004803603810190610377919061281e565b610c5c565b6040516103899190613035565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906125a3565b610d0e565b6040516103c69190613319565b60405180910390f35b3480156103db57600080fd5b506103e4610dc6565b6040516103f19190613319565b60405180910390f35b34801561040657600080fd5b5061040f610dd0565b60405161041c9190613035565b60405180910390f35b34801561043157600080fd5b5061043a610df9565b60405161044791906130b7565b60405180910390f35b61046a6004803603810190610465919061281e565b610e8b565b6040516104779190613319565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906126d2565b610fa6565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612657565b611127565b005b3480156104de57600080fd5b506104f960048036038101906104f4919061281e565b611189565b60405161050691906130b7565b60405180910390f35b6105296004803603810190610524919061274a565b611233565b6040516105369190613319565b60405180910390f35b34801561054b57600080fd5b5061055461134b565b6040516105619190613319565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c919061281e565b611351565b005b34801561059f57600080fd5b506105a86113e9565b6040516105b59190613319565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e0919061270e565b6113f3565b005b3480156105f357600080fd5b5061060e600480360381019061060991906125cc565b6114d9565b60405161061b919061309c565b60405180910390f35b34801561063057600080fd5b5061064b6004803603810190610646919061281e565b61156d565b6040516106589190613319565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906125a3565b611683565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076557506107648261178e565b5b9050919050565b60606006805461077b90613614565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790613614565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b5050505050905090565b6000610809826117f8565b610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f90613259565b60405180910390fd5b600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088e82610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f6906132d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091e611864565b73ffffffffffffffffffffffffffffffffffffffff16148061094d575061094c81610947611864565b6114d9565b5b61098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906131b9565b60405180910390fd5b610996838361186c565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613219565b60405180910390fd5b8060038190555050565b6000600154905090565b610a4e610a48611864565b82611925565b610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906132f9565b60405180910390fd5b610a98838383611a03565b505050565b610ab883838360405180602001604052806000815250611127565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613219565b60405180910390fd5b8060049080519060200190610b61929190612331565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613219565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c59573d6000803e3d6000fd5b50565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906131f9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d76906131d9565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e0890613614565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3490613614565b8015610e815780601f10610e5657610100808354040283529160200191610e81565b820191906000526020600020905b815481529060010190602001808311610e6457829003601f168201915b5050505050905090565b600060015482600854610e9e9190613449565b10610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906132b9565b60405180910390fd5b6003548210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613119565b60405180910390fd5b81600254610f3091906134d0565b341015610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990613139565b60405180910390fd5b6000805b83811015610f9c57610f8733611c5f565b91508080610f9490613646565b915050610f76565b5080915050919050565b610fae611864565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613179565b60405180910390fd5b80600c6000611029611864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110d6611864565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161111b919061309c565b60405180910390a35050565b611138611132611864565b83611925565b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906132f9565b60405180910390fd5b61118384848484611c86565b50505050565b6060611194826117f8565b6111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90613299565b60405180910390fd5b60006111dd611ce2565b905060008151116111fd576040518060200160405280600081525061122b565b8061120784611d74565b600560405160200161121b93929190613004565b6040516020818303038152906040525b915050919050565b600060015482516008546112479190613449565b10611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906132b9565b60405180910390fd5b815160025461129691906134d0565b3410156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90613139565b60405180910390fd5b6000805b83518110156113415761132e848281518110611321577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611c5f565b91508061133a90613646565b90506112dc565b5080915050919050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690613219565b60405180910390fd5b8060028190555050565b6000600254905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613219565b60405180910390fd5b8047101561148e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114d4573d6000803e3d6000fd5b505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590613219565b60405180910390fd5b6001548260085461160f9190613449565b1061164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906132b9565b60405180910390fd5b6000805b838110156116795761166433611c5f565b9150808061167190613646565b915050611653565b5080915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613219565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561174b57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b81600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118df83610c5c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611930826117f8565b61196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613199565b60405180910390fd5b600061197a83610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119e957508373ffffffffffffffffffffffffffffffffffffffff166119d1846107fe565b73ffffffffffffffffffffffffffffffffffffffff16145b806119fa57506119f981856114d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a2382610c5c565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090613279565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613159565b60405180910390fd5b611af4838383611f21565b611aff60008261186c565b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4f919061352a565b925050819055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ba69190613449565b92505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806001600854611c719190613449565b9050611c7d8382611f26565b80915050919050565b611c91848484611a03565b611c9d84848484611f44565b611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd3906130d9565b60405180910390fd5b50505050565b606060048054611cf190613614565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1d90613614565b8015611d6a5780601f10611d3f57610100808354040283529160200191611d6a565b820191906000526020600020905b815481529060010190602001808311611d4d57829003601f168201915b5050505050905090565b60606000821415611dbc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f1c565b600082905060005b60008214611dee578080611dd790613646565b915050600a82611de7919061349f565b9150611dc4565b60008167ffffffffffffffff811115611e30577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e625781602001600182028036833780820191505090505b5090505b60008514611f1557600182611e7b919061352a565b9150600a85611e8a919061368f565b6030611e969190613449565b60f81b818381518110611ed2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f0e919061349f565b9450611e66565b8093505050505b919050565b505050565b611f408282604051806020016040528060008152506120db565b5050565b6000611f658473ffffffffffffffffffffffffffffffffffffffff16612136565b156120ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f8e611864565b8786866040518563ffffffff1660e01b8152600401611fb09493929190613050565b602060405180830381600087803b158015611fca57600080fd5b505af1925050508015611ffb57506040513d601f19601f82011682018060405250810190611ff891906127b4565b60015b61207e573d806000811461202b576040519150601f19603f3d011682016040523d82523d6000602084013e612030565b606091505b50600081511415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d906130d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120d3565b600190505b949350505050565b6120e58383612149565b6120f26000848484611f44565b612131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612128906130d9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613239565b60405180910390fd5b6121c2816117f8565b15612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f9906130f9565b60405180910390fd5b61220e60008383611f21565b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225e9190613449565b92505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860008282546122ca9190613449565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461233d90613614565b90600052602060002090601f01602090048101928261235f57600085556123a6565b82601f1061237857805160ff19168380011785556123a6565b828001600101855582156123a6579182015b828111156123a557825182559160200191906001019061238a565b5b5090506123b391906123b7565b5090565b5b808211156123d05760008160009055506001016123b8565b5090565b60006123e76123e284613365565b613334565b9050808382526020820190508285602086028201111561240657600080fd5b60005b85811015612436578161241c88826124bc565b845260208401935060208301925050600181019050612409565b5050509392505050565b600061245361244e84613391565b613334565b90508281526020810184848401111561246b57600080fd5b6124768482856135d2565b509392505050565b600061249161248c846133c1565b613334565b9050828152602081018484840111156124a957600080fd5b6124b48482856135d2565b509392505050565b6000813590506124cb8161378d565b92915050565b600082601f8301126124e257600080fd5b81356124f28482602086016123d4565b91505092915050565b60008135905061250a816137a4565b92915050565b60008135905061251f816137bb565b92915050565b600081519050612534816137bb565b92915050565b600082601f83011261254b57600080fd5b813561255b848260208601612440565b91505092915050565b600082601f83011261257557600080fd5b813561258584826020860161247e565b91505092915050565b60008135905061259d816137d2565b92915050565b6000602082840312156125b557600080fd5b60006125c3848285016124bc565b91505092915050565b600080604083850312156125df57600080fd5b60006125ed858286016124bc565b92505060206125fe858286016124bc565b9150509250929050565b60008060006060848603121561261d57600080fd5b600061262b868287016124bc565b935050602061263c868287016124bc565b925050604061264d8682870161258e565b9150509250925092565b6000806000806080858703121561266d57600080fd5b600061267b878288016124bc565b945050602061268c878288016124bc565b935050604061269d8782880161258e565b925050606085013567ffffffffffffffff8111156126ba57600080fd5b6126c68782880161253a565b91505092959194509250565b600080604083850312156126e557600080fd5b60006126f3858286016124bc565b9250506020612704858286016124fb565b9150509250929050565b6000806040838503121561272157600080fd5b600061272f858286016124bc565b92505060206127408582860161258e565b9150509250929050565b60006020828403121561275c57600080fd5b600082013567ffffffffffffffff81111561277657600080fd5b612782848285016124d1565b91505092915050565b60006020828403121561279d57600080fd5b60006127ab84828501612510565b91505092915050565b6000602082840312156127c657600080fd5b60006127d484828501612525565b91505092915050565b6000602082840312156127ef57600080fd5b600082013567ffffffffffffffff81111561280957600080fd5b61281584828501612564565b91505092915050565b60006020828403121561283057600080fd5b600061283e8482850161258e565b91505092915050565b6128508161355e565b82525050565b61285f81613570565b82525050565b600061287082613406565b61287a818561341c565b935061288a8185602086016135e1565b6128938161377c565b840191505092915050565b60006128a982613411565b6128b3818561342d565b93506128c38185602086016135e1565b6128cc8161377c565b840191505092915050565b60006128e282613411565b6128ec818561343e565b93506128fc8185602086016135e1565b80840191505092915050565b6000815461291581613614565b61291f818661343e565b9450600182166000811461293a576001811461294b5761297e565b60ff1983168652818601935061297e565b612954856133f1565b60005b8381101561297657815481890152600182019150602081019050612957565b838801955050505b50505092915050565b600061299460328361342d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006129fa601c8361342d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612a3a60238361342d565b91507f417474656d7074696e6720746f206d696e7420746f6f206d616e7920746f6b6560008301527f6e732e00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612aa0601a8361342d565b91507f496e73756666696369656e74206d6573736167652076616c75650000000000006000830152602082019050919050565b6000612ae060248361342d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b4660198361342d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612b86602c8361342d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612bec60388361342d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612c52602a8361342d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cb860298361342d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d1e602e8361342d565b91507f4f6e6c792074686520636f6e7472616374206f776e6572206d61792063616c6c60008301527f20746869732066756e6374696f6e0000000000000000000000000000000000006020830152604082019050919050565b6000612d8460208361342d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612dc4602c8361342d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e2a60298361342d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e90602f8361342d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612ef6601f8361342d565b91507f4d6178696d756d20737570706c7920686173206265656e2072656163686564006000830152602082019050919050565b6000612f3660218361342d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f9c60318361342d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b612ffe816135c8565b82525050565b600061301082866128d7565b915061301c82856128d7565b91506130288284612908565b9150819050949350505050565b600060208201905061304a6000830184612847565b92915050565b60006080820190506130656000830187612847565b6130726020830186612847565b61307f6040830185612ff5565b81810360608301526130918184612865565b905095945050505050565b60006020820190506130b16000830184612856565b92915050565b600060208201905081810360008301526130d1818461289e565b905092915050565b600060208201905081810360008301526130f281612987565b9050919050565b60006020820190508181036000830152613112816129ed565b9050919050565b6000602082019050818103600083015261313281612a2d565b9050919050565b6000602082019050818103600083015261315281612a93565b9050919050565b6000602082019050818103600083015261317281612ad3565b9050919050565b6000602082019050818103600083015261319281612b39565b9050919050565b600060208201905081810360008301526131b281612b79565b9050919050565b600060208201905081810360008301526131d281612bdf565b9050919050565b600060208201905081810360008301526131f281612c45565b9050919050565b6000602082019050818103600083015261321281612cab565b9050919050565b6000602082019050818103600083015261323281612d11565b9050919050565b6000602082019050818103600083015261325281612d77565b9050919050565b6000602082019050818103600083015261327281612db7565b9050919050565b6000602082019050818103600083015261329281612e1d565b9050919050565b600060208201905081810360008301526132b281612e83565b9050919050565b600060208201905081810360008301526132d281612ee9565b9050919050565b600060208201905081810360008301526132f281612f29565b9050919050565b6000602082019050818103600083015261331281612f8f565b9050919050565b600060208201905061332e6000830184612ff5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561335b5761335a61374d565b5b8060405250919050565b600067ffffffffffffffff8211156133805761337f61374d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133ac576133ab61374d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156133dc576133db61374d565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613454826135c8565b915061345f836135c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613494576134936136c0565b5b828201905092915050565b60006134aa826135c8565b91506134b5836135c8565b9250826134c5576134c46136ef565b5b828204905092915050565b60006134db826135c8565b91506134e6836135c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561351f5761351e6136c0565b5b828202905092915050565b6000613535826135c8565b9150613540836135c8565b925082821015613553576135526136c0565b5b828203905092915050565b6000613569826135a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135ff5780820151818401526020810190506135e4565b8381111561360e576000848401525b50505050565b6000600282049050600182168061362c57607f821691505b602082108114156136405761363f61371e565b5b50919050565b6000613651826135c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613684576136836136c0565b5b600182019050919050565b600061369a826135c8565b91506136a5836135c8565b9250826136b5576136b46136ef565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6137968161355e565b81146137a157600080fd5b50565b6137ad81613570565b81146137b857600080fd5b50565b6137c48161357c565b81146137cf57600080fd5b50565b6137db816135c8565b81146137e657600080fd5b5056fea264697066735822122005200cf12a8f20c7cfdf819ba609c6737216fbc711e2e932115ce3428f216f8564736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000015436f6f6c20446f6f646c654d6f7269204672656e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000443444d4600000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Cool DoodleMori Frens
Arg [1] : symbol_ (string): CDMF
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [3] : 436f6f6c20446f6f646c654d6f7269204672656e730000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 43444d4600000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
21086:16967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24991:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26160:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27816:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27341:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22810:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23036:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28875:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29322:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22701:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20717:112;;;;;;;;;;;;;:::i;:::-;;25767:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23134:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20472:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26329:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23552:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28196:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29578:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26504:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24456:463;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21526:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22921:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23235:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20837:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28594:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20567:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24991:355;25138:4;25195:25;25180:40;;;:11;:40;;;;:105;;;;25252:33;25237:48;;;:11;:48;;;;25180:105;:158;;;;25302:36;25326:11;25302:23;:36::i;:::-;25180:158;25160:178;;24991:355;;;:::o;26160:100::-;26214:13;26247:5;26240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26160:100;:::o;27816:308::-;27937:7;27984:16;27992:7;27984;:16::i;:::-;27962:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28092:15;:24;28108:7;28092:24;;;;;;;;;;;;;;;;;;;;;28085:31;;27816:308;;;:::o;27341:409::-;27422:13;27438:21;27451:7;27438:12;:21::i;:::-;27422:37;;27484:5;27478:11;;:2;:11;;;;27470:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27578:5;27562:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27587:37;27604:5;27611:12;:10;:12::i;:::-;27587:16;:37::i;:::-;27562:62;27540:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27721:21;27730:2;27734:7;27721:8;:21::i;:::-;27341:409;;;:::o;22810:103::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;22899:6:::1;22882:14;:23;;;;22810:103:::0;:::o;23036:90::-;23082:7;23109:9;;23102:16;;23036:90;:::o;28875:376::-;29084:41;29103:12;:10;:12::i;:::-;29117:7;29084:18;:41::i;:::-;29062:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29215:28;29225:4;29231:2;29235:7;29215:9;:28::i;:::-;28875:376;;;:::o;29322:185::-;29460:39;29477:4;29483:2;29487:7;29460:39;;;;;;;;;;;;:16;:39::i;:::-;29322:185;;;:::o;22701:101::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;22788:6:::1;22773:12;:21;;;;;;;;;;;;:::i;:::-;;22701:101:::0;:::o;20717:112::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;20782:6:::1;::::0;::::1;;;;;;;;20774:24;;:47;20799:21;20774:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20717:112::o:0;25767:326::-;25884:7;25909:13;25925:7;:16;25933:7;25925:16;;;;;;;;;;;;;;;;;;;;;25909:32;;25991:1;25974:19;;:5;:19;;;;25952:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26080:5;26073:12;;;25767:326;;;:::o;25410:295::-;25527:7;25591:1;25574:19;;:5;:19;;;;25552:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25681:9;:16;25691:5;25681:16;;;;;;;;;;;;;;;;25674:23;;25410:295;;;:::o;23134:93::-;23180:7;23207:12;;23200:19;;23134:93;:::o;20472:87::-;20518:7;20545:6;;;;;;;;;;;20538:13;;20472:87;:::o;26329:104::-;26385:13;26418:7;26411:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26329:104;:::o;23552:523::-;23625:7;23676:9;;23666:7;23653:12;;:20;;;;:::i;:::-;:32;23645:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23752:14;;23742:7;:24;23734:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23855:7;23840:14;;:22;;;;:::i;:::-;23827:9;:35;;23819:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23906:19;23946:6;23942:95;23962:7;23958:1;:11;23942:95;;;24005:17;24011:10;24005:5;:17::i;:::-;23991:31;;23971:3;;;;;:::i;:::-;;;;23942:95;;;;24056:11;24049:18;;;23552:523;;;:::o;28196:327::-;28343:12;:10;:12::i;:::-;28331:24;;:8;:24;;;;28323:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28443:8;28398:18;:32;28417:12;:10;:12::i;:::-;28398:32;;;;;;;;;;;;;;;:42;28431:8;28398:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28496:8;28467:48;;28482:12;:10;:12::i;:::-;28467:48;;;28506:8;28467:48;;;;;;:::i;:::-;;;;;;;;28196:327;;:::o;29578:365::-;29767:41;29786:12;:10;:12::i;:::-;29800:7;29767:18;:41::i;:::-;29745:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29896:39;29910:4;29916:2;29920:7;29929:5;29896:13;:39::i;:::-;29578:365;;;;:::o;26504:423::-;26602:13;26643:16;26651:7;26643;:16::i;:::-;26627:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26733:28;26764:10;:8;:10::i;:::-;26733:41;;26819:1;26794:14;26788:28;:32;:133;;;;;;;;;;;;;;;;;26856:14;26872:18;:7;:16;:18::i;:::-;26892:13;26839:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26788:133;26781:140;;;26504:423;;;:::o;24456:463::-;24526:7;24589:9;;24569:10;:17;24554:12;;:32;;;;:::i;:::-;:44;24546:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24681:10;:17;24666:14;;:32;;;;:::i;:::-;24653:9;:45;;24645:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24742:19;24782:6;24778:103;24796:10;:17;24794:1;:19;24778:103;;;24849:20;24855:10;24866:1;24855:13;;;;;;;;;;;;;;;;;;;;;;24849:5;:20::i;:::-;24835:34;;24815:3;;;;:::i;:::-;;;24778:103;;;;24898:11;24891:18;;;24456:463;;;:::o;21526:31::-;;;;:::o;22921:107::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;23012:8:::1;22995:14;:25;;;;22921:107:::0;:::o;23235:97::-;23283:7;23310:14;;23303:21;;23235:97;:::o;20837:213::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;20986:7:::1;20961:21;:32;;20953:41;;;::::0;::::1;;21013:10;21005:28;;:37;21034:7;21005:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20837:213:::0;;:::o;28594:214::-;28736:4;28765:18;:25;28784:5;28765:25;;;;;;;;;;;;;;;:35;28791:8;28765:35;;;;;;;;;;;;;;;;;;;;;;;;;28758:42;;28594:214;;;;:::o;24083:365::-;24163:7;20364:6;;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;24216:9:::1;;24206:7;24191:12;;:22;;;;:::i;:::-;:34;24183:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24282:19;24322:6:::0;24318:92:::1;24338:7;24334:1;:11;24318:92;;;24381:17;24387:10;24381:5;:17::i;:::-;24367:31;;24347:3;;;;;:::i;:::-;;;;24318:92;;;;24429:11;24422:18;;;24083:365:::0;;;:::o;20567:142::-;20364:6;;;;;;;;;;20350:20;;:10;:20;;;20328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;20670:1:::1;20650:22;;:8;:22;;;;20642:31;;;::::0;::::1;;20693:8;20684:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20567:142:::0;:::o;19948:207::-;20078:4;20122:25;20107:40;;;:11;:40;;;;20100:47;;19948:207;;;:::o;31490:127::-;31555:4;31607:1;31579:30;;:7;:16;31587:7;31579:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31572:37;;31490:127;;;:::o;16963:98::-;17016:7;17043:10;17036:17;;16963:98;:::o;35635:172::-;35737:2;35710:15;:24;35726:7;35710:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35791:7;35787:2;35755:44;;35764:21;35777:7;35764:12;:21::i;:::-;35755:44;;;;;;;;;;;;35635:172;;:::o;31784:450::-;31913:4;31957:16;31965:7;31957;:16::i;:::-;31935:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32056:13;32072:21;32085:7;32072:12;:21::i;:::-;32056:37;;32123:5;32112:16;;:7;:16;;;:64;;;;32169:7;32145:31;;:20;32157:7;32145:11;:20::i;:::-;:31;;;32112:64;:113;;;;32193:32;32210:5;32217:7;32193:16;:32::i;:::-;32112:113;32104:122;;;31784:450;;;;:::o;34904:613::-;35075:4;35050:29;;:21;35063:7;35050:12;:21::i;:::-;:29;;;35028:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;35181:1;35167:16;;:2;:16;;;;35159:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35237:39;35258:4;35264:2;35268:7;35237:20;:39::i;:::-;35341:29;35358:1;35362:7;35341:8;:29::i;:::-;35402:1;35383:9;:15;35393:4;35383:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35431:1;35414:9;:13;35424:2;35414:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35462:2;35443:7;:16;35451:7;35443:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35501:7;35497:2;35482:27;;35491:4;35482:27;;;;;;;;;;;;34904:613;;;:::o;23340:204::-;23404:7;23424:19;23461:1;23446:12;;:16;;;;:::i;:::-;23424:38;;23475:30;23485:6;23493:11;23475:9;:30::i;:::-;23525:11;23518:18;;;23340:204;;;:::o;30825:352::-;30982:28;30992:4;30998:2;31002:7;30982:9;:28::i;:::-;31043:48;31066:4;31072:2;31076:7;31085:5;31043:22;:48::i;:::-;31021:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30825:352;;;;:::o;27175:104::-;27226:13;27259:12;27252:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27175:104;:::o;17430:723::-;17486:13;17716:1;17707:5;:10;17703:53;;;17734:10;;;;;;;;;;;;;;;;;;;;;17703:53;17766:12;17781:5;17766:20;;17797:14;17822:78;17837:1;17829:4;:9;17822:78;;17855:8;;;;;:::i;:::-;;;;17886:2;17878:10;;;;;:::i;:::-;;;17822:78;;;17910:19;17942:6;17932:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17910:39;;17960:154;17976:1;17967:5;:10;17960:154;;18004:1;17994:11;;;;;:::i;:::-;;;18071:2;18063:5;:10;;;;:::i;:::-;18050:2;:24;;;;:::i;:::-;18037:39;;18020:6;18027;18020:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18100:2;18091:11;;;;;:::i;:::-;;;17960:154;;;18138:6;18124:21;;;;;17430:723;;;;:::o;37924:126::-;;;;:::o;32576:110::-;32652:26;32662:2;32666:7;32652:26;;;;;;;;;;;;:9;:26::i;:::-;32576:110;;:::o;36372:980::-;36527:4;36548:15;:2;:13;;;:15::i;:::-;36544:801;;;36617:2;36601:36;;;36660:12;:10;:12::i;:::-;36695:4;36722:7;36752:5;36601:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36580:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36976:1;36959:6;:13;:18;36955:320;;;37002:108;;;;;;;;;;:::i;:::-;;;;;;;;36955:320;37225:6;37219:13;37210:6;37206:2;37202:15;37195:38;36580:710;36850:41;;;36840:51;;;:6;:51;;;;36833:58;;;;;36544:801;37329:4;37322:11;;36372:980;;;;;;;:::o;32913:321::-;33043:18;33049:2;33053:7;33043:5;:18::i;:::-;33094:54;33125:1;33129:2;33133:7;33142:5;33094:22;:54::i;:::-;33072:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32913:321;;;:::o;8596:387::-;8656:4;8864:12;8931:7;8919:20;8911:28;;8974:1;8967:4;:8;8960:15;;;8596:387;;;:::o;33570:410::-;33664:1;33650:16;;:2;:16;;;;33642:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33723:16;33731:7;33723;:16::i;:::-;33722:17;33714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33785:45;33814:1;33818:2;33822:7;33785:20;:45::i;:::-;33860:1;33843:9;:13;33853:2;33843:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33891:2;33872:7;:16;33880:7;33872:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33920:1;33904:12;;:17;;;;;;;:::i;:::-;;;;;;;;33964:7;33960:2;33939:33;;33956:1;33939:33;;;;;;;;;;;;33570:410;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:260::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6429:1;6454:52;6498:7;6489:6;6478:9;6474:22;6454:52;:::i;:::-;6444:62;;6400:116;6328:195;;;;:::o;6529:282::-;;6647:2;6635:9;6626:7;6622:23;6618:32;6615:2;;;6663:1;6660;6653:12;6615:2;6706:1;6731:63;6786:7;6777:6;6766:9;6762:22;6731:63;:::i;:::-;6721:73;;6677:127;6605:206;;;;:::o;6817:375::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6951:1;6948;6941:12;6903:2;7022:1;7011:9;7007:17;6994:31;7052:18;7044:6;7041:30;7038:2;;;7084:1;7081;7074:12;7038:2;7112:63;7167:7;7158:6;7147:9;7143:22;7112:63;:::i;:::-;7102:73;;6965:220;6893:299;;;;:::o;7198:262::-;;7306:2;7294:9;7285:7;7281:23;7277:32;7274:2;;;7322:1;7319;7312:12;7274:2;7365:1;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7336:117;7264:196;;;;:::o;7466:118::-;7553:24;7571:5;7553:24;:::i;:::-;7548:3;7541:37;7531:53;;:::o;7590:109::-;7671:21;7686:5;7671:21;:::i;:::-;7666:3;7659:34;7649:50;;:::o;7705:360::-;;7819:38;7851:5;7819:38;:::i;:::-;7873:70;7936:6;7931:3;7873:70;:::i;:::-;7866:77;;7952:52;7997:6;7992:3;7985:4;7978:5;7974:16;7952:52;:::i;:::-;8029:29;8051:6;8029:29;:::i;:::-;8024:3;8020:39;8013:46;;7795:270;;;;;:::o;8071:364::-;;8187:39;8220:5;8187:39;:::i;:::-;8242:71;8306:6;8301:3;8242:71;:::i;:::-;8235:78;;8322:52;8367:6;8362:3;8355:4;8348:5;8344:16;8322:52;:::i;:::-;8399:29;8421:6;8399:29;:::i;:::-;8394:3;8390:39;8383:46;;8163:272;;;;;:::o;8441:377::-;;8575:39;8608:5;8575:39;:::i;:::-;8630:89;8712:6;8707:3;8630:89;:::i;:::-;8623:96;;8728:52;8773:6;8768:3;8761:4;8754:5;8750:16;8728:52;:::i;:::-;8805:6;8800:3;8796:16;8789:23;;8551:267;;;;;:::o;8848:845::-;;8988:5;8982:12;9017:36;9043:9;9017:36;:::i;:::-;9069:89;9151:6;9146:3;9069:89;:::i;:::-;9062:96;;9189:1;9178:9;9174:17;9205:1;9200:137;;;;9351:1;9346:341;;;;9167:520;;9200:137;9284:4;9280:9;9269;9265:25;9260:3;9253:38;9320:6;9315:3;9311:16;9304:23;;9200:137;;9346:341;9413:38;9445:5;9413:38;:::i;:::-;9473:1;9487:154;9501:6;9498:1;9495:13;9487:154;;;9575:7;9569:14;9565:1;9560:3;9556:11;9549:35;9625:1;9616:7;9612:15;9601:26;;9523:4;9520:1;9516:12;9511:17;;9487:154;;;9670:6;9665:3;9661:16;9654:23;;9353:334;;9167:520;;8955:738;;;;;;:::o;9699:382::-;;9862:67;9926:2;9921:3;9862:67;:::i;:::-;9855:74;;9959:34;9955:1;9950:3;9946:11;9939:55;10025:20;10020:2;10015:3;10011:12;10004:42;10072:2;10067:3;10063:12;10056:19;;9845:236;;;:::o;10087:326::-;;10250:67;10314:2;10309:3;10250:67;:::i;:::-;10243:74;;10347:30;10343:1;10338:3;10334:11;10327:51;10404:2;10399:3;10395:12;10388:19;;10233:180;;;:::o;10419:367::-;;10582:67;10646:2;10641:3;10582:67;:::i;:::-;10575:74;;10679:34;10675:1;10670:3;10666:11;10659:55;10745:5;10740:2;10735:3;10731:12;10724:27;10777:2;10772:3;10768:12;10761:19;;10565:221;;;:::o;10792:324::-;;10955:67;11019:2;11014:3;10955:67;:::i;:::-;10948:74;;11052:28;11048:1;11043:3;11039:11;11032:49;11107:2;11102:3;11098:12;11091:19;;10938:178;;;:::o;11122:368::-;;11285:67;11349:2;11344:3;11285:67;:::i;:::-;11278:74;;11382:34;11378:1;11373:3;11369:11;11362:55;11448:6;11443:2;11438:3;11434:12;11427:28;11481:2;11476:3;11472:12;11465:19;;11268:222;;;:::o;11496:323::-;;11659:67;11723:2;11718:3;11659:67;:::i;:::-;11652:74;;11756:27;11752:1;11747:3;11743:11;11736:48;11810:2;11805:3;11801:12;11794:19;;11642:177;;;:::o;11825:376::-;;11988:67;12052:2;12047:3;11988:67;:::i;:::-;11981:74;;12085:34;12081:1;12076:3;12072:11;12065:55;12151:14;12146:2;12141:3;12137:12;12130:36;12192:2;12187:3;12183:12;12176:19;;11971:230;;;:::o;12207:388::-;;12370:67;12434:2;12429:3;12370:67;:::i;:::-;12363:74;;12467:34;12463:1;12458:3;12454:11;12447:55;12533:26;12528:2;12523:3;12519:12;12512:48;12586:2;12581:3;12577:12;12570:19;;12353:242;;;:::o;12601:374::-;;12764:67;12828:2;12823:3;12764:67;:::i;:::-;12757:74;;12861:34;12857:1;12852:3;12848:11;12841:55;12927:12;12922:2;12917:3;12913:12;12906:34;12966:2;12961:3;12957:12;12950:19;;12747:228;;;:::o;12981:373::-;;13144:67;13208:2;13203:3;13144:67;:::i;:::-;13137:74;;13241:34;13237:1;13232:3;13228:11;13221:55;13307:11;13302:2;13297:3;13293:12;13286:33;13345:2;13340:3;13336:12;13329:19;;13127:227;;;:::o;13360:378::-;;13523:67;13587:2;13582:3;13523:67;:::i;:::-;13516:74;;13620:34;13616:1;13611:3;13607:11;13600:55;13686:16;13681:2;13676:3;13672:12;13665:38;13729:2;13724:3;13720:12;13713:19;;13506:232;;;:::o;13744:330::-;;13907:67;13971:2;13966:3;13907:67;:::i;:::-;13900:74;;14004:34;14000:1;13995:3;13991:11;13984:55;14065:2;14060:3;14056:12;14049:19;;13890:184;;;:::o;14080:376::-;;14243:67;14307:2;14302:3;14243:67;:::i;:::-;14236:74;;14340:34;14336:1;14331:3;14327:11;14320:55;14406:14;14401:2;14396:3;14392:12;14385:36;14447:2;14442:3;14438:12;14431:19;;14226:230;;;:::o;14462:373::-;;14625:67;14689:2;14684:3;14625:67;:::i;:::-;14618:74;;14722:34;14718:1;14713:3;14709:11;14702:55;14788:11;14783:2;14778:3;14774:12;14767:33;14826:2;14821:3;14817:12;14810:19;;14608:227;;;:::o;14841:379::-;;15004:67;15068:2;15063:3;15004:67;:::i;:::-;14997:74;;15101:34;15097:1;15092:3;15088:11;15081:55;15167:17;15162:2;15157:3;15153:12;15146:39;15211:2;15206:3;15202:12;15195:19;;14987:233;;;:::o;15226:329::-;;15389:67;15453:2;15448:3;15389:67;:::i;:::-;15382:74;;15486:33;15482:1;15477:3;15473:11;15466:54;15546:2;15541:3;15537:12;15530:19;;15372:183;;;:::o;15561:365::-;;15724:67;15788:2;15783:3;15724:67;:::i;:::-;15717:74;;15821:34;15817:1;15812:3;15808:11;15801:55;15887:3;15882:2;15877:3;15873:12;15866:25;15917:2;15912:3;15908:12;15901:19;;15707:219;;;:::o;15932:381::-;;16095:67;16159:2;16154:3;16095:67;:::i;:::-;16088:74;;16192:34;16188:1;16183:3;16179:11;16172:55;16258:19;16253:2;16248:3;16244:12;16237:41;16304:2;16299:3;16295:12;16288:19;;16078:235;;;:::o;16319:118::-;16406:24;16424:5;16406:24;:::i;:::-;16401:3;16394:37;16384:53;;:::o;16443:589::-;;16690:95;16781:3;16772:6;16690:95;:::i;:::-;16683:102;;16802:95;16893:3;16884:6;16802:95;:::i;:::-;16795:102;;16914:92;17002:3;16993:6;16914:92;:::i;:::-;16907:99;;17023:3;17016:10;;16672:360;;;;;;:::o;17038:222::-;;17169:2;17158:9;17154:18;17146:26;;17182:71;17250:1;17239:9;17235:17;17226:6;17182:71;:::i;:::-;17136:124;;;;:::o;17266:640::-;;17499:3;17488:9;17484:19;17476:27;;17513:71;17581:1;17570:9;17566:17;17557:6;17513:71;:::i;:::-;17594:72;17662:2;17651:9;17647:18;17638:6;17594:72;:::i;:::-;17676;17744:2;17733:9;17729:18;17720:6;17676:72;:::i;:::-;17795:9;17789:4;17785:20;17780:2;17769:9;17765:18;17758:48;17823:76;17894:4;17885:6;17823:76;:::i;:::-;17815:84;;17466:440;;;;;;;:::o;17912:210::-;;18037:2;18026:9;18022:18;18014:26;;18050:65;18112:1;18101:9;18097:17;18088:6;18050:65;:::i;:::-;18004:118;;;;:::o;18128:313::-;;18279:2;18268:9;18264:18;18256:26;;18328:9;18322:4;18318:20;18314:1;18303:9;18299:17;18292:47;18356:78;18429:4;18420:6;18356:78;:::i;:::-;18348:86;;18246:195;;;;:::o;18447:419::-;;18651:2;18640:9;18636:18;18628:26;;18700:9;18694:4;18690:20;18686:1;18675:9;18671:17;18664:47;18728:131;18854:4;18728:131;:::i;:::-;18720:139;;18618:248;;;:::o;18872:419::-;;19076:2;19065:9;19061:18;19053:26;;19125:9;19119:4;19115:20;19111:1;19100:9;19096:17;19089:47;19153:131;19279:4;19153:131;:::i;:::-;19145:139;;19043:248;;;:::o;19297:419::-;;19501:2;19490:9;19486:18;19478:26;;19550:9;19544:4;19540:20;19536:1;19525:9;19521:17;19514:47;19578:131;19704:4;19578:131;:::i;:::-;19570:139;;19468:248;;;:::o;19722:419::-;;19926:2;19915:9;19911:18;19903:26;;19975:9;19969:4;19965:20;19961:1;19950:9;19946:17;19939:47;20003:131;20129:4;20003:131;:::i;:::-;19995:139;;19893:248;;;:::o;20147:419::-;;20351:2;20340:9;20336:18;20328:26;;20400:9;20394:4;20390:20;20386:1;20375:9;20371:17;20364:47;20428:131;20554:4;20428:131;:::i;:::-;20420:139;;20318:248;;;:::o;20572:419::-;;20776:2;20765:9;20761:18;20753:26;;20825:9;20819:4;20815:20;20811:1;20800:9;20796:17;20789:47;20853:131;20979:4;20853:131;:::i;:::-;20845:139;;20743:248;;;:::o;20997:419::-;;21201:2;21190:9;21186:18;21178:26;;21250:9;21244:4;21240:20;21236:1;21225:9;21221:17;21214:47;21278:131;21404:4;21278:131;:::i;:::-;21270:139;;21168:248;;;:::o;21422:419::-;;21626:2;21615:9;21611:18;21603:26;;21675:9;21669:4;21665:20;21661:1;21650:9;21646:17;21639:47;21703:131;21829:4;21703:131;:::i;:::-;21695:139;;21593:248;;;:::o;21847:419::-;;22051:2;22040:9;22036:18;22028:26;;22100:9;22094:4;22090:20;22086:1;22075:9;22071:17;22064:47;22128:131;22254:4;22128:131;:::i;:::-;22120:139;;22018:248;;;:::o;22272:419::-;;22476:2;22465:9;22461:18;22453:26;;22525:9;22519:4;22515:20;22511:1;22500:9;22496:17;22489:47;22553:131;22679:4;22553:131;:::i;:::-;22545:139;;22443:248;;;:::o;22697:419::-;;22901:2;22890:9;22886:18;22878:26;;22950:9;22944:4;22940:20;22936:1;22925:9;22921:17;22914:47;22978:131;23104:4;22978:131;:::i;:::-;22970:139;;22868:248;;;:::o;23122:419::-;;23326:2;23315:9;23311:18;23303:26;;23375:9;23369:4;23365:20;23361:1;23350:9;23346:17;23339:47;23403:131;23529:4;23403:131;:::i;:::-;23395:139;;23293:248;;;:::o;23547:419::-;;23751:2;23740:9;23736:18;23728:26;;23800:9;23794:4;23790:20;23786:1;23775:9;23771:17;23764:47;23828:131;23954:4;23828:131;:::i;:::-;23820:139;;23718:248;;;:::o;23972:419::-;;24176:2;24165:9;24161:18;24153:26;;24225:9;24219:4;24215:20;24211:1;24200:9;24196:17;24189:47;24253:131;24379:4;24253:131;:::i;:::-;24245:139;;24143:248;;;:::o;24397:419::-;;24601:2;24590:9;24586:18;24578:26;;24650:9;24644:4;24640:20;24636:1;24625:9;24621:17;24614:47;24678:131;24804:4;24678:131;:::i;:::-;24670:139;;24568:248;;;:::o;24822:419::-;;25026:2;25015:9;25011:18;25003:26;;25075:9;25069:4;25065:20;25061:1;25050:9;25046:17;25039:47;25103:131;25229:4;25103:131;:::i;:::-;25095:139;;24993:248;;;:::o;25247:419::-;;25451:2;25440:9;25436:18;25428:26;;25500:9;25494:4;25490:20;25486:1;25475:9;25471:17;25464:47;25528:131;25654:4;25528:131;:::i;:::-;25520:139;;25418:248;;;:::o;25672:419::-;;25876:2;25865:9;25861:18;25853:26;;25925:9;25919:4;25915:20;25911:1;25900:9;25896:17;25889:47;25953:131;26079:4;25953:131;:::i;:::-;25945:139;;25843:248;;;:::o;26097:222::-;;26228:2;26217:9;26213:18;26205:26;;26241:71;26309:1;26298:9;26294:17;26285:6;26241:71;:::i;:::-;26195:124;;;;:::o;26325:283::-;;26391:2;26385:9;26375:19;;26433:4;26425:6;26421:17;26540:6;26528:10;26525:22;26504:18;26492:10;26489:34;26486:62;26483:2;;;26551:18;;:::i;:::-;26483:2;26591:10;26587:2;26580:22;26365:243;;;;:::o;26614:311::-;;26781:18;26773:6;26770:30;26767:2;;;26803:18;;:::i;:::-;26767:2;26853:4;26845:6;26841:17;26833:25;;26913:4;26907;26903:15;26895:23;;26696:229;;;:::o;26931:331::-;;27082:18;27074:6;27071:30;27068:2;;;27104:18;;:::i;:::-;27068:2;27189:4;27185:9;27178:4;27170:6;27166:17;27162:33;27154:41;;27250:4;27244;27240:15;27232:23;;26997:265;;;:::o;27268:332::-;;27420:18;27412:6;27409:30;27406:2;;;27442:18;;:::i;:::-;27406:2;27527:4;27523:9;27516:4;27508:6;27504:17;27500:33;27492:41;;27588:4;27582;27578:15;27570:23;;27335:265;;;:::o;27606:141::-;;27678:3;27670:11;;27701:3;27698:1;27691:14;27735:4;27732:1;27722:18;27714:26;;27660:87;;;:::o;27753:98::-;;27838:5;27832:12;27822:22;;27811:40;;;:::o;27857:99::-;;27943:5;27937:12;27927:22;;27916:40;;;:::o;27962:168::-;;28079:6;28074:3;28067:19;28119:4;28114:3;28110:14;28095:29;;28057:73;;;;:::o;28136:169::-;;28254:6;28249:3;28242:19;28294:4;28289:3;28285:14;28270:29;;28232:73;;;;:::o;28311:148::-;;28450:3;28435:18;;28425:34;;;;:::o;28465:305::-;;28524:20;28542:1;28524:20;:::i;:::-;28519:25;;28558:20;28576:1;28558:20;:::i;:::-;28553:25;;28712:1;28644:66;28640:74;28637:1;28634:81;28631:2;;;28718:18;;:::i;:::-;28631:2;28762:1;28759;28755:9;28748:16;;28509:261;;;;:::o;28776:185::-;;28833:20;28851:1;28833:20;:::i;:::-;28828:25;;28867:20;28885:1;28867:20;:::i;:::-;28862:25;;28906:1;28896:2;;28911:18;;:::i;:::-;28896:2;28953:1;28950;28946:9;28941:14;;28818:143;;;;:::o;28967:348::-;;29030:20;29048:1;29030:20;:::i;:::-;29025:25;;29064:20;29082:1;29064:20;:::i;:::-;29059:25;;29252:1;29184:66;29180:74;29177:1;29174:81;29169:1;29162:9;29155:17;29151:105;29148:2;;;29259:18;;:::i;:::-;29148:2;29307:1;29304;29300:9;29289:20;;29015:300;;;;:::o;29321:191::-;;29381:20;29399:1;29381:20;:::i;:::-;29376:25;;29415:20;29433:1;29415:20;:::i;:::-;29410:25;;29454:1;29451;29448:8;29445:2;;;29459:18;;:::i;:::-;29445:2;29504:1;29501;29497:9;29489:17;;29366:146;;;;:::o;29518:96::-;;29584:24;29602:5;29584:24;:::i;:::-;29573:35;;29563:51;;;:::o;29620:90::-;;29697:5;29690:13;29683:21;29672:32;;29662:48;;;:::o;29716:149::-;;29792:66;29785:5;29781:78;29770:89;;29760:105;;;:::o;29871:126::-;;29948:42;29941:5;29937:54;29926:65;;29916:81;;;:::o;30003:77::-;;30069:5;30058:16;;30048:32;;;:::o;30086:154::-;30170:6;30165:3;30160;30147:30;30232:1;30223:6;30218:3;30214:16;30207:27;30137:103;;;:::o;30246:307::-;30314:1;30324:113;30338:6;30335:1;30332:13;30324:113;;;30423:1;30418:3;30414:11;30408:18;30404:1;30399:3;30395:11;30388:39;30360:2;30357:1;30353:10;30348:15;;30324:113;;;30455:6;30452:1;30449:13;30446:2;;;30535:1;30526:6;30521:3;30517:16;30510:27;30446:2;30295:258;;;;:::o;30559:320::-;;30640:1;30634:4;30630:12;30620:22;;30687:1;30681:4;30677:12;30708:18;30698:2;;30764:4;30756:6;30752:17;30742:27;;30698:2;30826;30818:6;30815:14;30795:18;30792:38;30789:2;;;30845:18;;:::i;:::-;30789:2;30610:269;;;;:::o;30885:233::-;;30947:24;30965:5;30947:24;:::i;:::-;30938:33;;30993:66;30986:5;30983:77;30980:2;;;31063:18;;:::i;:::-;30980:2;31110:1;31103:5;31099:13;31092:20;;30928:190;;;:::o;31124:176::-;;31173:20;31191:1;31173:20;:::i;:::-;31168:25;;31207:20;31225:1;31207:20;:::i;:::-;31202:25;;31246:1;31236:2;;31251:18;;:::i;:::-;31236:2;31292:1;31289;31285:9;31280:14;;31158:142;;;;:::o;31306:180::-;31354:77;31351:1;31344:88;31451:4;31448:1;31441:15;31475:4;31472:1;31465:15;31492:180;31540:77;31537:1;31530:88;31637:4;31634:1;31627:15;31661:4;31658:1;31651:15;31678:180;31726:77;31723:1;31716:88;31823:4;31820:1;31813:15;31847:4;31844:1;31837:15;31864:180;31912:77;31909:1;31902:88;32009:4;32006:1;31999:15;32033:4;32030:1;32023:15;32050:102;;32142:2;32138:7;32133:2;32126:5;32122:14;32118:28;32108:38;;32098:54;;;:::o;32158:122::-;32231:24;32249:5;32231:24;:::i;:::-;32224:5;32221:35;32211:2;;32270:1;32267;32260:12;32211:2;32201:79;:::o;32286:116::-;32356:21;32371:5;32356:21;:::i;:::-;32349:5;32346:32;32336:2;;32392:1;32389;32382:12;32336:2;32326:76;:::o;32408:120::-;32480:23;32497:5;32480:23;:::i;:::-;32473:5;32470:34;32460:2;;32518:1;32515;32508:12;32460:2;32450:78;:::o;32534:122::-;32607:24;32625:5;32607:24;:::i;:::-;32600:5;32597:35;32587:2;;32646:1;32643;32636:12;32587:2;32577:79;:::o
Swarm Source
ipfs://05200cf12a8f20c7cfdf819ba609c6737216fbc711e2e932115ce3428f216f85
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.