Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 73 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 16345870 | 717 days ago | IN | 0 ETH | 0.00069511 | ||||
Set Approval For... | 16345866 | 717 days ago | IN | 0 ETH | 0.00046759 | ||||
Set Approval For... | 15159767 | 890 days ago | IN | 0 ETH | 0.00048671 | ||||
Safe Transfer Fr... | 14777915 | 953 days ago | IN | 0 ETH | 0.00101962 | ||||
Transfer From | 14638571 | 976 days ago | IN | 0 ETH | 0.00217454 | ||||
Set Base URI | 14432279 | 1008 days ago | IN | 0 ETH | 0.00204287 | ||||
Safe Transfer Fr... | 14419002 | 1010 days ago | IN | 0 ETH | 0.00152657 | ||||
Set Approval For... | 14371685 | 1017 days ago | IN | 0 ETH | 0.00068167 | ||||
Pause | 14365179 | 1018 days ago | IN | 0 ETH | 0.00057708 | ||||
Airdrop | 14365169 | 1018 days ago | IN | 0 ETH | 0.00154766 | ||||
Set Approval For... | 14346324 | 1021 days ago | IN | 0 ETH | 0.00084182 | ||||
Airdrop | 14341681 | 1022 days ago | IN | 0 ETH | 0.00400715 | ||||
Set Approval For... | 14338801 | 1022 days ago | IN | 0 ETH | 0.00143596 | ||||
Airdrop | 14327533 | 1024 days ago | IN | 0 ETH | 0.00246084 | ||||
Withdraw | 14290906 | 1030 days ago | IN | 0 ETH | 0.00536472 | ||||
Mint | 14288265 | 1030 days ago | IN | 0.06 ETH | 0.00139053 | ||||
Mint | 14288187 | 1030 days ago | IN | 0.06 ETH | 0.00255143 | ||||
Set Approval For... | 14275291 | 1032 days ago | IN | 0 ETH | 0.00089335 | ||||
Set Approval For... | 14275291 | 1032 days ago | IN | 0 ETH | 0.00156893 | ||||
Set Approval For... | 14268943 | 1033 days ago | IN | 0 ETH | 0.00269325 | ||||
Airdrop | 14265449 | 1034 days ago | IN | 0 ETH | 0.00860001 | ||||
Set Approval For... | 14262280 | 1034 days ago | IN | 0 ETH | 0.00261327 | ||||
Mint | 14262241 | 1034 days ago | IN | 0.06 ETH | 0.00381165 | ||||
Airdrop | 14257926 | 1035 days ago | IN | 0 ETH | 0.01095056 | ||||
Airdrop | 14257794 | 1035 days ago | IN | 0 ETH | 0.01023771 |
Loading...
Loading
Contract Name:
HodlBabaNFT
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-14 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.11; 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); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } 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); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface 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); } interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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); } } 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; } } contract HodlBabaNFT is ERC721, Ownable, Pausable, ReentrancyGuard { using Strings for uint256; using SafeMath for uint256; using SafeMath for uint8; uint256 public constant MAX_SUPPLY = 6666; uint256 public constant MINT_PRICE = 0.05 ether; uint256 public constant MINT_PRICE_PUBLIC = 0.06 ether; uint256 public constant MAX_MINT_PER_TX = 10; uint256 public constant MAX_MINT_PER_PRESALE = 6; uint256 public totalSupply = 0; bool public saleStarted = false; bool public preSaleStarted = false; bool public revealed = false; string public baseExtension = ".json"; string public baseURI; string public notRevealedURI; // Merkle Tree Root bytes32 private _merkleRoot; // Team wallet address[] private _royaltyAddresses = [ 0x5C4B138a91445ca72e4ED063F19d9bFa9e867406, // Team wallet address 0x3a1BFC0069acb714dd52eA4247A2DDEe98d62a36, // Marketer wallet address 0xb20F2a4601aED75B886CC5B84E28a0D65a7Bfd48 // Auditor wallet address ]; mapping(address => uint256) private _royaltyShares; mapping(address => uint256) balanceOfAddress; constructor( string memory _initBaseURI, string memory _initNotRevealedURI ) ERC721("HodlBaba", "HB") { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedURI); _royaltyShares[_royaltyAddresses[0]] = 96; // Royalty for Team wallet _royaltyShares[_royaltyAddresses[1]] = 3; // Royalty for Marketor wallet _royaltyShares[_royaltyAddresses[2]] = 1; // Royalty for Auditor wallet } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function airdrop(uint256 _count, address _account) external onlyOwner { require(totalSupply + _count <= MAX_SUPPLY, "MAX AIRDROP SUPPLY REACHED."); for (uint256 i = 1; i <= _count; i++) { _safeMint(_account, totalSupply + i); } totalSupply += _count; } /** * Address -> leaf for MerkleTree */ function _leaf(address account) private pure returns (bytes32) { return keccak256(abi.encodePacked(account)); } /** * Bool -> Verify WhiteList using MerkleTree */ function verifyWhitelist(bytes32 leaf, bytes32[] memory proof) private view returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash < proofElement) { computedHash = keccak256( abi.encodePacked(computedHash, proofElement) ); } else { computedHash = keccak256( abi.encodePacked(proofElement, computedHash) ); } } return computedHash == _merkleRoot; } /** * Presale mint for general whitelist */ function whitelistMint(uint256 _count, bytes32[] memory _proof) external payable { require(preSaleStarted, "PRE_MINT_NOT_STARTED"); require(!paused(), "CONTRACT_PAUSED"); require( verifyWhitelist(_leaf(msg.sender), _proof) == true, "ADDRESS_INVALID" ); require( _count > 0 && balanceOfAddress[msg.sender] + _count <= MAX_MINT_PER_PRESALE, "MAX_LIMIT_PER_WALLET_EXCEEDED" ); require(totalSupply + _count <= MAX_SUPPLY, "MAX_SUPPLY_REACHED"); if (msg.sender != owner()) { require(msg.value >= MINT_PRICE * _count); } for (uint256 i = 1; i <= _count; i++) { _safeMint(msg.sender, totalSupply + i); } totalSupply += _count; balanceOfAddress[msg.sender] += _count; } /** * Mint Single or Multiple NFT tokens */ function mint(uint256 _count) public payable { require(saleStarted, "PUBLIC_MINT_NOT_STARTED"); require(!paused(), "CONTRACT_PAUSED"); require( _count > 0 && _count <= MAX_MINT_PER_TX, "MAX_MINT_PER_TX_EXCEEDED" ); require(totalSupply + _count <= MAX_SUPPLY, "MAX_SUPPLY_REACHED"); if (msg.sender != owner()) { require(msg.value >= MINT_PRICE_PUBLIC * _count); } for (uint256 i = 1; i <= _count; i++) { _safeMint(msg.sender, totalSupply + i); } totalSupply += _count; } /** * Override tokenURI */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "TOKEN_NOT_EXIST"); string memory currentBaseURI = _baseURI(); if (revealed == false) { return notRevealedURI; } else { currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } } function withdraw() external onlyOwner { require(address(this).balance > 0, "EMPTY_BALANCE"); uint256 balance = address(this).balance; for (uint256 i = 0; i < _royaltyAddresses.length; i++) { payable(_royaltyAddresses[i]).transfer( balance.div(100).mul(_royaltyShares[_royaltyAddresses[i]]) ); } } function setSaleStarted(bool _hasStarted) external onlyOwner { require(saleStarted != _hasStarted, "SALE_STARTED_ALREADY_SET"); saleStarted = _hasStarted; } function setPreSaleStarted(bool _hasStarted) external onlyOwner { require(preSaleStarted != _hasStarted, "PRESALE_STARTED_ALREADY_SET"); preSaleStarted = _hasStarted; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function reveal() public onlyOwner { revealed = true; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedURI = _notRevealedURI; } function setMerkleRoot(bytes32 _merkleRootValue) external onlyOwner returns (bytes32) { _merkleRoot = _merkleRootValue; return _merkleRoot; } function pause() external onlyOwner { require(!paused(), "ALREADY_PAUSED"); _pause(); } function unpause() external onlyOwner { require(paused(), "ALREADY_UNPAUSED"); _unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"saleStarted","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRootValue","type":"bytes32"}],"name":"setMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasStarted","type":"bool"}],"name":"setPreSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasStarted","type":"bool"}],"name":"setSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60006008556009805462ffffff1916905560c06040526005608081905264173539b7b760d91b60a09081526200003991600a91906200036b565b5060408051606081018252735c4b138a91445ca72e4ed063f19d9bfa9e8674068152733a1bfc0069acb714dd52ea4247a2ddee98d62a36602082015273b20f2a4601aed75b886cc5b84e28a0d65a7bfd4891810191909152620000a190600e906003620003fa565b50348015620000af57600080fd5b5060405162002f7238038062002f72833981016040819052620000d29162000536565b6040805180820182526008815267486f646c4261626160c01b602080830191825283518085019094526002845261242160f11b9084015281519192916200011c916000916200036b565b508051620001329060019060208401906200036b565b5050506200014f620001496200025260201b60201c565b62000256565b6006805460ff60a01b1916905560016007556200016c82620002a8565b620001778162000310565b6060600f6000600e600081548110620001945762000194620005a0565b60009182526020808320909101546001600160a01b03168352820192909252604001812091909155600e8054600392600f9290916001908110620001dc57620001dc620005a0565b60009182526020808320909101546001600160a01b03168352820192909252604001812091909155600e8054600192600f9290916002908110620002245762000224620005a0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205550620005f39050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002f75760405162461bcd60e51b8152602060048201819052602482015260008051602062002f5283398151915260448201526064015b60405180910390fd5b80516200030c90600b9060208401906200036b565b5050565b6006546001600160a01b031633146200035b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f528339815191526044820152606401620002ee565b80516200030c90600c9060208401905b8280546200037990620005b6565b90600052602060002090601f0160209004810192826200039d5760008555620003e8565b82601f10620003b857805160ff1916838001178555620003e8565b82800160010185558215620003e8579182015b82811115620003e8578251825591602001919060010190620003cb565b50620003f692915062000452565b5090565b828054828255906000526020600020908101928215620003e8579160200282015b82811115620003e857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200041b565b5b80821115620003f6576000815560010162000453565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200049157600080fd5b81516001600160401b0380821115620004ae57620004ae62000469565b604051601f8301601f19908116603f01168101908282118183101715620004d957620004d962000469565b81604052838152602092508683858801011115620004f657600080fd5b600091505b838210156200051a5785820183015181830184015290820190620004fb565b838211156200052c5760008385830101525b9695505050505050565b600080604083850312156200054a57600080fd5b82516001600160401b03808211156200056257600080fd5b62000570868387016200047f565b935060208501519150808211156200058757600080fd5b5062000596858286016200047f565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620005cb57607f821691505b60208210811415620005ed57634e487b7160e01b600052602260045260246000fd5b50919050565b61294f80620006036000396000f3fe6080604052600436106102465760003560e01c80637cb6475911610139578063bc63f02e116100b6578063d2cab0561161007a578063d2cab05614610647578063e59ee0141461065a578063e985e9c51461067a578063f2587a55146106c3578063f2c4ce1e146106d8578063f2fde38b146106f857600080fd5b8063bc63f02e146105bc578063c002d23d146105dc578063c3151fed146105f7578063c668286214610612578063c87b56dd1461062757600080fd5b8063a0712d68116100fd578063a0712d6814610534578063a22cb46514610547578063a475b5dd14610567578063a854ffba1461057c578063b88d4fde1461059c57600080fd5b80637cb64759146104b75780638456cb59146104d75780638da5cb5b146104ec5780638ecad7211461050a57806395d89b411461051f57600080fd5b806351830227116101c7578063690cf0d11161018b578063690cf0d1146104395780636c0360eb1461045857806370a082311461046d578063715018a61461048d57806372250380146104a257600080fd5b806351830227146103a057806355f804b3146103c05780635c474f9e146103e05780635c975abb146103fa5780636352211e1461041957600080fd5b806323b872dd1161020e57806323b872dd1461032057806332cb6b0c146103405780633ccfd60b146103565780633f4ba83a1461036b57806342842e0e1461038057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612221565b610718565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b5061029561076a565b6040516102779190612296565b3480156102ae57600080fd5b506102c26102bd3660046122a9565b6107fc565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f53660046122d9565b610896565b005b34801561030857600080fd5b5061031260085481565b604051908152602001610277565b34801561032c57600080fd5b506102fa61033b366004612303565b6109ac565b34801561034c57600080fd5b50610312611a0a81565b34801561036257600080fd5b506102fa6109dd565b34801561037757600080fd5b506102fa610b14565b34801561038c57600080fd5b506102fa61039b366004612303565b610b94565b3480156103ac57600080fd5b5060095461026b9062010000900460ff1681565b3480156103cc57600080fd5b506102fa6103db3660046123de565b610baf565b3480156103ec57600080fd5b5060095461026b9060ff1681565b34801561040657600080fd5b50600654600160a01b900460ff1661026b565b34801561042557600080fd5b506102c26104343660046122a9565b610bec565b34801561044557600080fd5b5060095461026b90610100900460ff1681565b34801561046457600080fd5b50610295610c63565b34801561047957600080fd5b50610312610488366004612427565b610cf1565b34801561049957600080fd5b506102fa610d78565b3480156104ae57600080fd5b50610295610dac565b3480156104c357600080fd5b506103126104d23660046122a9565b610db9565b3480156104e357600080fd5b506102fa610df3565b3480156104f857600080fd5b506006546001600160a01b03166102c2565b34801561051657600080fd5b50610312600a81565b34801561052b57600080fd5b50610295610e70565b6102fa6105423660046122a9565b610e7f565b34801561055357600080fd5b506102fa610562366004612452565b61104b565b34801561057357600080fd5b506102fa611110565b34801561058857600080fd5b506102fa610597366004612485565b61114d565b3480156105a857600080fd5b506102fa6105b73660046124a0565b6111e3565b3480156105c857600080fd5b506102fa6105d736600461251c565b61121b565b3480156105e857600080fd5b5061031266b1a2bc2ec5000081565b34801561060357600080fd5b5061031266d529ae9e86000081565b34801561061e57600080fd5b506102956112ee565b34801561063357600080fd5b506102956106423660046122a9565b6112fb565b6102fa61065536600461253f565b611467565b34801561066657600080fd5b506102fa610675366004612485565b6116e5565b34801561068657600080fd5b5061026b6106953660046125f1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106cf57600080fd5b50610312600681565b3480156106e457600080fd5b506102fa6106f33660046123de565b611788565b34801561070457600080fd5b506102fa610713366004612427565b6117c5565b60006001600160e01b031982166380ac58cd60e01b148061074957506001600160e01b03198216635b5e139f60e01b145b8061076457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107799061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a59061261b565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661087a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108a182610bec565b9050806001600160a01b0316836001600160a01b0316141561090f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610871565b336001600160a01b038216148061092b575061092b8133610695565b61099d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610871565b6109a78383611860565b505050565b6109b633826118ce565b6109d25760405162461bcd60e51b815260040161087190612650565b6109a78383836119c5565b6006546001600160a01b03163314610a075760405162461bcd60e51b8152600401610871906126a1565b60004711610a475760405162461bcd60e51b815260206004820152600d60248201526c454d5054595f42414c414e434560981b6044820152606401610871565b4760005b600e54811015610b1057600e8181548110610a6857610a686126d6565b6000918252602082200154600e80546001600160a01b03909216926108fc92610ad592600f929187908110610a9f57610a9f6126d6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610acf866064611b65565b90611b71565b6040518115909202916000818181858888f19350505050158015610afd573d6000803e3d6000fd5b5080610b0881612702565b915050610a4b565b5050565b6006546001600160a01b03163314610b3e5760405162461bcd60e51b8152600401610871906126a1565b600654600160a01b900460ff16610b8a5760405162461bcd60e51b815260206004820152601060248201526f1053149150511657d55394105554d15160821b6044820152606401610871565b610b92611b7d565b565b6109a7838383604051806020016040528060008152506111e3565b6006546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610871906126a1565b8051610b1090600b906020840190612172565b6000818152600260205260408120546001600160a01b0316806107645760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610871565b600b8054610c709061261b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c9061261b565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b505050505081565b60006001600160a01b038216610d5c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610871565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610da25760405162461bcd60e51b8152600401610871906126a1565b610b926000611c1a565b600c8054610c709061261b565b6006546000906001600160a01b03163314610de65760405162461bcd60e51b8152600401610871906126a1565b50600d819055805b919050565b6006546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610871906126a1565b600654600160a01b900460ff1615610e685760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d4105554d15160921b6044820152606401610871565b610b92611c6c565b6060600180546107799061261b565b60095460ff16610ed15760405162461bcd60e51b815260206004820152601760248201527f5055424c49435f4d494e545f4e4f545f535441525445440000000000000000006044820152606401610871565b600654600160a01b900460ff1615610f1d5760405162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b6044820152606401610871565b600081118015610f2e5750600a8111155b610f7a5760405162461bcd60e51b815260206004820152601860248201527f4d41585f4d494e545f5045525f54585f455843454544454400000000000000006044820152606401610871565b611a0a81600854610f8b919061271d565b1115610fce5760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610871565b6006546001600160a01b03163314610ffd57610ff18166d529ae9e860000612735565b341015610ffd57600080fd5b60015b8181116110305761101e3382600854611019919061271d565b611cf4565b8061102881612702565b915050611000565b508060086000828254611043919061271d565b909155505050565b6001600160a01b0382163314156110a45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610871565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b0316331461113a5760405162461bcd60e51b8152600401610871906126a1565b6009805462ff0000191662010000179055565b6006546001600160a01b031633146111775760405162461bcd60e51b8152600401610871906126a1565b60095460ff16151581151514156111d05760405162461bcd60e51b815260206004820152601860248201527f53414c455f535441525445445f414c52454144595f53455400000000000000006044820152606401610871565b6009805460ff1916911515919091179055565b6111ed33836118ce565b6112095760405162461bcd60e51b815260040161087190612650565b61121584848484611d0e565b50505050565b6006546001600160a01b031633146112455760405162461bcd60e51b8152600401610871906126a1565b611a0a82600854611256919061271d565b11156112a45760405162461bcd60e51b815260206004820152601b60248201527f4d41582041495244524f5020535550504c5920524541434845442e00000000006044820152606401610871565b60015b8281116112d2576112c08282600854611019919061271d565b806112ca81612702565b9150506112a7565b5081600860008282546112e5919061271d565b90915550505050565b600a8054610c709061261b565b6000818152600260205260409020546060906001600160a01b03166113545760405162461bcd60e51b815260206004820152600f60248201526e1513d2d15397d393d517d1561254d5608a1b6044820152606401610871565b600061135e611d41565b60095490915062010000900460ff1661140457600c805461137e9061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa9061261b565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050915050919050565b61140c611d41565b9050600081511161142c576040518060200160405280600081525061145a565b8061143684611d50565b600a60405160200161144a93929190612754565b6040516020818303038152906040525b9392505050565b50919050565b600954610100900460ff166114b55760405162461bcd60e51b815260206004820152601460248201527314149157d352539517d393d517d4d5105495115160621b6044820152606401610871565b600654600160a01b900460ff16156115015760405162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b6044820152606401610871565b604080513360601b6bffffffffffffffffffffffff191660208083019190915282516014818403018152603490920190925280519101206115429082611e4e565b15156001146115855760405162461bcd60e51b815260206004820152600f60248201526e105111149154d4d7d2539590531251608a1b6044820152606401610871565b6000821180156115b15750336000908152601060205260409020546006906115ae90849061271d565b11155b6115fd5760405162461bcd60e51b815260206004820152601d60248201527f4d41585f4c494d49545f5045525f57414c4c45545f45584345454445440000006044820152606401610871565b611a0a8260085461160e919061271d565b11156116515760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610871565b6006546001600160a01b03163314611680576116748266b1a2bc2ec50000612735565b34101561168057600080fd5b60015b8281116116ae5761169c3382600854611019919061271d565b806116a681612702565b915050611683565b5081600860008282546116c1919061271d565b909155505033600090815260106020526040812080548492906112e590849061271d565b6006546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610871906126a1565b60095460ff610100909104161515811515141561176e5760405162461bcd60e51b815260206004820152601b60248201527f50524553414c455f535441525445445f414c52454144595f53455400000000006044820152606401610871565b600980549115156101000261ff0019909216919091179055565b6006546001600160a01b031633146117b25760405162461bcd60e51b8152600401610871906126a1565b8051610b1090600c906020840190612172565b6006546001600160a01b031633146117ef5760405162461bcd60e51b8152600401610871906126a1565b6001600160a01b0381166118545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610871565b61185d81611c1a565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189582610bec565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166119475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610871565b600061195283610bec565b9050806001600160a01b0316846001600160a01b0316148061198d5750836001600160a01b0316611982846107fc565b6001600160a01b0316145b806119bd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166119d882610bec565b6001600160a01b031614611a405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610871565b6001600160a01b038216611aa25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610871565b611aad600082611860565b6001600160a01b0383166000908152600360205260408120805460019290611ad6908490612818565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b0490849061271d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061145a8284612845565b600061145a8284612735565b600654600160a01b900460ff16611bcd5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610871565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600654600160a01b900460ff1615611cb95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610871565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bfd3390565b610b10828260405180602001604052806000815250611eff565b611d198484846119c5565b611d2584848484611f32565b6112155760405162461bcd60e51b815260040161087190612859565b6060600b80546107799061261b565b606081611d745750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d9e5780611d8881612702565b9150611d979050600a83612845565b9150611d78565b60008167ffffffffffffffff811115611db957611db961233f565b6040519080825280601f01601f191660200182016040528015611de3576020820181803683370190505b5090505b84156119bd57611df8600183612818565b9150611e05600a866128ab565b611e1090603061271d565b60f81b818381518110611e2557611e256126d6565b60200101906001600160f81b031916908160001a905350611e47600a86612845565b9450611de7565b600082815b8351811015611ef3576000848281518110611e7057611e706126d6565b6020026020010151905080831015611eb3576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611ee0565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611eeb81612702565b915050611e53565b50600d54149392505050565b611f098383612030565b611f166000848484611f32565b6109a75760405162461bcd60e51b815260040161087190612859565b60006001600160a01b0384163b1561202557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f769033908990889088906004016128bf565b6020604051808303816000875af1925050508015611fb1575060408051601f3d908101601f19168201909252611fae918101906128fc565b60015b61200b573d808015611fdf576040519150601f19603f3d011682016040523d82523d6000602084013e611fe4565b606091505b5080516120035760405162461bcd60e51b815260040161087190612859565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119bd565b506001949350505050565b6001600160a01b0382166120865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610871565b6000818152600260205260409020546001600160a01b0316156120eb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610871565b6001600160a01b038216600090815260036020526040812080546001929061211490849061271d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461217e9061261b565b90600052602060002090601f0160209004810192826121a057600085556121e6565b82601f106121b957805160ff19168380011785556121e6565b828001600101855582156121e6579182015b828111156121e65782518255916020019190600101906121cb565b506121f29291506121f6565b5090565b5b808211156121f257600081556001016121f7565b6001600160e01b03198116811461185d57600080fd5b60006020828403121561223357600080fd5b813561145a8161220b565b60005b83811015612259578181015183820152602001612241565b838111156112155750506000910152565b6000815180845261228281602086016020860161223e565b601f01601f19169290920160200192915050565b60208152600061145a602083018461226a565b6000602082840312156122bb57600080fd5b5035919050565b80356001600160a01b0381168114610dee57600080fd5b600080604083850312156122ec57600080fd5b6122f5836122c2565b946020939093013593505050565b60008060006060848603121561231857600080fd5b612321846122c2565b925061232f602085016122c2565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561237e5761237e61233f565b604052919050565b600067ffffffffffffffff8311156123a0576123a061233f565b6123b3601f8401601f1916602001612355565b90508281528383830111156123c757600080fd5b828260208301376000602084830101529392505050565b6000602082840312156123f057600080fd5b813567ffffffffffffffff81111561240757600080fd5b8201601f8101841361241857600080fd5b6119bd84823560208401612386565b60006020828403121561243957600080fd5b61145a826122c2565b80358015158114610dee57600080fd5b6000806040838503121561246557600080fd5b61246e836122c2565b915061247c60208401612442565b90509250929050565b60006020828403121561249757600080fd5b61145a82612442565b600080600080608085870312156124b657600080fd5b6124bf856122c2565b93506124cd602086016122c2565b925060408501359150606085013567ffffffffffffffff8111156124f057600080fd5b8501601f8101871361250157600080fd5b61251087823560208401612386565b91505092959194509250565b6000806040838503121561252f57600080fd5b8235915061247c602084016122c2565b6000806040838503121561255257600080fd5b8235915060208084013567ffffffffffffffff8082111561257257600080fd5b818601915086601f83011261258657600080fd5b8135818111156125985761259861233f565b8060051b91506125a9848301612355565b81815291830184019184810190898411156125c357600080fd5b938501935b838510156125e1578435825293850193908501906125c8565b8096505050505050509250929050565b6000806040838503121561260457600080fd5b61260d836122c2565b915061247c602084016122c2565b600181811c9082168061262f57607f821691505b6020821081141561146157634e487b7160e01b600052602260045260246000fd5b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612716576127166126ec565b5060010190565b60008219821115612730576127306126ec565b500190565b600081600019048311821515161561274f5761274f6126ec565b500290565b6000845160206127678285838a0161223e565b85519184019161277a8184848a0161223e565b8554920191600090600181811c908083168061279757607f831692505b8583108114156127b557634e487b7160e01b85526022600452602485fd5b8080156127c957600181146127da57612807565b60ff19851688528388019550612807565b60008b81526020902060005b858110156127ff5781548a8201529084019088016127e6565b505083880195505b50939b9a5050505050505050505050565b60008282101561282a5761282a6126ec565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826128545761285461282f565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826128ba576128ba61282f565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f29083018461226a565b9695505050505050565b60006020828403121561290e57600080fd5b815161145a8161220b56fea26469706673582212209bef2b8e924ed1f5c4e0cf5df27924736d9b1a01fd7dc074a4a2e2316588e97264736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c80637cb6475911610139578063bc63f02e116100b6578063d2cab0561161007a578063d2cab05614610647578063e59ee0141461065a578063e985e9c51461067a578063f2587a55146106c3578063f2c4ce1e146106d8578063f2fde38b146106f857600080fd5b8063bc63f02e146105bc578063c002d23d146105dc578063c3151fed146105f7578063c668286214610612578063c87b56dd1461062757600080fd5b8063a0712d68116100fd578063a0712d6814610534578063a22cb46514610547578063a475b5dd14610567578063a854ffba1461057c578063b88d4fde1461059c57600080fd5b80637cb64759146104b75780638456cb59146104d75780638da5cb5b146104ec5780638ecad7211461050a57806395d89b411461051f57600080fd5b806351830227116101c7578063690cf0d11161018b578063690cf0d1146104395780636c0360eb1461045857806370a082311461046d578063715018a61461048d57806372250380146104a257600080fd5b806351830227146103a057806355f804b3146103c05780635c474f9e146103e05780635c975abb146103fa5780636352211e1461041957600080fd5b806323b872dd1161020e57806323b872dd1461032057806332cb6b0c146103405780633ccfd60b146103565780633f4ba83a1461036b57806342842e0e1461038057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612221565b610718565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b5061029561076a565b6040516102779190612296565b3480156102ae57600080fd5b506102c26102bd3660046122a9565b6107fc565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f53660046122d9565b610896565b005b34801561030857600080fd5b5061031260085481565b604051908152602001610277565b34801561032c57600080fd5b506102fa61033b366004612303565b6109ac565b34801561034c57600080fd5b50610312611a0a81565b34801561036257600080fd5b506102fa6109dd565b34801561037757600080fd5b506102fa610b14565b34801561038c57600080fd5b506102fa61039b366004612303565b610b94565b3480156103ac57600080fd5b5060095461026b9062010000900460ff1681565b3480156103cc57600080fd5b506102fa6103db3660046123de565b610baf565b3480156103ec57600080fd5b5060095461026b9060ff1681565b34801561040657600080fd5b50600654600160a01b900460ff1661026b565b34801561042557600080fd5b506102c26104343660046122a9565b610bec565b34801561044557600080fd5b5060095461026b90610100900460ff1681565b34801561046457600080fd5b50610295610c63565b34801561047957600080fd5b50610312610488366004612427565b610cf1565b34801561049957600080fd5b506102fa610d78565b3480156104ae57600080fd5b50610295610dac565b3480156104c357600080fd5b506103126104d23660046122a9565b610db9565b3480156104e357600080fd5b506102fa610df3565b3480156104f857600080fd5b506006546001600160a01b03166102c2565b34801561051657600080fd5b50610312600a81565b34801561052b57600080fd5b50610295610e70565b6102fa6105423660046122a9565b610e7f565b34801561055357600080fd5b506102fa610562366004612452565b61104b565b34801561057357600080fd5b506102fa611110565b34801561058857600080fd5b506102fa610597366004612485565b61114d565b3480156105a857600080fd5b506102fa6105b73660046124a0565b6111e3565b3480156105c857600080fd5b506102fa6105d736600461251c565b61121b565b3480156105e857600080fd5b5061031266b1a2bc2ec5000081565b34801561060357600080fd5b5061031266d529ae9e86000081565b34801561061e57600080fd5b506102956112ee565b34801561063357600080fd5b506102956106423660046122a9565b6112fb565b6102fa61065536600461253f565b611467565b34801561066657600080fd5b506102fa610675366004612485565b6116e5565b34801561068657600080fd5b5061026b6106953660046125f1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106cf57600080fd5b50610312600681565b3480156106e457600080fd5b506102fa6106f33660046123de565b611788565b34801561070457600080fd5b506102fa610713366004612427565b6117c5565b60006001600160e01b031982166380ac58cd60e01b148061074957506001600160e01b03198216635b5e139f60e01b145b8061076457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107799061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a59061261b565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661087a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108a182610bec565b9050806001600160a01b0316836001600160a01b0316141561090f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610871565b336001600160a01b038216148061092b575061092b8133610695565b61099d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610871565b6109a78383611860565b505050565b6109b633826118ce565b6109d25760405162461bcd60e51b815260040161087190612650565b6109a78383836119c5565b6006546001600160a01b03163314610a075760405162461bcd60e51b8152600401610871906126a1565b60004711610a475760405162461bcd60e51b815260206004820152600d60248201526c454d5054595f42414c414e434560981b6044820152606401610871565b4760005b600e54811015610b1057600e8181548110610a6857610a686126d6565b6000918252602082200154600e80546001600160a01b03909216926108fc92610ad592600f929187908110610a9f57610a9f6126d6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610acf866064611b65565b90611b71565b6040518115909202916000818181858888f19350505050158015610afd573d6000803e3d6000fd5b5080610b0881612702565b915050610a4b565b5050565b6006546001600160a01b03163314610b3e5760405162461bcd60e51b8152600401610871906126a1565b600654600160a01b900460ff16610b8a5760405162461bcd60e51b815260206004820152601060248201526f1053149150511657d55394105554d15160821b6044820152606401610871565b610b92611b7d565b565b6109a7838383604051806020016040528060008152506111e3565b6006546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610871906126a1565b8051610b1090600b906020840190612172565b6000818152600260205260408120546001600160a01b0316806107645760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610871565b600b8054610c709061261b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c9061261b565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b505050505081565b60006001600160a01b038216610d5c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610871565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610da25760405162461bcd60e51b8152600401610871906126a1565b610b926000611c1a565b600c8054610c709061261b565b6006546000906001600160a01b03163314610de65760405162461bcd60e51b8152600401610871906126a1565b50600d819055805b919050565b6006546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610871906126a1565b600654600160a01b900460ff1615610e685760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d4105554d15160921b6044820152606401610871565b610b92611c6c565b6060600180546107799061261b565b60095460ff16610ed15760405162461bcd60e51b815260206004820152601760248201527f5055424c49435f4d494e545f4e4f545f535441525445440000000000000000006044820152606401610871565b600654600160a01b900460ff1615610f1d5760405162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b6044820152606401610871565b600081118015610f2e5750600a8111155b610f7a5760405162461bcd60e51b815260206004820152601860248201527f4d41585f4d494e545f5045525f54585f455843454544454400000000000000006044820152606401610871565b611a0a81600854610f8b919061271d565b1115610fce5760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610871565b6006546001600160a01b03163314610ffd57610ff18166d529ae9e860000612735565b341015610ffd57600080fd5b60015b8181116110305761101e3382600854611019919061271d565b611cf4565b8061102881612702565b915050611000565b508060086000828254611043919061271d565b909155505050565b6001600160a01b0382163314156110a45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610871565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b0316331461113a5760405162461bcd60e51b8152600401610871906126a1565b6009805462ff0000191662010000179055565b6006546001600160a01b031633146111775760405162461bcd60e51b8152600401610871906126a1565b60095460ff16151581151514156111d05760405162461bcd60e51b815260206004820152601860248201527f53414c455f535441525445445f414c52454144595f53455400000000000000006044820152606401610871565b6009805460ff1916911515919091179055565b6111ed33836118ce565b6112095760405162461bcd60e51b815260040161087190612650565b61121584848484611d0e565b50505050565b6006546001600160a01b031633146112455760405162461bcd60e51b8152600401610871906126a1565b611a0a82600854611256919061271d565b11156112a45760405162461bcd60e51b815260206004820152601b60248201527f4d41582041495244524f5020535550504c5920524541434845442e00000000006044820152606401610871565b60015b8281116112d2576112c08282600854611019919061271d565b806112ca81612702565b9150506112a7565b5081600860008282546112e5919061271d565b90915550505050565b600a8054610c709061261b565b6000818152600260205260409020546060906001600160a01b03166113545760405162461bcd60e51b815260206004820152600f60248201526e1513d2d15397d393d517d1561254d5608a1b6044820152606401610871565b600061135e611d41565b60095490915062010000900460ff1661140457600c805461137e9061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa9061261b565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050915050919050565b61140c611d41565b9050600081511161142c576040518060200160405280600081525061145a565b8061143684611d50565b600a60405160200161144a93929190612754565b6040516020818303038152906040525b9392505050565b50919050565b600954610100900460ff166114b55760405162461bcd60e51b815260206004820152601460248201527314149157d352539517d393d517d4d5105495115160621b6044820152606401610871565b600654600160a01b900460ff16156115015760405162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b6044820152606401610871565b604080513360601b6bffffffffffffffffffffffff191660208083019190915282516014818403018152603490920190925280519101206115429082611e4e565b15156001146115855760405162461bcd60e51b815260206004820152600f60248201526e105111149154d4d7d2539590531251608a1b6044820152606401610871565b6000821180156115b15750336000908152601060205260409020546006906115ae90849061271d565b11155b6115fd5760405162461bcd60e51b815260206004820152601d60248201527f4d41585f4c494d49545f5045525f57414c4c45545f45584345454445440000006044820152606401610871565b611a0a8260085461160e919061271d565b11156116515760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610871565b6006546001600160a01b03163314611680576116748266b1a2bc2ec50000612735565b34101561168057600080fd5b60015b8281116116ae5761169c3382600854611019919061271d565b806116a681612702565b915050611683565b5081600860008282546116c1919061271d565b909155505033600090815260106020526040812080548492906112e590849061271d565b6006546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610871906126a1565b60095460ff610100909104161515811515141561176e5760405162461bcd60e51b815260206004820152601b60248201527f50524553414c455f535441525445445f414c52454144595f53455400000000006044820152606401610871565b600980549115156101000261ff0019909216919091179055565b6006546001600160a01b031633146117b25760405162461bcd60e51b8152600401610871906126a1565b8051610b1090600c906020840190612172565b6006546001600160a01b031633146117ef5760405162461bcd60e51b8152600401610871906126a1565b6001600160a01b0381166118545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610871565b61185d81611c1a565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189582610bec565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166119475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610871565b600061195283610bec565b9050806001600160a01b0316846001600160a01b0316148061198d5750836001600160a01b0316611982846107fc565b6001600160a01b0316145b806119bd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166119d882610bec565b6001600160a01b031614611a405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610871565b6001600160a01b038216611aa25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610871565b611aad600082611860565b6001600160a01b0383166000908152600360205260408120805460019290611ad6908490612818565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b0490849061271d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061145a8284612845565b600061145a8284612735565b600654600160a01b900460ff16611bcd5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610871565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600654600160a01b900460ff1615611cb95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610871565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bfd3390565b610b10828260405180602001604052806000815250611eff565b611d198484846119c5565b611d2584848484611f32565b6112155760405162461bcd60e51b815260040161087190612859565b6060600b80546107799061261b565b606081611d745750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d9e5780611d8881612702565b9150611d979050600a83612845565b9150611d78565b60008167ffffffffffffffff811115611db957611db961233f565b6040519080825280601f01601f191660200182016040528015611de3576020820181803683370190505b5090505b84156119bd57611df8600183612818565b9150611e05600a866128ab565b611e1090603061271d565b60f81b818381518110611e2557611e256126d6565b60200101906001600160f81b031916908160001a905350611e47600a86612845565b9450611de7565b600082815b8351811015611ef3576000848281518110611e7057611e706126d6565b6020026020010151905080831015611eb3576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611ee0565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611eeb81612702565b915050611e53565b50600d54149392505050565b611f098383612030565b611f166000848484611f32565b6109a75760405162461bcd60e51b815260040161087190612859565b60006001600160a01b0384163b1561202557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f769033908990889088906004016128bf565b6020604051808303816000875af1925050508015611fb1575060408051601f3d908101601f19168201909252611fae918101906128fc565b60015b61200b573d808015611fdf576040519150601f19603f3d011682016040523d82523d6000602084013e611fe4565b606091505b5080516120035760405162461bcd60e51b815260040161087190612859565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119bd565b506001949350505050565b6001600160a01b0382166120865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610871565b6000818152600260205260409020546001600160a01b0316156120eb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610871565b6001600160a01b038216600090815260036020526040812080546001929061211490849061271d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461217e9061261b565b90600052602060002090601f0160209004810192826121a057600085556121e6565b82601f106121b957805160ff19168380011785556121e6565b828001600101855582156121e6579182015b828111156121e65782518255916020019190600101906121cb565b506121f29291506121f6565b5090565b5b808211156121f257600081556001016121f7565b6001600160e01b03198116811461185d57600080fd5b60006020828403121561223357600080fd5b813561145a8161220b565b60005b83811015612259578181015183820152602001612241565b838111156112155750506000910152565b6000815180845261228281602086016020860161223e565b601f01601f19169290920160200192915050565b60208152600061145a602083018461226a565b6000602082840312156122bb57600080fd5b5035919050565b80356001600160a01b0381168114610dee57600080fd5b600080604083850312156122ec57600080fd5b6122f5836122c2565b946020939093013593505050565b60008060006060848603121561231857600080fd5b612321846122c2565b925061232f602085016122c2565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561237e5761237e61233f565b604052919050565b600067ffffffffffffffff8311156123a0576123a061233f565b6123b3601f8401601f1916602001612355565b90508281528383830111156123c757600080fd5b828260208301376000602084830101529392505050565b6000602082840312156123f057600080fd5b813567ffffffffffffffff81111561240757600080fd5b8201601f8101841361241857600080fd5b6119bd84823560208401612386565b60006020828403121561243957600080fd5b61145a826122c2565b80358015158114610dee57600080fd5b6000806040838503121561246557600080fd5b61246e836122c2565b915061247c60208401612442565b90509250929050565b60006020828403121561249757600080fd5b61145a82612442565b600080600080608085870312156124b657600080fd5b6124bf856122c2565b93506124cd602086016122c2565b925060408501359150606085013567ffffffffffffffff8111156124f057600080fd5b8501601f8101871361250157600080fd5b61251087823560208401612386565b91505092959194509250565b6000806040838503121561252f57600080fd5b8235915061247c602084016122c2565b6000806040838503121561255257600080fd5b8235915060208084013567ffffffffffffffff8082111561257257600080fd5b818601915086601f83011261258657600080fd5b8135818111156125985761259861233f565b8060051b91506125a9848301612355565b81815291830184019184810190898411156125c357600080fd5b938501935b838510156125e1578435825293850193908501906125c8565b8096505050505050509250929050565b6000806040838503121561260457600080fd5b61260d836122c2565b915061247c602084016122c2565b600181811c9082168061262f57607f821691505b6020821081141561146157634e487b7160e01b600052602260045260246000fd5b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612716576127166126ec565b5060010190565b60008219821115612730576127306126ec565b500190565b600081600019048311821515161561274f5761274f6126ec565b500290565b6000845160206127678285838a0161223e565b85519184019161277a8184848a0161223e565b8554920191600090600181811c908083168061279757607f831692505b8583108114156127b557634e487b7160e01b85526022600452602485fd5b8080156127c957600181146127da57612807565b60ff19851688528388019550612807565b60008b81526020902060005b858110156127ff5781548a8201529084019088016127e6565b505083880195505b50939b9a5050505050505050505050565b60008282101561282a5761282a6126ec565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826128545761285461282f565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826128ba576128ba61282f565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f29083018461226a565b9695505050505050565b60006020828403121561290e57600080fd5b815161145a8161220b56fea26469706673582212209bef2b8e924ed1f5c4e0cf5df27924736d9b1a01fd7dc074a4a2e2316588e97264736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string):
Arg [1] : _initNotRevealedURI (string):
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43624:7007:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20199:361;;;;;;;;;;-1:-1:-1;20199:361:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;20199:361:0;;;;;;;;21388:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23091:315::-;;;;;;;;;;-1:-1:-1;23091:315:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;23091:315:0;1528:203:1;22614:411:0;;;;;;;;;;-1:-1:-1;22614:411:0;;;;;:::i;:::-;;:::i;:::-;;44065:30;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;44065:30:0;2173:177:1;24167:377:0;;;;;;;;;;-1:-1:-1;24167:377:0;;;;;:::i;:::-;;:::i;43796:41::-;;;;;;;;;;;;43833:4;43796:41;;49091:383;;;;;;;;;;;;;:::i;50513:115::-;;;;;;;;;;;;;:::i;24615:185::-;;;;;;;;;;-1:-1:-1;24615:185:0;;;;;:::i;:::-;;:::i;44183:28::-;;;;;;;;;;-1:-1:-1;44183:28:0;;;;;;;;;;;49868:104;;;;;;;;;;-1:-1:-1;49868:104:0;;;;;:::i;:::-;;:::i;44104:31::-;;;;;;;;;;-1:-1:-1;44104:31:0;;;;;;;;2829:86;;;;;;;;;;-1:-1:-1;2900:7:0;;-1:-1:-1;;;2900:7:0;;;;2829:86;;20988:333;;;;;;;;;;-1:-1:-1;20988:333:0;;;;;:::i;:::-;;:::i;44142:34::-;;;;;;;;;;-1:-1:-1;44142:34:0;;;;;;;;;;;44264:21;;;;;;;;;;;;;:::i;20624:302::-;;;;;;;;;;-1:-1:-1;20624:302:0;;;;;:::i;:::-;;:::i;41124:94::-;;;;;;;;;;;;;:::i;44292:28::-;;;;;;;;;;;;;:::i;50191:196::-;;;;;;;;;;-1:-1:-1;50191:196:0;;;;;:::i;:::-;;:::i;50395:110::-;;;;;;;;;;;;;:::i;40473:87::-;;;;;;;;;;-1:-1:-1;40546:6:0;;-1:-1:-1;;;;;40546:6:0;40473:87;;43959:44;;;;;;;;;;;;44001:2;43959:44;;21557:104;;;;;;;;;;;;;:::i;47672:620::-;;;;;;:::i;:::-;;:::i;23478:331::-;;;;;;;;;;-1:-1:-1;23478:331:0;;;;;:::i;:::-;;:::i;49980:69::-;;;;;;;;;;;;;:::i;49482:179::-;;;;;;;;;;-1:-1:-1;49482:179:0;;;;;:::i;:::-;;:::i;24871:366::-;;;;;;;;;;-1:-1:-1;24871:366:0;;;;;:::i;:::-;;:::i;45398:306::-;;;;;;;;;;-1:-1:-1;45398:306:0;;;;;:::i;:::-;;:::i;43844:47::-;;;;;;;;;;;;43881:10;43844:47;;43898:54;;;;;;;;;;;;43942:10;43898:54;;44220:37;;;;;;;;;;;;;:::i;48344:739::-;;;;;;;;;;-1:-1:-1;48344:739:0;;;;;:::i;:::-;;:::i;46713:890::-;;;;;;:::i;:::-;;:::i;49669:191::-;;;;;;;;;;-1:-1:-1;49669:191:0;;;;;:::i;:::-;;:::i;23880:220::-;;;;;;;;;;-1:-1:-1;23880:220:0;;;;;:::i;:::-;-1:-1:-1;;;;;24057:25:0;;;24027:4;24057:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23880:220;44010:48;;;;;;;;;;;;44057:1;44010:48;;50057:126;;;;;;;;;;-1:-1:-1;50057:126:0;;;;;:::i;:::-;;:::i;41373:230::-;;;;;;;;;;-1:-1:-1;41373:230:0;;;;;:::i;:::-;;:::i;20199:361::-;20351:4;-1:-1:-1;;;;;;20394:40:0;;-1:-1:-1;;;20394:40:0;;:105;;-1:-1:-1;;;;;;;20451:48:0;;-1:-1:-1;;;20451:48:0;20394:105;:158;;;-1:-1:-1;;;;;;;;;;19169:40:0;;;20516:36;20374:178;20199:361;-1:-1:-1;;20199:361:0:o;21388:100::-;21442:13;21475:5;21468:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21388:100;:::o;23091:315::-;23217:7;26874:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26874:16:0;23243:111;;;;-1:-1:-1;;;23243:111:0;;7937:2:1;23243:111:0;;;7919:21:1;7976:2;7956:18;;;7949:30;8015:34;7995:18;;;7988:62;-1:-1:-1;;;8066:18:1;;;8059:42;8118:19;;23243:111:0;;;;;;;;;-1:-1:-1;23374:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23374:24:0;;23091:315::o;22614:411::-;22695:13;22711:23;22726:7;22711:14;:23::i;:::-;22695:39;;22759:5;-1:-1:-1;;;;;22753:11:0;:2;-1:-1:-1;;;;;22753:11:0;;;22745:57;;;;-1:-1:-1;;;22745:57:0;;8350:2:1;22745:57:0;;;8332:21:1;8389:2;8369:18;;;8362:30;8428:34;8408:18;;;8401:62;-1:-1:-1;;;8479:18:1;;;8472:31;8520:19;;22745:57:0;8148:397:1;22745:57:0;2161:10;-1:-1:-1;;;;;22837:21:0;;;;:62;;-1:-1:-1;22862:37:0;22879:5;2161:10;23880:220;:::i;22862:37::-;22815:168;;;;-1:-1:-1;;;22815:168:0;;8752:2:1;22815:168:0;;;8734:21:1;8791:2;8771:18;;;8764:30;8830:34;8810:18;;;8803:62;8901:26;8881:18;;;8874:54;8945:19;;22815:168:0;8550:420:1;22815:168:0;22996:21;23005:2;23009:7;22996:8;:21::i;:::-;22684:341;22614:411;;:::o;24167:377::-;24376:41;2161:10;24409:7;24376:18;:41::i;:::-;24354:141;;;;-1:-1:-1;;;24354:141:0;;;;;;;:::i;:::-;24508:28;24518:4;24524:2;24528:7;24508:9;:28::i;49091:383::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;49173:1:::1;49149:21;:25;49141:51;;;::::0;-1:-1:-1;;;49141:51:0;;9956:2:1;49141:51:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;-1:-1:-1;;;10014:18:1;;;10007:43;10067:18;;49141:51:0::1;9754:337:1::0;49141:51:0::1;49221:21;49203:15;49255:212;49279:17;:24:::0;49275:28;::::1;49255:212;;;49333:17;49351:1;49333:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;49418:17:::1;:20:::0;;-1:-1:-1;;;;;49333:20:0;;::::1;::::0;49325:130:::1;::::0;49382:58:::1;::::0;49403:14:::1;::::0;49333:20;49436:1;;49418:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;49418:20:0::1;49403:36:::0;;;::::1;::::0;;;;;;;;;49382:16:::1;:7:::0;49394:3:::1;49382:11;:16::i;:::-;:20:::0;::::1;:58::i;:::-;49325:130;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;49305:3:0;::::1;::::0;::::1;:::i;:::-;;;;49255:212;;;;49130:344;49091:383::o:0;50513:115::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;2900:7;;-1:-1:-1;;;2900:7:0;;;;50562:37:::1;;;::::0;-1:-1:-1;;;50562:37:0;;10702:2:1;50562:37:0::1;::::0;::::1;10684:21:1::0;10741:2;10721:18;;;10714:30;-1:-1:-1;;;10760:18:1;;;10753:46;10816:18;;50562:37:0::1;10500:340:1::0;50562:37:0::1;50610:10;:8;:10::i;:::-;50513:115::o:0;24615:185::-;24753:39;24770:4;24776:2;24780:7;24753:39;;;;;;;;;;;;:16;:39::i;49868:104::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;49943:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;20988:333::-:0;21110:7;21152:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21152:16:0;21201:19;21179:111;;;;-1:-1:-1;;;21179:111:0;;11047:2:1;21179:111:0;;;11029:21:1;11086:2;11066:18;;;11059:30;11125:34;11105:18;;;11098:62;-1:-1:-1;;;11176:18:1;;;11169:39;11225:19;;21179:111:0;10845:405:1;44264:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20624:302::-;20746:7;-1:-1:-1;;;;;20794:19:0;;20772:112;;;;-1:-1:-1;;;20772:112:0;;11457:2:1;20772:112:0;;;11439:21:1;11496:2;11476:18;;;11469:30;11535:34;11515:18;;;11508:62;-1:-1:-1;;;11586:18:1;;;11579:40;11636:19;;20772:112:0;11255:406:1;20772:112:0;-1:-1:-1;;;;;;20902:16:0;;;;;:9;:16;;;;;;;20624:302::o;41124:94::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;41189:21:::1;41207:1;41189:9;:21::i;44292:28::-:0;;;;;;;:::i;50191:196::-;40546:6;;50295:7;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;-1:-1:-1;50320:11:0::1;:30:::0;;;50334:16;40764:1:::1;50191:196:::0;;;:::o;50395:110::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;2900:7;;-1:-1:-1;;;2900:7:0;;;;50450:9:::1;50442:36;;;::::0;-1:-1:-1;;;50442:36:0;;11868:2:1;50442:36:0::1;::::0;::::1;11850:21:1::0;11907:2;11887:18;;;11880:30;-1:-1:-1;;;11926:18:1;;;11919:44;11980:18;;50442:36:0::1;11666:338:1::0;50442:36:0::1;50489:8;:6;:8::i;21557:104::-:0;21613:13;21646:7;21639:14;;;;;:::i;47672:620::-;47736:11;;;;47728:47;;;;-1:-1:-1;;;47728:47:0;;12211:2:1;47728:47:0;;;12193:21:1;12250:2;12230:18;;;12223:30;12289:25;12269:18;;;12262:53;12332:18;;47728:47:0;12009:347:1;47728:47:0;2900:7;;-1:-1:-1;;;2900:7:0;;;;47794:9;47786:37;;;;-1:-1:-1;;;47786:37:0;;12563:2:1;47786:37:0;;;12545:21:1;12602:2;12582:18;;;12575:30;-1:-1:-1;;;12621:18:1;;;12614:45;12676:18;;47786:37:0;12361:339:1;47786:37:0;47865:1;47856:6;:10;:39;;;;;44001:2;47870:6;:25;;47856:39;47834:113;;;;-1:-1:-1;;;47834:113:0;;12907:2:1;47834:113:0;;;12889:21:1;12946:2;12926:18;;;12919:30;12985:26;12965:18;;;12958:54;13029:18;;47834:113:0;12705:348:1;47834:113:0;43833:4;47980:6;47966:11;;:20;;;;:::i;:::-;:34;;47958:65;;;;-1:-1:-1;;;47958:65:0;;13393:2:1;47958:65:0;;;13375:21:1;13432:2;13412:18;;;13405:30;-1:-1:-1;;;13451:18:1;;;13444:48;13509:18;;47958:65:0;13191:342:1;47958:65:0;40546:6;;-1:-1:-1;;;;;40546:6:0;48040:10;:21;48036:102;;48099:26;48119:6;43942:10;48099:26;:::i;:::-;48086:9;:39;;48078:48;;;;;;48167:1;48150:103;48175:6;48170:1;:11;48150:103;;48203:38;48213:10;48239:1;48225:11;;:15;;;;:::i;:::-;48203:9;:38::i;:::-;48183:3;;;;:::i;:::-;;;;48150:103;;;;48278:6;48263:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;47672:620:0:o;23478:331::-;-1:-1:-1;;;;;23617:24:0;;2161:10;23617:24;;23609:62;;;;-1:-1:-1;;;23609:62:0;;13913:2:1;23609:62:0;;;13895:21:1;13952:2;13932:18;;;13925:30;13991:27;13971:18;;;13964:55;14036:18;;23609:62:0;13711:349:1;23609:62:0;2161:10;23684:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23684:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23684:53:0;;;;;;;;;;23753:48;;540:41:1;;;23684:42:0;;2161:10;23753:48;;513:18:1;23753:48:0;;;;;;;23478:331;;:::o;49980:69::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;50026:8:::1;:15:::0;;-1:-1:-1;;50026:15:0::1;::::0;::::1;::::0;;49980:69::o;49482:179::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;49562:11:::1;::::0;::::1;;:26;;::::0;::::1;;;;49554:63;;;::::0;-1:-1:-1;;;49554:63:0;;14267:2:1;49554:63:0::1;::::0;::::1;14249:21:1::0;14306:2;14286:18;;;14279:30;14345:26;14325:18;;;14318:54;14389:18;;49554:63:0::1;14065:348:1::0;49554:63:0::1;49628:11;:25:::0;;-1:-1:-1;;49628:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49482:179::o;24871:366::-;25060:41;2161:10;25093:7;25060:18;:41::i;:::-;25038:141;;;;-1:-1:-1;;;25038:141:0;;;;;;;:::i;:::-;25190:39;25204:4;25210:2;25214:7;25223:5;25190:13;:39::i;:::-;24871:366;;;;:::o;45398:306::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;43833:4:::1;45501:6;45487:11;;:20;;;;:::i;:::-;:34;;45479:74;;;::::0;-1:-1:-1;;;45479:74:0;;14620:2:1;45479:74:0::1;::::0;::::1;14602:21:1::0;14659:2;14639:18;;;14632:30;14698:29;14678:18;;;14671:57;14745:18;;45479:74:0::1;14418:351:1::0;45479:74:0::1;45581:1;45564:101;45589:6;45584:1;:11;45564:101;;45617:36;45627:8;45651:1;45637:11;;:15;;;;:::i;45617:36::-;45597:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45564:101;;;;45690:6;45675:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;45398:306:0:o;44220:37::-;;;;;;;:::i;48344:739::-;26850:4;26874:16;;;:7;:16;;;;;;48462:13;;-1:-1:-1;;;;;26874:16:0;48493:44;;;;-1:-1:-1;;;48493:44:0;;14976:2:1;48493:44:0;;;14958:21:1;15015:2;14995:18;;;14988:30;-1:-1:-1;;;15034:18:1;;;15027:45;15089:18;;48493:44:0;14774:339:1;48493:44:0;48550:28;48581:10;:8;:10::i;:::-;48606:8;;48550:41;;-1:-1:-1;48606:8:0;;;;;48602:466;;48649:14;48642:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48344:739;;;:::o;48602:466::-;48722:10;:8;:10::i;:::-;48705:27;;48800:1;48775:14;48769:28;:32;:287;;;;;;;;;;;;;;;;;48893:14;48934:18;:7;:16;:18::i;:::-;48979:13;48850:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48769:287;48749:307;48344:739;-1:-1:-1;;;48344:739:0:o;48602:466::-;48482:601;48344:739;;;:::o;46713:890::-;46836:14;;;;;;;46828:47;;;;-1:-1:-1;;;46828:47:0;;16978:2:1;46828:47:0;;;16960:21:1;17017:2;16997:18;;;16990:30;-1:-1:-1;;;17036:18:1;;;17029:50;17096:18;;46828:47:0;16776:344:1;46828:47:0;2900:7;;-1:-1:-1;;;2900:7:0;;;;46894:9;46886:37;;;;-1:-1:-1;;;46886:37:0;;12563:2:1;46886:37:0;;;12545:21:1;12602:2;12582:18;;;12575:30;-1:-1:-1;;;12621:18:1;;;12614:45;12676:18;;46886:37:0;12361:339:1;46886:37:0;45860:25;;;46978:10;21584:2:1;21580:15;-1:-1:-1;;21576:53:1;45860:25:0;;;;21564:66:1;;;;45860:25:0;;;;;;;;;21646:12:1;;;;45860:25:0;;;45850:36;;;;;46956:42;;46991:6;46956:15;:42::i;:::-;:50;;47002:4;46956:50;46934:115;;;;-1:-1:-1;;;46934:115:0;;17327:2:1;46934:115:0;;;17309:21:1;17366:2;17346:18;;;17339:30;-1:-1:-1;;;17385:18:1;;;17378:45;17440:18;;46934:115:0;17125:339:1;46934:115:0;47093:1;47084:6;:10;:75;;;;-1:-1:-1;47115:10:0;47098:28;;;;:16;:28;;;;;;44057:1;;47098:37;;47129:6;;47098:37;:::i;:::-;:61;;47084:75;47062:154;;;;-1:-1:-1;;;47062:154:0;;17671:2:1;47062:154:0;;;17653:21:1;17710:2;17690:18;;;17683:30;17749:31;17729:18;;;17722:59;17798:18;;47062:154:0;17469:353:1;47062:154:0;43833:4;47249:6;47235:11;;:20;;;;:::i;:::-;:34;;47227:65;;;;-1:-1:-1;;;47227:65:0;;13393:2:1;47227:65:0;;;13375:21:1;13432:2;13412:18;;;13405:30;-1:-1:-1;;;13451:18:1;;;13444:48;13509:18;;47227:65:0;13191:342:1;47227:65:0;40546:6;;-1:-1:-1;;;;;40546:6:0;47309:10;:21;47305:95;;47368:19;47381:6;43881:10;47368:19;:::i;:::-;47355:9;:32;;47347:41;;;;;;47429:1;47412:103;47437:6;47432:1;:11;47412:103;;47465:38;47475:10;47501:1;47487:11;;:15;;;;:::i;47465:38::-;47445:3;;;;:::i;:::-;;;;47412:103;;;;47540:6;47525:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;47574:10:0;47557:28;;;;:16;:28;;;;;:38;;47589:6;;47557:28;:38;;47589:6;;47557:38;:::i;49669:191::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;49752:14:::1;::::0;::::1;;::::0;;::::1;;:29;;::::0;::::1;;;;49744:69;;;::::0;-1:-1:-1;;;49744:69:0;;18029:2:1;49744:69:0::1;::::0;::::1;18011:21:1::0;18068:2;18048:18;;;18041:30;18107:29;18087:18;;;18080:57;18154:18;;49744:69:0::1;17827:351:1::0;49744:69:0::1;49824:14;:28:::0;;;::::1;;;;-1:-1:-1::0;;49824:28:0;;::::1;::::0;;;::::1;::::0;;49669:191::o;50057:126::-;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;50143:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;41373:230::-:0;40546:6;;-1:-1:-1;;;;;40546:6:0;2161:10;40693:23;40685:68;;;;-1:-1:-1;;;40685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41476:22:0;::::1;41454:111;;;::::0;-1:-1:-1;;;41454:111:0;;18385:2:1;41454:111:0::1;::::0;::::1;18367:21:1::0;18424:2;18404:18;;;18397:30;18463:34;18443:18;;;18436:62;-1:-1:-1;;;18514:18:1;;;18507:36;18560:19;;41454:111:0::1;18183:402:1::0;41454:111:0::1;41576:19;41586:8;41576:9;:19::i;:::-;41373:230:::0;:::o;30917:174::-;30992:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30992:29:0;-1:-1:-1;;;;;30992:29:0;;;;;;;;:24;;31046:23;30992:24;31046:14;:23::i;:::-;-1:-1:-1;;;;;31037:46:0;;;;;;;;;;;30917:174;;:::o;27079:460::-;27212:4;26874:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26874:16:0;27235:111;;;;-1:-1:-1;;;27235:111:0;;18792:2:1;27235:111:0;;;18774:21:1;18831:2;18811:18;;;18804:30;18870:34;18850:18;;;18843:62;-1:-1:-1;;;18921:18:1;;;18914:42;18973:19;;27235:111:0;18590:408:1;27235:111:0;27357:13;27373:23;27388:7;27373:14;:23::i;:::-;27357:39;;27426:5;-1:-1:-1;;;;;27415:16:0;:7;-1:-1:-1;;;;;27415:16:0;;:65;;;;27473:7;-1:-1:-1;;;;;27449:31:0;:20;27461:7;27449:11;:20::i;:::-;-1:-1:-1;;;;;27449:31:0;;27415:65;:115;;;-1:-1:-1;;;;;;24057:25:0;;;24027:4;24057:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27498:32;27407:124;27079:460;-1:-1:-1;;;;27079:460:0:o;30183:616::-;30356:4;-1:-1:-1;;;;;30329:31:0;:23;30344:7;30329:14;:23::i;:::-;-1:-1:-1;;;;;30329:31:0;;30307:123;;;;-1:-1:-1;;;30307:123:0;;19205:2:1;30307:123:0;;;19187:21:1;19244:2;19224:18;;;19217:30;19283:34;19263:18;;;19256:62;-1:-1:-1;;;19334:18:1;;;19327:39;19383:19;;30307:123:0;19003:405:1;30307:123:0;-1:-1:-1;;;;;30449:16:0;;30441:65;;;;-1:-1:-1;;;30441:65:0;;19615:2:1;30441:65:0;;;19597:21:1;19654:2;19634:18;;;19627:30;19693:34;19673:18;;;19666:62;-1:-1:-1;;;19744:18:1;;;19737:34;19788:19;;30441:65:0;19413:400:1;30441:65:0;30623:29;30640:1;30644:7;30623:8;:29::i;:::-;-1:-1:-1;;;;;30665:15:0;;;;;;:9;:15;;;;;:20;;30684:1;;30665:15;:20;;30684:1;;30665:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30696:13:0;;;;;;:9;:13;;;;;:18;;30713:1;;30696:13;:18;;30713:1;;30696:18;:::i;:::-;;;;-1:-1:-1;;30725:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30725:21:0;-1:-1:-1;;;;;30725:21:0;;;;;;;;;30764:27;;30725:16;;30764:27;;;;;;;30183:616;;;:::o;37016:98::-;37074:7;37101:5;37105:1;37101;:5;:::i;36617:98::-;36675:7;36702:5;36706:1;36702;:5;:::i;3888:120::-;2900:7;;-1:-1:-1;;;2900:7:0;;;;3424:41;;;;-1:-1:-1;;;3424:41:0;;20407:2:1;3424:41:0;;;20389:21:1;20446:2;20426:18;;;20419:30;-1:-1:-1;;;20465:18:1;;;20458:50;20525:18;;3424:41:0;20205:344:1;3424:41:0;3947:7:::1;:15:::0;;-1:-1:-1;;;;3947:15:0::1;::::0;;3978:22:::1;2161:10:::0;3987:12:::1;3978:22;::::0;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;3978:22:0::1;;;;;;;3888:120::o:0;41611:173::-;41686:6;;;-1:-1:-1;;;;;41703:17:0;;;-1:-1:-1;;;;;;41703:17:0;;;;;;;41736:40;;41686:6;;;41703:17;41686:6;;41736:40;;41667:16;;41736:40;41656:128;41611:173;:::o;3629:118::-;2900:7;;-1:-1:-1;;;2900:7:0;;;;3154:9;3146:38;;;;-1:-1:-1;;;3146:38:0;;20756:2:1;3146:38:0;;;20738:21:1;20795:2;20775:18;;;20768:30;-1:-1:-1;;;20814:18:1;;;20807:46;20870:18;;3146:38:0;20554:340:1;3146:38:0;3689:7:::1;:14:::0;;-1:-1:-1;;;;3689:14:0::1;-1:-1:-1::0;;;3689:14:0::1;::::0;;3719:20:::1;3726:12;2161:10:::0;;2081:98;27881:110;27957:26;27967:2;27971:7;27957:26;;;;;;;;;;;;:9;:26::i;26119:353::-;26276:28;26286:4;26292:2;26296:7;26276:9;:28::i;:::-;26337:48;26360:4;26366:2;26370:7;26379:5;26337:22;:48::i;:::-;26315:149;;;;-1:-1:-1;;;26315:149:0;;;;;;;:::i;45282:108::-;45342:13;45375:7;45368:14;;;;;:::i;253:723::-;309:13;530:10;526:53;;-1:-1:-1;;557:10:0;;;;;;;;;;;;-1:-1:-1;;;557:10:0;;;;;253:723::o;526:53::-;604:5;589:12;645:78;652:9;;645:78;;678:8;;;;:::i;:::-;;-1:-1:-1;701:10:0;;-1:-1:-1;709:2:0;701:10;;:::i;:::-;;;645:78;;;733:19;765:6;755:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;755:17:0;;733:39;;783:154;790:10;;783:154;;817:11;827:1;817:11;;:::i;:::-;;-1:-1:-1;886:10:0;894:2;886:5;:10;:::i;:::-;873:24;;:2;:24;:::i;:::-;860:39;;843:6;850;843:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;843:56:0;;;;;;;;-1:-1:-1;914:11:0;923:2;914:11;;:::i;:::-;;;783:154;;45970:674;46082:4;46127;46082;46144:446;46168:5;:12;46164:1;:16;46144:446;;;46202:20;46225:5;46231:1;46225:8;;;;;;;;:::i;:::-;;;;;;;46202:31;;46269:12;46254;:27;46250:329;;;46349:44;;;;;;21826:19:1;;;21861:12;;;21854:28;;;21898:12;;46349:44:0;;;;;;;;;;;;46317:95;;;;;;46302:110;;46250:329;;;46500:44;;;;;;21826:19:1;;;21861:12;;;21854:28;;;21898:12;;46500:44:0;;;;;;;;;;;;46468:95;;;;;;46453:110;;46250:329;-1:-1:-1;46182:3:0;;;;:::i;:::-;;;;46144:446;;;-1:-1:-1;46625:11:0;;46609:27;;45970:674;-1:-1:-1;;;45970:674:0:o;28218:321::-;28348:18;28354:2;28358:7;28348:5;:18::i;:::-;28399:54;28430:1;28434:2;28438:7;28447:5;28399:22;:54::i;:::-;28377:154;;;;-1:-1:-1;;;28377:154:0;;;;;;;:::i;31656:985::-;31811:4;-1:-1:-1;;;;;31832:13:0;;11399:20;11447:8;31828:806;;31886:178;;-1:-1:-1;;;31886:178:0;;-1:-1:-1;;;;;31886:36:0;;;;;:178;;2161:10;;31981:4;;32009:7;;32040:5;;31886:178;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31886:178:0;;;;;;;;-1:-1:-1;;31886:178:0;;;;;;;;;;;;:::i;:::-;;;31864:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32248:13:0;;32244:320;;32291:108;;-1:-1:-1;;;32291:108:0;;;;;;;:::i;32244:320::-;32514:6;32508:13;32499:6;32495:2;32491:15;32484:38;31864:715;-1:-1:-1;;;;;;32129:51:0;-1:-1:-1;;;32129:51:0;;-1:-1:-1;32122:58:0;;31828:806;-1:-1:-1;32618:4:0;31656:985;;;;;;:::o;28875:382::-;-1:-1:-1;;;;;28955:16:0;;28947:61;;;;-1:-1:-1;;;28947:61:0;;22871:2:1;28947:61:0;;;22853:21:1;;;22890:18;;;22883:30;22949:34;22929:18;;;22922:62;23001:18;;28947:61:0;22669:356:1;28947:61:0;26850:4;26874:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26874:16:0;:30;29019:58;;;;-1:-1:-1;;;29019:58:0;;23232:2:1;29019:58:0;;;23214:21:1;23271:2;23251:18;;;23244:30;23310;23290:18;;;23283:58;23358:18;;29019:58:0;23030:352:1;29019:58:0;-1:-1:-1;;;;;29148:13:0;;;;;;:9;:13;;;;;:18;;29165:1;;29148:13;:18;;29165:1;;29148:18;:::i;:::-;;;;-1:-1:-1;;29177:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29177:21:0;-1:-1:-1;;;;;29177:21:0;;;;;;;;29216:33;;29177:16;;;29216:33;;29177:16;;29216:33;28875:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1914:254;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:127::-;2749:10;2744:3;2740:20;2737:1;2730:31;2780:4;2777:1;2770:15;2804:4;2801:1;2794:15;2820:275;2891:2;2885:9;2956:2;2937:13;;-1:-1:-1;;2933:27:1;2921:40;;2991:18;2976:34;;3012:22;;;2973:62;2970:88;;;3038:18;;:::i;:::-;3074:2;3067:22;2820:275;;-1:-1:-1;2820:275:1:o;3100:407::-;3165:5;3199:18;3191:6;3188:30;3185:56;;;3221:18;;:::i;:::-;3259:57;3304:2;3283:15;;-1:-1:-1;;3279:29:1;3310:4;3275:40;3259:57;:::i;:::-;3250:66;;3339:6;3332:5;3325:21;3379:3;3370:6;3365:3;3361:16;3358:25;3355:45;;;3396:1;3393;3386:12;3355:45;3445:6;3440:3;3433:4;3426:5;3422:16;3409:43;3499:1;3492:4;3483:6;3476:5;3472:18;3468:29;3461:40;3100:407;;;;;:::o;3512:451::-;3581:6;3634:2;3622:9;3613:7;3609:23;3605:32;3602:52;;;3650:1;3647;3640:12;3602:52;3690:9;3677:23;3723:18;3715:6;3712:30;3709:50;;;3755:1;3752;3745:12;3709:50;3778:22;;3831:4;3823:13;;3819:27;-1:-1:-1;3809:55:1;;3860:1;3857;3850:12;3809:55;3883:74;3949:7;3944:2;3931:16;3926:2;3922;3918:11;3883:74;:::i;3968:186::-;4027:6;4080:2;4068:9;4059:7;4055:23;4051:32;4048:52;;;4096:1;4093;4086:12;4048:52;4119:29;4138:9;4119:29;:::i;4526:160::-;4591:20;;4647:13;;4640:21;4630:32;;4620:60;;4676:1;4673;4666:12;4691:254;4756:6;4764;4817:2;4805:9;4796:7;4792:23;4788:32;4785:52;;;4833:1;4830;4823:12;4785:52;4856:29;4875:9;4856:29;:::i;:::-;4846:39;;4904:35;4935:2;4924:9;4920:18;4904:35;:::i;:::-;4894:45;;4691:254;;;;;:::o;4950:180::-;5006:6;5059:2;5047:9;5038:7;5034:23;5030:32;5027:52;;;5075:1;5072;5065:12;5027:52;5098:26;5114:9;5098:26;:::i;5135:667::-;5230:6;5238;5246;5254;5307:3;5295:9;5286:7;5282:23;5278:33;5275:53;;;5324:1;5321;5314:12;5275:53;5347:29;5366:9;5347:29;:::i;:::-;5337:39;;5395:38;5429:2;5418:9;5414:18;5395:38;:::i;:::-;5385:48;;5480:2;5469:9;5465:18;5452:32;5442:42;;5535:2;5524:9;5520:18;5507:32;5562:18;5554:6;5551:30;5548:50;;;5594:1;5591;5584:12;5548:50;5617:22;;5670:4;5662:13;;5658:27;-1:-1:-1;5648:55:1;;5699:1;5696;5689:12;5648:55;5722:74;5788:7;5783:2;5770:16;5765:2;5761;5757:11;5722:74;:::i;:::-;5712:84;;;5135:667;;;;;;;:::o;5807:254::-;5875:6;5883;5936:2;5924:9;5915:7;5911:23;5907:32;5904:52;;;5952:1;5949;5942:12;5904:52;5988:9;5975:23;5965:33;;6017:38;6051:2;6040:9;6036:18;6017:38;:::i;6066:1014::-;6159:6;6167;6220:2;6208:9;6199:7;6195:23;6191:32;6188:52;;;6236:1;6233;6226:12;6188:52;6272:9;6259:23;6249:33;;6301:2;6354;6343:9;6339:18;6326:32;6377:18;6418:2;6410:6;6407:14;6404:34;;;6434:1;6431;6424:12;6404:34;6472:6;6461:9;6457:22;6447:32;;6517:7;6510:4;6506:2;6502:13;6498:27;6488:55;;6539:1;6536;6529:12;6488:55;6575:2;6562:16;6597:2;6593;6590:10;6587:36;;;6603:18;;:::i;:::-;6649:2;6646:1;6642:10;6632:20;;6672:28;6696:2;6692;6688:11;6672:28;:::i;:::-;6734:15;;;6804:11;;;6800:20;;;6765:12;;;;6832:19;;;6829:39;;;6864:1;6861;6854:12;6829:39;6888:11;;;;6908:142;6924:6;6919:3;6916:15;6908:142;;;6990:17;;6978:30;;6941:12;;;;7028;;;;6908:142;;;7069:5;7059:15;;;;;;;;6066:1014;;;;;:::o;7085:260::-;7153:6;7161;7214:2;7202:9;7193:7;7189:23;7185:32;7182:52;;;7230:1;7227;7220:12;7182:52;7253:29;7272:9;7253:29;:::i;:::-;7243:39;;7301:38;7335:2;7324:9;7320:18;7301:38;:::i;7350:380::-;7429:1;7425:12;;;;7472;;;7493:61;;7547:4;7539:6;7535:17;7525:27;;7493:61;7600:2;7592:6;7589:14;7569:18;7566:38;7563:161;;;7646:10;7641:3;7637:20;7634:1;7627:31;7681:4;7678:1;7671:15;7709:4;7706:1;7699:15;8975:413;9177:2;9159:21;;;9216:2;9196:18;;;9189:30;9255:34;9250:2;9235:18;;9228:62;-1:-1:-1;;;9321:2:1;9306:18;;9299:47;9378:3;9363:19;;8975:413::o;9393:356::-;9595:2;9577:21;;;9614:18;;;9607:30;9673:34;9668:2;9653:18;;9646:62;9740:2;9725:18;;9393:356::o;10096:127::-;10157:10;10152:3;10148:20;10145:1;10138:31;10188:4;10185:1;10178:15;10212:4;10209:1;10202:15;10228:127;10289:10;10284:3;10280:20;10277:1;10270:31;10320:4;10317:1;10310:15;10344:4;10341:1;10334:15;10360:135;10399:3;-1:-1:-1;;10420:17:1;;10417:43;;;10440:18;;:::i;:::-;-1:-1:-1;10487:1:1;10476:13;;10360:135::o;13058:128::-;13098:3;13129:1;13125:6;13122:1;13119:13;13116:39;;;13135:18;;:::i;:::-;-1:-1:-1;13171:9:1;;13058:128::o;13538:168::-;13578:7;13644:1;13640;13636:6;13632:14;13629:1;13626:21;13621:1;13614:9;13607:17;13603:45;13600:71;;;13651:18;;:::i;:::-;-1:-1:-1;13691:9:1;;13538:168::o;15244:1527::-;15468:3;15506:6;15500:13;15532:4;15545:51;15589:6;15584:3;15579:2;15571:6;15567:15;15545:51;:::i;:::-;15659:13;;15618:16;;;;15681:55;15659:13;15618:16;15703:15;;;15681:55;:::i;:::-;15825:13;;15758:20;;;15798:1;;15885;15907:18;;;;15960;;;;15987:93;;16065:4;16055:8;16051:19;16039:31;;15987:93;16128:2;16118:8;16115:16;16095:18;16092:40;16089:167;;;-1:-1:-1;;;16155:33:1;;16211:4;16208:1;16201:15;16241:4;16162:3;16229:17;16089:167;16272:18;16299:110;;;;16423:1;16418:328;;;;16265:481;;16299:110;-1:-1:-1;;16334:24:1;;16320:39;;16379:20;;;;-1:-1:-1;16299:110:1;;16418:328;15191:1;15184:14;;;15228:4;15215:18;;16513:1;16527:169;16541:8;16538:1;16535:15;16527:169;;;16623:14;;16608:13;;;16601:37;16666:16;;;;16558:10;;16527:169;;;16531:3;;16727:8;16720:5;16716:20;16709:27;;16265:481;-1:-1:-1;16762:3:1;;15244:1527;-1:-1:-1;;;;;;;;;;;15244:1527:1:o;19818:125::-;19858:4;19886:1;19883;19880:8;19877:34;;;19891:18;;:::i;:::-;-1:-1:-1;19928:9:1;;19818:125::o;19948:127::-;20009:10;20004:3;20000:20;19997:1;19990:31;20040:4;20037:1;20030:15;20064:4;20061:1;20054:15;20080:120;20120:1;20146;20136:35;;20151:18;;:::i;:::-;-1:-1:-1;20185:9:1;;20080:120::o;20899:414::-;21101:2;21083:21;;;21140:2;21120:18;;;21113:30;21179:34;21174:2;21159:18;;21152:62;-1:-1:-1;;;21245:2:1;21230:18;;21223:48;21303:3;21288:19;;20899:414::o;21318:112::-;21350:1;21376;21366:35;;21381:18;;:::i;:::-;-1:-1:-1;21415:9:1;;21318:112::o;21921:489::-;-1:-1:-1;;;;;22190:15:1;;;22172:34;;22242:15;;22237:2;22222:18;;22215:43;22289:2;22274:18;;22267:34;;;22337:3;22332:2;22317:18;;22310:31;;;22115:4;;22358:46;;22384:19;;22376:6;22358:46;:::i;:::-;22350:54;21921:489;-1:-1:-1;;;;;;21921:489:1:o;22415:249::-;22484:6;22537:2;22525:9;22516:7;22512:23;22508:32;22505:52;;;22553:1;22550;22543:12;22505:52;22585:9;22579:16;22604:30;22628:5;22604:30;:::i
Swarm Source
ipfs://9bef2b8e924ed1f5c4e0cf5df27924736d9b1a01fd7dc074a4a2e2316588e972
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.