Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 13 from a total of 13 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 15933927 | 1233 days ago | IN | 0 ETH | 0.0014135 | ||||
| Mint | 15839868 | 1246 days ago | IN | 0.05 ETH | 0.00321448 | ||||
| Mint | 15833373 | 1247 days ago | IN | 0.05 ETH | 0.00308142 | ||||
| Mint | 15825544 | 1248 days ago | IN | 0.05 ETH | 0.00637091 | ||||
| Mint | 15825525 | 1248 days ago | IN | 0.05 ETH | 0.00696541 | ||||
| Mint | 15825274 | 1248 days ago | IN | 0.05 ETH | 0.00544795 | ||||
| Mint | 15825143 | 1248 days ago | IN | 0.05 ETH | 0.00168079 | ||||
| Mint | 15824460 | 1248 days ago | IN | 0.05 ETH | 0.00217051 | ||||
| Mint | 15821418 | 1249 days ago | IN | 0.05 ETH | 0.00179126 | ||||
| Mint | 15820829 | 1249 days ago | IN | 0.05 ETH | 0.00232851 | ||||
| Withdraw | 15819822 | 1249 days ago | IN | 0.05 ETH | 0.00083359 | ||||
| Mint | 15819073 | 1249 days ago | IN | 0.05 ETH | 0.00489319 | ||||
| Pause | 15818443 | 1249 days ago | IN | 0 ETH | 0.00147512 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NBALottery
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-10-24
*/
//** Nba Inu Official Website: https://www.nbainu.online
//** Nba Inu Official Telegram: https://t.me/NBAINUERC
//** Nba Inu Official Twitter: https://twitter.com/NBAINUERC
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
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 {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_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);
}
}
pragma solidity ^0.8.0;
contract NBALottery is ERC721Enumerable, Ownable {
using Strings for uint256;
string public baseURI;
string public baseExtension = ".json";
uint256 public cost = 0.05 ether;
uint256 public maxSupply = 30000;
uint256 public maxMintAmount = 10;
bool public paused = true;
mapping(address => bool) public whitelisted;
constructor() ERC721("NBA INU Lottery", "NBALOTT") {
setBaseURI("ipfs://bafybeibaxfk36n4i5djhgycf45xvzvsjr24gtaaw5455nba52qthhaw4la/data.json");
}
// internal
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
// public
function mint(address _to, uint256 _mintAmount) public payable {
uint256 supply = totalSupply();
require(!paused);
require(_mintAmount > 0);
require(_mintAmount <= maxMintAmount);
require(supply + _mintAmount <= maxSupply);
if (msg.sender != owner()) {
if(whitelisted[msg.sender] != true) {
require(msg.value >= cost * _mintAmount);
}
}
for (uint256 i = 1; i <= _mintAmount; i++) {
_safeMint(_to, supply + i);
}
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++) {
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokenIds;
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
return baseURI;
}
//only owner
function setCost(uint256 _newCost) public onlyOwner() {
cost = _newCost;
}
function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
maxMintAmount = _newmaxMintAmount;
}
function setBaseURI(string memory _newBaseURI) public onlyOwner {
baseURI = _newBaseURI;
}
function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
baseExtension = _newBaseExtension;
}
function pause(bool _state) public onlyOwner {
paused = _state;
}
function whitelistUser(address _user) public onlyOwner {
whitelisted[_user] = true;
}
function removeWhitelistUser(address _user) public onlyOwner {
whitelisted[_user] = false;
}
function withdraw() public payable onlyOwner {
require(payable(msg.sender).send(address(this).balance));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60c06040526005608090815264173539b7b760d91b60a052600c9062000026908262000273565b5066b1a2bc2ec50000600d55617530600e55600a600f556010805460ff191660011790553480156200005757600080fd5b506040518060400160405280600f81526020016e4e424120494e55204c6f747465727960881b815250604051806040016040528060078152602001661390905313d51560ca1b8152508160009081620000b1919062000273565b506001620000c0828262000273565b505050620000dd620000d76200010760201b60201c565b6200010b565b620001016040518060800160405280604c815260200162002525604c91396200015d565b6200033f565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b600b620001ca828262000273565b5050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001f957607f821691505b6020821081036200021a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026e57600081815260208120601f850160051c81016020861015620002495750805b601f850160051c820191505b818110156200026a5782815560010162000255565b5050505b505050565b81516001600160401b038111156200028f576200028f620001ce565b620002a781620002a08454620001e4565b8462000220565b602080601f831160018114620002df5760008415620002c65750858301515b600019600386901b1c1916600185901b1785556200026a565b600085815260208120601f198616915b828110156200031057888601518255948401946001909101908401620002ef565b50858210156200032f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6121d6806200034f6000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb01146105c8578063d936547e146105de578063da3ef23f1461060e578063e985e9c51461062e578063f2fde38b1461067757600080fd5b8063a22cb46514610553578063b88d4fde14610573578063c668286214610593578063c87b56dd146105a857600080fd5b806370a08231116100e757806370a08231146104cb578063715018a6146104eb5780637f00c7a6146105005780638da5cb5b1461052057806395d89b411461053e57600080fd5b806355f804b31461045c5780635c975abb1461047c5780636352211e146104965780636c0360eb146104b657600080fd5b80632f745c591161019b57806342842e0e1161016a57806342842e0e146103af578063438b6300146103cf57806344a0d68a146103fc5780634a4c560d1461041c5780634f6ccce71461043c57600080fd5b80632f745c591461035457806330cc7ae0146103745780633ccfd60b1461039457806340c10f191461039c57600080fd5b8063095ea7b3116101e2578063095ea7b3146102c557806313faede6146102e557806318160ddd14610309578063239c70ae1461031e57806323b872dd1461033457600080fd5b806301ffc9a71461021457806302329a291461024957806306fdde031461026b578063081812fc1461028d575b600080fd5b34801561022057600080fd5b5061023461022f366004611b3e565b610697565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b50610269610264366004611b77565b6106c2565b005b34801561027757600080fd5b50610280610708565b6040516102409190611bd8565b34801561029957600080fd5b506102ad6102a8366004611beb565b61079a565b6040516001600160a01b039091168152602001610240565b3480156102d157600080fd5b506102696102e0366004611c1b565b61082f565b3480156102f157600080fd5b506102fb600d5481565b604051908152602001610240565b34801561031557600080fd5b506008546102fb565b34801561032a57600080fd5b506102fb600f5481565b34801561034057600080fd5b5061026961034f366004611c45565b610944565b34801561036057600080fd5b506102fb61036f366004611c1b565b610975565b34801561038057600080fd5b5061026961038f366004611c81565b610a0b565b610269610a56565b6102696103aa366004611c1b565b610aa6565b3480156103bb57600080fd5b506102696103ca366004611c45565b610b75565b3480156103db57600080fd5b506103ef6103ea366004611c81565b610b90565b6040516102409190611c9c565b34801561040857600080fd5b50610269610417366004611beb565b610c32565b34801561042857600080fd5b50610269610437366004611c81565b610c61565b34801561044857600080fd5b506102fb610457366004611beb565b610caf565b34801561046857600080fd5b50610269610477366004611d6c565b610d42565b34801561048857600080fd5b506010546102349060ff1681565b3480156104a257600080fd5b506102ad6104b1366004611beb565b610d7c565b3480156104c257600080fd5b50610280610df3565b3480156104d757600080fd5b506102fb6104e6366004611c81565b610e81565b3480156104f757600080fd5b50610269610f08565b34801561050c57600080fd5b5061026961051b366004611beb565b610f3c565b34801561052c57600080fd5b50600a546001600160a01b03166102ad565b34801561054a57600080fd5b50610280610f6b565b34801561055f57600080fd5b5061026961056e366004611db5565b610f7a565b34801561057f57600080fd5b5061026961058e366004611de8565b61103e565b34801561059f57600080fd5b50610280611070565b3480156105b457600080fd5b506102806105c3366004611beb565b61107d565b3480156105d457600080fd5b506102fb600e5481565b3480156105ea57600080fd5b506102346105f9366004611c81565b60116020526000908152604090205460ff1681565b34801561061a57600080fd5b50610269610629366004611d6c565b61118e565b34801561063a57600080fd5b50610234610649366004611e64565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561068357600080fd5b50610269610692366004611c81565b6111c4565b60006001600160e01b0319821663780e9d6360e01b14806106bc57506106bc8261125f565b92915050565b600a546001600160a01b031633146106f55760405162461bcd60e51b81526004016106ec90611e8e565b60405180910390fd5b6010805460ff1916911515919091179055565b60606000805461071790611ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461074390611ec3565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108135760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ec565b506000908152600460205260409020546001600160a01b031690565b600061083a82610d7c565b9050806001600160a01b0316836001600160a01b0316036108a75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ec565b336001600160a01b03821614806108c357506108c38133610649565b6109355760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ec565b61093f83836112af565b505050565b61094e338261131d565b61096a5760405162461bcd60e51b81526004016106ec90611efd565b61093f838383611414565b600061098083610e81565b82106109e25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106ec565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610a355760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b600a546001600160a01b03163314610a805760405162461bcd60e51b81526004016106ec90611e8e565b60405133904780156108fc02916000818181858888f19350505050610aa457600080fd5b565b6000610ab160085490565b60105490915060ff1615610ac457600080fd5b60008211610ad157600080fd5b600f54821115610ae057600080fd5b600e54610aed8383611f64565b1115610af857600080fd5b600a546001600160a01b03163314610b40573360009081526011602052604090205460ff161515600114610b405781600d54610b349190611f77565b341015610b4057600080fd5b60015b828111610b6f57610b5d84610b588385611f64565b6115bf565b80610b6781611f8e565b915050610b43565b50505050565b61093f8383836040518060200160405280600081525061103e565b60606000610b9d83610e81565b905060008167ffffffffffffffff811115610bba57610bba611ce0565b604051908082528060200260200182016040528015610be3578160200160208202803683370190505b50905060005b82811015610c2a57610bfb8582610975565b828281518110610c0d57610c0d611fa7565b602090810291909101015280610c2281611f8e565b915050610be9565b509392505050565b600a546001600160a01b03163314610c5c5760405162461bcd60e51b81526004016106ec90611e8e565b600d55565b600a546001600160a01b03163314610c8b5760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000610cba60085490565b8210610d1d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106ec565b60088281548110610d3057610d30611fa7565b90600052602060002001549050919050565b600a546001600160a01b03163314610d6c5760405162461bcd60e51b81526004016106ec90611e8e565b600b610d78828261200b565b5050565b6000818152600260205260408120546001600160a01b0316806106bc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ec565b600b8054610e0090611ec3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2c90611ec3565b8015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505081565b60006001600160a01b038216610eec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ec565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f325760405162461bcd60e51b81526004016106ec90611e8e565b610aa460006115d9565b600a546001600160a01b03163314610f665760405162461bcd60e51b81526004016106ec90611e8e565b600f55565b60606001805461071790611ec3565b336001600160a01b03831603610fd25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ec565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611048338361131d565b6110645760405162461bcd60e51b81526004016106ec90611efd565b610b6f8484848461162b565b600c8054610e0090611ec3565b6000818152600260205260409020546060906001600160a01b03166110fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106ec565b600b805461110990611ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461113590611ec3565b80156111825780601f1061115757610100808354040283529160200191611182565b820191906000526020600020905b81548152906001019060200180831161116557829003601f168201915b50505050509050919050565b600a546001600160a01b031633146111b85760405162461bcd60e51b81526004016106ec90611e8e565b600c610d78828261200b565b600a546001600160a01b031633146111ee5760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b0381166112535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ec565b61125c816115d9565b50565b60006001600160e01b031982166380ac58cd60e01b148061129057506001600160e01b03198216635b5e139f60e01b145b806106bc57506301ffc9a760e01b6001600160e01b03198316146106bc565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112e482610d7c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ec565b60006113a183610d7c565b9050806001600160a01b0316846001600160a01b031614806113dc5750836001600160a01b03166113d18461079a565b6001600160a01b0316145b8061140c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661142782610d7c565b6001600160a01b03161461148f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106ec565b6001600160a01b0382166114f15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ec565b6114fc83838361165e565b6115076000826112af565b6001600160a01b03831660009081526003602052604081208054600192906115309084906120cb565b90915550506001600160a01b038216600090815260036020526040812080546001929061155e908490611f64565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d78828260405180602001604052806000815250611716565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611636848484611414565b61164284848484611749565b610b6f5760405162461bcd60e51b81526004016106ec906120de565b6001600160a01b0383166116b9576116b481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6116dc565b816001600160a01b0316836001600160a01b0316146116dc576116dc838261184a565b6001600160a01b0382166116f35761093f816118e7565b826001600160a01b0316826001600160a01b03161461093f5761093f8282611996565b61172083836119da565b61172d6000848484611749565b61093f5760405162461bcd60e51b81526004016106ec906120de565b60006001600160a01b0384163b1561183f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061178d903390899088908890600401612130565b6020604051808303816000875af19250505080156117c8575060408051601f3d908101601f191682019092526117c59181019061216d565b60015b611825573d8080156117f6576040519150601f19603f3d011682016040523d82523d6000602084013e6117fb565b606091505b50805160000361181d5760405162461bcd60e51b81526004016106ec906120de565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061140c565b506001949350505050565b6000600161185784610e81565b61186191906120cb565b6000838152600760205260409020549091508082146118b4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906118f9906001906120cb565b6000838152600960205260408120546008805493945090928490811061192157611921611fa7565b90600052602060002001549050806008838154811061194257611942611fa7565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061197a5761197a61218a565b6001900381819060005260206000200160009055905550505050565b60006119a183610e81565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611a305760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ec565b6000818152600260205260409020546001600160a01b031615611a955760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ec565b611aa16000838361165e565b6001600160a01b0382166000908152600360205260408120805460019290611aca908490611f64565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461125c57600080fd5b600060208284031215611b5057600080fd5b8135611b5b81611b28565b9392505050565b80358015158114611b7257600080fd5b919050565b600060208284031215611b8957600080fd5b611b5b82611b62565b6000815180845260005b81811015611bb857602081850181015186830182015201611b9c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611b5b6020830184611b92565b600060208284031215611bfd57600080fd5b5035919050565b80356001600160a01b0381168114611b7257600080fd5b60008060408385031215611c2e57600080fd5b611c3783611c04565b946020939093013593505050565b600080600060608486031215611c5a57600080fd5b611c6384611c04565b9250611c7160208501611c04565b9150604084013590509250925092565b600060208284031215611c9357600080fd5b611b5b82611c04565b6020808252825182820181905260009190848201906040850190845b81811015611cd457835183529284019291840191600101611cb8565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d1157611d11611ce0565b604051601f8501601f19908116603f01168101908282118183101715611d3957611d39611ce0565b81604052809350858152868686011115611d5257600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611d7e57600080fd5b813567ffffffffffffffff811115611d9557600080fd5b8201601f81018413611da657600080fd5b61140c84823560208401611cf6565b60008060408385031215611dc857600080fd5b611dd183611c04565b9150611ddf60208401611b62565b90509250929050565b60008060008060808587031215611dfe57600080fd5b611e0785611c04565b9350611e1560208601611c04565b925060408501359150606085013567ffffffffffffffff811115611e3857600080fd5b8501601f81018713611e4957600080fd5b611e5887823560208401611cf6565b91505092959194509250565b60008060408385031215611e7757600080fd5b611e8083611c04565b9150611ddf60208401611c04565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611ed757607f821691505b602082108103611ef757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106bc576106bc611f4e565b80820281158282048414176106bc576106bc611f4e565b600060018201611fa057611fa0611f4e565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f82111561093f57600081815260208120601f850160051c81016020861015611fe45750805b601f850160051c820191505b8181101561200357828155600101611ff0565b505050505050565b815167ffffffffffffffff81111561202557612025611ce0565b612039816120338454611ec3565b84611fbd565b602080601f83116001811461206e57600084156120565750858301515b600019600386901b1c1916600185901b178555612003565b600085815260208120601f198616915b8281101561209d5788860151825594840194600190910190840161207e565b50858210156120bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156106bc576106bc611f4e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061216390830184611b92565b9695505050505050565b60006020828403121561217f57600080fd5b8151611b5b81611b28565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b68d9b3b3fb45526dd31e3e3bfab06c9d3be803b7713f97ccd40e7d1012a456964736f6c63430008110033697066733a2f2f62616679626569626178666b33366e346935646a6867796366343578767a76736a7232346774616177353435356e62613532717468686177346c612f646174612e6a736f6e
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb01146105c8578063d936547e146105de578063da3ef23f1461060e578063e985e9c51461062e578063f2fde38b1461067757600080fd5b8063a22cb46514610553578063b88d4fde14610573578063c668286214610593578063c87b56dd146105a857600080fd5b806370a08231116100e757806370a08231146104cb578063715018a6146104eb5780637f00c7a6146105005780638da5cb5b1461052057806395d89b411461053e57600080fd5b806355f804b31461045c5780635c975abb1461047c5780636352211e146104965780636c0360eb146104b657600080fd5b80632f745c591161019b57806342842e0e1161016a57806342842e0e146103af578063438b6300146103cf57806344a0d68a146103fc5780634a4c560d1461041c5780634f6ccce71461043c57600080fd5b80632f745c591461035457806330cc7ae0146103745780633ccfd60b1461039457806340c10f191461039c57600080fd5b8063095ea7b3116101e2578063095ea7b3146102c557806313faede6146102e557806318160ddd14610309578063239c70ae1461031e57806323b872dd1461033457600080fd5b806301ffc9a71461021457806302329a291461024957806306fdde031461026b578063081812fc1461028d575b600080fd5b34801561022057600080fd5b5061023461022f366004611b3e565b610697565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b50610269610264366004611b77565b6106c2565b005b34801561027757600080fd5b50610280610708565b6040516102409190611bd8565b34801561029957600080fd5b506102ad6102a8366004611beb565b61079a565b6040516001600160a01b039091168152602001610240565b3480156102d157600080fd5b506102696102e0366004611c1b565b61082f565b3480156102f157600080fd5b506102fb600d5481565b604051908152602001610240565b34801561031557600080fd5b506008546102fb565b34801561032a57600080fd5b506102fb600f5481565b34801561034057600080fd5b5061026961034f366004611c45565b610944565b34801561036057600080fd5b506102fb61036f366004611c1b565b610975565b34801561038057600080fd5b5061026961038f366004611c81565b610a0b565b610269610a56565b6102696103aa366004611c1b565b610aa6565b3480156103bb57600080fd5b506102696103ca366004611c45565b610b75565b3480156103db57600080fd5b506103ef6103ea366004611c81565b610b90565b6040516102409190611c9c565b34801561040857600080fd5b50610269610417366004611beb565b610c32565b34801561042857600080fd5b50610269610437366004611c81565b610c61565b34801561044857600080fd5b506102fb610457366004611beb565b610caf565b34801561046857600080fd5b50610269610477366004611d6c565b610d42565b34801561048857600080fd5b506010546102349060ff1681565b3480156104a257600080fd5b506102ad6104b1366004611beb565b610d7c565b3480156104c257600080fd5b50610280610df3565b3480156104d757600080fd5b506102fb6104e6366004611c81565b610e81565b3480156104f757600080fd5b50610269610f08565b34801561050c57600080fd5b5061026961051b366004611beb565b610f3c565b34801561052c57600080fd5b50600a546001600160a01b03166102ad565b34801561054a57600080fd5b50610280610f6b565b34801561055f57600080fd5b5061026961056e366004611db5565b610f7a565b34801561057f57600080fd5b5061026961058e366004611de8565b61103e565b34801561059f57600080fd5b50610280611070565b3480156105b457600080fd5b506102806105c3366004611beb565b61107d565b3480156105d457600080fd5b506102fb600e5481565b3480156105ea57600080fd5b506102346105f9366004611c81565b60116020526000908152604090205460ff1681565b34801561061a57600080fd5b50610269610629366004611d6c565b61118e565b34801561063a57600080fd5b50610234610649366004611e64565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561068357600080fd5b50610269610692366004611c81565b6111c4565b60006001600160e01b0319821663780e9d6360e01b14806106bc57506106bc8261125f565b92915050565b600a546001600160a01b031633146106f55760405162461bcd60e51b81526004016106ec90611e8e565b60405180910390fd5b6010805460ff1916911515919091179055565b60606000805461071790611ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461074390611ec3565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108135760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ec565b506000908152600460205260409020546001600160a01b031690565b600061083a82610d7c565b9050806001600160a01b0316836001600160a01b0316036108a75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ec565b336001600160a01b03821614806108c357506108c38133610649565b6109355760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ec565b61093f83836112af565b505050565b61094e338261131d565b61096a5760405162461bcd60e51b81526004016106ec90611efd565b61093f838383611414565b600061098083610e81565b82106109e25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106ec565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610a355760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b600a546001600160a01b03163314610a805760405162461bcd60e51b81526004016106ec90611e8e565b60405133904780156108fc02916000818181858888f19350505050610aa457600080fd5b565b6000610ab160085490565b60105490915060ff1615610ac457600080fd5b60008211610ad157600080fd5b600f54821115610ae057600080fd5b600e54610aed8383611f64565b1115610af857600080fd5b600a546001600160a01b03163314610b40573360009081526011602052604090205460ff161515600114610b405781600d54610b349190611f77565b341015610b4057600080fd5b60015b828111610b6f57610b5d84610b588385611f64565b6115bf565b80610b6781611f8e565b915050610b43565b50505050565b61093f8383836040518060200160405280600081525061103e565b60606000610b9d83610e81565b905060008167ffffffffffffffff811115610bba57610bba611ce0565b604051908082528060200260200182016040528015610be3578160200160208202803683370190505b50905060005b82811015610c2a57610bfb8582610975565b828281518110610c0d57610c0d611fa7565b602090810291909101015280610c2281611f8e565b915050610be9565b509392505050565b600a546001600160a01b03163314610c5c5760405162461bcd60e51b81526004016106ec90611e8e565b600d55565b600a546001600160a01b03163314610c8b5760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000610cba60085490565b8210610d1d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106ec565b60088281548110610d3057610d30611fa7565b90600052602060002001549050919050565b600a546001600160a01b03163314610d6c5760405162461bcd60e51b81526004016106ec90611e8e565b600b610d78828261200b565b5050565b6000818152600260205260408120546001600160a01b0316806106bc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ec565b600b8054610e0090611ec3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2c90611ec3565b8015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505081565b60006001600160a01b038216610eec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ec565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f325760405162461bcd60e51b81526004016106ec90611e8e565b610aa460006115d9565b600a546001600160a01b03163314610f665760405162461bcd60e51b81526004016106ec90611e8e565b600f55565b60606001805461071790611ec3565b336001600160a01b03831603610fd25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ec565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611048338361131d565b6110645760405162461bcd60e51b81526004016106ec90611efd565b610b6f8484848461162b565b600c8054610e0090611ec3565b6000818152600260205260409020546060906001600160a01b03166110fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106ec565b600b805461110990611ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461113590611ec3565b80156111825780601f1061115757610100808354040283529160200191611182565b820191906000526020600020905b81548152906001019060200180831161116557829003601f168201915b50505050509050919050565b600a546001600160a01b031633146111b85760405162461bcd60e51b81526004016106ec90611e8e565b600c610d78828261200b565b600a546001600160a01b031633146111ee5760405162461bcd60e51b81526004016106ec90611e8e565b6001600160a01b0381166112535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ec565b61125c816115d9565b50565b60006001600160e01b031982166380ac58cd60e01b148061129057506001600160e01b03198216635b5e139f60e01b145b806106bc57506301ffc9a760e01b6001600160e01b03198316146106bc565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112e482610d7c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ec565b60006113a183610d7c565b9050806001600160a01b0316846001600160a01b031614806113dc5750836001600160a01b03166113d18461079a565b6001600160a01b0316145b8061140c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661142782610d7c565b6001600160a01b03161461148f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106ec565b6001600160a01b0382166114f15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ec565b6114fc83838361165e565b6115076000826112af565b6001600160a01b03831660009081526003602052604081208054600192906115309084906120cb565b90915550506001600160a01b038216600090815260036020526040812080546001929061155e908490611f64565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d78828260405180602001604052806000815250611716565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611636848484611414565b61164284848484611749565b610b6f5760405162461bcd60e51b81526004016106ec906120de565b6001600160a01b0383166116b9576116b481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6116dc565b816001600160a01b0316836001600160a01b0316146116dc576116dc838261184a565b6001600160a01b0382166116f35761093f816118e7565b826001600160a01b0316826001600160a01b03161461093f5761093f8282611996565b61172083836119da565b61172d6000848484611749565b61093f5760405162461bcd60e51b81526004016106ec906120de565b60006001600160a01b0384163b1561183f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061178d903390899088908890600401612130565b6020604051808303816000875af19250505080156117c8575060408051601f3d908101601f191682019092526117c59181019061216d565b60015b611825573d8080156117f6576040519150601f19603f3d011682016040523d82523d6000602084013e6117fb565b606091505b50805160000361181d5760405162461bcd60e51b81526004016106ec906120de565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061140c565b506001949350505050565b6000600161185784610e81565b61186191906120cb565b6000838152600760205260409020549091508082146118b4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906118f9906001906120cb565b6000838152600960205260408120546008805493945090928490811061192157611921611fa7565b90600052602060002001549050806008838154811061194257611942611fa7565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061197a5761197a61218a565b6001900381819060005260206000200160009055905550505050565b60006119a183610e81565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611a305760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ec565b6000818152600260205260409020546001600160a01b031615611a955760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ec565b611aa16000838361165e565b6001600160a01b0382166000908152600360205260408120805460019290611aca908490611f64565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461125c57600080fd5b600060208284031215611b5057600080fd5b8135611b5b81611b28565b9392505050565b80358015158114611b7257600080fd5b919050565b600060208284031215611b8957600080fd5b611b5b82611b62565b6000815180845260005b81811015611bb857602081850181015186830182015201611b9c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611b5b6020830184611b92565b600060208284031215611bfd57600080fd5b5035919050565b80356001600160a01b0381168114611b7257600080fd5b60008060408385031215611c2e57600080fd5b611c3783611c04565b946020939093013593505050565b600080600060608486031215611c5a57600080fd5b611c6384611c04565b9250611c7160208501611c04565b9150604084013590509250925092565b600060208284031215611c9357600080fd5b611b5b82611c04565b6020808252825182820181905260009190848201906040850190845b81811015611cd457835183529284019291840191600101611cb8565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d1157611d11611ce0565b604051601f8501601f19908116603f01168101908282118183101715611d3957611d39611ce0565b81604052809350858152868686011115611d5257600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611d7e57600080fd5b813567ffffffffffffffff811115611d9557600080fd5b8201601f81018413611da657600080fd5b61140c84823560208401611cf6565b60008060408385031215611dc857600080fd5b611dd183611c04565b9150611ddf60208401611b62565b90509250929050565b60008060008060808587031215611dfe57600080fd5b611e0785611c04565b9350611e1560208601611c04565b925060408501359150606085013567ffffffffffffffff811115611e3857600080fd5b8501601f81018713611e4957600080fd5b611e5887823560208401611cf6565b91505092959194509250565b60008060408385031215611e7757600080fd5b611e8083611c04565b9150611ddf60208401611c04565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611ed757607f821691505b602082108103611ef757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106bc576106bc611f4e565b80820281158282048414176106bc576106bc611f4e565b600060018201611fa057611fa0611f4e565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f82111561093f57600081815260208120601f850160051c81016020861015611fe45750805b601f850160051c820191505b8181101561200357828155600101611ff0565b505050505050565b815167ffffffffffffffff81111561202557612025611ce0565b612039816120338454611ec3565b84611fbd565b602080601f83116001811461206e57600084156120565750858301515b600019600386901b1c1916600185901b178555612003565b600085815260208120601f198616915b8281101561209d5788860151825594840194600190910190840161207e565b50858210156120bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156106bc576106bc611f4e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061216390830184611b92565b9695505050505050565b60006020828403121561217f57600080fd5b8151611b5b81611b28565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b68d9b3b3fb45526dd31e3e3bfab06c9d3be803b7713f97ccd40e7d1012a456964736f6c63430008110033
Deployed Bytecode Sourcemap
43223:2618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34780:224;;;;;;;;;;-1:-1:-1;34780:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;34780:224:0;;;;;;;;45439:73;;;;;;;;;;-1:-1:-1;45439:73:0;;;;;:::i;:::-;;:::i;:::-;;22672:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24231:221::-;;;;;;;;;;-1:-1:-1;24231:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1944:32:1;;;1926:51;;1914:2;1899:18;24231:221:0;1780:203:1;23754:411:0;;;;;;;;;;-1:-1:-1;23754:411:0;;;;;:::i;:::-;;:::i;43377:32::-;;;;;;;;;;;;;;;;;;;2571:25:1;;;2559:2;2544:18;43377:32:0;2425:177:1;35420:113:0;;;;;;;;;;-1:-1:-1;35508:10:0;:17;35420:113;;43451:33;;;;;;;;;;;;;;;;25121:339;;;;;;;;;;-1:-1:-1;25121:339:0;;;;;:::i;:::-;;:::i;35088:256::-;;;;;;;;;;-1:-1:-1;35088:256:0;;;;;:::i;:::-;;:::i;45618:100::-;;;;;;;;;;-1:-1:-1;45618:100:0;;;;;:::i;:::-;;:::i;45724:114::-;;;:::i;43865:501::-;;;;;;:::i;:::-;;:::i;25531:185::-;;;;;;;;;;-1:-1:-1;25531:185:0;;;;;:::i;:::-;;:::i;44372:348::-;;;;;;;;;;-1:-1:-1;44372:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44995:82::-;;;;;;;;;;-1:-1:-1;44995:82:0;;;;;:::i;:::-;;:::i;45518:93::-;;;;;;;;;;-1:-1:-1;45518:93:0;;;;;:::i;:::-;;:::i;35610:233::-;;;;;;;;;;-1:-1:-1;35610:233:0;;;;;:::i;:::-;;:::i;45207:98::-;;;;;;;;;;-1:-1:-1;45207:98:0;;;;;:::i;:::-;;:::i;43489:25::-;;;;;;;;;;-1:-1:-1;43489:25:0;;;;;;;;22366:239;;;;;;;;;;-1:-1:-1;22366:239:0;;;;;:::i;:::-;;:::i;43309:21::-;;;;;;;;;;;;;:::i;22096:208::-;;;;;;;;;;-1:-1:-1;22096:208:0;;;;;:::i;:::-;;:::i;42569:94::-;;;;;;;;;;;;;:::i;45083:118::-;;;;;;;;;;-1:-1:-1;45083:118:0;;;;;:::i;:::-;;:::i;41918:87::-;;;;;;;;;;-1:-1:-1;41991:6:0;;-1:-1:-1;;;;;41991:6:0;41918:87;;22841:104;;;;;;;;;;;;;:::i;24524:295::-;;;;;;;;;;-1:-1:-1;24524:295:0;;;;;:::i;:::-;;:::i;25787:328::-;;;;;;;;;;-1:-1:-1;25787:328:0;;;;;:::i;:::-;;:::i;43335:37::-;;;;;;;;;;;;;:::i;44726:247::-;;;;;;;;;;-1:-1:-1;44726:247:0;;;;;:::i;:::-;;:::i;43414:32::-;;;;;;;;;;;;;;;;43519:43;;;;;;;;;;-1:-1:-1;43519:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45311:122;;;;;;;;;;-1:-1:-1;45311:122:0;;;;;:::i;:::-;;:::i;24890:164::-;;;;;;;;;;-1:-1:-1;24890:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25011:25:0;;;24987:4;25011:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24890:164;42818:192;;;;;;;;;;-1:-1:-1;42818:192:0;;;;;:::i;:::-;;:::i;34780:224::-;34882:4;-1:-1:-1;;;;;;34906:50:0;;-1:-1:-1;;;34906:50:0;;:90;;;34960:36;34984:11;34960:23;:36::i;:::-;34899:97;34780:224;-1:-1:-1;;34780:224:0:o;45439:73::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;;;;;;;;;45491:6:::1;:15:::0;;-1:-1:-1;;45491:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45439:73::o;22672:100::-;22726:13;22759:5;22752:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22672:100;:::o;24231:221::-;24307:7;27714:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27714:16:0;24327:73;;;;-1:-1:-1;;;24327:73:0;;7137:2:1;24327:73:0;;;7119:21:1;7176:2;7156:18;;;7149:30;7215:34;7195:18;;;7188:62;-1:-1:-1;;;7266:18:1;;;7259:42;7318:19;;24327:73:0;6935:408:1;24327:73:0;-1:-1:-1;24420:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24420:24:0;;24231:221::o;23754:411::-;23835:13;23851:23;23866:7;23851:14;:23::i;:::-;23835:39;;23899:5;-1:-1:-1;;;;;23893:11:0;:2;-1:-1:-1;;;;;23893:11:0;;23885:57;;;;-1:-1:-1;;;23885:57:0;;7550:2:1;23885:57:0;;;7532:21:1;7589:2;7569:18;;;7562:30;7628:34;7608:18;;;7601:62;-1:-1:-1;;;7679:18:1;;;7672:31;7720:19;;23885:57:0;7348:397:1;23885:57:0;20281:10;-1:-1:-1;;;;;23977:21:0;;;;:62;;-1:-1:-1;24002:37:0;24019:5;20281:10;24890:164;:::i;24002:37::-;23955:168;;;;-1:-1:-1;;;23955:168:0;;7952:2:1;23955:168:0;;;7934:21:1;7991:2;7971:18;;;7964:30;8030:34;8010:18;;;8003:62;8101:26;8081:18;;;8074:54;8145:19;;23955:168:0;7750:420:1;23955:168:0;24136:21;24145:2;24149:7;24136:8;:21::i;:::-;23824:341;23754:411;;:::o;25121:339::-;25316:41;20281:10;25349:7;25316:18;:41::i;:::-;25308:103;;;;-1:-1:-1;;;25308:103:0;;;;;;;:::i;:::-;25424:28;25434:4;25440:2;25444:7;25424:9;:28::i;35088:256::-;35185:7;35221:23;35238:5;35221:16;:23::i;:::-;35213:5;:31;35205:87;;;;-1:-1:-1;;;35205:87:0;;8795:2:1;35205:87:0;;;8777:21:1;8834:2;8814:18;;;8807:30;8873:34;8853:18;;;8846:62;-1:-1:-1;;;8924:18:1;;;8917:41;8975:19;;35205:87:0;8593:407:1;35205:87:0;-1:-1:-1;;;;;;35310:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35088:256::o;45618:100::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45686:18:0::1;45707:5;45686:18:::0;;;:11:::1;:18;::::0;;;;:26;;-1:-1:-1;;45686:26:0::1;::::0;;45618:100::o;45724:114::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;45784:47:::1;::::0;45792:10:::1;::::0;45809:21:::1;45784:47:::0;::::1;;;::::0;::::1;::::0;;;45809:21;45792:10;45784:47;::::1;;;;;;45776:56;;;::::0;::::1;;45724:114::o:0;43865:501::-;43935:14;43952:13;35508:10;:17;;35420:113;43952:13;43981:6;;43935:30;;-1:-1:-1;43981:6:0;;43980:7;43972:16;;;;;;44017:1;44003:11;:15;43995:24;;;;;;44049:13;;44034:11;:28;;44026:37;;;;;;44102:9;;44078:20;44087:11;44078:6;:20;:::i;:::-;:33;;44070:42;;;;;;41991:6;;-1:-1:-1;;;;;41991:6:0;44125:10;:21;44121:146;;44174:10;44162:23;;;;:11;:23;;;;;;;;:31;;:23;:31;44159:101;;44236:11;44229:4;;:18;;;;:::i;:::-;44216:9;:31;;44208:40;;;;;;44292:1;44275:86;44300:11;44295:1;:16;44275:86;;44327:26;44337:3;44342:10;44351:1;44342:6;:10;:::i;:::-;44327:9;:26::i;:::-;44313:3;;;;:::i;:::-;;;;44275:86;;;;43928:438;43865:501;;:::o;25531:185::-;25669:39;25686:4;25692:2;25696:7;25669:39;;;;;;;;;;;;:16;:39::i;44372:348::-;44447:16;44475:23;44501:17;44511:6;44501:9;:17::i;:::-;44475:43;;44525:25;44567:15;44553:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44553:30:0;;44525:58;;44595:9;44590:103;44610:15;44606:1;:19;44590:103;;;44655:30;44675:6;44683:1;44655:19;:30::i;:::-;44641:8;44650:1;44641:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;44627:3;;;;:::i;:::-;;;;44590:103;;;-1:-1:-1;44706:8:0;44372:348;-1:-1:-1;;;44372:348:0:o;44995:82::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;45056:4:::1;:15:::0;44995:82::o;45518:93::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45580:18:0::1;;::::0;;;:11:::1;:18;::::0;;;;:25;;-1:-1:-1;;45580:25:0::1;45601:4;45580:25;::::0;;45518:93::o;35610:233::-;35685:7;35721:30;35508:10;:17;;35420:113;35721:30;35713:5;:38;35705:95;;;;-1:-1:-1;;;35705:95:0;;9914:2:1;35705:95:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992:34;9972:18;;;9965:62;-1:-1:-1;;;10043:18:1;;;10036:42;10095:19;;35705:95:0;9712:408:1;35705:95:0;35818:10;35829:5;35818:17;;;;;;;;:::i;:::-;;;;;;;;;35811:24;;35610:233;;;:::o;45207:98::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;45278:7:::1;:21;45288:11:::0;45278:7;:21:::1;:::i;:::-;;45207:98:::0;:::o;22366:239::-;22438:7;22474:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22474:16:0;;22501:73;;;;-1:-1:-1;;;22501:73:0;;12531:2:1;22501:73:0;;;12513:21:1;12570:2;12550:18;;;12543:30;12609:34;12589:18;;;12582:62;-1:-1:-1;;;12660:18:1;;;12653:39;12709:19;;22501:73:0;12329:405:1;43309:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22096:208::-;22168:7;-1:-1:-1;;;;;22196:19:0;;22188:74;;;;-1:-1:-1;;;22188:74:0;;12941:2:1;22188:74:0;;;12923:21:1;12980:2;12960:18;;;12953:30;13019:34;12999:18;;;12992:62;-1:-1:-1;;;13070:18:1;;;13063:40;13120:19;;22188:74:0;12739:406:1;22188:74:0;-1:-1:-1;;;;;;22280:16:0;;;;;:9;:16;;;;;;;22096:208::o;42569:94::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;42634:21:::1;42652:1;42634:9;:21::i;45083:118::-:0;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;45162:13:::1;:33:::0;45083:118::o;22841:104::-;22897:13;22930:7;22923:14;;;;;:::i;24524:295::-;20281:10;-1:-1:-1;;;;;24627:24:0;;;24619:62;;;;-1:-1:-1;;;24619:62:0;;13352:2:1;24619:62:0;;;13334:21:1;13391:2;13371:18;;;13364:30;13430:27;13410:18;;;13403:55;13475:18;;24619:62:0;13150:349:1;24619:62:0;20281:10;24694:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24694:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24694:53:0;;;;;;;;;;24763:48;;540:41:1;;;24694:42:0;;20281:10;24763:48;;513:18:1;24763:48:0;;;;;;;24524:295;;:::o;25787:328::-;25962:41;20281:10;25995:7;25962:18;:41::i;:::-;25954:103;;;;-1:-1:-1;;;25954:103:0;;;;;;;:::i;:::-;26068:39;26082:4;26088:2;26092:7;26101:5;26068:13;:39::i;43335:37::-;;;;;;;:::i;44726:247::-;27690:4;27714:16;;;:7;:16;;;;;;44824:13;;-1:-1:-1;;;;;27714:16:0;44849:97;;;;-1:-1:-1;;;44849:97:0;;13706:2:1;44849:97:0;;;13688:21:1;13745:2;13725:18;;;13718:30;13784:34;13764:18;;;13757:62;-1:-1:-1;;;13835:18:1;;;13828:45;13890:19;;44849:97:0;13504:411:1;44849:97:0;44960:7;44953:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44726:247;;;:::o;45311:122::-;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;45394:13:::1;:33;45410:17:::0;45394:13;:33:::1;:::i;42818:192::-:0;41991:6;;-1:-1:-1;;;;;41991:6:0;20281:10;42138:23;42130:68;;;;-1:-1:-1;;;42130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42907:22:0;::::1;42899:73;;;::::0;-1:-1:-1;;;42899:73:0;;14122:2:1;42899:73:0::1;::::0;::::1;14104:21:1::0;14161:2;14141:18;;;14134:30;14200:34;14180:18;;;14173:62;-1:-1:-1;;;14251:18:1;;;14244:36;14297:19;;42899:73:0::1;13920:402:1::0;42899:73:0::1;42983:19;42993:8;42983:9;:19::i;:::-;42818:192:::0;:::o;21727:305::-;21829:4;-1:-1:-1;;;;;;21866:40:0;;-1:-1:-1;;;21866:40:0;;:105;;-1:-1:-1;;;;;;;21923:48:0;;-1:-1:-1;;;21923:48:0;21866:105;:158;;;-1:-1:-1;;;;;;;;;;7667:40:0;;;21988:36;7558:157;31607:174;31682:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31682:29:0;-1:-1:-1;;;;;31682:29:0;;;;;;;;:24;;31736:23;31682:24;31736:14;:23::i;:::-;-1:-1:-1;;;;;31727:46:0;;;;;;;;;;;31607:174;;:::o;27919:348::-;28012:4;27714:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27714:16:0;28029:73;;;;-1:-1:-1;;;28029:73:0;;14529:2:1;28029:73:0;;;14511:21:1;14568:2;14548:18;;;14541:30;14607:34;14587:18;;;14580:62;-1:-1:-1;;;14658:18:1;;;14651:42;14710:19;;28029:73:0;14327:408:1;28029:73:0;28113:13;28129:23;28144:7;28129:14;:23::i;:::-;28113:39;;28182:5;-1:-1:-1;;;;;28171:16:0;:7;-1:-1:-1;;;;;28171:16:0;;:51;;;;28215:7;-1:-1:-1;;;;;28191:31:0;:20;28203:7;28191:11;:20::i;:::-;-1:-1:-1;;;;;28191:31:0;;28171:51;:87;;;-1:-1:-1;;;;;;25011:25:0;;;24987:4;25011:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28226:32;28163:96;27919:348;-1:-1:-1;;;;27919:348:0:o;30911:578::-;31070:4;-1:-1:-1;;;;;31043:31:0;:23;31058:7;31043:14;:23::i;:::-;-1:-1:-1;;;;;31043:31:0;;31035:85;;;;-1:-1:-1;;;31035:85:0;;14942:2:1;31035:85:0;;;14924:21:1;14981:2;14961:18;;;14954:30;15020:34;15000:18;;;14993:62;-1:-1:-1;;;15071:18:1;;;15064:39;15120:19;;31035:85:0;14740:405:1;31035:85:0;-1:-1:-1;;;;;31139:16:0;;31131:65;;;;-1:-1:-1;;;31131:65:0;;15352:2:1;31131:65:0;;;15334:21:1;15391:2;15371:18;;;15364:30;15430:34;15410:18;;;15403:62;-1:-1:-1;;;15481:18:1;;;15474:34;15525:19;;31131:65:0;15150:400:1;31131:65:0;31209:39;31230:4;31236:2;31240:7;31209:20;:39::i;:::-;31313:29;31330:1;31334:7;31313:8;:29::i;:::-;-1:-1:-1;;;;;31355:15:0;;;;;;:9;:15;;;;;:20;;31374:1;;31355:15;:20;;31374:1;;31355:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31386:13:0;;;;;;:9;:13;;;;;:18;;31403:1;;31386:13;:18;;31403:1;;31386:18;:::i;:::-;;;;-1:-1:-1;;31415:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31415:21:0;-1:-1:-1;;;;;31415:21:0;;;;;;;;;31454:27;;31415:16;;31454:27;;;;;;;30911:578;;;:::o;28609:110::-;28685:26;28695:2;28699:7;28685:26;;;;;;;;;;;;:9;:26::i;43018:173::-;43093:6;;;-1:-1:-1;;;;;43110:17:0;;;-1:-1:-1;;;;;;43110:17:0;;;;;;;43143:40;;43093:6;;;43110:17;43093:6;;43143:40;;43074:16;;43143:40;43063:128;43018:173;:::o;26997:315::-;27154:28;27164:4;27170:2;27174:7;27154:9;:28::i;:::-;27201:48;27224:4;27230:2;27234:7;27243:5;27201:22;:48::i;:::-;27193:111;;;;-1:-1:-1;;;27193:111:0;;;;;;;:::i;36456:589::-;-1:-1:-1;;;;;36662:18:0;;36658:187;;36697:40;36729:7;37872:10;:17;;37845:24;;;;:15;:24;;;;;:44;;;37900:24;;;;;;;;;;;;37768:164;36697:40;36658:187;;;36767:2;-1:-1:-1;;;;;36759:10:0;:4;-1:-1:-1;;;;;36759:10:0;;36755:90;;36786:47;36819:4;36825:7;36786:32;:47::i;:::-;-1:-1:-1;;;;;36859:16:0;;36855:183;;36892:45;36929:7;36892:36;:45::i;36855:183::-;36965:4;-1:-1:-1;;;;;36959:10:0;:2;-1:-1:-1;;;;;36959:10:0;;36955:83;;36986:40;37014:2;37018:7;36986:27;:40::i;28946:321::-;29076:18;29082:2;29086:7;29076:5;:18::i;:::-;29127:54;29158:1;29162:2;29166:7;29175:5;29127:22;:54::i;:::-;29105:154;;;;-1:-1:-1;;;29105:154:0;;;;;;;:::i;32346:799::-;32501:4;-1:-1:-1;;;;;32522:13:0;;10881:20;10929:8;32518:620;;32558:72;;-1:-1:-1;;;32558:72:0;;-1:-1:-1;;;;;32558:36:0;;;;;:72;;20281:10;;32609:4;;32615:7;;32624:5;;32558:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32558:72:0;;;;;;;;-1:-1:-1;;32558:72:0;;;;;;;;;;;;:::i;:::-;;;32554:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32800:6;:13;32817:1;32800:18;32796:272;;32843:60;;-1:-1:-1;;;32843:60:0;;;;;;;:::i;32796:272::-;33018:6;33012:13;33003:6;32999:2;32995:15;32988:38;32554:529;-1:-1:-1;;;;;;32681:51:0;-1:-1:-1;;;32681:51:0;;-1:-1:-1;32674:58:0;;32518:620;-1:-1:-1;33122:4:0;32346:799;;;;;;:::o;38559:988::-;38825:22;38875:1;38850:22;38867:4;38850:16;:22::i;:::-;:26;;;;:::i;:::-;38887:18;38908:26;;;:17;:26;;;;;;38825:51;;-1:-1:-1;39041:28:0;;;39037:328;;-1:-1:-1;;;;;39108:18:0;;39086:19;39108:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39159:30;;;;;;:44;;;39276:30;;:17;:30;;;;;:43;;;39037:328;-1:-1:-1;39461:26:0;;;;:17;:26;;;;;;;;39454:33;;;-1:-1:-1;;;;;39505:18:0;;;;;:12;:18;;;;;:34;;;;;;;39498:41;38559:988::o;39842:1079::-;40120:10;:17;40095:22;;40120:21;;40140:1;;40120:21;:::i;:::-;40152:18;40173:24;;;:15;:24;;;;;;40546:10;:26;;40095:46;;-1:-1:-1;40173:24:0;;40095:46;;40546:26;;;;;;:::i;:::-;;;;;;;;;40524:48;;40610:11;40585:10;40596;40585:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40690:28;;;:15;:28;;;;;;;:41;;;40862:24;;;;;40855:31;40897:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39913:1008;;;39842:1079;:::o;37346:221::-;37431:14;37448:20;37465:2;37448:16;:20::i;:::-;-1:-1:-1;;;;;37479:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37524:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37346:221:0:o;29603:382::-;-1:-1:-1;;;;;29683:16:0;;29675:61;;;;-1:-1:-1;;;29675:61:0;;17189:2:1;29675:61:0;;;17171:21:1;;;17208:18;;;17201:30;17267:34;17247:18;;;17240:62;17319:18;;29675:61:0;16987:356:1;29675:61:0;27690:4;27714:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27714:16:0;:30;29747:58;;;;-1:-1:-1;;;29747:58:0;;17550:2:1;29747:58:0;;;17532:21:1;17589:2;17569:18;;;17562:30;17628;17608:18;;;17601:58;17676:18;;29747:58:0;17348:352:1;29747:58:0;29818:45;29847:1;29851:2;29855:7;29818:20;:45::i;:::-;-1:-1:-1;;;;;29876:13:0;;;;;;:9;:13;;;;;:18;;29893:1;;29876:13;:18;;29893:1;;29876:18;:::i;:::-;;;;-1:-1:-1;;29905:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29905:21:0;-1:-1:-1;;;;;29905:21:0;;;;;;;;29944:33;;29905:16;;;29944:33;;29905:16;;29944:33;29603:382;;:::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;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:423::-;984:3;1022:5;1016:12;1049:6;1044:3;1037:19;1074:1;1084:162;1098:6;1095:1;1092:13;1084:162;;;1160:4;1216:13;;;1212:22;;1206:29;1188:11;;;1184:20;;1177:59;1113:12;1084:162;;;1088:3;1291:1;1284:4;1275:6;1270:3;1266:16;1262:27;1255:38;1354:4;1347:2;1343:7;1338:2;1330:6;1326:15;1322:29;1317:3;1313:39;1309:50;1302:57;;;942:423;;;;:::o;1370:220::-;1519:2;1508:9;1501:21;1482:4;1539:45;1580:2;1569:9;1565:18;1557:6;1539:45;:::i;1595:180::-;1654:6;1707:2;1695:9;1686:7;1682:23;1678:32;1675:52;;;1723:1;1720;1713:12;1675:52;-1:-1:-1;1746:23:1;;1595:180;-1:-1:-1;1595:180:1:o;1988:173::-;2056:20;;-1:-1:-1;;;;;2105:31:1;;2095:42;;2085:70;;2151:1;2148;2141:12;2166:254;2234:6;2242;2295:2;2283:9;2274:7;2270:23;2266:32;2263:52;;;2311:1;2308;2301:12;2263:52;2334:29;2353:9;2334:29;:::i;:::-;2324:39;2410:2;2395:18;;;;2382:32;;-1:-1:-1;;;2166:254:1:o;2607:328::-;2684:6;2692;2700;2753:2;2741:9;2732:7;2728:23;2724:32;2721:52;;;2769:1;2766;2759:12;2721:52;2792:29;2811:9;2792:29;:::i;:::-;2782:39;;2840:38;2874:2;2863:9;2859:18;2840:38;:::i;:::-;2830:48;;2925:2;2914:9;2910:18;2897:32;2887:42;;2607:328;;;;;:::o;2940:186::-;2999:6;3052:2;3040:9;3031:7;3027:23;3023:32;3020:52;;;3068:1;3065;3058:12;3020:52;3091:29;3110:9;3091:29;:::i;3131:632::-;3302:2;3354:21;;;3424:13;;3327:18;;;3446:22;;;3273:4;;3302:2;3525:15;;;;3499:2;3484:18;;;3273:4;3568:169;3582:6;3579:1;3576:13;3568:169;;;3643:13;;3631:26;;3712:15;;;;3677:12;;;;3604:1;3597:9;3568:169;;;-1:-1:-1;3754:3:1;;3131:632;-1:-1:-1;;;;;;3131:632:1:o;3768:127::-;3829:10;3824:3;3820:20;3817:1;3810:31;3860:4;3857:1;3850:15;3884:4;3881:1;3874:15;3900:632;3965:5;3995:18;4036:2;4028:6;4025:14;4022:40;;;4042:18;;:::i;:::-;4117:2;4111:9;4085:2;4171:15;;-1:-1:-1;;4167:24:1;;;4193:2;4163:33;4159:42;4147:55;;;4217:18;;;4237:22;;;4214:46;4211:72;;;4263:18;;:::i;:::-;4303:10;4299:2;4292:22;4332:6;4323:15;;4362:6;4354;4347:22;4402:3;4393:6;4388:3;4384:16;4381:25;4378:45;;;4419:1;4416;4409:12;4378:45;4469:6;4464:3;4457:4;4449:6;4445:17;4432:44;4524:1;4517:4;4508:6;4500;4496:19;4492:30;4485:41;;;;3900:632;;;;;:::o;4537:451::-;4606:6;4659:2;4647:9;4638:7;4634:23;4630:32;4627:52;;;4675:1;4672;4665:12;4627:52;4715:9;4702:23;4748:18;4740:6;4737:30;4734:50;;;4780:1;4777;4770:12;4734:50;4803:22;;4856:4;4848:13;;4844:27;-1:-1:-1;4834:55:1;;4885:1;4882;4875:12;4834:55;4908:74;4974:7;4969:2;4956:16;4951:2;4947;4943:11;4908:74;:::i;4993:254::-;5058:6;5066;5119:2;5107:9;5098:7;5094:23;5090:32;5087:52;;;5135:1;5132;5125:12;5087:52;5158:29;5177:9;5158:29;:::i;:::-;5148:39;;5206:35;5237:2;5226:9;5222:18;5206:35;:::i;:::-;5196:45;;4993:254;;;;;:::o;5252:667::-;5347:6;5355;5363;5371;5424:3;5412:9;5403:7;5399:23;5395:33;5392:53;;;5441:1;5438;5431:12;5392:53;5464:29;5483:9;5464:29;:::i;:::-;5454:39;;5512:38;5546:2;5535:9;5531:18;5512:38;:::i;:::-;5502:48;;5597:2;5586:9;5582:18;5569:32;5559:42;;5652:2;5641:9;5637:18;5624:32;5679:18;5671:6;5668:30;5665:50;;;5711:1;5708;5701:12;5665:50;5734:22;;5787:4;5779:13;;5775:27;-1:-1:-1;5765:55:1;;5816:1;5813;5806:12;5765:55;5839:74;5905:7;5900:2;5887:16;5882:2;5878;5874:11;5839:74;:::i;:::-;5829:84;;;5252:667;;;;;;;:::o;5924:260::-;5992:6;6000;6053:2;6041:9;6032:7;6028:23;6024:32;6021:52;;;6069:1;6066;6059:12;6021:52;6092:29;6111:9;6092:29;:::i;:::-;6082:39;;6140:38;6174:2;6163:9;6159:18;6140:38;:::i;6189:356::-;6391:2;6373:21;;;6410:18;;;6403:30;6469:34;6464:2;6449:18;;6442:62;6536:2;6521:18;;6189:356::o;6550:380::-;6629:1;6625:12;;;;6672;;;6693:61;;6747:4;6739:6;6735:17;6725:27;;6693:61;6800:2;6792:6;6789:14;6769:18;6766:38;6763:161;;6846:10;6841:3;6837:20;6834:1;6827:31;6881:4;6878:1;6871:15;6909:4;6906:1;6899:15;6763:161;;6550:380;;;:::o;8175:413::-;8377:2;8359:21;;;8416:2;8396:18;;;8389:30;8455:34;8450:2;8435:18;;8428:62;-1:-1:-1;;;8521:2:1;8506:18;;8499:47;8578:3;8563:19;;8175:413::o;9005:127::-;9066:10;9061:3;9057:20;9054:1;9047:31;9097:4;9094:1;9087:15;9121:4;9118:1;9111:15;9137:125;9202:9;;;9223:10;;;9220:36;;;9236:18;;:::i;9267:168::-;9340:9;;;9371;;9388:15;;;9382:22;;9368:37;9358:71;;9409:18;;:::i;9440:135::-;9479:3;9500:17;;;9497:43;;9520:18;;:::i;:::-;-1:-1:-1;9567:1:1;9556:13;;9440:135::o;9580:127::-;9641:10;9636:3;9632:20;9629:1;9622:31;9672:4;9669:1;9662:15;9696:4;9693:1;9686:15;10251:545;10353:2;10348:3;10345:11;10342:448;;;10389:1;10414:5;10410:2;10403:17;10459:4;10455:2;10445:19;10529:2;10517:10;10513:19;10510:1;10506:27;10500:4;10496:38;10565:4;10553:10;10550:20;10547:47;;;-1:-1:-1;10588:4:1;10547:47;10643:2;10638:3;10634:12;10631:1;10627:20;10621:4;10617:31;10607:41;;10698:82;10716:2;10709:5;10706:13;10698:82;;;10761:17;;;10742:1;10731:13;10698:82;;;10702:3;;;10251:545;;;:::o;10972:1352::-;11098:3;11092:10;11125:18;11117:6;11114:30;11111:56;;;11147:18;;:::i;:::-;11176:97;11266:6;11226:38;11258:4;11252:11;11226:38;:::i;:::-;11220:4;11176:97;:::i;:::-;11328:4;;11392:2;11381:14;;11409:1;11404:663;;;;12111:1;12128:6;12125:89;;;-1:-1:-1;12180:19:1;;;12174:26;12125:89;-1:-1:-1;;10929:1:1;10925:11;;;10921:24;10917:29;10907:40;10953:1;10949:11;;;10904:57;12227:81;;11374:944;;11404:663;10198:1;10191:14;;;10235:4;10222:18;;-1:-1:-1;;11440:20:1;;;11558:236;11572:7;11569:1;11566:14;11558:236;;;11661:19;;;11655:26;11640:42;;11753:27;;;;11721:1;11709:14;;;;11588:19;;11558:236;;;11562:3;11822:6;11813:7;11810:19;11807:201;;;11883:19;;;11877:26;-1:-1:-1;;11966:1:1;11962:14;;;11978:3;11958:24;11954:37;11950:42;11935:58;11920:74;;11807:201;-1:-1:-1;;;;;12054:1:1;12038:14;;;12034:22;12021:36;;-1:-1:-1;10972:1352:1:o;15555:128::-;15622:9;;;15643:11;;;15640:37;;;15657:18;;:::i;15688:414::-;15890:2;15872:21;;;15929:2;15909:18;;;15902:30;15968:34;15963:2;15948:18;;15941:62;-1:-1:-1;;;16034:2:1;16019:18;;16012:48;16092:3;16077:19;;15688:414::o;16107:489::-;-1:-1:-1;;;;;16376:15:1;;;16358:34;;16428:15;;16423:2;16408:18;;16401:43;16475:2;16460:18;;16453:34;;;16523:3;16518:2;16503:18;;16496:31;;;16301:4;;16544:46;;16570:19;;16562:6;16544:46;:::i;:::-;16536:54;16107:489;-1:-1:-1;;;;;;16107:489:1:o;16601:249::-;16670:6;16723:2;16711:9;16702:7;16698:23;16694:32;16691:52;;;16739:1;16736;16729:12;16691:52;16771:9;16765:16;16790:30;16814:5;16790:30;:::i;16855:127::-;16916:10;16911:3;16907:20;16904:1;16897:31;16947:4;16944:1;16937:15;16971:4;16968:1;16961:15
Swarm Source
ipfs://b68d9b3b3fb45526dd31e3e3bfab06c9d3be803b7713f97ccd40e7d1012a4569
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.