ERC-721
Overview
Max Total Supply
1,265 RAWR
Holders
224
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RAWRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DoodleRawrs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-18 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: Doodlerawrs.sol pragma solidity ^0.8.0; contract DoodleRawrs is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokensMinted; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.02 ether; uint256 public freeSupply = 1000; uint256 public maxSupply = 3000; uint256 public maxMintAmount = 10; bool public paused = false; address public giveaway = 0x39Db30EAcD019fe0c1B1F87B780f6ee48325396f; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); // Mint first to giveaway address mintFree(giveaway, 1); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // Public Mint Functions function mint(address _to, uint256 _mintAmount) public payable { require(tx.origin == _msgSender(), "Only EOA"); require(!paused); require(_mintAmount > 0); require(_tokensMinted.current() + _mintAmount <= maxSupply); require(_mintAmount <= maxMintAmount); require(msg.value >= cost * _mintAmount, "Not enough ether"); for (uint256 i = 1; i <= _mintAmount; i++) { _tokensMinted.increment(); _safeMint(_to, _tokensMinted.current()); } } function mintFree(address _to, uint256 _mintAmount) public payable { require(tx.origin == _msgSender(), "Only EOA"); require(!paused); require(_mintAmount > 0); require(_tokensMinted.current() + _mintAmount <= freeSupply); for (uint256 i = 1; i <= _mintAmount; i++) { _tokensMinted.increment(); _safeMint(_to, _tokensMinted.current()); } } 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)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function totalSupply() public view returns (uint256) { return _tokensMinted.current(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeSupply","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":[],"name":"giveaway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintFree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060099080519060200190620000519291906200097a565b5066470de4df820000600a556103e8600b55610bb8600c55600a600d556000600e60006101000a81548160ff0219169083151502179055507339db30eacd019fe0c1b1f87b780f6ee48325396f600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000eb57600080fd5b5060405162004c9d38038062004c9d833981810160405281019062000111919062000af1565b828281600090805190602001906200012b9291906200097a565b508060019080519060200190620001449291906200097a565b505050620001676200015b620001b660201b60201c565b620001be60201b60201c565b62000178816200028460201b60201c565b620001ad600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200032f60201b60201c565b505050620011d0565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000294620001b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ba6200047460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030a9062000dac565b60405180910390fd5b80600890805190602001906200032b9291906200097a565b5050565b6200033f620001b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614620003af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a69062000d68565b60405180910390fd5b600e60009054906101000a900460ff1615620003ca57600080fd5b60008111620003d857600080fd5b600b5481620003f360076200049e60201b620017dc1760201c565b620003ff919062000e5a565b11156200040b57600080fd5b6000600190505b8181116200046f57620004316007620004ac60201b620017ea1760201c565b62000459836200044d60076200049e60201b620017dc1760201c565b620004c260201b60201c565b8080620004669062000fc3565b91505062000412565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b6001816000016000828254019250508190555050565b620004e4828260405180602001604052806000815250620004e860201b60201c565b5050565b620004fa83836200055660201b60201c565b6200050f60008484846200073c60201b60201c565b62000551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005489062000d24565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c09062000d8a565b60405180910390fd5b620005da81620008f660201b60201c565b156200061d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006149062000d46565b60405180910390fd5b62000631600083836200096260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000683919062000e5a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200076a8473ffffffffffffffffffffffffffffffffffffffff166200096760201b620018001760201c565b15620008e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079c620001b660201b60201c565b8786866040518563ffffffff1660e01b8152600401620007c0949392919062000cd0565b602060405180830381600087803b158015620007db57600080fd5b505af19250505080156200080f57506040513d601f19601f820116820180604052508101906200080c919062000abf565b60015b62000898573d806000811462000842576040519150601f19603f3d011682016040523d82523d6000602084013e62000847565b606091505b5060008151141562000890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008879062000d24565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008ee565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620009889062000f57565b90600052602060002090601f016020900481019282620009ac5760008555620009f8565b82601f10620009c757805160ff1916838001178555620009f8565b82800160010185558215620009f8579182015b82811115620009f7578251825591602001919060010190620009da565b5b50905062000a07919062000a0b565b5090565b5b8082111562000a2657600081600090555060010162000a0c565b5090565b600062000a4162000a3b8462000df7565b62000dce565b90508281526020810184848401111562000a605762000a5f620010a3565b5b62000a6d84828562000f21565b509392505050565b60008151905062000a8681620011b6565b92915050565b600082601f83011262000aa45762000aa36200109e565b5b815162000ab684826020860162000a2a565b91505092915050565b60006020828403121562000ad85762000ad7620010ad565b5b600062000ae88482850162000a75565b91505092915050565b60008060006060848603121562000b0d5762000b0c620010ad565b5b600084015167ffffffffffffffff81111562000b2e5762000b2d620010a8565b5b62000b3c8682870162000a8c565b935050602084015167ffffffffffffffff81111562000b605762000b5f620010a8565b5b62000b6e8682870162000a8c565b925050604084015167ffffffffffffffff81111562000b925762000b91620010a8565b5b62000ba08682870162000a8c565b9150509250925092565b62000bb58162000eb7565b82525050565b600062000bc88262000e2d565b62000bd4818562000e38565b935062000be681856020860162000f21565b62000bf181620010b2565b840191505092915050565b600062000c0b60328362000e49565b915062000c1882620010c3565b604082019050919050565b600062000c32601c8362000e49565b915062000c3f8262001112565b602082019050919050565b600062000c5960088362000e49565b915062000c66826200113b565b602082019050919050565b600062000c8060208362000e49565b915062000c8d8262001164565b602082019050919050565b600062000ca760208362000e49565b915062000cb4826200118d565b602082019050919050565b62000cca8162000f17565b82525050565b600060808201905062000ce7600083018762000baa565b62000cf6602083018662000baa565b62000d05604083018562000cbf565b818103606083015262000d19818462000bbb565b905095945050505050565b6000602082019050818103600083015262000d3f8162000bfc565b9050919050565b6000602082019050818103600083015262000d618162000c23565b9050919050565b6000602082019050818103600083015262000d838162000c4a565b9050919050565b6000602082019050818103600083015262000da58162000c71565b9050919050565b6000602082019050818103600083015262000dc78162000c98565b9050919050565b600062000dda62000ded565b905062000de8828262000f8d565b919050565b6000604051905090565b600067ffffffffffffffff82111562000e155762000e146200106f565b5b62000e2082620010b2565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e678262000f17565b915062000e748362000f17565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eac5762000eab62001011565b5b828201905092915050565b600062000ec48262000ef7565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f4157808201518184015260208101905062000f24565b8381111562000f51576000848401525b50505050565b6000600282049050600182168062000f7057607f821691505b6020821081141562000f875762000f8662001040565b5b50919050565b62000f9882620010b2565b810181811067ffffffffffffffff8211171562000fba5762000fb96200106f565b5b80604052505050565b600062000fd08262000f17565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001006576200100562001011565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620011c18162000ecb565b8114620011cd57600080fd5b50565b613abd80620011e06000396000f3fe6080604052600436106101ee5760003560e01c80636352211e1161010d578063adf66d31116100a0578063d5abeb011161006f578063d5abeb011461069c578063da3ef23f146106c7578063e985e9c5146106f0578063f2fde38b1461072d578063f9850b7214610756576101ee565b8063adf66d31146105ef578063b88d4fde1461060b578063c668286214610634578063c87b56dd1461065f576101ee565b80637f00c7a6116100dc5780637f00c7a6146105475780638da5cb5b1461057057806395d89b411461059b578063a22cb465146105c6576101ee565b80636352211e1461048b5780636c0360eb146104c857806370a08231146104f3578063715018a614610530576101ee565b806323b872dd1161018557806342842e0e1161015457806342842e0e146103e557806344a0d68a1461040e57806355f804b3146104375780635c975abb14610460576101ee565b806323b872dd1461036b57806324a6ab0c146103945780633ccfd60b146103bf57806340c10f19146103c9576101ee565b8063095ea7b3116101c1578063095ea7b3146102c157806313faede6146102ea57806318160ddd14610315578063239c70ae14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612925565b610781565b6040516102279190612e52565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906128f8565b610863565b005b34801561026557600080fd5b5061026e6108fc565b60405161027b9190612e6d565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906129c8565b61098e565b6040516102b89190612deb565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e391906128b8565b610a13565b005b3480156102f657600080fd5b506102ff610b2b565b60405161030c91906130cf565b60405180910390f35b34801561032157600080fd5b5061032a610b31565b60405161033791906130cf565b60405180910390f35b34801561034c57600080fd5b50610355610b42565b60405161036291906130cf565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906127a2565b610b48565b005b3480156103a057600080fd5b506103a9610ba8565b6040516103b691906130cf565b60405180910390f35b6103c7610bae565b005b6103e360048036038101906103de91906128b8565b610c6a565b005b3480156103f157600080fd5b5061040c600480360381019061040791906127a2565b610dcb565b005b34801561041a57600080fd5b50610435600480360381019061043091906129c8565b610deb565b005b34801561044357600080fd5b5061045e6004803603810190610459919061297f565b610e71565b005b34801561046c57600080fd5b50610475610f07565b6040516104829190612e52565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906129c8565b610f1a565b6040516104bf9190612deb565b60405180910390f35b3480156104d457600080fd5b506104dd610fcc565b6040516104ea9190612e6d565b60405180910390f35b3480156104ff57600080fd5b5061051a60048036038101906105159190612735565b61105a565b60405161052791906130cf565b60405180910390f35b34801561053c57600080fd5b50610545611112565b005b34801561055357600080fd5b5061056e600480360381019061056991906129c8565b61119a565b005b34801561057c57600080fd5b50610585611220565b6040516105929190612deb565b60405180910390f35b3480156105a757600080fd5b506105b061124a565b6040516105bd9190612e6d565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612878565b6112dc565b005b610609600480360381019061060491906128b8565b6112f2565b005b34801561061757600080fd5b50610632600480360381019061062d91906127f5565b6113f4565b005b34801561064057600080fd5b50610649611456565b6040516106569190612e6d565b60405180910390f35b34801561066b57600080fd5b50610686600480360381019061068191906129c8565b6114e4565b6040516106939190612e6d565b60405180910390f35b3480156106a857600080fd5b506106b161158e565b6040516106be91906130cf565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061297f565b611594565b005b3480156106fc57600080fd5b5061071760048036038101906107129190612762565b61162a565b6040516107249190612e52565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612735565b6116be565b005b34801561076257600080fd5b5061076b6117b6565b6040516107789190612deb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085c575061085b82611813565b5b9050919050565b61086b61187d565b73ffffffffffffffffffffffffffffffffffffffff16610889611220565b73ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d69061302f565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461090b90613394565b80601f016020809104026020016040519081016040528092919081815260200182805461093790613394565b80156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b600061099982611885565b6109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf9061300f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1e82610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061308f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aae61187d565b73ffffffffffffffffffffffffffffffffffffffff161480610add5750610adc81610ad761187d565b61162a565b5b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390612f8f565b60405180910390fd5b610b2683836118f1565b505050565b600a5481565b6000610b3d60076117dc565b905090565b600d5481565b610b59610b5361187d565b826119aa565b610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906130af565b60405180910390fd5b610ba3838383611a88565b505050565b600b5481565b610bb661187d565b73ffffffffffffffffffffffffffffffffffffffff16610bd4611220565b73ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c219061302f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610c6857600080fd5b565b610c7261187d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612f0f565b60405180910390fd5b600e60009054906101000a900460ff1615610cf957600080fd5b60008111610d0657600080fd5b600c5481610d1460076117dc565b610d1e91906131c9565b1115610d2957600080fd5b600d54811115610d3857600080fd5b80600a54610d469190613250565b341015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90612e8f565b60405180910390fd5b6000600190505b818111610dc657610da060076117ea565b610db383610dae60076117dc565b611ce4565b8080610dbe906133f7565b915050610d8f565b505050565b610de6838383604051806020016040528060008152506113f4565b505050565b610df361187d565b73ffffffffffffffffffffffffffffffffffffffff16610e11611220565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061302f565b60405180910390fd5b80600a8190555050565b610e7961187d565b73ffffffffffffffffffffffffffffffffffffffff16610e97611220565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee49061302f565b60405180910390fd5b8060089080519060200190610f03929190612549565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90612fcf565b60405180910390fd5b80915050919050565b60088054610fd990613394565b80601f016020809104026020016040519081016040528092919081815260200182805461100590613394565b80156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612faf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61111a61187d565b73ffffffffffffffffffffffffffffffffffffffff16611138611220565b73ffffffffffffffffffffffffffffffffffffffff161461118e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111859061302f565b60405180910390fd5b6111986000611d02565b565b6111a261187d565b73ffffffffffffffffffffffffffffffffffffffff166111c0611220565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d9061302f565b60405180910390fd5b80600d8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125990613394565b80601f016020809104026020016040519081016040528092919081815260200182805461128590613394565b80156112d25780601f106112a7576101008083540402835291602001916112d2565b820191906000526020600020905b8154815290600101906020018083116112b557829003601f168201915b5050505050905090565b6112ee6112e761187d565b8383611dc8565b5050565b6112fa61187d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612f0f565b60405180910390fd5b600e60009054906101000a900460ff161561138157600080fd5b6000811161138e57600080fd5b600b548161139c60076117dc565b6113a691906131c9565b11156113b157600080fd5b6000600190505b8181116113ef576113c960076117ea565b6113dc836113d760076117dc565b611ce4565b80806113e7906133f7565b9150506113b8565b505050565b6114056113ff61187d565b836119aa565b611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906130af565b60405180910390fd5b61145084848484611f35565b50505050565b6009805461146390613394565b80601f016020809104026020016040519081016040528092919081815260200182805461148f90613394565b80156114dc5780601f106114b1576101008083540402835291602001916114dc565b820191906000526020600020905b8154815290600101906020018083116114bf57829003601f168201915b505050505081565b60606114ef82611885565b61152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259061306f565b60405180910390fd5b6000611538611f91565b905060008151116115585760405180602001604052806000815250611586565b8061156284612023565b600960405160200161157693929190612dba565b6040516020818303038152906040525b915050919050565b600c5481565b61159c61187d565b73ffffffffffffffffffffffffffffffffffffffff166115ba611220565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116079061302f565b60405180910390fd5b8060099080519060200190611626929190612549565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116c661187d565b73ffffffffffffffffffffffffffffffffffffffff166116e4611220565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061302f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190612ecf565b60405180910390fd5b6117b381611d02565b50565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196483610f1a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b582611885565b6119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90612f6f565b60405180910390fd5b60006119ff83610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6e57508373ffffffffffffffffffffffffffffffffffffffff16611a568461098e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a7f5750611a7e818561162a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aa882610f1a565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af59061304f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590612f2f565b60405180910390fd5b611b79838383612184565b611b846000826118f1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd491906132aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2b91906131c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611cfe828260405180602001604052806000815250612189565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90612f4f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f289190612e52565b60405180910390a3505050565b611f40848484611a88565b611f4c848484846121e4565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290612eaf565b60405180910390fd5b50505050565b606060088054611fa090613394565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcc90613394565b80156120195780601f10611fee57610100808354040283529160200191612019565b820191906000526020600020905b815481529060010190602001808311611ffc57829003601f168201915b5050505050905090565b6060600082141561206b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061217f565b600082905060005b6000821461209d578080612086906133f7565b915050600a82612096919061321f565b9150612073565b60008167ffffffffffffffff8111156120b9576120b861352d565b5b6040519080825280601f01601f1916602001820160405280156120eb5781602001600182028036833780820191505090505b5090505b600085146121785760018261210491906132aa565b9150600a856121139190613440565b603061211f91906131c9565b60f81b818381518110612135576121346134fe565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612171919061321f565b94506120ef565b8093505050505b919050565b505050565b612193838361237b565b6121a060008484846121e4565b6121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690612eaf565b60405180910390fd5b505050565b60006122058473ffffffffffffffffffffffffffffffffffffffff16611800565b1561236e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261222e61187d565b8786866040518563ffffffff1660e01b81526004016122509493929190612e06565b602060405180830381600087803b15801561226a57600080fd5b505af192505050801561229b57506040513d601f19601f820116820180604052508101906122989190612952565b60015b61231e573d80600081146122cb576040519150601f19603f3d011682016040523d82523d6000602084013e6122d0565b606091505b50600081511415612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d90612eaf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612373565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290612fef565b60405180910390fd5b6123f481611885565b15612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90612eef565b60405180910390fd5b61244060008383612184565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249091906131c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461255590613394565b90600052602060002090601f01602090048101928261257757600085556125be565b82601f1061259057805160ff19168380011785556125be565b828001600101855582156125be579182015b828111156125bd5782518255916020019190600101906125a2565b5b5090506125cb91906125cf565b5090565b5b808211156125e85760008160009055506001016125d0565b5090565b60006125ff6125fa8461310f565b6130ea565b90508281526020810184848401111561261b5761261a613561565b5b612626848285613352565b509392505050565b600061264161263c84613140565b6130ea565b90508281526020810184848401111561265d5761265c613561565b5b612668848285613352565b509392505050565b60008135905061267f81613a2b565b92915050565b60008135905061269481613a42565b92915050565b6000813590506126a981613a59565b92915050565b6000815190506126be81613a59565b92915050565b600082601f8301126126d9576126d861355c565b5b81356126e98482602086016125ec565b91505092915050565b600082601f8301126127075761270661355c565b5b813561271784826020860161262e565b91505092915050565b60008135905061272f81613a70565b92915050565b60006020828403121561274b5761274a61356b565b5b600061275984828501612670565b91505092915050565b600080604083850312156127795761277861356b565b5b600061278785828601612670565b925050602061279885828601612670565b9150509250929050565b6000806000606084860312156127bb576127ba61356b565b5b60006127c986828701612670565b93505060206127da86828701612670565b92505060406127eb86828701612720565b9150509250925092565b6000806000806080858703121561280f5761280e61356b565b5b600061281d87828801612670565b945050602061282e87828801612670565b935050604061283f87828801612720565b925050606085013567ffffffffffffffff8111156128605761285f613566565b5b61286c878288016126c4565b91505092959194509250565b6000806040838503121561288f5761288e61356b565b5b600061289d85828601612670565b92505060206128ae85828601612685565b9150509250929050565b600080604083850312156128cf576128ce61356b565b5b60006128dd85828601612670565b92505060206128ee85828601612720565b9150509250929050565b60006020828403121561290e5761290d61356b565b5b600061291c84828501612685565b91505092915050565b60006020828403121561293b5761293a61356b565b5b60006129498482850161269a565b91505092915050565b6000602082840312156129685761296761356b565b5b6000612976848285016126af565b91505092915050565b6000602082840312156129955761299461356b565b5b600082013567ffffffffffffffff8111156129b3576129b2613566565b5b6129bf848285016126f2565b91505092915050565b6000602082840312156129de576129dd61356b565b5b60006129ec84828501612720565b91505092915050565b6129fe816132de565b82525050565b612a0d816132f0565b82525050565b6000612a1e82613186565b612a28818561319c565b9350612a38818560208601613361565b612a4181613570565b840191505092915050565b6000612a5782613191565b612a6181856131ad565b9350612a71818560208601613361565b612a7a81613570565b840191505092915050565b6000612a9082613191565b612a9a81856131be565b9350612aaa818560208601613361565b80840191505092915050565b60008154612ac381613394565b612acd81866131be565b94506001821660008114612ae85760018114612af957612b2c565b60ff19831686528186019350612b2c565b612b0285613171565b60005b83811015612b2457815481890152600182019150602081019050612b05565b838801955050505b50505092915050565b6000612b426010836131ad565b9150612b4d82613581565b602082019050919050565b6000612b656032836131ad565b9150612b70826135aa565b604082019050919050565b6000612b886026836131ad565b9150612b93826135f9565b604082019050919050565b6000612bab601c836131ad565b9150612bb682613648565b602082019050919050565b6000612bce6008836131ad565b9150612bd982613671565b602082019050919050565b6000612bf16024836131ad565b9150612bfc8261369a565b604082019050919050565b6000612c146019836131ad565b9150612c1f826136e9565b602082019050919050565b6000612c37602c836131ad565b9150612c4282613712565b604082019050919050565b6000612c5a6038836131ad565b9150612c6582613761565b604082019050919050565b6000612c7d602a836131ad565b9150612c88826137b0565b604082019050919050565b6000612ca06029836131ad565b9150612cab826137ff565b604082019050919050565b6000612cc36020836131ad565b9150612cce8261384e565b602082019050919050565b6000612ce6602c836131ad565b9150612cf182613877565b604082019050919050565b6000612d096020836131ad565b9150612d14826138c6565b602082019050919050565b6000612d2c6029836131ad565b9150612d37826138ef565b604082019050919050565b6000612d4f602f836131ad565b9150612d5a8261393e565b604082019050919050565b6000612d726021836131ad565b9150612d7d8261398d565b604082019050919050565b6000612d956031836131ad565b9150612da0826139dc565b604082019050919050565b612db481613348565b82525050565b6000612dc68286612a85565b9150612dd28285612a85565b9150612dde8284612ab6565b9150819050949350505050565b6000602082019050612e0060008301846129f5565b92915050565b6000608082019050612e1b60008301876129f5565b612e2860208301866129f5565b612e356040830185612dab565b8181036060830152612e478184612a13565b905095945050505050565b6000602082019050612e676000830184612a04565b92915050565b60006020820190508181036000830152612e878184612a4c565b905092915050565b60006020820190508181036000830152612ea881612b35565b9050919050565b60006020820190508181036000830152612ec881612b58565b9050919050565b60006020820190508181036000830152612ee881612b7b565b9050919050565b60006020820190508181036000830152612f0881612b9e565b9050919050565b60006020820190508181036000830152612f2881612bc1565b9050919050565b60006020820190508181036000830152612f4881612be4565b9050919050565b60006020820190508181036000830152612f6881612c07565b9050919050565b60006020820190508181036000830152612f8881612c2a565b9050919050565b60006020820190508181036000830152612fa881612c4d565b9050919050565b60006020820190508181036000830152612fc881612c70565b9050919050565b60006020820190508181036000830152612fe881612c93565b9050919050565b6000602082019050818103600083015261300881612cb6565b9050919050565b6000602082019050818103600083015261302881612cd9565b9050919050565b6000602082019050818103600083015261304881612cfc565b9050919050565b6000602082019050818103600083015261306881612d1f565b9050919050565b6000602082019050818103600083015261308881612d42565b9050919050565b600060208201905081810360008301526130a881612d65565b9050919050565b600060208201905081810360008301526130c881612d88565b9050919050565b60006020820190506130e46000830184612dab565b92915050565b60006130f4613105565b905061310082826133c6565b919050565b6000604051905090565b600067ffffffffffffffff82111561312a5761312961352d565b5b61313382613570565b9050602081019050919050565b600067ffffffffffffffff82111561315b5761315a61352d565b5b61316482613570565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131d482613348565b91506131df83613348565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321457613213613471565b5b828201905092915050565b600061322a82613348565b915061323583613348565b925082613245576132446134a0565b5b828204905092915050565b600061325b82613348565b915061326683613348565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561329f5761329e613471565b5b828202905092915050565b60006132b582613348565b91506132c083613348565b9250828210156132d3576132d2613471565b5b828203905092915050565b60006132e982613328565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561337f578082015181840152602081019050613364565b8381111561338e576000848401525b50505050565b600060028204905060018216806133ac57607f821691505b602082108114156133c0576133bf6134cf565b5b50919050565b6133cf82613570565b810181811067ffffffffffffffff821117156133ee576133ed61352d565b5b80604052505050565b600061340282613348565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343557613434613471565b5b600182019050919050565b600061344b82613348565b915061345683613348565b925082613466576134656134a0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a34816132de565b8114613a3f57600080fd5b50565b613a4b816132f0565b8114613a5657600080fd5b50565b613a62816132fc565b8114613a6d57600080fd5b50565b613a7981613348565b8114613a8457600080fd5b5056fea2646970667358221220a4979b3dce7c0faccd129c3c7f95be06fc7671ace99190d50cf913eef490f55f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b446f6f646c655261777273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415752000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d626a656632653638656e434575425a694c79774551704352744d4d6532316662455132564d464c673279794a2f00000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636352211e1161010d578063adf66d31116100a0578063d5abeb011161006f578063d5abeb011461069c578063da3ef23f146106c7578063e985e9c5146106f0578063f2fde38b1461072d578063f9850b7214610756576101ee565b8063adf66d31146105ef578063b88d4fde1461060b578063c668286214610634578063c87b56dd1461065f576101ee565b80637f00c7a6116100dc5780637f00c7a6146105475780638da5cb5b1461057057806395d89b411461059b578063a22cb465146105c6576101ee565b80636352211e1461048b5780636c0360eb146104c857806370a08231146104f3578063715018a614610530576101ee565b806323b872dd1161018557806342842e0e1161015457806342842e0e146103e557806344a0d68a1461040e57806355f804b3146104375780635c975abb14610460576101ee565b806323b872dd1461036b57806324a6ab0c146103945780633ccfd60b146103bf57806340c10f19146103c9576101ee565b8063095ea7b3116101c1578063095ea7b3146102c157806313faede6146102ea57806318160ddd14610315578063239c70ae14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612925565b610781565b6040516102279190612e52565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906128f8565b610863565b005b34801561026557600080fd5b5061026e6108fc565b60405161027b9190612e6d565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906129c8565b61098e565b6040516102b89190612deb565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e391906128b8565b610a13565b005b3480156102f657600080fd5b506102ff610b2b565b60405161030c91906130cf565b60405180910390f35b34801561032157600080fd5b5061032a610b31565b60405161033791906130cf565b60405180910390f35b34801561034c57600080fd5b50610355610b42565b60405161036291906130cf565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906127a2565b610b48565b005b3480156103a057600080fd5b506103a9610ba8565b6040516103b691906130cf565b60405180910390f35b6103c7610bae565b005b6103e360048036038101906103de91906128b8565b610c6a565b005b3480156103f157600080fd5b5061040c600480360381019061040791906127a2565b610dcb565b005b34801561041a57600080fd5b50610435600480360381019061043091906129c8565b610deb565b005b34801561044357600080fd5b5061045e6004803603810190610459919061297f565b610e71565b005b34801561046c57600080fd5b50610475610f07565b6040516104829190612e52565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906129c8565b610f1a565b6040516104bf9190612deb565b60405180910390f35b3480156104d457600080fd5b506104dd610fcc565b6040516104ea9190612e6d565b60405180910390f35b3480156104ff57600080fd5b5061051a60048036038101906105159190612735565b61105a565b60405161052791906130cf565b60405180910390f35b34801561053c57600080fd5b50610545611112565b005b34801561055357600080fd5b5061056e600480360381019061056991906129c8565b61119a565b005b34801561057c57600080fd5b50610585611220565b6040516105929190612deb565b60405180910390f35b3480156105a757600080fd5b506105b061124a565b6040516105bd9190612e6d565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612878565b6112dc565b005b610609600480360381019061060491906128b8565b6112f2565b005b34801561061757600080fd5b50610632600480360381019061062d91906127f5565b6113f4565b005b34801561064057600080fd5b50610649611456565b6040516106569190612e6d565b60405180910390f35b34801561066b57600080fd5b50610686600480360381019061068191906129c8565b6114e4565b6040516106939190612e6d565b60405180910390f35b3480156106a857600080fd5b506106b161158e565b6040516106be91906130cf565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061297f565b611594565b005b3480156106fc57600080fd5b5061071760048036038101906107129190612762565b61162a565b6040516107249190612e52565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612735565b6116be565b005b34801561076257600080fd5b5061076b6117b6565b6040516107789190612deb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085c575061085b82611813565b5b9050919050565b61086b61187d565b73ffffffffffffffffffffffffffffffffffffffff16610889611220565b73ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d69061302f565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461090b90613394565b80601f016020809104026020016040519081016040528092919081815260200182805461093790613394565b80156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b600061099982611885565b6109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf9061300f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1e82610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061308f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aae61187d565b73ffffffffffffffffffffffffffffffffffffffff161480610add5750610adc81610ad761187d565b61162a565b5b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390612f8f565b60405180910390fd5b610b2683836118f1565b505050565b600a5481565b6000610b3d60076117dc565b905090565b600d5481565b610b59610b5361187d565b826119aa565b610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906130af565b60405180910390fd5b610ba3838383611a88565b505050565b600b5481565b610bb661187d565b73ffffffffffffffffffffffffffffffffffffffff16610bd4611220565b73ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c219061302f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610c6857600080fd5b565b610c7261187d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612f0f565b60405180910390fd5b600e60009054906101000a900460ff1615610cf957600080fd5b60008111610d0657600080fd5b600c5481610d1460076117dc565b610d1e91906131c9565b1115610d2957600080fd5b600d54811115610d3857600080fd5b80600a54610d469190613250565b341015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90612e8f565b60405180910390fd5b6000600190505b818111610dc657610da060076117ea565b610db383610dae60076117dc565b611ce4565b8080610dbe906133f7565b915050610d8f565b505050565b610de6838383604051806020016040528060008152506113f4565b505050565b610df361187d565b73ffffffffffffffffffffffffffffffffffffffff16610e11611220565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061302f565b60405180910390fd5b80600a8190555050565b610e7961187d565b73ffffffffffffffffffffffffffffffffffffffff16610e97611220565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee49061302f565b60405180910390fd5b8060089080519060200190610f03929190612549565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90612fcf565b60405180910390fd5b80915050919050565b60088054610fd990613394565b80601f016020809104026020016040519081016040528092919081815260200182805461100590613394565b80156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612faf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61111a61187d565b73ffffffffffffffffffffffffffffffffffffffff16611138611220565b73ffffffffffffffffffffffffffffffffffffffff161461118e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111859061302f565b60405180910390fd5b6111986000611d02565b565b6111a261187d565b73ffffffffffffffffffffffffffffffffffffffff166111c0611220565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d9061302f565b60405180910390fd5b80600d8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125990613394565b80601f016020809104026020016040519081016040528092919081815260200182805461128590613394565b80156112d25780601f106112a7576101008083540402835291602001916112d2565b820191906000526020600020905b8154815290600101906020018083116112b557829003601f168201915b5050505050905090565b6112ee6112e761187d565b8383611dc8565b5050565b6112fa61187d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612f0f565b60405180910390fd5b600e60009054906101000a900460ff161561138157600080fd5b6000811161138e57600080fd5b600b548161139c60076117dc565b6113a691906131c9565b11156113b157600080fd5b6000600190505b8181116113ef576113c960076117ea565b6113dc836113d760076117dc565b611ce4565b80806113e7906133f7565b9150506113b8565b505050565b6114056113ff61187d565b836119aa565b611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906130af565b60405180910390fd5b61145084848484611f35565b50505050565b6009805461146390613394565b80601f016020809104026020016040519081016040528092919081815260200182805461148f90613394565b80156114dc5780601f106114b1576101008083540402835291602001916114dc565b820191906000526020600020905b8154815290600101906020018083116114bf57829003601f168201915b505050505081565b60606114ef82611885565b61152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259061306f565b60405180910390fd5b6000611538611f91565b905060008151116115585760405180602001604052806000815250611586565b8061156284612023565b600960405160200161157693929190612dba565b6040516020818303038152906040525b915050919050565b600c5481565b61159c61187d565b73ffffffffffffffffffffffffffffffffffffffff166115ba611220565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116079061302f565b60405180910390fd5b8060099080519060200190611626929190612549565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116c661187d565b73ffffffffffffffffffffffffffffffffffffffff166116e4611220565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061302f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190612ecf565b60405180910390fd5b6117b381611d02565b50565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196483610f1a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b582611885565b6119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90612f6f565b60405180910390fd5b60006119ff83610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6e57508373ffffffffffffffffffffffffffffffffffffffff16611a568461098e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a7f5750611a7e818561162a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aa882610f1a565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af59061304f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590612f2f565b60405180910390fd5b611b79838383612184565b611b846000826118f1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd491906132aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2b91906131c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611cfe828260405180602001604052806000815250612189565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90612f4f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f289190612e52565b60405180910390a3505050565b611f40848484611a88565b611f4c848484846121e4565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290612eaf565b60405180910390fd5b50505050565b606060088054611fa090613394565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcc90613394565b80156120195780601f10611fee57610100808354040283529160200191612019565b820191906000526020600020905b815481529060010190602001808311611ffc57829003601f168201915b5050505050905090565b6060600082141561206b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061217f565b600082905060005b6000821461209d578080612086906133f7565b915050600a82612096919061321f565b9150612073565b60008167ffffffffffffffff8111156120b9576120b861352d565b5b6040519080825280601f01601f1916602001820160405280156120eb5781602001600182028036833780820191505090505b5090505b600085146121785760018261210491906132aa565b9150600a856121139190613440565b603061211f91906131c9565b60f81b818381518110612135576121346134fe565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612171919061321f565b94506120ef565b8093505050505b919050565b505050565b612193838361237b565b6121a060008484846121e4565b6121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690612eaf565b60405180910390fd5b505050565b60006122058473ffffffffffffffffffffffffffffffffffffffff16611800565b1561236e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261222e61187d565b8786866040518563ffffffff1660e01b81526004016122509493929190612e06565b602060405180830381600087803b15801561226a57600080fd5b505af192505050801561229b57506040513d601f19601f820116820180604052508101906122989190612952565b60015b61231e573d80600081146122cb576040519150601f19603f3d011682016040523d82523d6000602084013e6122d0565b606091505b50600081511415612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d90612eaf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612373565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290612fef565b60405180910390fd5b6123f481611885565b15612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90612eef565b60405180910390fd5b61244060008383612184565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249091906131c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461255590613394565b90600052602060002090601f01602090048101928261257757600085556125be565b82601f1061259057805160ff19168380011785556125be565b828001600101855582156125be579182015b828111156125bd5782518255916020019190600101906125a2565b5b5090506125cb91906125cf565b5090565b5b808211156125e85760008160009055506001016125d0565b5090565b60006125ff6125fa8461310f565b6130ea565b90508281526020810184848401111561261b5761261a613561565b5b612626848285613352565b509392505050565b600061264161263c84613140565b6130ea565b90508281526020810184848401111561265d5761265c613561565b5b612668848285613352565b509392505050565b60008135905061267f81613a2b565b92915050565b60008135905061269481613a42565b92915050565b6000813590506126a981613a59565b92915050565b6000815190506126be81613a59565b92915050565b600082601f8301126126d9576126d861355c565b5b81356126e98482602086016125ec565b91505092915050565b600082601f8301126127075761270661355c565b5b813561271784826020860161262e565b91505092915050565b60008135905061272f81613a70565b92915050565b60006020828403121561274b5761274a61356b565b5b600061275984828501612670565b91505092915050565b600080604083850312156127795761277861356b565b5b600061278785828601612670565b925050602061279885828601612670565b9150509250929050565b6000806000606084860312156127bb576127ba61356b565b5b60006127c986828701612670565b93505060206127da86828701612670565b92505060406127eb86828701612720565b9150509250925092565b6000806000806080858703121561280f5761280e61356b565b5b600061281d87828801612670565b945050602061282e87828801612670565b935050604061283f87828801612720565b925050606085013567ffffffffffffffff8111156128605761285f613566565b5b61286c878288016126c4565b91505092959194509250565b6000806040838503121561288f5761288e61356b565b5b600061289d85828601612670565b92505060206128ae85828601612685565b9150509250929050565b600080604083850312156128cf576128ce61356b565b5b60006128dd85828601612670565b92505060206128ee85828601612720565b9150509250929050565b60006020828403121561290e5761290d61356b565b5b600061291c84828501612685565b91505092915050565b60006020828403121561293b5761293a61356b565b5b60006129498482850161269a565b91505092915050565b6000602082840312156129685761296761356b565b5b6000612976848285016126af565b91505092915050565b6000602082840312156129955761299461356b565b5b600082013567ffffffffffffffff8111156129b3576129b2613566565b5b6129bf848285016126f2565b91505092915050565b6000602082840312156129de576129dd61356b565b5b60006129ec84828501612720565b91505092915050565b6129fe816132de565b82525050565b612a0d816132f0565b82525050565b6000612a1e82613186565b612a28818561319c565b9350612a38818560208601613361565b612a4181613570565b840191505092915050565b6000612a5782613191565b612a6181856131ad565b9350612a71818560208601613361565b612a7a81613570565b840191505092915050565b6000612a9082613191565b612a9a81856131be565b9350612aaa818560208601613361565b80840191505092915050565b60008154612ac381613394565b612acd81866131be565b94506001821660008114612ae85760018114612af957612b2c565b60ff19831686528186019350612b2c565b612b0285613171565b60005b83811015612b2457815481890152600182019150602081019050612b05565b838801955050505b50505092915050565b6000612b426010836131ad565b9150612b4d82613581565b602082019050919050565b6000612b656032836131ad565b9150612b70826135aa565b604082019050919050565b6000612b886026836131ad565b9150612b93826135f9565b604082019050919050565b6000612bab601c836131ad565b9150612bb682613648565b602082019050919050565b6000612bce6008836131ad565b9150612bd982613671565b602082019050919050565b6000612bf16024836131ad565b9150612bfc8261369a565b604082019050919050565b6000612c146019836131ad565b9150612c1f826136e9565b602082019050919050565b6000612c37602c836131ad565b9150612c4282613712565b604082019050919050565b6000612c5a6038836131ad565b9150612c6582613761565b604082019050919050565b6000612c7d602a836131ad565b9150612c88826137b0565b604082019050919050565b6000612ca06029836131ad565b9150612cab826137ff565b604082019050919050565b6000612cc36020836131ad565b9150612cce8261384e565b602082019050919050565b6000612ce6602c836131ad565b9150612cf182613877565b604082019050919050565b6000612d096020836131ad565b9150612d14826138c6565b602082019050919050565b6000612d2c6029836131ad565b9150612d37826138ef565b604082019050919050565b6000612d4f602f836131ad565b9150612d5a8261393e565b604082019050919050565b6000612d726021836131ad565b9150612d7d8261398d565b604082019050919050565b6000612d956031836131ad565b9150612da0826139dc565b604082019050919050565b612db481613348565b82525050565b6000612dc68286612a85565b9150612dd28285612a85565b9150612dde8284612ab6565b9150819050949350505050565b6000602082019050612e0060008301846129f5565b92915050565b6000608082019050612e1b60008301876129f5565b612e2860208301866129f5565b612e356040830185612dab565b8181036060830152612e478184612a13565b905095945050505050565b6000602082019050612e676000830184612a04565b92915050565b60006020820190508181036000830152612e878184612a4c565b905092915050565b60006020820190508181036000830152612ea881612b35565b9050919050565b60006020820190508181036000830152612ec881612b58565b9050919050565b60006020820190508181036000830152612ee881612b7b565b9050919050565b60006020820190508181036000830152612f0881612b9e565b9050919050565b60006020820190508181036000830152612f2881612bc1565b9050919050565b60006020820190508181036000830152612f4881612be4565b9050919050565b60006020820190508181036000830152612f6881612c07565b9050919050565b60006020820190508181036000830152612f8881612c2a565b9050919050565b60006020820190508181036000830152612fa881612c4d565b9050919050565b60006020820190508181036000830152612fc881612c70565b9050919050565b60006020820190508181036000830152612fe881612c93565b9050919050565b6000602082019050818103600083015261300881612cb6565b9050919050565b6000602082019050818103600083015261302881612cd9565b9050919050565b6000602082019050818103600083015261304881612cfc565b9050919050565b6000602082019050818103600083015261306881612d1f565b9050919050565b6000602082019050818103600083015261308881612d42565b9050919050565b600060208201905081810360008301526130a881612d65565b9050919050565b600060208201905081810360008301526130c881612d88565b9050919050565b60006020820190506130e46000830184612dab565b92915050565b60006130f4613105565b905061310082826133c6565b919050565b6000604051905090565b600067ffffffffffffffff82111561312a5761312961352d565b5b61313382613570565b9050602081019050919050565b600067ffffffffffffffff82111561315b5761315a61352d565b5b61316482613570565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131d482613348565b91506131df83613348565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321457613213613471565b5b828201905092915050565b600061322a82613348565b915061323583613348565b925082613245576132446134a0565b5b828204905092915050565b600061325b82613348565b915061326683613348565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561329f5761329e613471565b5b828202905092915050565b60006132b582613348565b91506132c083613348565b9250828210156132d3576132d2613471565b5b828203905092915050565b60006132e982613328565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561337f578082015181840152602081019050613364565b8381111561338e576000848401525b50505050565b600060028204905060018216806133ac57607f821691505b602082108114156133c0576133bf6134cf565b5b50919050565b6133cf82613570565b810181811067ffffffffffffffff821117156133ee576133ed61352d565b5b80604052505050565b600061340282613348565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343557613434613471565b5b600182019050919050565b600061344b82613348565b915061345683613348565b925082613466576134656134a0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a34816132de565b8114613a3f57600080fd5b50565b613a4b816132f0565b8114613a5657600080fd5b50565b613a62816132fc565b8114613a6d57600080fd5b50565b613a7981613348565b8114613a8457600080fd5b5056fea2646970667358221220a4979b3dce7c0faccd129c3c7f95be06fc7671ace99190d50cf913eef490f55f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b446f6f646c655261777273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415752000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d626a656632653638656e434575425a694c79774551704352744d4d6532316662455132564d464c673279794a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DoodleRawrs
Arg [1] : _symbol (string): RAWR
Arg [2] : _initBaseURI (string): ipfs://Qmbjef2e68enCEuBZiLywEQpCRtMMe21fbEQ2VMFLg2yyJ/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 446f6f646c655261777273000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5241575200000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d626a656632653638656e434575425a694c797745517043
Arg [9] : 52744d4d6532316662455132564d464c673279794a2f00000000000000000000
Deployed Bytecode Sourcemap
37712:3219:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25207:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40611:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37952:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40826:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38068:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28461:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37991:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40698:120;;;:::i;:::-;;38650:542;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28871:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40135:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40363:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38108:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25846:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37880:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25576:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;40231:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26321:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28004:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39200:426;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29127:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37908:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39634:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38030:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40475:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28230:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38143:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25207:305;25309:4;25361:25;25346:40;;;:11;:40;;;;:105;;;;25418:33;25403:48;;;:11;:48;;;;25346:105;:158;;;;25468:36;25492:11;25468:23;:36::i;:::-;25346:158;25326:178;;25207:305;;;:::o;40611:79::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40676:6:::1;40667;;:15;;;;;;;;;;;;;;;;;;40611:79:::0;:::o;26152:100::-;26206:13;26239:5;26232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26152:100;:::o;27711:221::-;27787:7;27815:16;27823:7;27815;:16::i;:::-;27807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27900:15;:24;27916:7;27900:24;;;;;;;;;;;;;;;;;;;;;27893:31;;27711:221;;;:::o;27234:411::-;27315:13;27331:23;27346:7;27331:14;:23::i;:::-;27315:39;;27379:5;27373:11;;:2;:11;;;;27365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27473:5;27457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27482:37;27499:5;27506:12;:10;:12::i;:::-;27482:16;:37::i;:::-;27457:62;27435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27616:21;27625:2;27629:7;27616:8;:21::i;:::-;27304:341;27234:411;;:::o;37952:32::-;;;;:::o;40826:102::-;40870:7;40897:23;:13;:21;:23::i;:::-;40890:30;;40826:102;:::o;38068:33::-;;;;:::o;28461:339::-;28656:41;28675:12;:10;:12::i;:::-;28689:7;28656:18;:41::i;:::-;28648:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:28;28774:4;28780:2;28784:7;28764:9;:28::i;:::-;28461:339;;;:::o;37991:32::-;;;;:::o;40698:120::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40770:10:::1;40762:24;;:47;40787:21;40762:47;;;;;;;;;;;;;;;;;;;;;;;40754:56;;;::::0;::::1;;40698:120::o:0;38650:542::-;38745:12;:10;:12::i;:::-;38732:25;;:9;:25;;;38724:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38790:6;;;;;;;;;;;38789:7;38781:16;;;;;;38830:1;38816:11;:15;38808:24;;;;;;38892:9;;38877:11;38851:23;:13;:21;:23::i;:::-;:37;;;;:::i;:::-;:50;;38843:59;;;;;;38938:13;;38923:11;:28;;38915:37;;;;;;38991:11;38984:4;;:18;;;;:::i;:::-;38971:9;:31;;38963:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39041:9;39053:1;39041:13;;39036:149;39061:11;39056:1;:16;39036:149;;39094:25;:13;:23;:25::i;:::-;39134:39;39144:3;39149:23;:13;:21;:23::i;:::-;39134:9;:39::i;:::-;39074:3;;;;;:::i;:::-;;;;39036:149;;;;38650:542;;:::o;28871:185::-;29009:39;29026:4;29032:2;29036:7;29009:39;;;;;;;;;;;;:16;:39::i;:::-;28871:185;;;:::o;40135:88::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40207:8:::1;40200:4;:15;;;;40135:88:::0;:::o;40363:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40448:11:::1;40438:7;:21;;;;;;;;;;;;:::i;:::-;;40363:104:::0;:::o;38108:26::-;;;;;;;;;;;;;:::o;25846:239::-;25918:7;25938:13;25954:7;:16;25962:7;25954:16;;;;;;;;;;;;;;;;;;;;;25938:32;;26006:1;25989:19;;:5;:19;;;;25981:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:5;26065:12;;;25846:239;;;:::o;37880:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25576:208::-;25648:7;25693:1;25676:19;;:5;:19;;;;25668:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25760:9;:16;25770:5;25760:16;;;;;;;;;;;;;;;;25753:23;;25576:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;40231:124::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40330:17:::1;40314:13;:33;;;;40231:124:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;26321:104::-;26377:13;26410:7;26403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26321:104;:::o;28004:155::-;28099:52;28118:12;:10;:12::i;:::-;28132:8;28142;28099:18;:52::i;:::-;28004:155;;:::o;39200:426::-;39299:12;:10;:12::i;:::-;39286:25;;:9;:25;;;39278:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;39344:6;;;;;;;;;;;39343:7;39335:16;;;;;;39384:1;39370:11;:15;39362:24;;;;;;39446:10;;39431:11;39405:23;:13;:21;:23::i;:::-;:37;;;;:::i;:::-;:51;;39397:60;;;;;;39475:9;39487:1;39475:13;;39470:149;39495:11;39490:1;:16;39470:149;;39528:25;:13;:23;:25::i;:::-;39568:39;39578:3;39583:23;:13;:21;:23::i;:::-;39568:9;:39::i;:::-;39508:3;;;;;:::i;:::-;;;;39470:149;;;;39200:426;;:::o;29127:328::-;29302:41;29321:12;:10;:12::i;:::-;29335:7;29302:18;:41::i;:::-;29294:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29408:39;29422:4;29428:2;29432:7;29441:5;29408:13;:39::i;:::-;29127:328;;;;:::o;37908:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39634:475::-;39752:13;39801:16;39809:7;39801;:16::i;:::-;39783:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;39901:28;39932:10;:8;:10::i;:::-;39901:41;;39991:1;39966:14;39960:28;:32;:141;;;;;;;;;;;;;;;;;40032:14;40048:18;:7;:16;:18::i;:::-;40068:13;40015:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39960:141;39953:148;;;39634:475;;;:::o;38030:31::-;;;;:::o;40475:128::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40578:17:::1;40562:13;:33;;;;;;;;;;;;:::i;:::-;;40475:128:::0;:::o;28230:164::-;28327:4;28351:18;:25;28370:5;28351:25;;;;;;;;;;;;;;;:35;28377:8;28351:35;;;;;;;;;;;;;;;;;;;;;;;;;28344:42;;28230:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;38143:68::-;;;;;;;;;;;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;7832:387::-;7892:4;8100:12;8167:7;8155:20;8147:28;;8210:1;8203:4;:8;8196:15;;;7832:387;;;:::o;17976:157::-;18061:4;18100:25;18085:40;;;:11;:40;;;;18078:47;;17976:157;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;30965:127::-;31030:4;31082:1;31054:30;;:7;:16;31062:7;31054:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31047:37;;30965:127;;;:::o;34947:174::-;35049:2;35022:15;:24;35038:7;35022:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35105:7;35101:2;35067:46;;35076:23;35091:7;35076:14;:23::i;:::-;35067:46;;;;;;;;;;;;34947:174;;:::o;31259:348::-;31352:4;31377:16;31385:7;31377;:16::i;:::-;31369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:13;31469:23;31484:7;31469:14;:23::i;:::-;31453:39;;31522:5;31511:16;;:7;:16;;;:51;;;;31555:7;31531:31;;:20;31543:7;31531:11;:20::i;:::-;:31;;;31511:51;:87;;;;31566:32;31583:5;31590:7;31566:16;:32::i;:::-;31511:87;31503:96;;;31259:348;;;;:::o;34251:578::-;34410:4;34383:31;;:23;34398:7;34383:14;:23::i;:::-;:31;;;34375:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34493:1;34479:16;;:2;:16;;;;34471:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:39;34570:4;34576:2;34580:7;34549:20;:39::i;:::-;34653:29;34670:1;34674:7;34653:8;:29::i;:::-;34714:1;34695:9;:15;34705:4;34695:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34743:1;34726:9;:13;34736:2;34726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34774:2;34755:7;:16;34763:7;34755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34813:7;34809:2;34794:27;;34803:4;34794:27;;;;;;;;;;;;34251:578;;;:::o;31949:110::-;32025:26;32035:2;32039:7;32025:26;;;;;;;;;;;;:9;:26::i;:::-;31949:110;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35263:315::-;35418:8;35409:17;;:5;:17;;;;35401:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35505:8;35467:18;:25;35486:5;35467:25;;;;;;;;;;;;;;;:35;35493:8;35467:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35551:8;35529:41;;35544:5;35529:41;;;35561:8;35529:41;;;;;;:::i;:::-;;;;;;;;35263:315;;;:::o;30337:::-;30494:28;30504:4;30510:2;30514:7;30494:9;:28::i;:::-;30541:48;30564:4;30570:2;30574:7;30583:5;30541:22;:48::i;:::-;30533:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30337:315;;;;:::o;38504:108::-;38564:13;38597:7;38590:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38504:108;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;37514:126::-;;;;:::o;32286:321::-;32416:18;32422:2;32426:7;32416:5;:18::i;:::-;32467:54;32498:1;32502:2;32506:7;32515:5;32467:22;:54::i;:::-;32445:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32286:321;;;:::o;36143:799::-;36298:4;36319:15;:2;:13;;;:15::i;:::-;36315:620;;;36371:2;36355:36;;;36392:12;:10;:12::i;:::-;36406:4;36412:7;36421:5;36355:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36351:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36614:1;36597:6;:13;:18;36593:272;;;36640:60;;;;;;;;;;:::i;:::-;;;;;;;;36593:272;36815:6;36809:13;36800:6;36796:2;36792:15;36785:38;36351:529;36488:41;;;36478:51;;;:6;:51;;;;36471:58;;;;;36315:620;36919:4;36912:11;;36143:799;;;;;;;:::o;32943:382::-;33037:1;33023:16;;:2;:16;;;;33015:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:16;33104:7;33096;:16::i;:::-;33095:17;33087:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33158:45;33187:1;33191:2;33195:7;33158:20;:45::i;:::-;33233:1;33216:9;:13;33226:2;33216:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33264:2;33245:7;:16;33253:7;33245:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33309:7;33305:2;33284:33;;33301:1;33284:33;;;;;;;;;;;;32943:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8869:845::-;8972:3;9009:5;9003:12;9038:36;9064:9;9038:36;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9210:1;9199:9;9195:17;9226:1;9221:137;;;;9372:1;9367:341;;;;9188:520;;9221:137;9305:4;9301:9;9290;9286:25;9281:3;9274:38;9341:6;9336:3;9332:16;9325:23;;9221:137;;9367:341;9434:38;9466:5;9434:38;:::i;:::-;9494:1;9508:154;9522:6;9519:1;9516:13;9508:154;;;9596:7;9590:14;9586:1;9581:3;9577:11;9570:35;9646:1;9637:7;9633:15;9622:26;;9544:4;9541:1;9537:12;9532:17;;9508:154;;;9691:6;9686:3;9682:16;9675:23;;9374:334;;9188:520;;8976:738;;8869:845;;;;:::o;9720:366::-;9862:3;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9959:93;10048:3;9959:93;:::i;:::-;10077:2;10072:3;10068:12;10061:19;;9720:366;;;:::o;10092:::-;10234:3;10255:67;10319:2;10314:3;10255:67;:::i;:::-;10248:74;;10331:93;10420:3;10331:93;:::i;:::-;10449:2;10444:3;10440:12;10433:19;;10092:366;;;:::o;10464:::-;10606:3;10627:67;10691:2;10686:3;10627:67;:::i;:::-;10620:74;;10703:93;10792:3;10703:93;:::i;:::-;10821:2;10816:3;10812:12;10805:19;;10464:366;;;:::o;10836:::-;10978:3;10999:67;11063:2;11058:3;10999:67;:::i;:::-;10992:74;;11075:93;11164:3;11075:93;:::i;:::-;11193:2;11188:3;11184:12;11177:19;;10836:366;;;:::o;11208:365::-;11350:3;11371:66;11435:1;11430:3;11371:66;:::i;:::-;11364:73;;11446:93;11535:3;11446:93;:::i;:::-;11564:2;11559:3;11555:12;11548:19;;11208:365;;;:::o;11579:366::-;11721:3;11742:67;11806:2;11801:3;11742:67;:::i;:::-;11735:74;;11818:93;11907:3;11818:93;:::i;:::-;11936:2;11931:3;11927:12;11920:19;;11579:366;;;:::o;11951:::-;12093:3;12114:67;12178:2;12173:3;12114:67;:::i;:::-;12107:74;;12190:93;12279:3;12190:93;:::i;:::-;12308:2;12303:3;12299:12;12292:19;;11951:366;;;:::o;12323:::-;12465:3;12486:67;12550:2;12545:3;12486:67;:::i;:::-;12479:74;;12562:93;12651:3;12562:93;:::i;:::-;12680:2;12675:3;12671:12;12664:19;;12323:366;;;:::o;12695:::-;12837:3;12858:67;12922:2;12917:3;12858:67;:::i;:::-;12851:74;;12934:93;13023:3;12934:93;:::i;:::-;13052:2;13047:3;13043:12;13036:19;;12695:366;;;:::o;13067:::-;13209:3;13230:67;13294:2;13289:3;13230:67;:::i;:::-;13223:74;;13306:93;13395:3;13306:93;:::i;:::-;13424:2;13419:3;13415:12;13408:19;;13067:366;;;:::o;13439:::-;13581:3;13602:67;13666:2;13661:3;13602:67;:::i;:::-;13595:74;;13678:93;13767:3;13678:93;:::i;:::-;13796:2;13791:3;13787:12;13780:19;;13439:366;;;:::o;13811:::-;13953:3;13974:67;14038:2;14033:3;13974:67;:::i;:::-;13967:74;;14050:93;14139:3;14050:93;:::i;:::-;14168:2;14163:3;14159:12;14152:19;;13811:366;;;:::o;14183:::-;14325:3;14346:67;14410:2;14405:3;14346:67;:::i;:::-;14339:74;;14422:93;14511:3;14422:93;:::i;:::-;14540:2;14535:3;14531:12;14524:19;;14183:366;;;:::o;14555:::-;14697:3;14718:67;14782:2;14777:3;14718:67;:::i;:::-;14711:74;;14794:93;14883:3;14794:93;:::i;:::-;14912:2;14907:3;14903:12;14896:19;;14555:366;;;:::o;14927:::-;15069:3;15090:67;15154:2;15149:3;15090:67;:::i;:::-;15083:74;;15166:93;15255:3;15166:93;:::i;:::-;15284:2;15279:3;15275:12;15268:19;;14927:366;;;:::o;15299:::-;15441:3;15462:67;15526:2;15521:3;15462:67;:::i;:::-;15455:74;;15538:93;15627:3;15538:93;:::i;:::-;15656:2;15651:3;15647:12;15640:19;;15299:366;;;:::o;15671:::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:::-;16185:3;16206:67;16270:2;16265:3;16206:67;:::i;:::-;16199:74;;16282:93;16371:3;16282:93;:::i;:::-;16400:2;16395:3;16391:12;16384:19;;16043:366;;;:::o;16415:118::-;16502:24;16520:5;16502:24;:::i;:::-;16497:3;16490:37;16415:118;;:::o;16539:589::-;16764:3;16786:95;16877:3;16868:6;16786:95;:::i;:::-;16779:102;;16898:95;16989:3;16980:6;16898:95;:::i;:::-;16891:102;;17010:92;17098:3;17089:6;17010:92;:::i;:::-;17003:99;;17119:3;17112:10;;16539:589;;;;;;:::o;17134:222::-;17227:4;17265:2;17254:9;17250:18;17242:26;;17278:71;17346:1;17335:9;17331:17;17322:6;17278:71;:::i;:::-;17134:222;;;;:::o;17362:640::-;17557:4;17595:3;17584:9;17580:19;17572:27;;17609:71;17677:1;17666:9;17662:17;17653:6;17609:71;:::i;:::-;17690:72;17758:2;17747:9;17743:18;17734:6;17690:72;:::i;:::-;17772;17840:2;17829:9;17825:18;17816:6;17772:72;:::i;:::-;17891:9;17885:4;17881:20;17876:2;17865:9;17861:18;17854:48;17919:76;17990:4;17981:6;17919:76;:::i;:::-;17911:84;;17362:640;;;;;;;:::o;18008:210::-;18095:4;18133:2;18122:9;18118:18;18110:26;;18146:65;18208:1;18197:9;18193:17;18184:6;18146:65;:::i;:::-;18008:210;;;;:::o;18224:313::-;18337:4;18375:2;18364:9;18360:18;18352:26;;18424:9;18418:4;18414:20;18410:1;18399:9;18395:17;18388:47;18452:78;18525:4;18516:6;18452:78;:::i;:::-;18444:86;;18224:313;;;;:::o;18543:419::-;18709:4;18747:2;18736:9;18732:18;18724:26;;18796:9;18790:4;18786:20;18782:1;18771:9;18767:17;18760:47;18824:131;18950:4;18824:131;:::i;:::-;18816:139;;18543:419;;;:::o;18968:::-;19134:4;19172:2;19161:9;19157:18;19149:26;;19221:9;19215:4;19211:20;19207:1;19196:9;19192:17;19185:47;19249:131;19375:4;19249:131;:::i;:::-;19241:139;;18968:419;;;:::o;19393:::-;19559:4;19597:2;19586:9;19582:18;19574:26;;19646:9;19640:4;19636:20;19632:1;19621:9;19617:17;19610:47;19674:131;19800:4;19674:131;:::i;:::-;19666:139;;19393:419;;;:::o;19818:::-;19984:4;20022:2;20011:9;20007:18;19999:26;;20071:9;20065:4;20061:20;20057:1;20046:9;20042:17;20035:47;20099:131;20225:4;20099:131;:::i;:::-;20091:139;;19818:419;;;:::o;20243:::-;20409:4;20447:2;20436:9;20432:18;20424:26;;20496:9;20490:4;20486:20;20482:1;20471:9;20467:17;20460:47;20524:131;20650:4;20524:131;:::i;:::-;20516:139;;20243:419;;;:::o;20668:::-;20834:4;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20668:419;;;:::o;21093:::-;21259:4;21297:2;21286:9;21282:18;21274:26;;21346:9;21340:4;21336:20;21332:1;21321:9;21317:17;21310:47;21374:131;21500:4;21374:131;:::i;:::-;21366:139;;21093:419;;;:::o;21518:::-;21684:4;21722:2;21711:9;21707:18;21699:26;;21771:9;21765:4;21761:20;21757:1;21746:9;21742:17;21735:47;21799:131;21925:4;21799:131;:::i;:::-;21791:139;;21518:419;;;:::o;21943:::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;21943:419;;;:::o;22368:::-;22534:4;22572:2;22561:9;22557:18;22549:26;;22621:9;22615:4;22611:20;22607:1;22596:9;22592:17;22585:47;22649:131;22775:4;22649:131;:::i;:::-;22641:139;;22368:419;;;:::o;22793:::-;22959:4;22997:2;22986:9;22982:18;22974:26;;23046:9;23040:4;23036:20;23032:1;23021:9;23017:17;23010:47;23074:131;23200:4;23074:131;:::i;:::-;23066:139;;22793:419;;;:::o;23218:::-;23384:4;23422:2;23411:9;23407:18;23399:26;;23471:9;23465:4;23461:20;23457:1;23446:9;23442:17;23435:47;23499:131;23625:4;23499:131;:::i;:::-;23491:139;;23218:419;;;:::o;23643:::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:::-;24234:4;24272:2;24261:9;24257:18;24249:26;;24321:9;24315:4;24311:20;24307:1;24296:9;24292:17;24285:47;24349:131;24475:4;24349:131;:::i;:::-;24341:139;;24068:419;;;:::o;24493:::-;24659:4;24697:2;24686:9;24682:18;24674:26;;24746:9;24740:4;24736:20;24732:1;24721:9;24717:17;24710:47;24774:131;24900:4;24774:131;:::i;:::-;24766:139;;24493:419;;;:::o;24918:::-;25084:4;25122:2;25111:9;25107:18;25099:26;;25171:9;25165:4;25161:20;25157:1;25146:9;25142:17;25135:47;25199:131;25325:4;25199:131;:::i;:::-;25191:139;;24918:419;;;:::o;25343:::-;25509:4;25547:2;25536:9;25532:18;25524:26;;25596:9;25590:4;25586:20;25582:1;25571:9;25567:17;25560:47;25624:131;25750:4;25624:131;:::i;:::-;25616:139;;25343:419;;;:::o;25768:::-;25934:4;25972:2;25961:9;25957:18;25949:26;;26021:9;26015:4;26011:20;26007:1;25996:9;25992:17;25985:47;26049:131;26175:4;26049:131;:::i;:::-;26041:139;;25768:419;;;:::o;26193:222::-;26286:4;26324:2;26313:9;26309:18;26301:26;;26337:71;26405:1;26394:9;26390:17;26381:6;26337:71;:::i;:::-;26193:222;;;;:::o;26421:129::-;26455:6;26482:20;;:::i;:::-;26472:30;;26511:33;26539:4;26531:6;26511:33;:::i;:::-;26421:129;;;:::o;26556:75::-;26589:6;26622:2;26616:9;26606:19;;26556:75;:::o;26637:307::-;26698:4;26788:18;26780:6;26777:30;26774:56;;;26810:18;;:::i;:::-;26774:56;26848:29;26870:6;26848:29;:::i;:::-;26840:37;;26932:4;26926;26922:15;26914:23;;26637:307;;;:::o;26950:308::-;27012:4;27102:18;27094:6;27091:30;27088:56;;;27124:18;;:::i;:::-;27088:56;27162:29;27184:6;27162:29;:::i;:::-;27154:37;;27246:4;27240;27236:15;27228:23;;26950:308;;;:::o;27264:141::-;27313:4;27336:3;27328:11;;27359:3;27356:1;27349:14;27393:4;27390:1;27380:18;27372:26;;27264:141;;;:::o;27411:98::-;27462:6;27496:5;27490:12;27480:22;;27411:98;;;:::o;27515:99::-;27567:6;27601:5;27595:12;27585:22;;27515:99;;;:::o;27620:168::-;27703:11;27737:6;27732:3;27725:19;27777:4;27772:3;27768:14;27753:29;;27620:168;;;;:::o;27794:169::-;27878:11;27912:6;27907:3;27900:19;27952:4;27947:3;27943:14;27928:29;;27794:169;;;;:::o;27969:148::-;28071:11;28108:3;28093:18;;27969:148;;;;:::o;28123:305::-;28163:3;28182:20;28200:1;28182:20;:::i;:::-;28177:25;;28216:20;28234:1;28216:20;:::i;:::-;28211:25;;28370:1;28302:66;28298:74;28295:1;28292:81;28289:107;;;28376:18;;:::i;:::-;28289:107;28420:1;28417;28413:9;28406:16;;28123:305;;;;:::o;28434:185::-;28474:1;28491:20;28509:1;28491:20;:::i;:::-;28486:25;;28525:20;28543:1;28525:20;:::i;:::-;28520:25;;28564:1;28554:35;;28569:18;;:::i;:::-;28554:35;28611:1;28608;28604:9;28599:14;;28434:185;;;;:::o;28625:348::-;28665:7;28688:20;28706:1;28688:20;:::i;:::-;28683:25;;28722:20;28740:1;28722:20;:::i;:::-;28717:25;;28910:1;28842:66;28838:74;28835:1;28832:81;28827:1;28820:9;28813:17;28809:105;28806:131;;;28917:18;;:::i;:::-;28806:131;28965:1;28962;28958:9;28947:20;;28625:348;;;;:::o;28979:191::-;29019:4;29039:20;29057:1;29039:20;:::i;:::-;29034:25;;29073:20;29091:1;29073:20;:::i;:::-;29068:25;;29112:1;29109;29106:8;29103:34;;;29117:18;;:::i;:::-;29103:34;29162:1;29159;29155:9;29147:17;;28979:191;;;;:::o;29176:96::-;29213:7;29242:24;29260:5;29242:24;:::i;:::-;29231:35;;29176:96;;;:::o;29278:90::-;29312:7;29355:5;29348:13;29341:21;29330:32;;29278:90;;;:::o;29374:149::-;29410:7;29450:66;29443:5;29439:78;29428:89;;29374:149;;;:::o;29529:126::-;29566:7;29606:42;29599:5;29595:54;29584:65;;29529:126;;;:::o;29661:77::-;29698:7;29727:5;29716:16;;29661:77;;;:::o;29744:154::-;29828:6;29823:3;29818;29805:30;29890:1;29881:6;29876:3;29872:16;29865:27;29744:154;;;:::o;29904:307::-;29972:1;29982:113;29996:6;29993:1;29990:13;29982:113;;;30081:1;30076:3;30072:11;30066:18;30062:1;30057:3;30053:11;30046:39;30018:2;30015:1;30011:10;30006:15;;29982:113;;;30113:6;30110:1;30107:13;30104:101;;;30193:1;30184:6;30179:3;30175:16;30168:27;30104:101;29953:258;29904:307;;;:::o;30217:320::-;30261:6;30298:1;30292:4;30288:12;30278:22;;30345:1;30339:4;30335:12;30366:18;30356:81;;30422:4;30414:6;30410:17;30400:27;;30356:81;30484:2;30476:6;30473:14;30453:18;30450:38;30447:84;;;30503:18;;:::i;:::-;30447:84;30268:269;30217:320;;;:::o;30543:281::-;30626:27;30648:4;30626:27;:::i;:::-;30618:6;30614:40;30756:6;30744:10;30741:22;30720:18;30708:10;30705:34;30702:62;30699:88;;;30767:18;;:::i;:::-;30699:88;30807:10;30803:2;30796:22;30586:238;30543:281;;:::o;30830:233::-;30869:3;30892:24;30910:5;30892:24;:::i;:::-;30883:33;;30938:66;30931:5;30928:77;30925:103;;;31008:18;;:::i;:::-;30925:103;31055:1;31048:5;31044:13;31037:20;;30830:233;;;:::o;31069:176::-;31101:1;31118:20;31136:1;31118:20;:::i;:::-;31113:25;;31152:20;31170:1;31152:20;:::i;:::-;31147:25;;31191:1;31181:35;;31196:18;;:::i;:::-;31181:35;31237:1;31234;31230:9;31225:14;;31069:176;;;;:::o;31251:180::-;31299:77;31296:1;31289:88;31396:4;31393:1;31386:15;31420:4;31417:1;31410:15;31437:180;31485:77;31482:1;31475:88;31582:4;31579:1;31572:15;31606:4;31603:1;31596:15;31623:180;31671:77;31668:1;31661:88;31768:4;31765:1;31758:15;31792:4;31789:1;31782:15;31809:180;31857:77;31854:1;31847:88;31954:4;31951:1;31944:15;31978:4;31975:1;31968:15;31995:180;32043:77;32040:1;32033:88;32140:4;32137:1;32130:15;32164:4;32161:1;32154:15;32181:117;32290:1;32287;32280:12;32304:117;32413:1;32410;32403:12;32427:117;32536:1;32533;32526:12;32550:117;32659:1;32656;32649:12;32673:102;32714:6;32765:2;32761:7;32756:2;32749:5;32745:14;32741:28;32731:38;;32673:102;;;:::o;32781:166::-;32921:18;32917:1;32909:6;32905:14;32898:42;32781:166;:::o;32953:237::-;33093:34;33089:1;33081:6;33077:14;33070:58;33162:20;33157:2;33149:6;33145:15;33138:45;32953:237;:::o;33196:225::-;33336:34;33332:1;33324:6;33320:14;33313:58;33405:8;33400:2;33392:6;33388:15;33381:33;33196:225;:::o;33427:178::-;33567:30;33563:1;33555:6;33551:14;33544:54;33427:178;:::o;33611:158::-;33751:10;33747:1;33739:6;33735:14;33728:34;33611:158;:::o;33775:223::-;33915:34;33911:1;33903:6;33899:14;33892:58;33984:6;33979:2;33971:6;33967:15;33960:31;33775:223;:::o;34004:175::-;34144:27;34140:1;34132:6;34128:14;34121:51;34004:175;:::o;34185:231::-;34325:34;34321:1;34313:6;34309:14;34302:58;34394:14;34389:2;34381:6;34377:15;34370:39;34185:231;:::o;34422:243::-;34562:34;34558:1;34550:6;34546:14;34539:58;34631:26;34626:2;34618:6;34614:15;34607:51;34422:243;:::o;34671:229::-;34811:34;34807:1;34799:6;34795:14;34788:58;34880:12;34875:2;34867:6;34863:15;34856:37;34671:229;:::o;34906:228::-;35046:34;35042:1;35034:6;35030:14;35023:58;35115:11;35110:2;35102:6;35098:15;35091:36;34906:228;:::o;35140:182::-;35280:34;35276:1;35268:6;35264:14;35257:58;35140:182;:::o;35328:231::-;35468:34;35464:1;35456:6;35452:14;35445:58;35537:14;35532:2;35524:6;35520:15;35513:39;35328:231;:::o;35565:182::-;35705:34;35701:1;35693:6;35689:14;35682:58;35565:182;:::o;35753:228::-;35893:34;35889:1;35881:6;35877:14;35870:58;35962:11;35957:2;35949:6;35945:15;35938:36;35753:228;:::o;35987:234::-;36127:34;36123:1;36115:6;36111:14;36104:58;36196:17;36191:2;36183:6;36179:15;36172:42;35987:234;:::o;36227:220::-;36367:34;36363:1;36355:6;36351:14;36344:58;36436:3;36431:2;36423:6;36419:15;36412:28;36227:220;:::o;36453:236::-;36593:34;36589:1;36581:6;36577:14;36570:58;36662:19;36657:2;36649:6;36645:15;36638:44;36453:236;:::o;36695:122::-;36768:24;36786:5;36768:24;:::i;:::-;36761:5;36758:35;36748:63;;36807:1;36804;36797:12;36748:63;36695:122;:::o;36823:116::-;36893:21;36908:5;36893:21;:::i;:::-;36886:5;36883:32;36873:60;;36929:1;36926;36919:12;36873:60;36823:116;:::o;36945:120::-;37017:23;37034:5;37017:23;:::i;:::-;37010:5;37007:34;36997:62;;37055:1;37052;37045:12;36997:62;36945:120;:::o;37071:122::-;37144:24;37162:5;37144:24;:::i;:::-;37137:5;37134:35;37124:63;;37183:1;37180;37173:12;37124:63;37071:122;:::o
Swarm Source
ipfs://a4979b3dce7c0faccd129c3c7f95be06fc7671ace99190d50cf913eef490f55f
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.