ERC-721
NFT
Overview
Max Total Supply
14,577 GOOBERS
Holders
4,283
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 GOOBERSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoobersNFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; // _______ ______ ______ _______ _______ _______ ________ // /" _ "| / " \ / " \ | _ "\ /" "| /" \ /" ) // (: ( \___) // ____ \ // ____ \ (. |_) :)(: ______)|: |(: \___/ // \/ \ / / ) :)/ / ) :)|: \/ \/ | |_____/ ) \___ \ // // \ ___(: (____/ //(: (____/ // (| _ \\ // ___)_ // / __/ \\ // (: _( _|\ / \ / |: |_) :)(: "||: __ \ /" \ :) // \_______) \"_____/ \"_____/ (_______/ \_______)|__| \___)(_______/ /* * @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; } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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; } } /** * @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); } /** * @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; } } /** * @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); } } /** * @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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } /** * @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; } /** * @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); } /** * @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); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).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 {} } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract GoobersNFT is ERC721Enumerable, Ownable, ReentrancyGuard { using Counters for Counters.Counter; Counters.Counter private _tokenIds; mapping(address => uint256) whitelisted; mapping(address => uint256) reservedClaims; string private _baseTokenURI; string public GOOBER_PROVENANCE = ""; uint256 public startingIndexBlock; uint256 public startingIndex; uint256 public revealDate; uint256 public gooberPrice = 0.08 ether; uint public constant maxPurchaseAmt = 20; uint256 public maxSupply = 15000; uint256 public reservedCount; bool public saleIsActive = true; uint256 public whiteSaleStart; uint256 public whiteSaleEnd; uint256 public redeemReservedStart; constructor( uint256 _whiteSaleStart, uint256 _whiteSaleEnd, uint256 _redeemReservedStart, uint256 _revealDate ) ERC721("Goobers", "GOOBERS") { whiteSaleStart = _whiteSaleStart; whiteSaleEnd = _whiteSaleEnd; redeemReservedStart = _redeemReservedStart; revealDate = _revealDate; } function withdraw() external onlyOwner payable { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function whitelist(address[] memory addresses) external onlyOwner payable { for (uint i=0; i < addresses.length; i++){ whitelisted[addresses[i]] = 4; } } function reserveClaims(address[] memory addresses, uint256[] memory amounts) external onlyOwner payable { for (uint i=0; i < addresses.length; i++){ reservedClaims[addresses[i]] = amounts[i]; unchecked { reservedCount += amounts[i]; } } } function claim() external { require(block.timestamp > redeemReservedStart && saleIsActive, "You can't claim yet"); require(reservedClaims[msg.sender] > 0, "Nothing to claim"); uint256 _amount = reservedClaims[msg.sender]; unchecked { reservedCount -= _amount; } reservedClaims[msg.sender] = 0; _mintGoobers(_amount); } function purchase(uint256 _amount) external payable { require(block.timestamp > whiteSaleStart && saleIsActive, "Sale is not active"); require(_amount <= maxPurchaseAmt, "Can only mint 20 NFTs at a time"); require( (gooberPrice * _amount) == msg.value, "ETH value sent is not correct"); if (block.timestamp < whiteSaleEnd){ require(whitelisted[msg.sender] > 0, "Not whitelisted or used allocation"); require(_amount <= whitelisted[msg.sender], "Whitelist allocation is 4 NFTs"); unchecked { whitelisted[msg.sender] -= _amount; } } _mintGoobers(_amount); } function _mintGoobers(uint _amount) internal nonReentrant { require((_tokenIds.current() + _amount) <= maxSupply - reservedCount, "Mint would exceed max supply"); for(uint i = 0; i < _amount; i++) { _tokenIds.increment(); _safeMint(msg.sender, _tokenIds.current()); } if (startingIndexBlock == 0 && (totalSupply() == maxSupply || block.timestamp >= revealDate)) { _setStartingIndex(); } } function _setStartingIndex() internal { require(startingIndex == 0, "Starting index is already set"); startingIndexBlock = block.number - 1; startingIndex = uint(blockhash(startingIndexBlock)) % maxSupply; } function setRevealTimestamp(uint256 _revealTimeStamp) external onlyOwner payable { revealDate = _revealTimeStamp; } function setWhiteSaleStart(uint256 _startingTimestamp) external onlyOwner payable { whiteSaleStart = _startingTimestamp; } function setWhiteSaleDuration(uint256 _whiteSaleEnd) external onlyOwner payable { whiteSaleEnd = _whiteSaleEnd; } function setRedeemReservedStart(uint256 _redeemReservedStartTimestamp) external onlyOwner payable{ redeemReservedStart = _redeemReservedStartTimestamp; } function setProvenanceHash(string memory provenanceHash) external onlyOwner payable { GOOBER_PROVENANCE = provenanceHash; } function setBaseURI(string calldata newBaseTokenURI) external onlyOwner payable { _baseTokenURI = newBaseTokenURI; } function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } function baseURI() public view returns (string memory) { return _baseURI(); } function availableClaims(address addr) public view returns (uint256) { return reservedClaims[addr]; } function whitelistBalance(address _address) public view returns (uint256) { return whitelisted[_address]; } function changeSaleState() external onlyOwner payable { saleIsActive = !saleIsActive; } function setGooberPrice(uint256 Price) external onlyOwner payable { gooberPrice = Price; } function addressAllocation(address addr) public view returns (uint256){ return whitelisted[addr]; } function currentReservedCount() public view returns (uint256){ return reservedCount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_whiteSaleStart","type":"uint256"},{"internalType":"uint256","name":"_whiteSaleEnd","type":"uint256"},{"internalType":"uint256","name":"_redeemReservedStart","type":"uint256"},{"internalType":"uint256","name":"_revealDate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GOOBER_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addressAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"availableClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeSaleState","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentReservedCount","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":"gooberPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxPurchaseAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"redeemReservedStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"reserveClaims","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"reservedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newBaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Price","type":"uint256"}],"name":"setGooberPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_redeemReservedStartTimestamp","type":"uint256"}],"name":"setRedeemReservedStart","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteSaleEnd","type":"uint256"}],"name":"setWhiteSaleDuration","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startingTimestamp","type":"uint256"}],"name":"setWhiteSaleStart","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteSaleEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteSaleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"whitelistBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250601090805190602001906200002b92919062000248565b5067011c37937e080000601455613a986015556001601760006101000a81548160ff0219169083151502179055503480156200006657600080fd5b506040516200571e3803806200571e83398181016040528101906200008c91906200030f565b6040518060400160405280600781526020017f476f6f62657273000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f474f4f424552530000000000000000000000000000000000000000000000000081525081600090805190602001906200011092919062000248565b5080600190805190602001906200012992919062000248565b5050506200014c620001406200017a60201b60201c565b6200018260201b60201c565b6001600b81905550836018819055508260198190555081601a81905550806013819055505050505062000404565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002569062000385565b90600052602060002090601f0160209004810192826200027a5760008555620002c6565b82601f106200029557805160ff1916838001178555620002c6565b82800160010185558215620002c6579182015b82811115620002c5578251825591602001919060010190620002a8565b5b509050620002d59190620002d9565b5090565b5b80821115620002f4576000816000905550600101620002da565b5090565b6000815190506200030981620003ea565b92915050565b600080600080608085870312156200032657600080fd5b60006200033687828801620002f8565b94505060206200034987828801620002f8565b93505060406200035c87828801620002f8565b92505060606200036f87828801620002f8565b91505092959194509250565b6000819050919050565b600060028204905060018216806200039e57607f821691505b60208210811415620003b557620003b4620003bb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620003f5816200037b565b81146200040157600080fd5b50565b61530a80620004146000396000f3fe6080604052600436106102ae5760003560e01c8063715018a611610175578063c5ebb94b116100dc578063e36d649811610095578063efef39a11161006f578063efef39a1146109fb578063f2fde38b14610a17578063f45faa5114610a40578063f5c1fea014610a7d576102ae565b8063e36d649814610968578063e985e9c514610993578063eb8d2444146109d0576102ae565b8063c5ebb94b14610884578063c8768549146108a0578063c87b56dd146108cb578063cb774d4714610908578063d5abeb0114610933578063dd9c1f231461095e576102ae565b806395d89b411161012e57806395d89b41146107a45780639d7121f1146107cf578063a22cb465146107eb578063b88d4fde14610814578063bd8aa7801461083d578063c38f761714610859576102ae565b8063715018a6146106c25780637d4732ab146106d957806382435a47146106f55780638bf5f856146107325780638da5cb5b1461075d5780638eeab8d614610788576102ae565b80633040c99e1161021957806355f804b3116101d257806355f804b3146105ba57806358636b4f146105d65780636352211e146106015780636c0360eb1461063e5780637011299e1461066957806370a0823114610685576102ae565b80633040c99e146104cb578063368e1861146104f65780633ccfd60b1461053357806342842e0e1461053d5780634e71d92d146105665780634f6ccce71461057d576102ae565b8063095ea7b31161026b578063095ea7b3146103ca57806310969523146103f357806318160ddd1461040f5780631e08a9e41461043a57806323b872dd146104655780632f745c591461048e576102ae565b8063018a2c37146102b357806301effea9146102cf57806301ffc9a7146102fa57806305b59e611461033757806306fdde0314610362578063081812fc1461038d575b600080fd5b6102cd60048036038101906102c89190613dfb565b610aa8565b005b3480156102db57600080fd5b506102e4610b2e565b6040516102f19190614710565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613d23565b610b34565b60405161032e9190614353565b60405180910390f35b34801561034357600080fd5b5061034c610bae565b6040516103599190614710565b60405180910390f35b34801561036e57600080fd5b50610377610bb8565b604051610384919061436e565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613dfb565b610c4a565b6040516103c191906142ec565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613c3a565b610ccf565b005b61040d60048036038101906104089190613dba565b610de7565b005b34801561041b57600080fd5b50610424610e7d565b6040516104319190614710565b60405180910390f35b34801561044657600080fd5b5061044f610e8a565b60405161045c9190614710565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613b34565b610e90565b005b34801561049a57600080fd5b506104b560048036038101906104b09190613c3a565b610ef0565b6040516104c29190614710565b60405180910390f35b3480156104d757600080fd5b506104e0610f95565b6040516104ed919061436e565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613acf565b611023565b60405161052a9190614710565b60405180910390f35b61053b61106c565b005b34801561054957600080fd5b50610564600480360381019061055f9190613b34565b611137565b005b34801561057257600080fd5b5061057b611157565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613dfb565b6112da565b6040516105b19190614710565b60405180910390f35b6105d460048036038101906105cf9190613d75565b611371565b005b3480156105e257600080fd5b506105eb611403565b6040516105f89190614710565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190613dfb565b611409565b60405161063591906142ec565b60405180910390f35b34801561064a57600080fd5b506106536114bb565b604051610660919061436e565b60405180910390f35b610683600480360381019061067e9190613dfb565b6114ca565b005b34801561069157600080fd5b506106ac60048036038101906106a79190613acf565b611550565b6040516106b99190614710565b60405180910390f35b3480156106ce57600080fd5b506106d7611608565b005b6106f360048036038101906106ee9190613dfb565b611690565b005b34801561070157600080fd5b5061071c60048036038101906107179190613acf565b611716565b6040516107299190614710565b60405180910390f35b34801561073e57600080fd5b5061074761175f565b6040516107549190614710565b60405180910390f35b34801561076957600080fd5b50610772611765565b60405161077f91906142ec565b60405180910390f35b6107a2600480360381019061079d9190613dfb565b61178f565b005b3480156107b057600080fd5b506107b9611815565b6040516107c6919061436e565b60405180910390f35b6107e960048036038101906107e49190613cb7565b6118a7565b005b3480156107f757600080fd5b50610812600480360381019061080d9190613bfe565b611a5b565b005b34801561082057600080fd5b5061083b60048036038101906108369190613b83565b611bdc565b005b61085760048036038101906108529190613c76565b611c3e565b005b34801561086557600080fd5b5061086e611d62565b60405161087b9190614710565b60405180910390f35b61089e60048036038101906108999190613dfb565b611d68565b005b3480156108ac57600080fd5b506108b5611dee565b6040516108c29190614710565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed9190613dfb565b611df4565b6040516108ff919061436e565b60405180910390f35b34801561091457600080fd5b5061091d611e9b565b60405161092a9190614710565b60405180910390f35b34801561093f57600080fd5b50610948611ea1565b6040516109559190614710565b60405180910390f35b610966611ea7565b005b34801561097457600080fd5b5061097d611f4f565b60405161098a9190614710565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613af8565b611f55565b6040516109c79190614353565b60405180910390f35b3480156109dc57600080fd5b506109e5611fe9565b6040516109f29190614353565b60405180910390f35b610a156004803603810190610a109190613dfb565b611ffc565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613acf565b612253565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613acf565b61234b565b604051610a749190614710565b60405180910390f35b348015610a8957600080fd5b50610a92612394565b604051610a9f9190614710565b60405180910390f35b610ab0612399565b73ffffffffffffffffffffffffffffffffffffffff16610ace611765565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614610565b60405180910390fd5b8060138190555050565b60195481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba75750610ba6826123a1565b5b9050919050565b6000601654905090565b606060008054610bc790614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390614a18565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c5582612483565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906145f0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611409565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290614670565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a612399565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d93612399565b611f55565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90614550565b60405180910390fd5b610de283836124ef565b505050565b610def612399565b73ffffffffffffffffffffffffffffffffffffffff16610e0d611765565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90614610565b60405180910390fd5b8060109080519060200190610e799291906136f7565b5050565b6000600880549050905090565b60135481565b610ea1610e9b612399565b826125a8565b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790614690565b60405180910390fd5b610eeb838383612686565b505050565b6000610efb83611550565b8210610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906143d0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60108054610fa290614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610fce90614a18565b801561101b5780601f10610ff05761010080835404028352916020019161101b565b820191906000526020600020905b815481529060010190602001808311610ffe57829003601f168201915b505050505081565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611074612399565b73ffffffffffffffffffffffffffffffffffffffff16611092611765565b73ffffffffffffffffffffffffffffffffffffffff16146110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90614610565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611133573d6000803e3d6000fd5b5050565b61115283838360405180602001604052806000815250611bdc565b505050565b601a54421180156111745750601760009054906101000a900460ff165b6111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90614490565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c906143b0565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050806016600082825403925050819055506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112d7816128e2565b50565b60006112e4610e7d565b8210611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906146b0565b60405180910390fd5b6008828154811061135f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611379612399565b73ffffffffffffffffffffffffffffffffffffffff16611397611765565b73ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490614610565b60405180910390fd5b8181600f91906113fe92919061377d565b505050565b601a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614590565b60405180910390fd5b80915050919050565b60606114c5612a12565b905090565b6114d2612399565b73ffffffffffffffffffffffffffffffffffffffff166114f0611765565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614610565b60405180910390fd5b8060148190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614570565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611610612399565b73ffffffffffffffffffffffffffffffffffffffff1661162e611765565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90614610565b60405180910390fd5b61168e6000612aa4565b565b611698612399565b73ffffffffffffffffffffffffffffffffffffffff166116b6611765565b73ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614610565b60405180910390fd5b8060198190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60145481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611797612399565b73ffffffffffffffffffffffffffffffffffffffff166117b5611765565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614610565b60405180910390fd5b8060188190555050565b60606001805461182490614a18565b80601f016020809104026020016040519081016040528092919081815260200182805461185090614a18565b801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050905090565b6118af612399565b73ffffffffffffffffffffffffffffffffffffffff166118cd611765565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614610565b60405180910390fd5b60005b8251811015611a5657818181518110611968577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600e60008584815181106119ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110611a2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516016600082825401925050819055508080611a4e90614a7b565b915050611926565b505050565b611a63612399565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906144d0565b60405180910390fd5b8060056000611ade612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b8b612399565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bd09190614353565b60405180910390a35050565b611bed611be7612399565b836125a8565b611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614690565b60405180910390fd5b611c3884848484612b6a565b50505050565b611c46612399565b73ffffffffffffffffffffffffffffffffffffffff16611c64611765565b73ffffffffffffffffffffffffffffffffffffffff1614611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614610565b60405180910390fd5b60005b8151811015611d5e576004600d6000848481518110611d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611d5690614a7b565b915050611cbd565b5050565b60165481565b611d70612399565b73ffffffffffffffffffffffffffffffffffffffff16611d8e611765565b73ffffffffffffffffffffffffffffffffffffffff1614611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90614610565b60405180910390fd5b80601a8190555050565b60185481565b6060611dff82612483565b611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590614650565b60405180910390fd5b6000611e48612a12565b90506000815111611e685760405180602001604052806000815250611e93565b80611e7284612bc6565b604051602001611e839291906142c8565b6040516020818303038152906040525b915050919050565b60125481565b60155481565b611eaf612399565b73ffffffffffffffffffffffffffffffffffffffff16611ecd611765565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90614610565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601760009054906101000a900460ff1681565b601854421180156120195750601760009054906101000a900460ff165b612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f906144f0565b60405180910390fd5b601481111561209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614470565b60405180910390fd5b34816014546120ab91906148d4565b146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e2906146d0565b60405180910390fd5b601954421015612247576000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e906145b0565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614450565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b612250816128e2565b50565b61225b612399565b73ffffffffffffffffffffffffffffffffffffffff16612279611765565b73ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614610565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614410565b60405180910390fd5b61234881612aa4565b50565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061247c575061247b82612d73565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661256283611409565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b382612483565b6125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990614510565b60405180910390fd5b60006125fd83611409565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266c57508373ffffffffffffffffffffffffffffffffffffffff1661265484610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267d575061267c8185611f55565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a682611409565b73ffffffffffffffffffffffffffffffffffffffff16146126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f390614630565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612763906144b0565b60405180910390fd5b612777838383612ddd565b6127826000826124ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d2919061492e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612829919061484d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6002600b541415612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f906146f0565b60405180910390fd5b6002600b81905550601654601554612940919061492e565b8161294b600c612ef1565b612955919061484d565b1115612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614390565b60405180910390fd5b60005b818110156129d1576129ab600c612eff565b6129be336129b9600c612ef1565b612f15565b80806129c990614a7b565b915050612999565b5060006011541480156129f957506015546129ea610e7d565b14806129f857506013544210155b5b15612a0757612a06612f33565b5b6001600b8190555050565b6060600f8054612a2190614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4d90614a18565b8015612a9a5780601f10612a6f57610100808354040283529160200191612a9a565b820191906000526020600020905b815481529060010190602001808311612a7d57829003601f168201915b5050505050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b75848484612686565b612b8184848484612fa7565b612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb7906143f0565b60405180910390fd5b50505050565b60606000821415612c0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6e565b600082905060005b60008214612c40578080612c2990614a7b565b915050600a82612c3991906148a3565b9150612c16565b60008167ffffffffffffffff811115612c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612cb45781602001600182028036833780820191505090505b5090505b60008514612d6757600182612ccd919061492e565b9150600a85612cdc9190614ac4565b6030612ce8919061484d565b60f81b818381518110612d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d6091906148a3565b9450612cb8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612de883838361313e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e2b57612e2681613143565b612e6a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e6957612e68838261318c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ead57612ea8816132f9565b612eec565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612eeb57612eea828261343c565b5b5b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b612f2f8282604051806020016040528060008152506134bb565b5050565b600060125414612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90614530565b60405180910390fd5b600143612f85919061492e565b6011819055506015546011544060001c612f9f9190614ac4565b601281905550565b6000612fc88473ffffffffffffffffffffffffffffffffffffffff16613516565b15613131578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff1612399565b8786866040518563ffffffff1660e01b81526004016130139493929190614307565b602060405180830381600087803b15801561302d57600080fd5b505af192505050801561305e57506040513d601f19601f8201168201806040525081019061305b9190613d4c565b60015b6130e1573d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b506000815114156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d0906143f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613136565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161319984611550565b6131a3919061492e565b9050600060076000848152602001908152602001600020549050818114613288576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061330d919061492e565b9050600060096000848152602001908152602001600020549050600060088381548110613363577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106133ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061344783611550565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6134c58383613529565b6134d26000848484612fa7565b613511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613508906143f0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613590906145d0565b60405180910390fd5b6135a281612483565b156135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d990614430565b60405180910390fd5b6135ee60008383612ddd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461363e919061484d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461370390614a18565b90600052602060002090601f016020900481019282613725576000855561376c565b82601f1061373e57805160ff191683800117855561376c565b8280016001018555821561376c579182015b8281111561376b578251825591602001919060010190613750565b5b5090506137799190613803565b5090565b82805461378990614a18565b90600052602060002090601f0160209004810192826137ab57600085556137f2565b82601f106137c457803560ff19168380011785556137f2565b828001600101855582156137f2579182015b828111156137f15782358255916020019190600101906137d6565b5b5090506137ff9190613803565b5090565b5b8082111561381c576000816000905550600101613804565b5090565b600061383361382e84614750565b61472b565b9050808382526020820190508285602086028201111561385257600080fd5b60005b8581101561388257816138688882613974565b845260208401935060208301925050600181019050613855565b5050509392505050565b600061389f61389a8461477c565b61472b565b905080838252602082019050828560208602820111156138be57600080fd5b60005b858110156138ee57816138d48882613aba565b8452602084019350602083019250506001810190506138c1565b5050509392505050565b600061390b613906846147a8565b61472b565b90508281526020810184848401111561392357600080fd5b61392e8482856149d6565b509392505050565b6000613949613944846147d9565b61472b565b90508281526020810184848401111561396157600080fd5b61396c8482856149d6565b509392505050565b60008135905061398381615278565b92915050565b600082601f83011261399a57600080fd5b81356139aa848260208601613820565b91505092915050565b600082601f8301126139c457600080fd5b81356139d484826020860161388c565b91505092915050565b6000813590506139ec8161528f565b92915050565b600081359050613a01816152a6565b92915050565b600081519050613a16816152a6565b92915050565b600082601f830112613a2d57600080fd5b8135613a3d8482602086016138f8565b91505092915050565b60008083601f840112613a5857600080fd5b8235905067ffffffffffffffff811115613a7157600080fd5b602083019150836001820283011115613a8957600080fd5b9250929050565b600082601f830112613aa157600080fd5b8135613ab1848260208601613936565b91505092915050565b600081359050613ac9816152bd565b92915050565b600060208284031215613ae157600080fd5b6000613aef84828501613974565b91505092915050565b60008060408385031215613b0b57600080fd5b6000613b1985828601613974565b9250506020613b2a85828601613974565b9150509250929050565b600080600060608486031215613b4957600080fd5b6000613b5786828701613974565b9350506020613b6886828701613974565b9250506040613b7986828701613aba565b9150509250925092565b60008060008060808587031215613b9957600080fd5b6000613ba787828801613974565b9450506020613bb887828801613974565b9350506040613bc987828801613aba565b925050606085013567ffffffffffffffff811115613be657600080fd5b613bf287828801613a1c565b91505092959194509250565b60008060408385031215613c1157600080fd5b6000613c1f85828601613974565b9250506020613c30858286016139dd565b9150509250929050565b60008060408385031215613c4d57600080fd5b6000613c5b85828601613974565b9250506020613c6c85828601613aba565b9150509250929050565b600060208284031215613c8857600080fd5b600082013567ffffffffffffffff811115613ca257600080fd5b613cae84828501613989565b91505092915050565b60008060408385031215613cca57600080fd5b600083013567ffffffffffffffff811115613ce457600080fd5b613cf085828601613989565b925050602083013567ffffffffffffffff811115613d0d57600080fd5b613d19858286016139b3565b9150509250929050565b600060208284031215613d3557600080fd5b6000613d43848285016139f2565b91505092915050565b600060208284031215613d5e57600080fd5b6000613d6c84828501613a07565b91505092915050565b60008060208385031215613d8857600080fd5b600083013567ffffffffffffffff811115613da257600080fd5b613dae85828601613a46565b92509250509250929050565b600060208284031215613dcc57600080fd5b600082013567ffffffffffffffff811115613de657600080fd5b613df284828501613a90565b91505092915050565b600060208284031215613e0d57600080fd5b6000613e1b84828501613aba565b91505092915050565b613e2d81614962565b82525050565b613e3c81614974565b82525050565b6000613e4d8261480a565b613e578185614820565b9350613e678185602086016149e5565b613e7081614bb1565b840191505092915050565b6000613e8682614815565b613e908185614831565b9350613ea08185602086016149e5565b613ea981614bb1565b840191505092915050565b6000613ebf82614815565b613ec98185614842565b9350613ed98185602086016149e5565b80840191505092915050565b6000613ef2601c83614831565b9150613efd82614bc2565b602082019050919050565b6000613f15601083614831565b9150613f2082614beb565b602082019050919050565b6000613f38602b83614831565b9150613f4382614c14565b604082019050919050565b6000613f5b603283614831565b9150613f6682614c63565b604082019050919050565b6000613f7e602683614831565b9150613f8982614cb2565b604082019050919050565b6000613fa1601c83614831565b9150613fac82614d01565b602082019050919050565b6000613fc4601e83614831565b9150613fcf82614d2a565b602082019050919050565b6000613fe7601f83614831565b9150613ff282614d53565b602082019050919050565b600061400a601383614831565b915061401582614d7c565b602082019050919050565b600061402d602483614831565b915061403882614da5565b604082019050919050565b6000614050601983614831565b915061405b82614df4565b602082019050919050565b6000614073601283614831565b915061407e82614e1d565b602082019050919050565b6000614096602c83614831565b91506140a182614e46565b604082019050919050565b60006140b9601d83614831565b91506140c482614e95565b602082019050919050565b60006140dc603883614831565b91506140e782614ebe565b604082019050919050565b60006140ff602a83614831565b915061410a82614f0d565b604082019050919050565b6000614122602983614831565b915061412d82614f5c565b604082019050919050565b6000614145602283614831565b915061415082614fab565b604082019050919050565b6000614168602083614831565b915061417382614ffa565b602082019050919050565b600061418b602c83614831565b915061419682615023565b604082019050919050565b60006141ae602083614831565b91506141b982615072565b602082019050919050565b60006141d1602983614831565b91506141dc8261509b565b604082019050919050565b60006141f4602f83614831565b91506141ff826150ea565b604082019050919050565b6000614217602183614831565b915061422282615139565b604082019050919050565b600061423a603183614831565b915061424582615188565b604082019050919050565b600061425d602c83614831565b9150614268826151d7565b604082019050919050565b6000614280601d83614831565b915061428b82615226565b602082019050919050565b60006142a3601f83614831565b91506142ae8261524f565b602082019050919050565b6142c2816149cc565b82525050565b60006142d48285613eb4565b91506142e08284613eb4565b91508190509392505050565b60006020820190506143016000830184613e24565b92915050565b600060808201905061431c6000830187613e24565b6143296020830186613e24565b61433660408301856142b9565b81810360608301526143488184613e42565b905095945050505050565b60006020820190506143686000830184613e33565b92915050565b600060208201905081810360008301526143888184613e7b565b905092915050565b600060208201905081810360008301526143a981613ee5565b9050919050565b600060208201905081810360008301526143c981613f08565b9050919050565b600060208201905081810360008301526143e981613f2b565b9050919050565b6000602082019050818103600083015261440981613f4e565b9050919050565b6000602082019050818103600083015261442981613f71565b9050919050565b6000602082019050818103600083015261444981613f94565b9050919050565b6000602082019050818103600083015261446981613fb7565b9050919050565b6000602082019050818103600083015261448981613fda565b9050919050565b600060208201905081810360008301526144a981613ffd565b9050919050565b600060208201905081810360008301526144c981614020565b9050919050565b600060208201905081810360008301526144e981614043565b9050919050565b6000602082019050818103600083015261450981614066565b9050919050565b6000602082019050818103600083015261452981614089565b9050919050565b60006020820190508181036000830152614549816140ac565b9050919050565b60006020820190508181036000830152614569816140cf565b9050919050565b60006020820190508181036000830152614589816140f2565b9050919050565b600060208201905081810360008301526145a981614115565b9050919050565b600060208201905081810360008301526145c981614138565b9050919050565b600060208201905081810360008301526145e98161415b565b9050919050565b600060208201905081810360008301526146098161417e565b9050919050565b60006020820190508181036000830152614629816141a1565b9050919050565b60006020820190508181036000830152614649816141c4565b9050919050565b60006020820190508181036000830152614669816141e7565b9050919050565b600060208201905081810360008301526146898161420a565b9050919050565b600060208201905081810360008301526146a98161422d565b9050919050565b600060208201905081810360008301526146c981614250565b9050919050565b600060208201905081810360008301526146e981614273565b9050919050565b6000602082019050818103600083015261470981614296565b9050919050565b600060208201905061472560008301846142b9565b92915050565b6000614735614746565b90506147418282614a4a565b919050565b6000604051905090565b600067ffffffffffffffff82111561476b5761476a614b82565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479757614796614b82565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c3576147c2614b82565b5b6147cc82614bb1565b9050602081019050919050565b600067ffffffffffffffff8211156147f4576147f3614b82565b5b6147fd82614bb1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614858826149cc565b9150614863836149cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489857614897614af5565b5b828201905092915050565b60006148ae826149cc565b91506148b9836149cc565b9250826148c9576148c8614b24565b5b828204905092915050565b60006148df826149cc565b91506148ea836149cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492357614922614af5565b5b828202905092915050565b6000614939826149cc565b9150614944836149cc565b92508282101561495757614956614af5565b5b828203905092915050565b600061496d826149ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a035780820151818401526020810190506149e8565b83811115614a12576000848401525b50505050565b60006002820490506001821680614a3057607f821691505b60208210811415614a4457614a43614b53565b5b50919050565b614a5382614bb1565b810181811067ffffffffffffffff82111715614a7257614a71614b82565b5b80604052505050565b6000614a86826149cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ab957614ab8614af5565b5b600182019050919050565b6000614acf826149cc565b9150614ada836149cc565b925082614aea57614ae9614b24565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c69737420616c6c6f636174696f6e2069732034204e4654730000600082015250565b7f43616e206f6e6c79206d696e74203230204e46547320617420612074696d6500600082015250565b7f596f752063616e277420636c61696d2079657400000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f742077686974656c6973746564206f72207573656420616c6c6f6361746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482076616c75652073656e74206973206e6f7420636f7272656374000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61528181614962565b811461528c57600080fd5b50565b61529881614974565b81146152a357600080fd5b50565b6152af81614980565b81146152ba57600080fd5b50565b6152c6816149cc565b81146152d157600080fd5b5056fea264697066735822122022a70dffc88ea6faf44177c0e26bca1dd5069cfd601f511bc148a3c6481cb48b64736f6c63430008040033000000000000000000000000000000000000000000000000000000006144bb80000000000000000000000000000000000000000000000000000000006144e5b00000000000000000000000000000000000000000000000000000000061453a1000000000000000000000000000000000000000000000000000000000614b7d30
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c8063715018a611610175578063c5ebb94b116100dc578063e36d649811610095578063efef39a11161006f578063efef39a1146109fb578063f2fde38b14610a17578063f45faa5114610a40578063f5c1fea014610a7d576102ae565b8063e36d649814610968578063e985e9c514610993578063eb8d2444146109d0576102ae565b8063c5ebb94b14610884578063c8768549146108a0578063c87b56dd146108cb578063cb774d4714610908578063d5abeb0114610933578063dd9c1f231461095e576102ae565b806395d89b411161012e57806395d89b41146107a45780639d7121f1146107cf578063a22cb465146107eb578063b88d4fde14610814578063bd8aa7801461083d578063c38f761714610859576102ae565b8063715018a6146106c25780637d4732ab146106d957806382435a47146106f55780638bf5f856146107325780638da5cb5b1461075d5780638eeab8d614610788576102ae565b80633040c99e1161021957806355f804b3116101d257806355f804b3146105ba57806358636b4f146105d65780636352211e146106015780636c0360eb1461063e5780637011299e1461066957806370a0823114610685576102ae565b80633040c99e146104cb578063368e1861146104f65780633ccfd60b1461053357806342842e0e1461053d5780634e71d92d146105665780634f6ccce71461057d576102ae565b8063095ea7b31161026b578063095ea7b3146103ca57806310969523146103f357806318160ddd1461040f5780631e08a9e41461043a57806323b872dd146104655780632f745c591461048e576102ae565b8063018a2c37146102b357806301effea9146102cf57806301ffc9a7146102fa57806305b59e611461033757806306fdde0314610362578063081812fc1461038d575b600080fd5b6102cd60048036038101906102c89190613dfb565b610aa8565b005b3480156102db57600080fd5b506102e4610b2e565b6040516102f19190614710565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613d23565b610b34565b60405161032e9190614353565b60405180910390f35b34801561034357600080fd5b5061034c610bae565b6040516103599190614710565b60405180910390f35b34801561036e57600080fd5b50610377610bb8565b604051610384919061436e565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613dfb565b610c4a565b6040516103c191906142ec565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613c3a565b610ccf565b005b61040d60048036038101906104089190613dba565b610de7565b005b34801561041b57600080fd5b50610424610e7d565b6040516104319190614710565b60405180910390f35b34801561044657600080fd5b5061044f610e8a565b60405161045c9190614710565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613b34565b610e90565b005b34801561049a57600080fd5b506104b560048036038101906104b09190613c3a565b610ef0565b6040516104c29190614710565b60405180910390f35b3480156104d757600080fd5b506104e0610f95565b6040516104ed919061436e565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613acf565b611023565b60405161052a9190614710565b60405180910390f35b61053b61106c565b005b34801561054957600080fd5b50610564600480360381019061055f9190613b34565b611137565b005b34801561057257600080fd5b5061057b611157565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613dfb565b6112da565b6040516105b19190614710565b60405180910390f35b6105d460048036038101906105cf9190613d75565b611371565b005b3480156105e257600080fd5b506105eb611403565b6040516105f89190614710565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190613dfb565b611409565b60405161063591906142ec565b60405180910390f35b34801561064a57600080fd5b506106536114bb565b604051610660919061436e565b60405180910390f35b610683600480360381019061067e9190613dfb565b6114ca565b005b34801561069157600080fd5b506106ac60048036038101906106a79190613acf565b611550565b6040516106b99190614710565b60405180910390f35b3480156106ce57600080fd5b506106d7611608565b005b6106f360048036038101906106ee9190613dfb565b611690565b005b34801561070157600080fd5b5061071c60048036038101906107179190613acf565b611716565b6040516107299190614710565b60405180910390f35b34801561073e57600080fd5b5061074761175f565b6040516107549190614710565b60405180910390f35b34801561076957600080fd5b50610772611765565b60405161077f91906142ec565b60405180910390f35b6107a2600480360381019061079d9190613dfb565b61178f565b005b3480156107b057600080fd5b506107b9611815565b6040516107c6919061436e565b60405180910390f35b6107e960048036038101906107e49190613cb7565b6118a7565b005b3480156107f757600080fd5b50610812600480360381019061080d9190613bfe565b611a5b565b005b34801561082057600080fd5b5061083b60048036038101906108369190613b83565b611bdc565b005b61085760048036038101906108529190613c76565b611c3e565b005b34801561086557600080fd5b5061086e611d62565b60405161087b9190614710565b60405180910390f35b61089e60048036038101906108999190613dfb565b611d68565b005b3480156108ac57600080fd5b506108b5611dee565b6040516108c29190614710565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed9190613dfb565b611df4565b6040516108ff919061436e565b60405180910390f35b34801561091457600080fd5b5061091d611e9b565b60405161092a9190614710565b60405180910390f35b34801561093f57600080fd5b50610948611ea1565b6040516109559190614710565b60405180910390f35b610966611ea7565b005b34801561097457600080fd5b5061097d611f4f565b60405161098a9190614710565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613af8565b611f55565b6040516109c79190614353565b60405180910390f35b3480156109dc57600080fd5b506109e5611fe9565b6040516109f29190614353565b60405180910390f35b610a156004803603810190610a109190613dfb565b611ffc565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613acf565b612253565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613acf565b61234b565b604051610a749190614710565b60405180910390f35b348015610a8957600080fd5b50610a92612394565b604051610a9f9190614710565b60405180910390f35b610ab0612399565b73ffffffffffffffffffffffffffffffffffffffff16610ace611765565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614610565b60405180910390fd5b8060138190555050565b60195481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba75750610ba6826123a1565b5b9050919050565b6000601654905090565b606060008054610bc790614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390614a18565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c5582612483565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906145f0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611409565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290614670565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a612399565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d93612399565b611f55565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90614550565b60405180910390fd5b610de283836124ef565b505050565b610def612399565b73ffffffffffffffffffffffffffffffffffffffff16610e0d611765565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90614610565b60405180910390fd5b8060109080519060200190610e799291906136f7565b5050565b6000600880549050905090565b60135481565b610ea1610e9b612399565b826125a8565b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790614690565b60405180910390fd5b610eeb838383612686565b505050565b6000610efb83611550565b8210610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906143d0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60108054610fa290614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610fce90614a18565b801561101b5780601f10610ff05761010080835404028352916020019161101b565b820191906000526020600020905b815481529060010190602001808311610ffe57829003601f168201915b505050505081565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611074612399565b73ffffffffffffffffffffffffffffffffffffffff16611092611765565b73ffffffffffffffffffffffffffffffffffffffff16146110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90614610565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611133573d6000803e3d6000fd5b5050565b61115283838360405180602001604052806000815250611bdc565b505050565b601a54421180156111745750601760009054906101000a900460ff165b6111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90614490565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c906143b0565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050806016600082825403925050819055506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112d7816128e2565b50565b60006112e4610e7d565b8210611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906146b0565b60405180910390fd5b6008828154811061135f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611379612399565b73ffffffffffffffffffffffffffffffffffffffff16611397611765565b73ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490614610565b60405180910390fd5b8181600f91906113fe92919061377d565b505050565b601a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614590565b60405180910390fd5b80915050919050565b60606114c5612a12565b905090565b6114d2612399565b73ffffffffffffffffffffffffffffffffffffffff166114f0611765565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614610565b60405180910390fd5b8060148190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614570565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611610612399565b73ffffffffffffffffffffffffffffffffffffffff1661162e611765565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90614610565b60405180910390fd5b61168e6000612aa4565b565b611698612399565b73ffffffffffffffffffffffffffffffffffffffff166116b6611765565b73ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614610565b60405180910390fd5b8060198190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60145481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611797612399565b73ffffffffffffffffffffffffffffffffffffffff166117b5611765565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614610565b60405180910390fd5b8060188190555050565b60606001805461182490614a18565b80601f016020809104026020016040519081016040528092919081815260200182805461185090614a18565b801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050905090565b6118af612399565b73ffffffffffffffffffffffffffffffffffffffff166118cd611765565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614610565b60405180910390fd5b60005b8251811015611a5657818181518110611968577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600e60008584815181106119ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110611a2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516016600082825401925050819055508080611a4e90614a7b565b915050611926565b505050565b611a63612399565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906144d0565b60405180910390fd5b8060056000611ade612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b8b612399565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bd09190614353565b60405180910390a35050565b611bed611be7612399565b836125a8565b611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614690565b60405180910390fd5b611c3884848484612b6a565b50505050565b611c46612399565b73ffffffffffffffffffffffffffffffffffffffff16611c64611765565b73ffffffffffffffffffffffffffffffffffffffff1614611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614610565b60405180910390fd5b60005b8151811015611d5e576004600d6000848481518110611d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611d5690614a7b565b915050611cbd565b5050565b60165481565b611d70612399565b73ffffffffffffffffffffffffffffffffffffffff16611d8e611765565b73ffffffffffffffffffffffffffffffffffffffff1614611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90614610565b60405180910390fd5b80601a8190555050565b60185481565b6060611dff82612483565b611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590614650565b60405180910390fd5b6000611e48612a12565b90506000815111611e685760405180602001604052806000815250611e93565b80611e7284612bc6565b604051602001611e839291906142c8565b6040516020818303038152906040525b915050919050565b60125481565b60155481565b611eaf612399565b73ffffffffffffffffffffffffffffffffffffffff16611ecd611765565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90614610565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601760009054906101000a900460ff1681565b601854421180156120195750601760009054906101000a900460ff165b612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f906144f0565b60405180910390fd5b601481111561209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614470565b60405180910390fd5b34816014546120ab91906148d4565b146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e2906146d0565b60405180910390fd5b601954421015612247576000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e906145b0565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614450565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b612250816128e2565b50565b61225b612399565b73ffffffffffffffffffffffffffffffffffffffff16612279611765565b73ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614610565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614410565b60405180910390fd5b61234881612aa4565b50565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061247c575061247b82612d73565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661256283611409565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b382612483565b6125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990614510565b60405180910390fd5b60006125fd83611409565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266c57508373ffffffffffffffffffffffffffffffffffffffff1661265484610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267d575061267c8185611f55565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a682611409565b73ffffffffffffffffffffffffffffffffffffffff16146126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f390614630565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612763906144b0565b60405180910390fd5b612777838383612ddd565b6127826000826124ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d2919061492e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612829919061484d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6002600b541415612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f906146f0565b60405180910390fd5b6002600b81905550601654601554612940919061492e565b8161294b600c612ef1565b612955919061484d565b1115612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614390565b60405180910390fd5b60005b818110156129d1576129ab600c612eff565b6129be336129b9600c612ef1565b612f15565b80806129c990614a7b565b915050612999565b5060006011541480156129f957506015546129ea610e7d565b14806129f857506013544210155b5b15612a0757612a06612f33565b5b6001600b8190555050565b6060600f8054612a2190614a18565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4d90614a18565b8015612a9a5780601f10612a6f57610100808354040283529160200191612a9a565b820191906000526020600020905b815481529060010190602001808311612a7d57829003601f168201915b5050505050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b75848484612686565b612b8184848484612fa7565b612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb7906143f0565b60405180910390fd5b50505050565b60606000821415612c0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6e565b600082905060005b60008214612c40578080612c2990614a7b565b915050600a82612c3991906148a3565b9150612c16565b60008167ffffffffffffffff811115612c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612cb45781602001600182028036833780820191505090505b5090505b60008514612d6757600182612ccd919061492e565b9150600a85612cdc9190614ac4565b6030612ce8919061484d565b60f81b818381518110612d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d6091906148a3565b9450612cb8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612de883838361313e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e2b57612e2681613143565b612e6a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e6957612e68838261318c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ead57612ea8816132f9565b612eec565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612eeb57612eea828261343c565b5b5b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b612f2f8282604051806020016040528060008152506134bb565b5050565b600060125414612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90614530565b60405180910390fd5b600143612f85919061492e565b6011819055506015546011544060001c612f9f9190614ac4565b601281905550565b6000612fc88473ffffffffffffffffffffffffffffffffffffffff16613516565b15613131578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff1612399565b8786866040518563ffffffff1660e01b81526004016130139493929190614307565b602060405180830381600087803b15801561302d57600080fd5b505af192505050801561305e57506040513d601f19601f8201168201806040525081019061305b9190613d4c565b60015b6130e1573d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b506000815114156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d0906143f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613136565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161319984611550565b6131a3919061492e565b9050600060076000848152602001908152602001600020549050818114613288576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061330d919061492e565b9050600060096000848152602001908152602001600020549050600060088381548110613363577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106133ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061344783611550565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6134c58383613529565b6134d26000848484612fa7565b613511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613508906143f0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613590906145d0565b60405180910390fd5b6135a281612483565b156135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d990614430565b60405180910390fd5b6135ee60008383612ddd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461363e919061484d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461370390614a18565b90600052602060002090601f016020900481019282613725576000855561376c565b82601f1061373e57805160ff191683800117855561376c565b8280016001018555821561376c579182015b8281111561376b578251825591602001919060010190613750565b5b5090506137799190613803565b5090565b82805461378990614a18565b90600052602060002090601f0160209004810192826137ab57600085556137f2565b82601f106137c457803560ff19168380011785556137f2565b828001600101855582156137f2579182015b828111156137f15782358255916020019190600101906137d6565b5b5090506137ff9190613803565b5090565b5b8082111561381c576000816000905550600101613804565b5090565b600061383361382e84614750565b61472b565b9050808382526020820190508285602086028201111561385257600080fd5b60005b8581101561388257816138688882613974565b845260208401935060208301925050600181019050613855565b5050509392505050565b600061389f61389a8461477c565b61472b565b905080838252602082019050828560208602820111156138be57600080fd5b60005b858110156138ee57816138d48882613aba565b8452602084019350602083019250506001810190506138c1565b5050509392505050565b600061390b613906846147a8565b61472b565b90508281526020810184848401111561392357600080fd5b61392e8482856149d6565b509392505050565b6000613949613944846147d9565b61472b565b90508281526020810184848401111561396157600080fd5b61396c8482856149d6565b509392505050565b60008135905061398381615278565b92915050565b600082601f83011261399a57600080fd5b81356139aa848260208601613820565b91505092915050565b600082601f8301126139c457600080fd5b81356139d484826020860161388c565b91505092915050565b6000813590506139ec8161528f565b92915050565b600081359050613a01816152a6565b92915050565b600081519050613a16816152a6565b92915050565b600082601f830112613a2d57600080fd5b8135613a3d8482602086016138f8565b91505092915050565b60008083601f840112613a5857600080fd5b8235905067ffffffffffffffff811115613a7157600080fd5b602083019150836001820283011115613a8957600080fd5b9250929050565b600082601f830112613aa157600080fd5b8135613ab1848260208601613936565b91505092915050565b600081359050613ac9816152bd565b92915050565b600060208284031215613ae157600080fd5b6000613aef84828501613974565b91505092915050565b60008060408385031215613b0b57600080fd5b6000613b1985828601613974565b9250506020613b2a85828601613974565b9150509250929050565b600080600060608486031215613b4957600080fd5b6000613b5786828701613974565b9350506020613b6886828701613974565b9250506040613b7986828701613aba565b9150509250925092565b60008060008060808587031215613b9957600080fd5b6000613ba787828801613974565b9450506020613bb887828801613974565b9350506040613bc987828801613aba565b925050606085013567ffffffffffffffff811115613be657600080fd5b613bf287828801613a1c565b91505092959194509250565b60008060408385031215613c1157600080fd5b6000613c1f85828601613974565b9250506020613c30858286016139dd565b9150509250929050565b60008060408385031215613c4d57600080fd5b6000613c5b85828601613974565b9250506020613c6c85828601613aba565b9150509250929050565b600060208284031215613c8857600080fd5b600082013567ffffffffffffffff811115613ca257600080fd5b613cae84828501613989565b91505092915050565b60008060408385031215613cca57600080fd5b600083013567ffffffffffffffff811115613ce457600080fd5b613cf085828601613989565b925050602083013567ffffffffffffffff811115613d0d57600080fd5b613d19858286016139b3565b9150509250929050565b600060208284031215613d3557600080fd5b6000613d43848285016139f2565b91505092915050565b600060208284031215613d5e57600080fd5b6000613d6c84828501613a07565b91505092915050565b60008060208385031215613d8857600080fd5b600083013567ffffffffffffffff811115613da257600080fd5b613dae85828601613a46565b92509250509250929050565b600060208284031215613dcc57600080fd5b600082013567ffffffffffffffff811115613de657600080fd5b613df284828501613a90565b91505092915050565b600060208284031215613e0d57600080fd5b6000613e1b84828501613aba565b91505092915050565b613e2d81614962565b82525050565b613e3c81614974565b82525050565b6000613e4d8261480a565b613e578185614820565b9350613e678185602086016149e5565b613e7081614bb1565b840191505092915050565b6000613e8682614815565b613e908185614831565b9350613ea08185602086016149e5565b613ea981614bb1565b840191505092915050565b6000613ebf82614815565b613ec98185614842565b9350613ed98185602086016149e5565b80840191505092915050565b6000613ef2601c83614831565b9150613efd82614bc2565b602082019050919050565b6000613f15601083614831565b9150613f2082614beb565b602082019050919050565b6000613f38602b83614831565b9150613f4382614c14565b604082019050919050565b6000613f5b603283614831565b9150613f6682614c63565b604082019050919050565b6000613f7e602683614831565b9150613f8982614cb2565b604082019050919050565b6000613fa1601c83614831565b9150613fac82614d01565b602082019050919050565b6000613fc4601e83614831565b9150613fcf82614d2a565b602082019050919050565b6000613fe7601f83614831565b9150613ff282614d53565b602082019050919050565b600061400a601383614831565b915061401582614d7c565b602082019050919050565b600061402d602483614831565b915061403882614da5565b604082019050919050565b6000614050601983614831565b915061405b82614df4565b602082019050919050565b6000614073601283614831565b915061407e82614e1d565b602082019050919050565b6000614096602c83614831565b91506140a182614e46565b604082019050919050565b60006140b9601d83614831565b91506140c482614e95565b602082019050919050565b60006140dc603883614831565b91506140e782614ebe565b604082019050919050565b60006140ff602a83614831565b915061410a82614f0d565b604082019050919050565b6000614122602983614831565b915061412d82614f5c565b604082019050919050565b6000614145602283614831565b915061415082614fab565b604082019050919050565b6000614168602083614831565b915061417382614ffa565b602082019050919050565b600061418b602c83614831565b915061419682615023565b604082019050919050565b60006141ae602083614831565b91506141b982615072565b602082019050919050565b60006141d1602983614831565b91506141dc8261509b565b604082019050919050565b60006141f4602f83614831565b91506141ff826150ea565b604082019050919050565b6000614217602183614831565b915061422282615139565b604082019050919050565b600061423a603183614831565b915061424582615188565b604082019050919050565b600061425d602c83614831565b9150614268826151d7565b604082019050919050565b6000614280601d83614831565b915061428b82615226565b602082019050919050565b60006142a3601f83614831565b91506142ae8261524f565b602082019050919050565b6142c2816149cc565b82525050565b60006142d48285613eb4565b91506142e08284613eb4565b91508190509392505050565b60006020820190506143016000830184613e24565b92915050565b600060808201905061431c6000830187613e24565b6143296020830186613e24565b61433660408301856142b9565b81810360608301526143488184613e42565b905095945050505050565b60006020820190506143686000830184613e33565b92915050565b600060208201905081810360008301526143888184613e7b565b905092915050565b600060208201905081810360008301526143a981613ee5565b9050919050565b600060208201905081810360008301526143c981613f08565b9050919050565b600060208201905081810360008301526143e981613f2b565b9050919050565b6000602082019050818103600083015261440981613f4e565b9050919050565b6000602082019050818103600083015261442981613f71565b9050919050565b6000602082019050818103600083015261444981613f94565b9050919050565b6000602082019050818103600083015261446981613fb7565b9050919050565b6000602082019050818103600083015261448981613fda565b9050919050565b600060208201905081810360008301526144a981613ffd565b9050919050565b600060208201905081810360008301526144c981614020565b9050919050565b600060208201905081810360008301526144e981614043565b9050919050565b6000602082019050818103600083015261450981614066565b9050919050565b6000602082019050818103600083015261452981614089565b9050919050565b60006020820190508181036000830152614549816140ac565b9050919050565b60006020820190508181036000830152614569816140cf565b9050919050565b60006020820190508181036000830152614589816140f2565b9050919050565b600060208201905081810360008301526145a981614115565b9050919050565b600060208201905081810360008301526145c981614138565b9050919050565b600060208201905081810360008301526145e98161415b565b9050919050565b600060208201905081810360008301526146098161417e565b9050919050565b60006020820190508181036000830152614629816141a1565b9050919050565b60006020820190508181036000830152614649816141c4565b9050919050565b60006020820190508181036000830152614669816141e7565b9050919050565b600060208201905081810360008301526146898161420a565b9050919050565b600060208201905081810360008301526146a98161422d565b9050919050565b600060208201905081810360008301526146c981614250565b9050919050565b600060208201905081810360008301526146e981614273565b9050919050565b6000602082019050818103600083015261470981614296565b9050919050565b600060208201905061472560008301846142b9565b92915050565b6000614735614746565b90506147418282614a4a565b919050565b6000604051905090565b600067ffffffffffffffff82111561476b5761476a614b82565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479757614796614b82565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c3576147c2614b82565b5b6147cc82614bb1565b9050602081019050919050565b600067ffffffffffffffff8211156147f4576147f3614b82565b5b6147fd82614bb1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614858826149cc565b9150614863836149cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489857614897614af5565b5b828201905092915050565b60006148ae826149cc565b91506148b9836149cc565b9250826148c9576148c8614b24565b5b828204905092915050565b60006148df826149cc565b91506148ea836149cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492357614922614af5565b5b828202905092915050565b6000614939826149cc565b9150614944836149cc565b92508282101561495757614956614af5565b5b828203905092915050565b600061496d826149ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a035780820151818401526020810190506149e8565b83811115614a12576000848401525b50505050565b60006002820490506001821680614a3057607f821691505b60208210811415614a4457614a43614b53565b5b50919050565b614a5382614bb1565b810181811067ffffffffffffffff82111715614a7257614a71614b82565b5b80604052505050565b6000614a86826149cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ab957614ab8614af5565b5b600182019050919050565b6000614acf826149cc565b9150614ada836149cc565b925082614aea57614ae9614b24565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c69737420616c6c6f636174696f6e2069732034204e4654730000600082015250565b7f43616e206f6e6c79206d696e74203230204e46547320617420612074696d6500600082015250565b7f596f752063616e277420636c61696d2079657400000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f742077686974656c6973746564206f72207573656420616c6c6f6361746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482076616c75652073656e74206973206e6f7420636f7272656374000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61528181614962565b811461528c57600080fd5b50565b61529881614974565b81146152a357600080fd5b50565b6152af81614980565b81146152ba57600080fd5b50565b6152c6816149cc565b81146152d157600080fd5b5056fea264697066735822122022a70dffc88ea6faf44177c0e26bca1dd5069cfd601f511bc148a3c6481cb48b64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000006144bb80000000000000000000000000000000000000000000000000000000006144e5b00000000000000000000000000000000000000000000000000000000061453a1000000000000000000000000000000000000000000000000000000000614b7d30
-----Decoded View---------------
Arg [0] : _whiteSaleStart (uint256): 1631894400
Arg [1] : _whiteSaleEnd (uint256): 1631905200
Arg [2] : _redeemReservedStart (uint256): 1631926800
Arg [3] : _revealDate (uint256): 1632337200
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000006144bb80
Arg [1] : 000000000000000000000000000000000000000000000000000000006144e5b0
Arg [2] : 0000000000000000000000000000000000000000000000000000000061453a10
Arg [3] : 00000000000000000000000000000000000000000000000000000000614b7d30
Deployed Bytecode Sourcemap
46487:5526:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50196:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47220:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40337:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51908:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27465;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29024:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28547:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50804:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40977:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46914:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29914:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40645:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46786:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51433:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47670:150;;;:::i;:::-;;30324:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48332:407;;;;;;;;;;;;;:::i;:::-;;41167:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50953:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47254:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27159:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51209:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51666:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26889:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5737:94;;;;;;;;;;;;;:::i;:::-;;50486:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51312:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46952:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5086:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50338:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27634:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48033:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29317:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30580:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47832:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47103:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50625:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47184:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27809:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46877:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47058:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51553:101;;;:::i;:::-;;46835:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29683:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47140:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48751:673;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5986:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51783:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47005:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50196:129;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50301:16:::1;50288:10;:29;;;;50196:129:::0;:::o;47220:27::-;;;;:::o;40337:224::-;40439:4;40478:35;40463:50;;;:11;:50;;;;:90;;;;40517:36;40541:11;40517:23;:36::i;:::-;40463:90;40456:97;;40337:224;;;:::o;51908:100::-;51961:7;51987:13;;51980:20;;51908:100;:::o;27465:::-;27519:13;27552:5;27545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27465:100;:::o;29024:221::-;29100:7;29128:16;29136:7;29128;:16::i;:::-;29120:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29213:15;:24;29229:7;29213:24;;;;;;;;;;;;;;;;;;;;;29206:31;;29024:221;;;:::o;28547:411::-;28628:13;28644:23;28659:7;28644:14;:23::i;:::-;28628:39;;28692:5;28686:11;;:2;:11;;;;28678:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28786:5;28770:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28795:37;28812:5;28819:12;:10;:12::i;:::-;28795:16;:37::i;:::-;28770:62;28748:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28929:21;28938:2;28942:7;28929:8;:21::i;:::-;28547:411;;;:::o;50804:137::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50919:14:::1;50899:17;:34;;;;;;;;;;;;:::i;:::-;;50804:137:::0;:::o;40977:113::-;41038:7;41065:10;:17;;;;41058:24;;40977:113;:::o;46914:25::-;;;;:::o;29914:339::-;30109:41;30128:12;:10;:12::i;:::-;30142:7;30109:18;:41::i;:::-;30101:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30217:28;30227:4;30233:2;30237:7;30217:9;:28::i;:::-;29914:339;;;:::o;40645:256::-;40742:7;40778:23;40795:5;40778:16;:23::i;:::-;40770:5;:31;40762:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40867:12;:19;40880:5;40867:19;;;;;;;;;;;;;;;:26;40887:5;40867:26;;;;;;;;;;;;40860:33;;40645:256;;;;:::o;46786:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51433:112::-;51498:7;51519:11;:21;51531:8;51519:21;;;;;;;;;;;;;;;;51512:28;;51433:112;;;:::o;47670:150::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47728:12:::1;47743:21;47728:36;;47783:10;47775:28;;:37;47804:7;47775:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5377:1;47670:150::o:0;30324:185::-;30462:39;30479:4;30485:2;30489:7;30462:39;;;;;;;;;;;;:16;:39::i;:::-;30324:185;;;:::o;48332:407::-;48395:19;;48377:15;:37;:53;;;;;48418:12;;;;;;;;;;;48377:53;48369:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;48502:1;48473:14;:26;48488:10;48473:26;;;;;;;;;;;;;;;;:30;48465:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48545:15;48563:14;:26;48578:10;48563:26;;;;;;;;;;;;;;;;48545:44;;48629:7;48612:13;;:24;;;;;;;;;;;48678:1;48649:14;:26;48664:10;48649:26;;;;;;;;;;;;;;;:30;;;;48700:21;48713:7;48700:12;:21::i;:::-;48332:407;:::o;41167:233::-;41242:7;41278:30;:28;:30::i;:::-;41270:5;:38;41262:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41375:10;41386:5;41375:17;;;;;;;;;;;;;;;;;;;;;;;;41368:24;;41167:233;;;:::o;50953:130::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51060:15:::1;;51044:13;:31;;;;;;;:::i;:::-;;50953:130:::0;;:::o;47254:34::-;;;;:::o;27159:239::-;27231:7;27251:13;27267:7;:16;27275:7;27267:16;;;;;;;;;;;;;;;;;;;;;27251:32;;27319:1;27302:19;;:5;:19;;;;27294:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27385:5;27378:12;;;27159:239;;;:::o;51209:91::-;51249:13;51282:10;:8;:10::i;:::-;51275:17;;51209:91;:::o;51666:104::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51757:5:::1;51743:11;:19;;;;51666:104:::0;:::o;26889:208::-;26961:7;27006:1;26989:19;;:5;:19;;;;26981:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27073:9;:16;27083:5;27073:16;;;;;;;;;;;;;;;;27066:23;;26889:208;;;:::o;5737:94::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5802:21:::1;5820:1;5802:9;:21::i;:::-;5737:94::o:0;50486:127::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50592:13:::1;50577:12;:28;;;;50486:127:::0;:::o;51312:115::-;51372:7;51399:14;:20;51414:4;51399:20;;;;;;;;;;;;;;;;51392:27;;51312:115;;;:::o;46952:39::-;;;;:::o;5086:87::-;5132:7;5159:6;;;;;;;;;;;5152:13;;5086:87;:::o;50338:136::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50448:18:::1;50431:14;:35;;;;50338:136:::0;:::o;27634:104::-;27690:13;27723:7;27716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27634:104;:::o;48033:287::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48153:6:::1;48148:165;48167:9;:16;48163:1;:20;48148:165;;;48235:7;48243:1;48235:10;;;;;;;;;;;;;;;;;;;;;;48204:14;:28;48219:9;48229:1;48219:12;;;;;;;;;;;;;;;;;;;;;;48204:28;;;;;;;;;;;;;;;:41;;;;48289:7;48297:1;48289:10;;;;;;;;;;;;;;;;;;;;;;48272:13;;:27;;;;;;;;;;;48185:3;;;;;:::i;:::-;;;;48148:165;;;;48033:287:::0;;:::o;29317:295::-;29432:12;:10;:12::i;:::-;29420:24;;:8;:24;;;;29412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29532:8;29487:18;:32;29506:12;:10;:12::i;:::-;29487:32;;;;;;;;;;;;;;;:42;29520:8;29487:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29585:8;29556:48;;29571:12;:10;:12::i;:::-;29556:48;;;29595:8;29556:48;;;;;;:::i;:::-;;;;;;;;29317:295;;:::o;30580:328::-;30755:41;30774:12;:10;:12::i;:::-;30788:7;30755:18;:41::i;:::-;30747:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30861:39;30875:4;30881:2;30885:7;30894:5;30861:13;:39::i;:::-;30580:328;;;;:::o;47832:189::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47922:6:::1;47917:97;47936:9;:16;47932:1;:20;47917:97;;;48001:1;47973:11;:25;47985:9;47995:1;47985:12;;;;;;;;;;;;;;;;;;;;;;47973:25;;;;;;;;;;;;;;;:29;;;;47954:3;;;;;:::i;:::-;;;;47917:97;;;;47832:189:::0;:::o;47103:28::-;;;;:::o;50625:167::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50755:29:::1;50733:19;:51;;;;50625:167:::0;:::o;47184:29::-;;;;:::o;27809:334::-;27882:13;27916:16;27924:7;27916;:16::i;:::-;27908:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27997:21;28021:10;:8;:10::i;:::-;27997:34;;28073:1;28055:7;28049:21;:25;:86;;;;;;;;;;;;;;;;;28101:7;28110:18;:7;:16;:18::i;:::-;28084:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28049:86;28042:93;;;27809:334;;;:::o;46877:28::-;;;;:::o;47058:32::-;;;;:::o;51553:101::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51634:12:::1;;;;;;;;;;;51633:13;51618:12;;:28;;;;;;;;;;;;;;;;;;51553:101::o:0;46835:33::-;;;;:::o;29683:164::-;29780:4;29804:18;:25;29823:5;29804:25;;;;;;;;;;;;;;;:35;29830:8;29804:35;;;;;;;;;;;;;;;;;;;;;;;;;29797:42;;29683:164;;;;:::o;47140:31::-;;;;;;;;;;;;;:::o;48751:673::-;48840:14;;48822:15;:32;:48;;;;;48858:12;;;;;;;;;;;48822:48;48814:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;47043:2;48912:7;:25;;48904:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49020:9;49008:7;48994:11;;:21;;;;:::i;:::-;48993:36;48984:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49106:12;;49088:15;:30;49084:291;;;49168:1;49142:11;:23;49154:10;49142:23;;;;;;;;;;;;;;;;:27;49134:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;49242:11;:23;49254:10;49242:23;;;;;;;;;;;;;;;;49231:7;:34;;49223:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49354:7;49327:11;:23;49339:10;49327:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;49084:291;49395:21;49408:7;49395:12;:21::i;:::-;48751:673;:::o;5986:192::-;5317:12;:10;:12::i;:::-;5306:23;;:7;:5;:7::i;:::-;:23;;;5298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6095:1:::1;6075:22;;:8;:22;;;;6067:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6151:19;6161:8;6151:9;:19::i;:::-;5986:192:::0;:::o;51783:113::-;51845:7;51871:11;:17;51883:4;51871:17;;;;;;;;;;;;;;;;51864:24;;51783:113;;;:::o;47005:40::-;47043:2;47005:40;:::o;1358:98::-;1411:7;1438:10;1431:17;;1358:98;:::o;26520:305::-;26622:4;26674:25;26659:40;;;:11;:40;;;;:105;;;;26731:33;26716:48;;;:11;:48;;;;26659:105;:158;;;;26781:36;26805:11;26781:23;:36::i;:::-;26659:158;26639:178;;26520:305;;;:::o;32418:127::-;32483:4;32535:1;32507:30;;:7;:16;32515:7;32507:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32500:37;;32418:127;;;:::o;36400:174::-;36502:2;36475:15;:24;36491:7;36475:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36558:7;36554:2;36520:46;;36529:23;36544:7;36529:14;:23::i;:::-;36520:46;;;;;;;;;;;;36400:174;;:::o;32712:348::-;32805:4;32830:16;32838:7;32830;:16::i;:::-;32822:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32906:13;32922:23;32937:7;32922:14;:23::i;:::-;32906:39;;32975:5;32964:16;;:7;:16;;;:51;;;;33008:7;32984:31;;:20;32996:7;32984:11;:20::i;:::-;:31;;;32964:51;:87;;;;33019:32;33036:5;33043:7;33019:16;:32::i;:::-;32964:87;32956:96;;;32712:348;;;;:::o;35704:578::-;35863:4;35836:31;;:23;35851:7;35836:14;:23::i;:::-;:31;;;35828:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35946:1;35932:16;;:2;:16;;;;35924:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36002:39;36023:4;36029:2;36033:7;36002:20;:39::i;:::-;36106:29;36123:1;36127:7;36106:8;:29::i;:::-;36167:1;36148:9;:15;36158:4;36148:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36196:1;36179:9;:13;36189:2;36179:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36227:2;36208:7;:16;36216:7;36208:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36266:7;36262:2;36247:27;;36256:4;36247:27;;;;;;;;;;;;35704:578;;;:::o;49436:491::-;3227:1;3823:7;;:19;;3815:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3227:1;3956:7;:18;;;;49561:13:::1;;49549:9;;:25;;;;:::i;:::-;49536:7;49514:19;:9;:17;:19::i;:::-;:29;;;;:::i;:::-;49513:61;;49505:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;49632:6;49628:139;49648:7;49644:1;:11;49628:139;;;49677:21;:9;:19;:21::i;:::-;49713:42;49723:10;49735:19;:9;:17;:19::i;:::-;49713:9;:42::i;:::-;49657:3;;;;;:::i;:::-;;;;49628:139;;;;49805:1;49783:18;;:23;:88;;;;;49828:9;;49811:13;:11;:13::i;:::-;:26;:59;;;;49860:10;;49841:15;:29;;49811:59;49783:88;49779:140;;;49888:19;:17;:19::i;:::-;49779:140;3183:1:::0;4135:7;:22;;;;49436:491;:::o;51095:106::-;51147:13;51180;51173:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51095:106;:::o;6186:173::-;6242:16;6261:6;;;;;;;;;;;6242:25;;6287:8;6278:6;;:17;;;;;;;;;;;;;;;;;;6342:8;6311:40;;6332:8;6311:40;;;;;;;;;;;;6186:173;;:::o;31790:315::-;31947:28;31957:4;31963:2;31967:7;31947:9;:28::i;:::-;31994:48;32017:4;32023:2;32027:7;32036:5;31994:22;:48::i;:::-;31986:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31790:315;;;;:::o;9538:723::-;9594:13;9824:1;9815:5;:10;9811:53;;;9842:10;;;;;;;;;;;;;;;;;;;;;9811:53;9874:12;9889:5;9874:20;;9905:14;9930:78;9945:1;9937:4;:9;9930:78;;9963:8;;;;;:::i;:::-;;;;9994:2;9986:10;;;;;:::i;:::-;;;9930:78;;;10018:19;10050:6;10040:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10018:39;;10068:154;10084:1;10075:5;:10;10068:154;;10112:1;10102:11;;;;;:::i;:::-;;;10179:2;10171:5;:10;;;;:::i;:::-;10158:2;:24;;;;:::i;:::-;10145:39;;10128:6;10135;10128:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;10208:2;10199:11;;;;;:::i;:::-;;;10068:154;;;10246:6;10232:21;;;;;9538:723;;;;:::o;9146:157::-;9231:4;9270:25;9255:40;;;:11;:40;;;;9248:47;;9146:157;;;:::o;42013:589::-;42157:45;42184:4;42190:2;42194:7;42157:26;:45::i;:::-;42235:1;42219:18;;:4;:18;;;42215:187;;;42254:40;42286:7;42254:31;:40::i;:::-;42215:187;;;42324:2;42316:10;;:4;:10;;;42312:90;;42343:47;42376:4;42382:7;42343:32;:47::i;:::-;42312:90;42215:187;42430:1;42416:16;;:2;:16;;;42412:183;;;42449:45;42486:7;42449:36;:45::i;:::-;42412:183;;;42522:4;42516:10;;:2;:10;;;42512:83;;42543:40;42571:2;42575:7;42543:27;:40::i;:::-;42512:83;42412:183;42013:589;;;:::o;7099:114::-;7164:7;7191;:14;;;7184:21;;7099:114;;;:::o;7221:127::-;7328:1;7310:7;:14;;;:19;;;;;;;;;;;7221:127;:::o;33402:110::-;33478:26;33488:2;33492:7;33478:26;;;;;;;;;;;;:9;:26::i;:::-;33402:110;;:::o;49945:243::-;50019:1;50002:13;;:18;49994:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50103:1;50088:12;:16;;;;:::i;:::-;50067:18;:37;;;;50171:9;;50148:18;;50138:29;50133:35;;:47;;;;:::i;:::-;50117:13;:63;;;;49945:243::o;37139:803::-;37294:4;37315:15;:2;:13;;;:15::i;:::-;37311:624;;;37367:2;37351:36;;;37388:12;:10;:12::i;:::-;37402:4;37408:7;37417:5;37351:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37347:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37614:1;37597:6;:13;:18;37593:272;;;37640:60;;;;;;;;;;:::i;:::-;;;;;;;;37593:272;37815:6;37809:13;37800:6;37796:2;37792:15;37785:38;37347:533;37484:45;;;37474:55;;;:6;:55;;;;37467:62;;;;;37311:624;37919:4;37912:11;;37139:803;;;;;;;:::o;38514:126::-;;;;:::o;43325:164::-;43429:10;:17;;;;43402:15;:24;43418:7;43402:24;;;;;;;;;;;:44;;;;43457:10;43473:7;43457:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43325:164;:::o;44116:988::-;44382:22;44432:1;44407:22;44424:4;44407:16;:22::i;:::-;:26;;;;:::i;:::-;44382:51;;44444:18;44465:17;:26;44483:7;44465:26;;;;;;;;;;;;44444:47;;44612:14;44598:10;:28;44594:328;;44643:19;44665:12;:18;44678:4;44665:18;;;;;;;;;;;;;;;:34;44684:14;44665:34;;;;;;;;;;;;44643:56;;44749:11;44716:12;:18;44729:4;44716:18;;;;;;;;;;;;;;;:30;44735:10;44716:30;;;;;;;;;;;:44;;;;44866:10;44833:17;:30;44851:11;44833:30;;;;;;;;;;;:43;;;;44594:328;;45018:17;:26;45036:7;45018:26;;;;;;;;;;;45011:33;;;45062:12;:18;45075:4;45062:18;;;;;;;;;;;;;;;:34;45081:14;45062:34;;;;;;;;;;;45055:41;;;44116:988;;;;:::o;45399:1079::-;45652:22;45697:1;45677:10;:17;;;;:21;;;;:::i;:::-;45652:46;;45709:18;45730:15;:24;45746:7;45730:24;;;;;;;;;;;;45709:45;;46081:19;46103:10;46114:14;46103:26;;;;;;;;;;;;;;;;;;;;;;;;46081:48;;46167:11;46142:10;46153;46142:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46278:10;46247:15;:28;46263:11;46247:28;;;;;;;;;;;:41;;;;46419:15;:24;46435:7;46419:24;;;;;;;;;;;46412:31;;;46454:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45399:1079;;;;:::o;42903:221::-;42988:14;43005:20;43022:2;43005:16;:20::i;:::-;42988:37;;43063:7;43036:12;:16;43049:2;43036:16;;;;;;;;;;;;;;;:24;43053:6;43036:24;;;;;;;;;;;:34;;;;43110:6;43081:17;:26;43099:7;43081:26;;;;;;;;;;;:35;;;;42903:221;;;:::o;33739:321::-;33869:18;33875:2;33879:7;33869:5;:18::i;:::-;33920:54;33951:1;33955:2;33959:7;33968:5;33920:22;:54::i;:::-;33898:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33739:321;;;:::o;11980:387::-;12040:4;12248:12;12315:7;12303:20;12295:28;;12358:1;12351:4;:8;12344:15;;;11980:387;;;:::o;34396:382::-;34490:1;34476:16;;:2;:16;;;;34468:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:16;34557:7;34549;:16::i;:::-;34548:17;34540:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34611:45;34640:1;34644:2;34648:7;34611:20;:45::i;:::-;34686:1;34669:9;:13;34679:2;34669:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34717:2;34698:7;:16;34706:7;34698:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34762:7;34758:2;34737:33;;34754:1;34737:33;;;;;;;;;;;;34396:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:352::-;3651:8;3661:6;3711:3;3704:4;3696:6;3692:17;3688:27;3678:2;;3729:1;3726;3719:12;3678:2;3765:6;3752:20;3742:30;;3795:18;3787:6;3784:30;3781:2;;;3827:1;3824;3817:12;3781:2;3864:4;3856:6;3852:17;3840:29;;3918:3;3910:4;3902:6;3898:17;3888:8;3884:32;3881:41;3878:2;;;3935:1;3932;3925:12;3878:2;3668:277;;;;;:::o;3965:273::-;4021:5;4070:3;4063:4;4055:6;4051:17;4047:27;4037:2;;4088:1;4085;4078:12;4037:2;4128:6;4115:20;4153:79;4228:3;4220:6;4213:4;4205:6;4201:17;4153:79;:::i;:::-;4144:88;;4027:211;;;;;:::o;4244:139::-;4290:5;4328:6;4315:20;4306:29;;4344:33;4371:5;4344:33;:::i;:::-;4296:87;;;;:::o;4389:262::-;4448:6;4497:2;4485:9;4476:7;4472:23;4468:32;4465:2;;;4513:1;4510;4503:12;4465:2;4556:1;4581:53;4626:7;4617:6;4606:9;4602:22;4581:53;:::i;:::-;4571:63;;4527:117;4455:196;;;;:::o;4657:407::-;4725:6;4733;4782:2;4770:9;4761:7;4757:23;4753:32;4750:2;;;4798:1;4795;4788:12;4750:2;4841:1;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4812:117;4968:2;4994:53;5039:7;5030:6;5019:9;5015:22;4994:53;:::i;:::-;4984:63;;4939:118;4740:324;;;;;:::o;5070:552::-;5147:6;5155;5163;5212:2;5200:9;5191:7;5187:23;5183:32;5180:2;;;5228:1;5225;5218:12;5180:2;5271:1;5296:53;5341:7;5332:6;5321:9;5317:22;5296:53;:::i;:::-;5286:63;;5242:117;5398:2;5424:53;5469:7;5460:6;5449:9;5445:22;5424:53;:::i;:::-;5414:63;;5369:118;5526:2;5552:53;5597:7;5588:6;5577:9;5573:22;5552:53;:::i;:::-;5542:63;;5497:118;5170:452;;;;;:::o;5628:809::-;5723:6;5731;5739;5747;5796:3;5784:9;5775:7;5771:23;5767:33;5764:2;;;5813:1;5810;5803:12;5764:2;5856:1;5881:53;5926:7;5917:6;5906:9;5902:22;5881:53;:::i;:::-;5871:63;;5827:117;5983:2;6009:53;6054:7;6045:6;6034:9;6030:22;6009:53;:::i;:::-;5999:63;;5954:118;6111:2;6137:53;6182:7;6173:6;6162:9;6158:22;6137:53;:::i;:::-;6127:63;;6082:118;6267:2;6256:9;6252:18;6239:32;6298:18;6290:6;6287:30;6284:2;;;6330:1;6327;6320:12;6284:2;6358:62;6412:7;6403:6;6392:9;6388:22;6358:62;:::i;:::-;6348:72;;6210:220;5754:683;;;;;;;:::o;6443:401::-;6508:6;6516;6565:2;6553:9;6544:7;6540:23;6536:32;6533:2;;;6581:1;6578;6571:12;6533:2;6624:1;6649:53;6694:7;6685:6;6674:9;6670:22;6649:53;:::i;:::-;6639:63;;6595:117;6751:2;6777:50;6819:7;6810:6;6799:9;6795:22;6777:50;:::i;:::-;6767:60;;6722:115;6523:321;;;;;:::o;6850:407::-;6918:6;6926;6975:2;6963:9;6954:7;6950:23;6946:32;6943:2;;;6991:1;6988;6981:12;6943:2;7034:1;7059:53;7104:7;7095:6;7084:9;7080:22;7059:53;:::i;:::-;7049:63;;7005:117;7161:2;7187:53;7232:7;7223:6;7212:9;7208:22;7187:53;:::i;:::-;7177:63;;7132:118;6933:324;;;;;:::o;7263:405::-;7347:6;7396:2;7384:9;7375:7;7371:23;7367:32;7364:2;;;7412:1;7409;7402:12;7364:2;7483:1;7472:9;7468:17;7455:31;7513:18;7505:6;7502:30;7499:2;;;7545:1;7542;7535:12;7499:2;7573:78;7643:7;7634:6;7623:9;7619:22;7573:78;:::i;:::-;7563:88;;7426:235;7354:314;;;;:::o;7674:693::-;7792:6;7800;7849:2;7837:9;7828:7;7824:23;7820:32;7817:2;;;7865:1;7862;7855:12;7817:2;7936:1;7925:9;7921:17;7908:31;7966:18;7958:6;7955:30;7952:2;;;7998:1;7995;7988:12;7952:2;8026:78;8096:7;8087:6;8076:9;8072:22;8026:78;:::i;:::-;8016:88;;7879:235;8181:2;8170:9;8166:18;8153:32;8212:18;8204:6;8201:30;8198:2;;;8244:1;8241;8234:12;8198:2;8272:78;8342:7;8333:6;8322:9;8318:22;8272:78;:::i;:::-;8262:88;;8124:236;7807:560;;;;;:::o;8373:260::-;8431:6;8480:2;8468:9;8459:7;8455:23;8451:32;8448:2;;;8496:1;8493;8486:12;8448:2;8539:1;8564:52;8608:7;8599:6;8588:9;8584:22;8564:52;:::i;:::-;8554:62;;8510:116;8438:195;;;;:::o;8639:282::-;8708:6;8757:2;8745:9;8736:7;8732:23;8728:32;8725:2;;;8773:1;8770;8763:12;8725:2;8816:1;8841:63;8896:7;8887:6;8876:9;8872:22;8841:63;:::i;:::-;8831:73;;8787:127;8715:206;;;;:::o;8927:395::-;8998:6;9006;9055:2;9043:9;9034:7;9030:23;9026:32;9023:2;;;9071:1;9068;9061:12;9023:2;9142:1;9131:9;9127:17;9114:31;9172:18;9164:6;9161:30;9158:2;;;9204:1;9201;9194:12;9158:2;9240:65;9297:7;9288:6;9277:9;9273:22;9240:65;:::i;:::-;9222:83;;;;9085:230;9013:309;;;;;:::o;9328:375::-;9397:6;9446:2;9434:9;9425:7;9421:23;9417:32;9414:2;;;9462:1;9459;9452:12;9414:2;9533:1;9522:9;9518:17;9505:31;9563:18;9555:6;9552:30;9549:2;;;9595:1;9592;9585:12;9549:2;9623:63;9678:7;9669:6;9658:9;9654:22;9623:63;:::i;:::-;9613:73;;9476:220;9404:299;;;;:::o;9709:262::-;9768:6;9817:2;9805:9;9796:7;9792:23;9788:32;9785:2;;;9833:1;9830;9823:12;9785:2;9876:1;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9847:117;9775:196;;;;:::o;9977:118::-;10064:24;10082:5;10064:24;:::i;:::-;10059:3;10052:37;10042:53;;:::o;10101:109::-;10182:21;10197:5;10182:21;:::i;:::-;10177:3;10170:34;10160:50;;:::o;10216:360::-;10302:3;10330:38;10362:5;10330:38;:::i;:::-;10384:70;10447:6;10442:3;10384:70;:::i;:::-;10377:77;;10463:52;10508:6;10503:3;10496:4;10489:5;10485:16;10463:52;:::i;:::-;10540:29;10562:6;10540:29;:::i;:::-;10535:3;10531:39;10524:46;;10306:270;;;;;:::o;10582:364::-;10670:3;10698:39;10731:5;10698:39;:::i;:::-;10753:71;10817:6;10812:3;10753:71;:::i;:::-;10746:78;;10833:52;10878:6;10873:3;10866:4;10859:5;10855:16;10833:52;:::i;:::-;10910:29;10932:6;10910:29;:::i;:::-;10905:3;10901:39;10894:46;;10674:272;;;;;:::o;10952:377::-;11058:3;11086:39;11119:5;11086:39;:::i;:::-;11141:89;11223:6;11218:3;11141:89;:::i;:::-;11134:96;;11239:52;11284:6;11279:3;11272:4;11265:5;11261:16;11239:52;:::i;:::-;11316:6;11311:3;11307:16;11300:23;;11062:267;;;;;:::o;11335:366::-;11477:3;11498:67;11562:2;11557:3;11498:67;:::i;:::-;11491:74;;11574:93;11663:3;11574:93;:::i;:::-;11692:2;11687:3;11683:12;11676:19;;11481:220;;;:::o;11707:366::-;11849:3;11870:67;11934:2;11929:3;11870:67;:::i;:::-;11863:74;;11946:93;12035:3;11946:93;:::i;:::-;12064:2;12059:3;12055:12;12048:19;;11853:220;;;:::o;12079:366::-;12221:3;12242:67;12306:2;12301:3;12242:67;:::i;:::-;12235:74;;12318:93;12407:3;12318:93;:::i;:::-;12436:2;12431:3;12427:12;12420:19;;12225:220;;;:::o;12451:366::-;12593:3;12614:67;12678:2;12673:3;12614:67;:::i;:::-;12607:74;;12690:93;12779:3;12690:93;:::i;:::-;12808:2;12803:3;12799:12;12792:19;;12597:220;;;:::o;12823:366::-;12965:3;12986:67;13050:2;13045:3;12986:67;:::i;:::-;12979:74;;13062:93;13151:3;13062:93;:::i;:::-;13180:2;13175:3;13171:12;13164:19;;12969:220;;;:::o;13195:366::-;13337:3;13358:67;13422:2;13417:3;13358:67;:::i;:::-;13351:74;;13434:93;13523:3;13434:93;:::i;:::-;13552:2;13547:3;13543:12;13536:19;;13341:220;;;:::o;13567:366::-;13709:3;13730:67;13794:2;13789:3;13730:67;:::i;:::-;13723:74;;13806:93;13895:3;13806:93;:::i;:::-;13924:2;13919:3;13915:12;13908:19;;13713:220;;;:::o;13939:366::-;14081:3;14102:67;14166:2;14161:3;14102:67;:::i;:::-;14095:74;;14178:93;14267:3;14178:93;:::i;:::-;14296:2;14291:3;14287:12;14280:19;;14085:220;;;:::o;14311:366::-;14453:3;14474:67;14538:2;14533:3;14474:67;:::i;:::-;14467:74;;14550:93;14639:3;14550:93;:::i;:::-;14668:2;14663:3;14659:12;14652:19;;14457:220;;;:::o;14683:366::-;14825:3;14846:67;14910:2;14905:3;14846:67;:::i;:::-;14839:74;;14922:93;15011:3;14922:93;:::i;:::-;15040:2;15035:3;15031:12;15024:19;;14829:220;;;:::o;15055:366::-;15197:3;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15294:93;15383:3;15294:93;:::i;:::-;15412:2;15407:3;15403:12;15396:19;;15201:220;;;:::o;15427:366::-;15569:3;15590:67;15654:2;15649:3;15590:67;:::i;:::-;15583:74;;15666:93;15755:3;15666:93;:::i;:::-;15784:2;15779:3;15775:12;15768:19;;15573:220;;;:::o;15799:366::-;15941:3;15962:67;16026:2;16021:3;15962:67;:::i;:::-;15955:74;;16038:93;16127:3;16038:93;:::i;:::-;16156:2;16151:3;16147:12;16140:19;;15945:220;;;:::o;16171:366::-;16313:3;16334:67;16398:2;16393:3;16334:67;:::i;:::-;16327:74;;16410:93;16499:3;16410:93;:::i;:::-;16528:2;16523:3;16519:12;16512:19;;16317:220;;;:::o;16543:366::-;16685:3;16706:67;16770:2;16765:3;16706:67;:::i;:::-;16699:74;;16782:93;16871:3;16782:93;:::i;:::-;16900:2;16895:3;16891:12;16884:19;;16689:220;;;:::o;16915:366::-;17057:3;17078:67;17142:2;17137:3;17078:67;:::i;:::-;17071:74;;17154:93;17243:3;17154:93;:::i;:::-;17272:2;17267:3;17263:12;17256:19;;17061:220;;;:::o;17287:366::-;17429:3;17450:67;17514:2;17509:3;17450:67;:::i;:::-;17443:74;;17526:93;17615:3;17526:93;:::i;:::-;17644:2;17639:3;17635:12;17628:19;;17433:220;;;:::o;17659:366::-;17801:3;17822:67;17886:2;17881:3;17822:67;:::i;:::-;17815:74;;17898:93;17987:3;17898:93;:::i;:::-;18016:2;18011:3;18007:12;18000:19;;17805:220;;;:::o;18031:366::-;18173:3;18194:67;18258:2;18253:3;18194:67;:::i;:::-;18187:74;;18270:93;18359:3;18270:93;:::i;:::-;18388:2;18383:3;18379:12;18372:19;;18177:220;;;:::o;18403:366::-;18545:3;18566:67;18630:2;18625:3;18566:67;:::i;:::-;18559:74;;18642:93;18731:3;18642:93;:::i;:::-;18760:2;18755:3;18751:12;18744:19;;18549:220;;;:::o;18775:366::-;18917:3;18938:67;19002:2;18997:3;18938:67;:::i;:::-;18931:74;;19014:93;19103:3;19014:93;:::i;:::-;19132:2;19127:3;19123:12;19116:19;;18921:220;;;:::o;19147:366::-;19289:3;19310:67;19374:2;19369:3;19310:67;:::i;:::-;19303:74;;19386:93;19475:3;19386:93;:::i;:::-;19504:2;19499:3;19495:12;19488:19;;19293:220;;;:::o;19519:366::-;19661:3;19682:67;19746:2;19741:3;19682:67;:::i;:::-;19675:74;;19758:93;19847:3;19758:93;:::i;:::-;19876:2;19871:3;19867:12;19860:19;;19665:220;;;:::o;19891:366::-;20033:3;20054:67;20118:2;20113:3;20054:67;:::i;:::-;20047:74;;20130:93;20219:3;20130:93;:::i;:::-;20248:2;20243:3;20239:12;20232:19;;20037:220;;;:::o;20263:366::-;20405:3;20426:67;20490:2;20485:3;20426:67;:::i;:::-;20419:74;;20502:93;20591:3;20502:93;:::i;:::-;20620:2;20615:3;20611:12;20604:19;;20409:220;;;:::o;20635:366::-;20777:3;20798:67;20862:2;20857:3;20798:67;:::i;:::-;20791:74;;20874:93;20963:3;20874:93;:::i;:::-;20992:2;20987:3;20983:12;20976:19;;20781:220;;;:::o;21007:366::-;21149:3;21170:67;21234:2;21229:3;21170:67;:::i;:::-;21163:74;;21246:93;21335:3;21246:93;:::i;:::-;21364:2;21359:3;21355:12;21348:19;;21153:220;;;:::o;21379:366::-;21521:3;21542:67;21606:2;21601:3;21542:67;:::i;:::-;21535:74;;21618:93;21707:3;21618:93;:::i;:::-;21736:2;21731:3;21727:12;21720:19;;21525:220;;;:::o;21751:118::-;21838:24;21856:5;21838:24;:::i;:::-;21833:3;21826:37;21816:53;;:::o;21875:435::-;22055:3;22077:95;22168:3;22159:6;22077:95;:::i;:::-;22070:102;;22189:95;22280:3;22271:6;22189:95;:::i;:::-;22182:102;;22301:3;22294:10;;22059:251;;;;;:::o;22316:222::-;22409:4;22447:2;22436:9;22432:18;22424:26;;22460:71;22528:1;22517:9;22513:17;22504:6;22460:71;:::i;:::-;22414:124;;;;:::o;22544:640::-;22739:4;22777:3;22766:9;22762:19;22754:27;;22791:71;22859:1;22848:9;22844:17;22835:6;22791:71;:::i;:::-;22872:72;22940:2;22929:9;22925:18;22916:6;22872:72;:::i;:::-;22954;23022:2;23011:9;23007:18;22998:6;22954:72;:::i;:::-;23073:9;23067:4;23063:20;23058:2;23047:9;23043:18;23036:48;23101:76;23172:4;23163:6;23101:76;:::i;:::-;23093:84;;22744:440;;;;;;;:::o;23190:210::-;23277:4;23315:2;23304:9;23300:18;23292:26;;23328:65;23390:1;23379:9;23375:17;23366:6;23328:65;:::i;:::-;23282:118;;;;:::o;23406:313::-;23519:4;23557:2;23546:9;23542:18;23534:26;;23606:9;23600:4;23596:20;23592:1;23581:9;23577:17;23570:47;23634:78;23707:4;23698:6;23634:78;:::i;:::-;23626:86;;23524:195;;;;:::o;23725:419::-;23891:4;23929:2;23918:9;23914:18;23906:26;;23978:9;23972:4;23968:20;23964:1;23953:9;23949:17;23942:47;24006:131;24132:4;24006:131;:::i;:::-;23998:139;;23896:248;;;:::o;24150:419::-;24316:4;24354:2;24343:9;24339:18;24331:26;;24403:9;24397:4;24393:20;24389:1;24378:9;24374:17;24367:47;24431:131;24557:4;24431:131;:::i;:::-;24423:139;;24321:248;;;:::o;24575:419::-;24741:4;24779:2;24768:9;24764:18;24756:26;;24828:9;24822:4;24818:20;24814:1;24803:9;24799:17;24792:47;24856:131;24982:4;24856:131;:::i;:::-;24848:139;;24746:248;;;:::o;25000:419::-;25166:4;25204:2;25193:9;25189:18;25181:26;;25253:9;25247:4;25243:20;25239:1;25228:9;25224:17;25217:47;25281:131;25407:4;25281:131;:::i;:::-;25273:139;;25171:248;;;:::o;25425:419::-;25591:4;25629:2;25618:9;25614:18;25606:26;;25678:9;25672:4;25668:20;25664:1;25653:9;25649:17;25642:47;25706:131;25832:4;25706:131;:::i;:::-;25698:139;;25596:248;;;:::o;25850:419::-;26016:4;26054:2;26043:9;26039:18;26031:26;;26103:9;26097:4;26093:20;26089:1;26078:9;26074:17;26067:47;26131:131;26257:4;26131:131;:::i;:::-;26123:139;;26021:248;;;:::o;26275:419::-;26441:4;26479:2;26468:9;26464:18;26456:26;;26528:9;26522:4;26518:20;26514:1;26503:9;26499:17;26492:47;26556:131;26682:4;26556:131;:::i;:::-;26548:139;;26446:248;;;:::o;26700:419::-;26866:4;26904:2;26893:9;26889:18;26881:26;;26953:9;26947:4;26943:20;26939:1;26928:9;26924:17;26917:47;26981:131;27107:4;26981:131;:::i;:::-;26973:139;;26871:248;;;:::o;27125:419::-;27291:4;27329:2;27318:9;27314:18;27306:26;;27378:9;27372:4;27368:20;27364:1;27353:9;27349:17;27342:47;27406:131;27532:4;27406:131;:::i;:::-;27398:139;;27296:248;;;:::o;27550:419::-;27716:4;27754:2;27743:9;27739:18;27731:26;;27803:9;27797:4;27793:20;27789:1;27778:9;27774:17;27767:47;27831:131;27957:4;27831:131;:::i;:::-;27823:139;;27721:248;;;:::o;27975:419::-;28141:4;28179:2;28168:9;28164:18;28156:26;;28228:9;28222:4;28218:20;28214:1;28203:9;28199:17;28192:47;28256:131;28382:4;28256:131;:::i;:::-;28248:139;;28146:248;;;:::o;28400:419::-;28566:4;28604:2;28593:9;28589:18;28581:26;;28653:9;28647:4;28643:20;28639:1;28628:9;28624:17;28617:47;28681:131;28807:4;28681:131;:::i;:::-;28673:139;;28571:248;;;:::o;28825:419::-;28991:4;29029:2;29018:9;29014:18;29006:26;;29078:9;29072:4;29068:20;29064:1;29053:9;29049:17;29042:47;29106:131;29232:4;29106:131;:::i;:::-;29098:139;;28996:248;;;:::o;29250:419::-;29416:4;29454:2;29443:9;29439:18;29431:26;;29503:9;29497:4;29493:20;29489:1;29478:9;29474:17;29467:47;29531:131;29657:4;29531:131;:::i;:::-;29523:139;;29421:248;;;:::o;29675:419::-;29841:4;29879:2;29868:9;29864:18;29856:26;;29928:9;29922:4;29918:20;29914:1;29903:9;29899:17;29892:47;29956:131;30082:4;29956:131;:::i;:::-;29948:139;;29846:248;;;:::o;30100:419::-;30266:4;30304:2;30293:9;30289:18;30281:26;;30353:9;30347:4;30343:20;30339:1;30328:9;30324:17;30317:47;30381:131;30507:4;30381:131;:::i;:::-;30373:139;;30271:248;;;:::o;30525:419::-;30691:4;30729:2;30718:9;30714:18;30706:26;;30778:9;30772:4;30768:20;30764:1;30753:9;30749:17;30742:47;30806:131;30932:4;30806:131;:::i;:::-;30798:139;;30696:248;;;:::o;30950:419::-;31116:4;31154:2;31143:9;31139:18;31131:26;;31203:9;31197:4;31193:20;31189:1;31178:9;31174:17;31167:47;31231:131;31357:4;31231:131;:::i;:::-;31223:139;;31121:248;;;:::o;31375:419::-;31541:4;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31546:248;;;:::o;31800:419::-;31966:4;32004:2;31993:9;31989:18;31981:26;;32053:9;32047:4;32043:20;32039:1;32028:9;32024:17;32017:47;32081:131;32207:4;32081:131;:::i;:::-;32073:139;;31971:248;;;:::o;32225:419::-;32391:4;32429:2;32418:9;32414:18;32406:26;;32478:9;32472:4;32468:20;32464:1;32453:9;32449:17;32442:47;32506:131;32632:4;32506:131;:::i;:::-;32498:139;;32396:248;;;:::o;32650:419::-;32816:4;32854:2;32843:9;32839:18;32831:26;;32903:9;32897:4;32893:20;32889:1;32878:9;32874:17;32867:47;32931:131;33057:4;32931:131;:::i;:::-;32923:139;;32821:248;;;:::o;33075:419::-;33241:4;33279:2;33268:9;33264:18;33256:26;;33328:9;33322:4;33318:20;33314:1;33303:9;33299:17;33292:47;33356:131;33482:4;33356:131;:::i;:::-;33348:139;;33246:248;;;:::o;33500:419::-;33666:4;33704:2;33693:9;33689:18;33681:26;;33753:9;33747:4;33743:20;33739:1;33728:9;33724:17;33717:47;33781:131;33907:4;33781:131;:::i;:::-;33773:139;;33671:248;;;:::o;33925:419::-;34091:4;34129:2;34118:9;34114:18;34106:26;;34178:9;34172:4;34168:20;34164:1;34153:9;34149:17;34142:47;34206:131;34332:4;34206:131;:::i;:::-;34198:139;;34096:248;;;:::o;34350:419::-;34516:4;34554:2;34543:9;34539:18;34531:26;;34603:9;34597:4;34593:20;34589:1;34578:9;34574:17;34567:47;34631:131;34757:4;34631:131;:::i;:::-;34623:139;;34521:248;;;:::o;34775:419::-;34941:4;34979:2;34968:9;34964:18;34956:26;;35028:9;35022:4;35018:20;35014:1;35003:9;34999:17;34992:47;35056:131;35182:4;35056:131;:::i;:::-;35048:139;;34946:248;;;:::o;35200:419::-;35366:4;35404:2;35393:9;35389:18;35381:26;;35453:9;35447:4;35443:20;35439:1;35428:9;35424:17;35417:47;35481:131;35607:4;35481:131;:::i;:::-;35473:139;;35371:248;;;:::o;35625:222::-;35718:4;35756:2;35745:9;35741:18;35733:26;;35769:71;35837:1;35826:9;35822:17;35813:6;35769:71;:::i;:::-;35723:124;;;;:::o;35853:129::-;35887:6;35914:20;;:::i;:::-;35904:30;;35943:33;35971:4;35963:6;35943:33;:::i;:::-;35894:88;;;:::o;35988:75::-;36021:6;36054:2;36048:9;36038:19;;36028:35;:::o;36069:311::-;36146:4;36236:18;36228:6;36225:30;36222:2;;;36258:18;;:::i;:::-;36222:2;36308:4;36300:6;36296:17;36288:25;;36368:4;36362;36358:15;36350:23;;36151:229;;;:::o;36386:311::-;36463:4;36553:18;36545:6;36542:30;36539:2;;;36575:18;;:::i;:::-;36539:2;36625:4;36617:6;36613:17;36605:25;;36685:4;36679;36675:15;36667:23;;36468:229;;;:::o;36703:307::-;36764:4;36854:18;36846:6;36843:30;36840:2;;;36876:18;;:::i;:::-;36840:2;36914:29;36936:6;36914:29;:::i;:::-;36906:37;;36998:4;36992;36988:15;36980:23;;36769:241;;;:::o;37016:308::-;37078:4;37168:18;37160:6;37157:30;37154:2;;;37190:18;;:::i;:::-;37154:2;37228:29;37250:6;37228:29;:::i;:::-;37220:37;;37312:4;37306;37302:15;37294:23;;37083:241;;;:::o;37330:98::-;37381:6;37415:5;37409:12;37399:22;;37388:40;;;:::o;37434:99::-;37486:6;37520:5;37514:12;37504:22;;37493:40;;;:::o;37539:168::-;37622:11;37656:6;37651:3;37644:19;37696:4;37691:3;37687:14;37672:29;;37634:73;;;;:::o;37713:169::-;37797:11;37831:6;37826:3;37819:19;37871:4;37866:3;37862:14;37847:29;;37809:73;;;;:::o;37888:148::-;37990:11;38027:3;38012:18;;38002:34;;;;:::o;38042:305::-;38082:3;38101:20;38119:1;38101:20;:::i;:::-;38096:25;;38135:20;38153:1;38135:20;:::i;:::-;38130:25;;38289:1;38221:66;38217:74;38214:1;38211:81;38208:2;;;38295:18;;:::i;:::-;38208:2;38339:1;38336;38332:9;38325:16;;38086:261;;;;:::o;38353:185::-;38393:1;38410:20;38428:1;38410:20;:::i;:::-;38405:25;;38444:20;38462:1;38444:20;:::i;:::-;38439:25;;38483:1;38473:2;;38488:18;;:::i;:::-;38473:2;38530:1;38527;38523:9;38518:14;;38395:143;;;;:::o;38544:348::-;38584:7;38607:20;38625:1;38607:20;:::i;:::-;38602:25;;38641:20;38659:1;38641:20;:::i;:::-;38636:25;;38829:1;38761:66;38757:74;38754:1;38751:81;38746:1;38739:9;38732:17;38728:105;38725:2;;;38836:18;;:::i;:::-;38725:2;38884:1;38881;38877:9;38866:20;;38592:300;;;;:::o;38898:191::-;38938:4;38958:20;38976:1;38958:20;:::i;:::-;38953:25;;38992:20;39010:1;38992:20;:::i;:::-;38987:25;;39031:1;39028;39025:8;39022:2;;;39036:18;;:::i;:::-;39022:2;39081:1;39078;39074:9;39066:17;;38943:146;;;;:::o;39095:96::-;39132:7;39161:24;39179:5;39161:24;:::i;:::-;39150:35;;39140:51;;;:::o;39197:90::-;39231:7;39274:5;39267:13;39260:21;39249:32;;39239:48;;;:::o;39293:149::-;39329:7;39369:66;39362:5;39358:78;39347:89;;39337:105;;;:::o;39448:126::-;39485:7;39525:42;39518:5;39514:54;39503:65;;39493:81;;;:::o;39580:77::-;39617:7;39646:5;39635:16;;39625:32;;;:::o;39663:154::-;39747:6;39742:3;39737;39724:30;39809:1;39800:6;39795:3;39791:16;39784:27;39714:103;;;:::o;39823:307::-;39891:1;39901:113;39915:6;39912:1;39909:13;39901:113;;;40000:1;39995:3;39991:11;39985:18;39981:1;39976:3;39972:11;39965:39;39937:2;39934:1;39930:10;39925:15;;39901:113;;;40032:6;40029:1;40026:13;40023:2;;;40112:1;40103:6;40098:3;40094:16;40087:27;40023:2;39872:258;;;;:::o;40136:320::-;40180:6;40217:1;40211:4;40207:12;40197:22;;40264:1;40258:4;40254:12;40285:18;40275:2;;40341:4;40333:6;40329:17;40319:27;;40275:2;40403;40395:6;40392:14;40372:18;40369:38;40366:2;;;40422:18;;:::i;:::-;40366:2;40187:269;;;;:::o;40462:281::-;40545:27;40567:4;40545:27;:::i;:::-;40537:6;40533:40;40675:6;40663:10;40660:22;40639:18;40627:10;40624:34;40621:62;40618:2;;;40686:18;;:::i;:::-;40618:2;40726:10;40722:2;40715:22;40505:238;;;:::o;40749:233::-;40788:3;40811:24;40829:5;40811:24;:::i;:::-;40802:33;;40857:66;40850:5;40847:77;40844:2;;;40927:18;;:::i;:::-;40844:2;40974:1;40967:5;40963:13;40956:20;;40792:190;;;:::o;40988:176::-;41020:1;41037:20;41055:1;41037:20;:::i;:::-;41032:25;;41071:20;41089:1;41071:20;:::i;:::-;41066:25;;41110:1;41100:2;;41115:18;;:::i;:::-;41100:2;41156:1;41153;41149:9;41144:14;;41022:142;;;;:::o;41170:180::-;41218:77;41215:1;41208:88;41315:4;41312:1;41305:15;41339:4;41336:1;41329:15;41356:180;41404:77;41401:1;41394:88;41501:4;41498:1;41491:15;41525:4;41522:1;41515:15;41542:180;41590:77;41587:1;41580:88;41687:4;41684:1;41677:15;41711:4;41708:1;41701:15;41728:180;41776:77;41773:1;41766:88;41873:4;41870:1;41863:15;41897:4;41894:1;41887:15;41914:102;41955:6;42006:2;42002:7;41997:2;41990:5;41986:14;41982:28;41972:38;;41962:54;;;:::o;42022:178::-;42162:30;42158:1;42150:6;42146:14;42139:54;42128:72;:::o;42206:166::-;42346:18;42342:1;42334:6;42330:14;42323:42;42312:60;:::o;42378:230::-;42518:34;42514:1;42506:6;42502:14;42495:58;42587:13;42582:2;42574:6;42570:15;42563:38;42484:124;:::o;42614:237::-;42754:34;42750:1;42742:6;42738:14;42731:58;42823:20;42818:2;42810:6;42806:15;42799:45;42720:131;:::o;42857:225::-;42997:34;42993:1;42985:6;42981:14;42974:58;43066:8;43061:2;43053:6;43049:15;43042:33;42963:119;:::o;43088:178::-;43228:30;43224:1;43216:6;43212:14;43205:54;43194:72;:::o;43272:180::-;43412:32;43408:1;43400:6;43396:14;43389:56;43378:74;:::o;43458:181::-;43598:33;43594:1;43586:6;43582:14;43575:57;43564:75;:::o;43645:169::-;43785:21;43781:1;43773:6;43769:14;43762:45;43751:63;:::o;43820:223::-;43960:34;43956:1;43948:6;43944:14;43937:58;44029:6;44024:2;44016:6;44012:15;44005:31;43926:117;:::o;44049:175::-;44189:27;44185:1;44177:6;44173:14;44166:51;44155:69;:::o;44230:168::-;44370:20;44366:1;44358:6;44354:14;44347:44;44336:62;:::o;44404:231::-;44544:34;44540:1;44532:6;44528:14;44521:58;44613:14;44608:2;44600:6;44596:15;44589:39;44510:125;:::o;44641:179::-;44781:31;44777:1;44769:6;44765:14;44758:55;44747:73;:::o;44826:243::-;44966:34;44962:1;44954:6;44950:14;44943:58;45035:26;45030:2;45022:6;45018:15;45011:51;44932:137;:::o;45075:229::-;45215:34;45211:1;45203:6;45199:14;45192:58;45284:12;45279:2;45271:6;45267:15;45260:37;45181:123;:::o;45310:228::-;45450:34;45446:1;45438:6;45434:14;45427:58;45519:11;45514:2;45506:6;45502:15;45495:36;45416:122;:::o;45544:221::-;45684:34;45680:1;45672:6;45668:14;45661:58;45753:4;45748:2;45740:6;45736:15;45729:29;45650:115;:::o;45771:182::-;45911:34;45907:1;45899:6;45895:14;45888:58;45877:76;:::o;45959:231::-;46099:34;46095:1;46087:6;46083:14;46076:58;46168:14;46163:2;46155:6;46151:15;46144:39;46065:125;:::o;46196:182::-;46336:34;46332:1;46324:6;46320:14;46313:58;46302:76;:::o;46384:228::-;46524:34;46520:1;46512:6;46508:14;46501:58;46593:11;46588:2;46580:6;46576:15;46569:36;46490:122;:::o;46618:234::-;46758:34;46754:1;46746:6;46742:14;46735:58;46827:17;46822:2;46814:6;46810:15;46803:42;46724:128;:::o;46858:220::-;46998:34;46994:1;46986:6;46982:14;46975:58;47067:3;47062:2;47054:6;47050:15;47043:28;46964:114;:::o;47084:236::-;47224:34;47220:1;47212:6;47208:14;47201:58;47293:19;47288:2;47280:6;47276:15;47269:44;47190:130;:::o;47326:231::-;47466:34;47462:1;47454:6;47450:14;47443:58;47535:14;47530:2;47522:6;47518:15;47511:39;47432:125;:::o;47563:179::-;47703:31;47699:1;47691:6;47687:14;47680:55;47669:73;:::o;47748:181::-;47888:33;47884:1;47876:6;47872:14;47865:57;47854:75;:::o;47935:122::-;48008:24;48026:5;48008:24;:::i;:::-;48001:5;47998:35;47988:2;;48047:1;48044;48037:12;47988:2;47978:79;:::o;48063:116::-;48133:21;48148:5;48133:21;:::i;:::-;48126:5;48123:32;48113:2;;48169:1;48166;48159:12;48113:2;48103:76;:::o;48185:120::-;48257:23;48274:5;48257:23;:::i;:::-;48250:5;48247:34;48237:2;;48295:1;48292;48285:12;48237:2;48227:78;:::o;48311:122::-;48384:24;48402:5;48384:24;:::i;:::-;48377:5;48374:35;48364:2;;48423:1;48420;48413:12;48364:2;48354:79;:::o
Swarm Source
ipfs://22a70dffc88ea6faf44177c0e26bca1dd5069cfd601f511bc148a3c6481cb48b
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.