Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 139 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Add Presale List | 19267486 | 740 days ago | IN | 0 ETH | 0.00059587 | ||||
| Add Presale List | 19267485 | 740 days ago | IN | 0 ETH | 0.00102113 | ||||
| Set Approval For... | 18147330 | 897 days ago | IN | 0 ETH | 0.00036194 | ||||
| Withdraw | 17416516 | 1000 days ago | IN | 0 ETH | 0.00112884 | ||||
| Whitelist Mint | 17225243 | 1027 days ago | IN | 3 ETH | 0.00923066 | ||||
| Add Presale List | 17225234 | 1027 days ago | IN | 0 ETH | 0.00530249 | ||||
| Set Approval For... | 16147819 | 1178 days ago | IN | 0 ETH | 0.00084755 | ||||
| Safe Transfer Fr... | 16147670 | 1178 days ago | IN | 0 ETH | 0.0016441 | ||||
| Safe Transfer Fr... | 16120435 | 1182 days ago | IN | 0 ETH | 0.00071973 | ||||
| Safe Transfer Fr... | 15755658 | 1233 days ago | IN | 0 ETH | 0.00066374 | ||||
| Set Uri Prefix | 15705475 | 1240 days ago | IN | 0 ETH | 0.00233645 | ||||
| Set Uri Prefix | 15629711 | 1250 days ago | IN | 0 ETH | 0.00034988 | ||||
| Set Uri Prefix | 15620206 | 1252 days ago | IN | 0 ETH | 0.00071353 | ||||
| Set Uri Prefix | 15614435 | 1252 days ago | IN | 0 ETH | 0.00023245 | ||||
| Set Uri Prefix | 15598649 | 1255 days ago | IN | 0 ETH | 0.00081629 | ||||
| Set Approval For... | 15578748 | 1257 days ago | IN | 0 ETH | 0.00036452 | ||||
| Set Uri Prefix | 15571086 | 1258 days ago | IN | 0 ETH | 0.00021114 | ||||
| Safe Transfer Fr... | 15563017 | 1260 days ago | IN | 0 ETH | 0.0002798 | ||||
| Set Approval For... | 15557103 | 1260 days ago | IN | 0 ETH | 0.00017676 | ||||
| Set Approval For... | 15557005 | 1260 days ago | IN | 0 ETH | 0.00017193 | ||||
| Withdraw | 15512029 | 1267 days ago | IN | 0 ETH | 0.00018171 | ||||
| Add Presale List | 15511547 | 1267 days ago | IN | 0 ETH | 0.00047434 | ||||
| Set Revealed | 15511067 | 1268 days ago | IN | 0 ETH | 0.00034687 | ||||
| Set Uri Prefix | 15506501 | 1268 days ago | IN | 0 ETH | 0.00038845 | ||||
| Set Revealed | 15506480 | 1268 days ago | IN | 0 ETH | 0.00035482 |
Latest 7 internal transactions
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EffigyCircle
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-05-09
*/
// SPDX-License-Identifier: MIT
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);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (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/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: ERC2000000.sol
pragma solidity ^0.8.7;
library Address {
function isContract(address account) internal view returns (bool) {
uint size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
}
abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
string private _name;
string private _symbol;
// Mapping from token ID to owner address
address[] internal _owners;
mapping(uint256 => address) private _tokenApprovals;
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 (uint)
{
require(owner != address(0), "ERC721: balance query for the zero address");
uint count;
uint length= _owners.length;
for( uint i; i < length; ++i ){
if( owner == _owners[i] )
++count;
}
delete length;
return count;
}
/**
* @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 {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 tokenId < _owners.length && _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);
_owners.push(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);
_owners[tokenId] = address(0);
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);
_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 {}
}
pragma solidity ^0.8.7;
/**
* @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
/**
* @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-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _owners.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < _owners.length, "ERC721Enumerable: global index out of bounds");
return index;
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
uint count;
for(uint i; i < _owners.length; i++){
if(owner == _owners[i]){
if(count == index) return i;
else count++;
}
}
revert("ERC721Enumerable: owner index out of bounds");
}
}
pragma solidity ^0.8.7;
contract EffigyCircle is ERC721Enumerable, Ownable {
using Strings for uint256;
string private uriPrefix = "";
string private uriSuffix = ".json";
string public hiddenURL = "ipfs://Qmd5gu6tgGGaR7AdgXA1xrzioQt9PotXDPfHHAAoZkwLqB";
uint256 public cost = 3 ether;
uint256 public whiteListCost = 3 ether;
uint8 public maxMintAmountPerWallet = 1;
mapping (address => bool) public allowedList;
mapping (address => uint8) public nftPerWLAddress;
uint16 public maxSupply = 1000;
bool public WLpaused = true;
bool public paused = true;
bool public reveal = false;
constructor() ERC721("Effigy Circle", "EFGCIRC") {
}
function mint(uint16 _mintAmount) external payable {
uint16 totalSupply = uint16(_owners.length);
require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
require(_mintAmount <= maxMintAmountPerWallet, "Exceeds max per transaction.");
require(!paused, "The contract is paused!");
require(msg.value >= cost * _mintAmount, "Insufficient funds!");
for(uint8 i; i < _mintAmount; i++) {
_mint(msg.sender, totalSupply + i);
}
delete totalSupply;
delete _mintAmount;
}
function AdminMint(uint16 _mintAmount, address _receiver) external onlyOwner {
uint16 totalSupply = uint16(_owners.length);
require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
for(uint16 i; i < _mintAmount; i++) {
_mint(_receiver , totalSupply + i);
}
delete _mintAmount;
delete _receiver;
delete totalSupply;
}
function tokenURI(uint256 _tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(_tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
if (reveal == false) {
return hiddenURL;
}
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
: "";
}
function setRevealed() external onlyOwner {
reveal = !reveal;
}
function setWLPaused() external onlyOwner {
WLpaused = !WLpaused;
}
function setMaxSupply(uint16 supply) external onlyOwner {
maxSupply = supply;
}
function setWLCost(uint256 _cost) external onlyOwner {
whiteListCost = _cost;
delete _cost;
}
function setMaxNFTPerAddress(uint8 _limit) external onlyOwner{
maxMintAmountPerWallet = _limit;
delete _limit;
}
function addPresaleList(address[] memory _wallets) public onlyOwner{
for(uint i; i < _wallets.length; i++)
allowedList[_wallets[i]] = true;
}
function isWhitelisted(address _sender) public view returns(bool){
return allowedList[_sender];
}
function whitelistMint(uint8 _mintAmount) external payable {
require(isWhitelisted(msg.sender) , "You are not whitelisted");
require (nftPerWLAddress[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds max tx per address");
require(!WLpaused, "Whitelist minting is over!");
require(msg.value >= whiteListCost * _mintAmount, "Insufficient funds!");
uint16 totalSupply = uint16(_owners.length);
for(uint8 i; i < _mintAmount; i++) {
_mint(msg.sender , totalSupply + i);
}
nftPerWLAddress[msg.sender] += _mintAmount;
delete totalSupply;
delete _mintAmount;
}
function setHiddenMetadataUri(string memory _hiddenMetadataUri) external onlyOwner {
hiddenURL = _hiddenMetadataUri;
}
function setUriPrefix(string memory _uriPrefix) external onlyOwner {
uriPrefix = _uriPrefix;
}
function setPaused() external onlyOwner {
paused = !paused;
}
function setCost(uint _cost) external onlyOwner{
cost = _cost;
}
function withdraw() external onlyOwner {
uint _balance = address(this).balance;
payable(msg.sender).transfer(_balance );
}
function _mint(address to, uint256 tokenId) internal virtual override {
_owners.push(to);
emit Transfer(address(0), to, tokenId);
}
function _baseURI() internal view returns (string memory) {
return uriPrefix;
}
}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":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"AdminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"hiddenURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nftPerWLAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setMaxNFTPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"supply","type":"uint16"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaused","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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040819052600060808190526200001b916006916200019f565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a916007916200019f565b5060405180606001604052806035815260200162002a946035913980516200007b916008916020909101906200019f565b506729a2241af62c00006009819055600a55600b805460ff19166001179055600e805464ffffffffff191663010103e8179055348015620000bb57600080fd5b50604080518082018252600d81526c45666669677920436972636c6560981b6020808301918252835180850190945260078452664546474349524360c81b90840152815191929162000110916000916200019f565b508051620001269060019060208401906200019f565b505050620001436200013d6200014960201b60201c565b6200014d565b62000282565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001ad9062000245565b90600052602060002090601f016020900481019282620001d157600085556200021c565b82601f10620001ec57805160ff19168380011785556200021c565b828001600101855582156200021c579182015b828111156200021c578251825591602001919060010190620001ff565b506200022a9291506200022e565b5090565b5b808211156200022a57600081556001016200022f565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b61280280620002926000396000f3fe6080604052600436106102675760003560e01c806360e85cde11610144578063a475b5dd116100b6578063d1d192131161007a578063d1d1921314610736578063d5abeb0114610756578063e985e9c514610784578063ebb31510146107cd578063eef440af146107ed578063f2fde38b1461080257600080fd5b8063a475b5dd1461069a578063b88d4fde146106bc578063bc04bc79146106dc578063bc951b91146106fc578063c87b56dd1461071657600080fd5b80637f6e9093116101085780637f6e9093146105e15780638da5cb5b146106015780639257e0441461061f57806395d89b4114610635578063a075fbde1461064a578063a22cb4651461067a57600080fd5b806360e85cde146105595780636352211e1461056c57806370a082311461058c578063715018a6146105ac5780637ec4a659146105c157600080fd5b806337a66d85116101dd57806344a0d68a116101a157806344a0d68a14610476578063492b12e8146104965780634f6ccce7146104d85780634fdd43cb146104f85780635b255e3e146105185780635c975abb1461053857600080fd5b806337a66d85146103de5780633af32abf146103f35780633bd649681461042c5780633ccfd60b1461044157806342842e0e1461045657600080fd5b8063095ea7b31161022f578063095ea7b31461033257806313faede61461035257806318160ddd1461037657806323b872dd1461038b57806323cf0a22146103ab5780632f745c59146103be57600080fd5b806301ffc9a71461026c57806306421c2f146102a157806306fdde03146102c3578063081812fc146102e5578063093cfa631461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461224f565b610822565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc3660046122d2565b61084d565b005b3480156102cf57600080fd5b506102d8610898565b6040516102989190612472565b3480156102f157600080fd5b50610305610300366004612309565b61092a565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c16109b2565b34801561033e57600080fd5b506102c161034d366004612171565b6109fb565b34801561035e57600080fd5b5061036860095481565b604051908152602001610298565b34801561038257600080fd5b50600254610368565b34801561039757600080fd5b506102c16103a636600461207d565b610b11565b6102c16103b93660046122d2565b610b42565b3480156103ca57600080fd5b506103686103d9366004612171565b610ce6565b3480156103ea57600080fd5b506102c1610d99565b3480156103ff57600080fd5b5061028c61040e36600461202f565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561043857600080fd5b506102c1610de4565b34801561044d57600080fd5b506102c1610e31565b34801561046257600080fd5b506102c161047136600461207d565b610e8e565b34801561048257600080fd5b506102c1610491366004612309565b610ea9565b3480156104a257600080fd5b506104c66104b136600461202f565b600d6020526000908152604090205460ff1681565b60405160ff9091168152602001610298565b3480156104e457600080fd5b506103686104f3366004612309565b610ed8565b34801561050457600080fd5b506102c1610513366004612289565b610f45565b34801561052457600080fd5b506102c16105333660046122ed565b610f82565b34801561054457600080fd5b50600e5461028c906301000000900460ff1681565b6102c1610567366004612322565b611041565b34801561057857600080fd5b50610305610587366004612309565b611243565b34801561059857600080fd5b506103686105a736600461202f565b6112cf565b3480156105b857600080fd5b506102c16113a1565b3480156105cd57600080fd5b506102c16105dc366004612289565b6113d7565b3480156105ed57600080fd5b50600e5461028c9062010000900460ff1681565b34801561060d57600080fd5b506005546001600160a01b0316610305565b34801561062b57600080fd5b50610368600a5481565b34801561064157600080fd5b506102d8611414565b34801561065657600080fd5b5061028c61066536600461202f565b600c6020526000908152604090205460ff1681565b34801561068657600080fd5b506102c1610695366004612135565b611423565b3480156106a657600080fd5b50600e5461028c90640100000000900460ff1681565b3480156106c857600080fd5b506102c16106d73660046120b9565b6114e8565b3480156106e857600080fd5b506102c16106f7366004612322565b61151a565b34801561070857600080fd5b50600b546104c69060ff1681565b34801561072257600080fd5b506102d8610731366004612309565b61155a565b34801561074257600080fd5b506102c1610751366004612309565b6116cc565b34801561076257600080fd5b50600e546107719061ffff1681565b60405161ffff9091168152602001610298565b34801561079057600080fd5b5061028c61079f36600461204a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b3480156107d957600080fd5b506102c16107e836600461219b565b6116fb565b3480156107f957600080fd5b506102d861178d565b34801561080e57600080fd5b506102c161081d36600461202f565b61181b565b60006001600160e01b0319821663780e9d6360e01b14806108475750610847826118b6565b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b815260040161087790612522565b60405180910390fd5b600e805461ffff191661ffff92909216919091179055565b6060600080546108a7906126b2565b80601f01602080910402602001604051908101604052809291908181526020018280546108d3906126b2565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b600061093582611906565b6109965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610877565b506000908152600360205260409020546001600160a01b031690565b6005546001600160a01b031633146109dc5760405162461bcd60e51b815260040161087790612522565b600e805462ff0000198116620100009182900460ff1615909102179055565b6000610a0682611243565b9050806001600160a01b0316836001600160a01b03161415610a745760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610877565b336001600160a01b0382161480610a905750610a90813361079f565b610b025760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610877565b610b0c8383611950565b505050565b610b1b33826119be565b610b375760405162461bcd60e51b815260040161087790612557565b610b0c838383611aa8565b600254600e5461ffff16610b5683836125d9565b61ffff161115610b9e5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b6044820152606401610877565b600b5460ff1661ffff83161115610bf75760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e000000006044820152606401610877565b600e546301000000900460ff1615610c515760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610877565b8161ffff16600954610c639190612650565b341015610ca85760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610877565b60005b8261ffff168160ff161015610b0c57610cd433610ccb60ff8416856125d9565b61ffff16611bfe565b80610cde8161272a565b915050610cab565b6000610cf1836112cf565b8210610d0f5760405162461bcd60e51b815260040161087790612485565b6000805b600254811015610d805760028181548110610d3057610d3061278a565b6000918252602090912001546001600160a01b0386811691161415610d6e5783821415610d605791506108479050565b81610d6a8161270f565b9250505b80610d788161270f565b915050610d13565b5060405162461bcd60e51b815260040161087790612485565b6005546001600160a01b03163314610dc35760405162461bcd60e51b815260040161087790612522565b600e805463ff00000019811663010000009182900460ff1615909102179055565b6005546001600160a01b03163314610e0e5760405162461bcd60e51b815260040161087790612522565b600e805464ff000000001981166401000000009182900460ff1615909102179055565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b815260040161087790612522565b6040514790339082156108fc029083906000818181858888f19350505050158015610e8a573d6000803e3d6000fd5b5050565b610b0c838383604051806020016040528060008152506114e8565b6005546001600160a01b03163314610ed35760405162461bcd60e51b815260040161087790612522565b600955565b6002546000908210610f415760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610877565b5090565b6005546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161087790612522565b8051610e8a906008906020840190611f19565b6005546001600160a01b03163314610fac5760405162461bcd60e51b815260040161087790612522565b600254600e5461ffff16610fc084836125d9565b61ffff1611156110085760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b6044820152606401610877565b60005b8361ffff168161ffff16101561103b5761102983610ccb83856125d9565b80611033816126ed565b91505061100b565b50505050565b336000908152600c602052604090205460ff166110a05760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610877565b600b54336000908152600d602052604090205460ff918216916110c591849116612617565b60ff1611156111165760405162461bcd60e51b815260206004820152601a60248201527f45786365656473206d61782074782070657220616464726573730000000000006044820152606401610877565b600e5462010000900460ff161561116f5760405162461bcd60e51b815260206004820152601a60248201527f57686974656c697374206d696e74696e67206973206f766572210000000000006044820152606401610877565b8060ff16600a546111809190612650565b3410156111c55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610877565b60025460005b8260ff168160ff1610156111fc576111ea33610ccb60ff8416856125d9565b806111f48161272a565b9150506111cb565b50336000908152600d60205260408120805484929061121f90849060ff16612617565b92506101000a81548160ff021916908360ff16021790555060009050600091505050565b600080600283815481106112595761125961278a565b6000918252602090912001546001600160a01b03169050806108475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610877565b60006001600160a01b03821661133a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610877565b600254600090815b81811015611398576002818154811061135d5761135d61278a565b6000918252602090912001546001600160a01b0386811691161415611388576113858361270f565b92505b6113918161270f565b9050611342565b50909392505050565b6005546001600160a01b031633146113cb5760405162461bcd60e51b815260040161087790612522565b6113d56000611c7a565b565b6005546001600160a01b031633146114015760405162461bcd60e51b815260040161087790612522565b8051610e8a906006906020840190611f19565b6060600180546108a7906126b2565b6001600160a01b03821633141561147c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610877565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114f233836119be565b61150e5760405162461bcd60e51b815260040161087790612557565b61103b84848484611ccc565b6005546001600160a01b031633146115445760405162461bcd60e51b815260040161087790612522565b600b805460ff191660ff92909216919091179055565b606061156582611906565b6115c95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610877565b600e54640100000000900460ff1661166d57600880546115e8906126b2565b80601f0160208091040260200160405190810160405280929190818152602001828054611614906126b2565b80156116615780601f1061163657610100808354040283529160200191611661565b820191906000526020600020905b81548152906001019060200180831161164457829003601f168201915b50505050509050919050565b6000611677611cff565b9050600081511161169757604051806020016040528060008152506116c5565b806116a184611d0e565b60076040516020016116b593929190612371565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146116f65760405162461bcd60e51b815260040161087790612522565b600a55565b6005546001600160a01b031633146117255760405162461bcd60e51b815260040161087790612522565b60005b8151811015610e8a576001600c60008484815181106117495761174961278a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117858161270f565b915050611728565b6008805461179a906126b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117c6906126b2565b80156118135780601f106117e857610100808354040283529160200191611813565b820191906000526020600020905b8154815290600101906020018083116117f657829003601f168201915b505050505081565b6005546001600160a01b031633146118455760405162461bcd60e51b815260040161087790612522565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118b381611c7a565b50565b60006001600160e01b031982166380ac58cd60e01b14806118e757506001600160e01b03198216635b5e139f60e01b145b8061084757506301ffc9a760e01b6001600160e01b0319831614610847565b60025460009082108015610847575060006001600160a01b0316600283815481106119335761193361278a565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061198582611243565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119c982611906565b611a2a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610877565b6000611a3583611243565b9050806001600160a01b0316846001600160a01b03161480611a705750836001600160a01b0316611a658461092a565b6001600160a01b0316145b80611aa057506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611abb82611243565b6001600160a01b031614611b235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610877565b6001600160a01b038216611b855760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b611b90600082611950565b8160028281548110611ba457611ba461278a565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611cd7848484611aa8565b611ce384848484611e0c565b61103b5760405162461bcd60e51b8152600401610877906124d0565b6060600680546108a7906126b2565b606081611d325750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d5c5780611d468161270f565b9150611d559050600a8361263c565b9150611d36565b60008167ffffffffffffffff811115611d7757611d776127a0565b6040519080825280601f01601f191660200182016040528015611da1576020820181803683370190505b5090505b8415611aa057611db660018361266f565b9150611dc3600a8661274a565b611dce9060306125ff565b60f81b818381518110611de357611de361278a565b60200101906001600160f81b031916908160001a905350611e05600a8661263c565b9450611da5565b60006001600160a01b0384163b15611f0e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e50903390899088908890600401612435565b602060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e9a575060408051601f3d908101601f19168201909252611e979181019061226c565b60015b611ef4573d808015611ec8576040519150601f19603f3d011682016040523d82523d6000602084013e611ecd565b606091505b508051611eec5760405162461bcd60e51b8152600401610877906124d0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa0565b506001949350505050565b828054611f25906126b2565b90600052602060002090601f016020900481019282611f475760008555611f8d565b82601f10611f6057805160ff1916838001178555611f8d565b82800160010185558215611f8d579182015b82811115611f8d578251825591602001919060010190611f72565b50610f419291505b80821115610f415760008155600101611f95565b600067ffffffffffffffff831115611fc357611fc36127a0565b611fd6601f8401601f19166020016125a8565b9050828152838383011115611fea57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461201857600080fd5b919050565b803561ffff8116811461201857600080fd5b60006020828403121561204157600080fd5b6116c582612001565b6000806040838503121561205d57600080fd5b61206683612001565b915061207460208401612001565b90509250929050565b60008060006060848603121561209257600080fd5b61209b84612001565b92506120a960208501612001565b9150604084013590509250925092565b600080600080608085870312156120cf57600080fd5b6120d885612001565b93506120e660208601612001565b925060408501359150606085013567ffffffffffffffff81111561210957600080fd5b8501601f8101871361211a57600080fd5b61212987823560208401611fa9565b91505092959194509250565b6000806040838503121561214857600080fd5b61215183612001565b91506020830135801515811461216657600080fd5b809150509250929050565b6000806040838503121561218457600080fd5b61218d83612001565b946020939093013593505050565b600060208083850312156121ae57600080fd5b823567ffffffffffffffff808211156121c657600080fd5b818501915085601f8301126121da57600080fd5b8135818111156121ec576121ec6127a0565b8060051b91506121fd8483016125a8565b8181528481019084860184860187018a101561221857600080fd5b600095505b838610156122425761222e81612001565b83526001959095019491860191860161221d565b5098975050505050505050565b60006020828403121561226157600080fd5b81356116c5816127b6565b60006020828403121561227e57600080fd5b81516116c5816127b6565b60006020828403121561229b57600080fd5b813567ffffffffffffffff8111156122b257600080fd5b8201601f810184136122c357600080fd5b611aa084823560208401611fa9565b6000602082840312156122e457600080fd5b6116c58261201d565b6000806040838503121561230057600080fd5b6120668361201d565b60006020828403121561231b57600080fd5b5035919050565b60006020828403121561233457600080fd5b813560ff811681146116c557600080fd5b6000815180845261235d816020860160208601612686565b601f01601f19169290920160200192915050565b6000845160206123848285838a01612686565b8551918401916123978184848a01612686565b8554920191600090600181811c90808316806123b457607f831692505b8583108114156123d257634e487b7160e01b85526022600452602485fd5b8080156123e657600181146123f757612424565b60ff19851688528388019550612424565b60008b81526020902060005b8581101561241c5781548a820152908401908801612403565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061246890830184612345565b9695505050505050565b6020815260006116c56020830184612345565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125d1576125d16127a0565b604052919050565b600061ffff8083168185168083038211156125f6576125f661275e565b01949350505050565b600082198211156126125761261261275e565b500190565b600060ff821660ff84168060ff038211156126345761263461275e565b019392505050565b60008261264b5761264b612774565b500490565b600081600019048311821515161561266a5761266a61275e565b500290565b6000828210156126815761268161275e565b500390565b60005b838110156126a1578181015183820152602001612689565b8381111561103b5750506000910152565b600181811c908216806126c657607f821691505b602082108114156126e757634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff808316818114156127055761270561275e565b6001019392505050565b60006000198214156127235761272361275e565b5060010190565b600060ff821660ff8114156127415761274161275e565b60010192915050565b60008261275957612759612774565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146118b357600080fdfea2646970667358221220f5ce71fd68c6d2d96900353c137e3c4054dec0b9b64e329264a4c2ad4695ef4264736f6c63430008070033697066733a2f2f516d64356775367467474761523741646758413178727a696f517439506f7458445066484841416f5a6b774c7142
Deployed Bytecode
0x6080604052600436106102675760003560e01c806360e85cde11610144578063a475b5dd116100b6578063d1d192131161007a578063d1d1921314610736578063d5abeb0114610756578063e985e9c514610784578063ebb31510146107cd578063eef440af146107ed578063f2fde38b1461080257600080fd5b8063a475b5dd1461069a578063b88d4fde146106bc578063bc04bc79146106dc578063bc951b91146106fc578063c87b56dd1461071657600080fd5b80637f6e9093116101085780637f6e9093146105e15780638da5cb5b146106015780639257e0441461061f57806395d89b4114610635578063a075fbde1461064a578063a22cb4651461067a57600080fd5b806360e85cde146105595780636352211e1461056c57806370a082311461058c578063715018a6146105ac5780637ec4a659146105c157600080fd5b806337a66d85116101dd57806344a0d68a116101a157806344a0d68a14610476578063492b12e8146104965780634f6ccce7146104d85780634fdd43cb146104f85780635b255e3e146105185780635c975abb1461053857600080fd5b806337a66d85146103de5780633af32abf146103f35780633bd649681461042c5780633ccfd60b1461044157806342842e0e1461045657600080fd5b8063095ea7b31161022f578063095ea7b31461033257806313faede61461035257806318160ddd1461037657806323b872dd1461038b57806323cf0a22146103ab5780632f745c59146103be57600080fd5b806301ffc9a71461026c57806306421c2f146102a157806306fdde03146102c3578063081812fc146102e5578063093cfa631461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461224f565b610822565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc3660046122d2565b61084d565b005b3480156102cf57600080fd5b506102d8610898565b6040516102989190612472565b3480156102f157600080fd5b50610305610300366004612309565b61092a565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c16109b2565b34801561033e57600080fd5b506102c161034d366004612171565b6109fb565b34801561035e57600080fd5b5061036860095481565b604051908152602001610298565b34801561038257600080fd5b50600254610368565b34801561039757600080fd5b506102c16103a636600461207d565b610b11565b6102c16103b93660046122d2565b610b42565b3480156103ca57600080fd5b506103686103d9366004612171565b610ce6565b3480156103ea57600080fd5b506102c1610d99565b3480156103ff57600080fd5b5061028c61040e36600461202f565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561043857600080fd5b506102c1610de4565b34801561044d57600080fd5b506102c1610e31565b34801561046257600080fd5b506102c161047136600461207d565b610e8e565b34801561048257600080fd5b506102c1610491366004612309565b610ea9565b3480156104a257600080fd5b506104c66104b136600461202f565b600d6020526000908152604090205460ff1681565b60405160ff9091168152602001610298565b3480156104e457600080fd5b506103686104f3366004612309565b610ed8565b34801561050457600080fd5b506102c1610513366004612289565b610f45565b34801561052457600080fd5b506102c16105333660046122ed565b610f82565b34801561054457600080fd5b50600e5461028c906301000000900460ff1681565b6102c1610567366004612322565b611041565b34801561057857600080fd5b50610305610587366004612309565b611243565b34801561059857600080fd5b506103686105a736600461202f565b6112cf565b3480156105b857600080fd5b506102c16113a1565b3480156105cd57600080fd5b506102c16105dc366004612289565b6113d7565b3480156105ed57600080fd5b50600e5461028c9062010000900460ff1681565b34801561060d57600080fd5b506005546001600160a01b0316610305565b34801561062b57600080fd5b50610368600a5481565b34801561064157600080fd5b506102d8611414565b34801561065657600080fd5b5061028c61066536600461202f565b600c6020526000908152604090205460ff1681565b34801561068657600080fd5b506102c1610695366004612135565b611423565b3480156106a657600080fd5b50600e5461028c90640100000000900460ff1681565b3480156106c857600080fd5b506102c16106d73660046120b9565b6114e8565b3480156106e857600080fd5b506102c16106f7366004612322565b61151a565b34801561070857600080fd5b50600b546104c69060ff1681565b34801561072257600080fd5b506102d8610731366004612309565b61155a565b34801561074257600080fd5b506102c1610751366004612309565b6116cc565b34801561076257600080fd5b50600e546107719061ffff1681565b60405161ffff9091168152602001610298565b34801561079057600080fd5b5061028c61079f36600461204a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b3480156107d957600080fd5b506102c16107e836600461219b565b6116fb565b3480156107f957600080fd5b506102d861178d565b34801561080e57600080fd5b506102c161081d36600461202f565b61181b565b60006001600160e01b0319821663780e9d6360e01b14806108475750610847826118b6565b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b815260040161087790612522565b60405180910390fd5b600e805461ffff191661ffff92909216919091179055565b6060600080546108a7906126b2565b80601f01602080910402602001604051908101604052809291908181526020018280546108d3906126b2565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b600061093582611906565b6109965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610877565b506000908152600360205260409020546001600160a01b031690565b6005546001600160a01b031633146109dc5760405162461bcd60e51b815260040161087790612522565b600e805462ff0000198116620100009182900460ff1615909102179055565b6000610a0682611243565b9050806001600160a01b0316836001600160a01b03161415610a745760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610877565b336001600160a01b0382161480610a905750610a90813361079f565b610b025760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610877565b610b0c8383611950565b505050565b610b1b33826119be565b610b375760405162461bcd60e51b815260040161087790612557565b610b0c838383611aa8565b600254600e5461ffff16610b5683836125d9565b61ffff161115610b9e5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b6044820152606401610877565b600b5460ff1661ffff83161115610bf75760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e000000006044820152606401610877565b600e546301000000900460ff1615610c515760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610877565b8161ffff16600954610c639190612650565b341015610ca85760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610877565b60005b8261ffff168160ff161015610b0c57610cd433610ccb60ff8416856125d9565b61ffff16611bfe565b80610cde8161272a565b915050610cab565b6000610cf1836112cf565b8210610d0f5760405162461bcd60e51b815260040161087790612485565b6000805b600254811015610d805760028181548110610d3057610d3061278a565b6000918252602090912001546001600160a01b0386811691161415610d6e5783821415610d605791506108479050565b81610d6a8161270f565b9250505b80610d788161270f565b915050610d13565b5060405162461bcd60e51b815260040161087790612485565b6005546001600160a01b03163314610dc35760405162461bcd60e51b815260040161087790612522565b600e805463ff00000019811663010000009182900460ff1615909102179055565b6005546001600160a01b03163314610e0e5760405162461bcd60e51b815260040161087790612522565b600e805464ff000000001981166401000000009182900460ff1615909102179055565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b815260040161087790612522565b6040514790339082156108fc029083906000818181858888f19350505050158015610e8a573d6000803e3d6000fd5b5050565b610b0c838383604051806020016040528060008152506114e8565b6005546001600160a01b03163314610ed35760405162461bcd60e51b815260040161087790612522565b600955565b6002546000908210610f415760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610877565b5090565b6005546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161087790612522565b8051610e8a906008906020840190611f19565b6005546001600160a01b03163314610fac5760405162461bcd60e51b815260040161087790612522565b600254600e5461ffff16610fc084836125d9565b61ffff1611156110085760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b6044820152606401610877565b60005b8361ffff168161ffff16101561103b5761102983610ccb83856125d9565b80611033816126ed565b91505061100b565b50505050565b336000908152600c602052604090205460ff166110a05760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610877565b600b54336000908152600d602052604090205460ff918216916110c591849116612617565b60ff1611156111165760405162461bcd60e51b815260206004820152601a60248201527f45786365656473206d61782074782070657220616464726573730000000000006044820152606401610877565b600e5462010000900460ff161561116f5760405162461bcd60e51b815260206004820152601a60248201527f57686974656c697374206d696e74696e67206973206f766572210000000000006044820152606401610877565b8060ff16600a546111809190612650565b3410156111c55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610877565b60025460005b8260ff168160ff1610156111fc576111ea33610ccb60ff8416856125d9565b806111f48161272a565b9150506111cb565b50336000908152600d60205260408120805484929061121f90849060ff16612617565b92506101000a81548160ff021916908360ff16021790555060009050600091505050565b600080600283815481106112595761125961278a565b6000918252602090912001546001600160a01b03169050806108475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610877565b60006001600160a01b03821661133a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610877565b600254600090815b81811015611398576002818154811061135d5761135d61278a565b6000918252602090912001546001600160a01b0386811691161415611388576113858361270f565b92505b6113918161270f565b9050611342565b50909392505050565b6005546001600160a01b031633146113cb5760405162461bcd60e51b815260040161087790612522565b6113d56000611c7a565b565b6005546001600160a01b031633146114015760405162461bcd60e51b815260040161087790612522565b8051610e8a906006906020840190611f19565b6060600180546108a7906126b2565b6001600160a01b03821633141561147c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610877565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114f233836119be565b61150e5760405162461bcd60e51b815260040161087790612557565b61103b84848484611ccc565b6005546001600160a01b031633146115445760405162461bcd60e51b815260040161087790612522565b600b805460ff191660ff92909216919091179055565b606061156582611906565b6115c95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610877565b600e54640100000000900460ff1661166d57600880546115e8906126b2565b80601f0160208091040260200160405190810160405280929190818152602001828054611614906126b2565b80156116615780601f1061163657610100808354040283529160200191611661565b820191906000526020600020905b81548152906001019060200180831161164457829003601f168201915b50505050509050919050565b6000611677611cff565b9050600081511161169757604051806020016040528060008152506116c5565b806116a184611d0e565b60076040516020016116b593929190612371565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146116f65760405162461bcd60e51b815260040161087790612522565b600a55565b6005546001600160a01b031633146117255760405162461bcd60e51b815260040161087790612522565b60005b8151811015610e8a576001600c60008484815181106117495761174961278a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117858161270f565b915050611728565b6008805461179a906126b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117c6906126b2565b80156118135780601f106117e857610100808354040283529160200191611813565b820191906000526020600020905b8154815290600101906020018083116117f657829003601f168201915b505050505081565b6005546001600160a01b031633146118455760405162461bcd60e51b815260040161087790612522565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118b381611c7a565b50565b60006001600160e01b031982166380ac58cd60e01b14806118e757506001600160e01b03198216635b5e139f60e01b145b8061084757506301ffc9a760e01b6001600160e01b0319831614610847565b60025460009082108015610847575060006001600160a01b0316600283815481106119335761193361278a565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061198582611243565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119c982611906565b611a2a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610877565b6000611a3583611243565b9050806001600160a01b0316846001600160a01b03161480611a705750836001600160a01b0316611a658461092a565b6001600160a01b0316145b80611aa057506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611abb82611243565b6001600160a01b031614611b235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610877565b6001600160a01b038216611b855760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b611b90600082611950565b8160028281548110611ba457611ba461278a565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611cd7848484611aa8565b611ce384848484611e0c565b61103b5760405162461bcd60e51b8152600401610877906124d0565b6060600680546108a7906126b2565b606081611d325750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d5c5780611d468161270f565b9150611d559050600a8361263c565b9150611d36565b60008167ffffffffffffffff811115611d7757611d776127a0565b6040519080825280601f01601f191660200182016040528015611da1576020820181803683370190505b5090505b8415611aa057611db660018361266f565b9150611dc3600a8661274a565b611dce9060306125ff565b60f81b818381518110611de357611de361278a565b60200101906001600160f81b031916908160001a905350611e05600a8661263c565b9450611da5565b60006001600160a01b0384163b15611f0e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e50903390899088908890600401612435565b602060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e9a575060408051601f3d908101601f19168201909252611e979181019061226c565b60015b611ef4573d808015611ec8576040519150601f19603f3d011682016040523d82523d6000602084013e611ecd565b606091505b508051611eec5760405162461bcd60e51b8152600401610877906124d0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa0565b506001949350505050565b828054611f25906126b2565b90600052602060002090601f016020900481019282611f475760008555611f8d565b82601f10611f6057805160ff1916838001178555611f8d565b82800160010185558215611f8d579182015b82811115611f8d578251825591602001919060010190611f72565b50610f419291505b80821115610f415760008155600101611f95565b600067ffffffffffffffff831115611fc357611fc36127a0565b611fd6601f8401601f19166020016125a8565b9050828152838383011115611fea57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461201857600080fd5b919050565b803561ffff8116811461201857600080fd5b60006020828403121561204157600080fd5b6116c582612001565b6000806040838503121561205d57600080fd5b61206683612001565b915061207460208401612001565b90509250929050565b60008060006060848603121561209257600080fd5b61209b84612001565b92506120a960208501612001565b9150604084013590509250925092565b600080600080608085870312156120cf57600080fd5b6120d885612001565b93506120e660208601612001565b925060408501359150606085013567ffffffffffffffff81111561210957600080fd5b8501601f8101871361211a57600080fd5b61212987823560208401611fa9565b91505092959194509250565b6000806040838503121561214857600080fd5b61215183612001565b91506020830135801515811461216657600080fd5b809150509250929050565b6000806040838503121561218457600080fd5b61218d83612001565b946020939093013593505050565b600060208083850312156121ae57600080fd5b823567ffffffffffffffff808211156121c657600080fd5b818501915085601f8301126121da57600080fd5b8135818111156121ec576121ec6127a0565b8060051b91506121fd8483016125a8565b8181528481019084860184860187018a101561221857600080fd5b600095505b838610156122425761222e81612001565b83526001959095019491860191860161221d565b5098975050505050505050565b60006020828403121561226157600080fd5b81356116c5816127b6565b60006020828403121561227e57600080fd5b81516116c5816127b6565b60006020828403121561229b57600080fd5b813567ffffffffffffffff8111156122b257600080fd5b8201601f810184136122c357600080fd5b611aa084823560208401611fa9565b6000602082840312156122e457600080fd5b6116c58261201d565b6000806040838503121561230057600080fd5b6120668361201d565b60006020828403121561231b57600080fd5b5035919050565b60006020828403121561233457600080fd5b813560ff811681146116c557600080fd5b6000815180845261235d816020860160208601612686565b601f01601f19169290920160200192915050565b6000845160206123848285838a01612686565b8551918401916123978184848a01612686565b8554920191600090600181811c90808316806123b457607f831692505b8583108114156123d257634e487b7160e01b85526022600452602485fd5b8080156123e657600181146123f757612424565b60ff19851688528388019550612424565b60008b81526020902060005b8581101561241c5781548a820152908401908801612403565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061246890830184612345565b9695505050505050565b6020815260006116c56020830184612345565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125d1576125d16127a0565b604052919050565b600061ffff8083168185168083038211156125f6576125f661275e565b01949350505050565b600082198211156126125761261261275e565b500190565b600060ff821660ff84168060ff038211156126345761263461275e565b019392505050565b60008261264b5761264b612774565b500490565b600081600019048311821515161561266a5761266a61275e565b500290565b6000828210156126815761268161275e565b500390565b60005b838110156126a1578181015183820152602001612689565b8381111561103b5750506000910152565b600181811c908216806126c657607f821691505b602082108114156126e757634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff808316818114156127055761270561275e565b6001019392505050565b60006000198214156127235761272361275e565b5060010190565b600060ff821660ff8114156127415761274161275e565b60010192915050565b60008261275957612759612774565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146118b357600080fdfea2646970667358221220f5ce71fd68c6d2d96900353c137e3c4054dec0b9b64e329264a4c2ad4695ef4264736f6c63430008070033
Deployed Bytecode Sourcemap
29209:4452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27903:224;;;;;;;;;;-1:-1:-1;27903:224:0;;;;;:::i;:::-;;:::i;:::-;;;8336:14:1;;8329:22;8311:41;;8299:2;8284:18;27903:224:0;;;;;;;;31519:87;;;;;;;;;;-1:-1:-1;31519:87:0;;;;;:::i;:::-;;:::i;:::-;;16516:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17328:308::-;;;;;;;;;;-1:-1:-1;17328:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7634:32:1;;;7616:51;;7604:2;7589:18;17328:308:0;7470:203:1;31439:75:0;;;;;;;;;;;;;:::i;16851:411::-;;;;;;;;;;-1:-1:-1;16851:411:0;;;;;:::i;:::-;;:::i;29474:29::-;;;;;;;;;;;;;;;;;;;17882:25:1;;;17870:2;17855:18;29474:29:0;17736:177:1;28203:110:0;;;;;;;;;;-1:-1:-1;28291:7:0;:14;28203:110;;18387:376;;;;;;;;;;-1:-1:-1;18387:376:0;;;;;:::i;:::-;;:::i;29928:536::-;;;;;;:::i;:::-;;:::i;28679:490::-;;;;;;;;;;-1:-1:-1;28679:490:0;;;;;:::i;:::-;;:::i;33091:69::-;;;;;;;;;;;;;:::i;32029:111::-;;;;;;;;;;-1:-1:-1;32029:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;32112:20:0;32089:4;32112:20;;;:11;:20;;;;;;;;;32029:111;31363:71;;;;;;;;;;;;;:::i;33259:144::-;;;;;;;;;;;;;:::i;18834:185::-;;;;;;;;;;-1:-1:-1;18834:185:0;;;;;:::i;:::-;;:::i;33166:76::-;;;;;;;;;;-1:-1:-1;33166:76:0;;;;;:::i;:::-;;:::i;29655:49::-;;;;;;;;;;-1:-1:-1;29655:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18090:4:1;18078:17;;;18060:36;;18048:2;18033:18;29655:49:0;17918:184:1;28390:205:0;;;;;;;;;;-1:-1:-1;28390:205:0;;;;;:::i;:::-;;:::i;32842:126::-;;;;;;;;;;-1:-1:-1;32842:126:0;;;;;:::i;:::-;;:::i;30472:378::-;;;;;;;;;;-1:-1:-1;30472:378:0;;;;;:::i;:::-;;:::i;29784:25::-;;;;;;;;;;-1:-1:-1;29784:25:0;;;;;;;;;;;32144:694;;;;;;:::i;:::-;;:::i;16123:326::-;;;;;;;;;;-1:-1:-1;16123:326:0;;;;;:::i;:::-;;:::i;15615:446::-;;;;;;;;;;-1:-1:-1;15615:446:0;;;;;:::i;:::-;;:::i;3626:103::-;;;;;;;;;;;;;:::i;32981:102::-;;;;;;;;;;-1:-1:-1;32981:102:0;;;;;:::i;:::-;;:::i;29752:27::-;;;;;;;;;;-1:-1:-1;29752:27:0;;;;;;;;;;;2975:87;;;;;;;;;;-1:-1:-1;3048:6:0;;-1:-1:-1;;;;;3048:6:0;2975:87;;29508:38;;;;;;;;;;;;;;;;16685:104;;;;;;;;;;;;;:::i;29599:44::-;;;;;;;;;;-1:-1:-1;29599:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17708:327;;;;;;;;;;-1:-1:-1;17708:327:0;;;;;:::i;:::-;;:::i;29814:26::-;;;;;;;;;;-1:-1:-1;29814:26:0;;;;;;;;;;;19090:365;;;;;;;;;;-1:-1:-1;19090:365:0;;;;;:::i;:::-;;:::i;31720:124::-;;;;;;;;;;-1:-1:-1;31720:124:0;;;;;:::i;:::-;;:::i;29553:39::-;;;;;;;;;;-1:-1:-1;29553:39:0;;;;;;;;30863:496;;;;;;;;;;-1:-1:-1;30863:496:0;;;;;:::i;:::-;;:::i;31610:106::-;;;;;;;;;;-1:-1:-1;31610:106:0;;;;;:::i;:::-;;:::i;29709:31::-;;;;;;;;;;-1:-1:-1;29709:31:0;;;;;;;;;;;17717:6:1;17705:19;;;17687:38;;17675:2;17660:18;29709:31:0;17543:188:1;18106:214:0;;;;;;;;;;-1:-1:-1;18106:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;18277:25:0;;;18248:4;18277:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18106:214;31853:164;;;;;;;;;;-1:-1:-1;31853:164:0;;;;;:::i;:::-;;:::i;29376:81::-;;;;;;;;;;;;;:::i;3884:201::-;;;;;;;;;;-1:-1:-1;3884:201:0;;;;;:::i;:::-;;:::i;27903:224::-;28005:4;-1:-1:-1;;;;;;28029:50:0;;-1:-1:-1;;;28029:50:0;;:90;;;28083:36;28107:11;28083:23;:36::i;:::-;28022:97;27903:224;-1:-1:-1;;27903:224:0:o;31519:87::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;;;;;;;;;31582:9:::1;:18:::0;;-1:-1:-1;;31582:18:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;31519:87::o;16516:100::-;16570:13;16603:5;16596:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16516:100;:::o;17328:308::-;17449:7;17496:16;17504:7;17496;:16::i;:::-;17474:110;;;;-1:-1:-1;;;17474:110:0;;13855:2:1;17474:110:0;;;13837:21:1;13894:2;13874:18;;;13867:30;13933:34;13913:18;;;13906:62;-1:-1:-1;;;13984:18:1;;;13977:42;14036:19;;17474:110:0;13653:408:1;17474:110:0;-1:-1:-1;17604:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17604:24:0;;17328:308::o;31439:75::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;31500:8:::1;::::0;;-1:-1:-1;;31488:20:0;::::1;31500:8:::0;;;;::::1;;;31499:9;31488:20:::0;;::::1;;::::0;;31439:75::o;16851:411::-;16932:13;16948:23;16963:7;16948:14;:23::i;:::-;16932:39;;16996:5;-1:-1:-1;;;;;16990:11:0;:2;-1:-1:-1;;;;;16990:11:0;;;16982:57;;;;-1:-1:-1;;;16982:57:0;;15807:2:1;16982:57:0;;;15789:21:1;15846:2;15826:18;;;15819:30;15885:34;15865:18;;;15858:62;-1:-1:-1;;;15936:18:1;;;15929:31;15977:19;;16982:57:0;15605:397:1;16982:57:0;1779:10;-1:-1:-1;;;;;17074:21:0;;;;:62;;-1:-1:-1;17099:37:0;17116:5;1779:10;18106:214;:::i;17099:37::-;17052:168;;;;-1:-1:-1;;;17052:168:0;;12257:2:1;17052:168:0;;;12239:21:1;12296:2;12276:18;;;12269:30;12335:34;12315:18;;;12308:62;12406:26;12386:18;;;12379:54;12450:19;;17052:168:0;12055:420:1;17052:168:0;17233:21;17242:2;17246:7;17233:8;:21::i;:::-;16921:341;16851:411;;:::o;18387:376::-;18596:41;1779:10;18629:7;18596:18;:41::i;:::-;18574:140;;;;-1:-1:-1;;;18574:140:0;;;;;;;:::i;:::-;18727:28;18737:4;18743:2;18747:7;18727:9;:28::i;29928:536::-;30015:7;:14;30074:9;;;;30045:25;30059:11;30015:14;30045:25;:::i;:::-;:38;;;;30037:70;;;;-1:-1:-1;;;30037:70:0;;8789:2:1;30037:70:0;;;8771:21:1;8828:2;8808:18;;;8801:30;-1:-1:-1;;;8847:18:1;;;8840:49;8906:18;;30037:70:0;8587:343:1;30037:70:0;30137:22;;;;30122:37;;;;;30114:78;;;;-1:-1:-1;;;30114:78:0;;16627:2:1;30114:78:0;;;16609:21:1;16666:2;16646:18;;;16639:30;16705;16685:18;;;16678:58;16753:18;;30114:78:0;16425:352:1;30114:78:0;30210:6;;;;;;;30209:7;30201:43;;;;-1:-1:-1;;;30201:43:0;;14629:2:1;30201:43:0;;;14611:21:1;14668:2;14648:18;;;14641:30;14707:25;14687:18;;;14680:53;14750:18;;30201:43:0;14427:347:1;30201:43:0;30279:11;30272:18;;:4;;:18;;;;:::i;:::-;30259:9;:31;;30251:63;;;;-1:-1:-1;;;30251:63:0;;17397:2:1;30251:63:0;;;17379:21:1;17436:2;17416:18;;;17409:30;-1:-1:-1;;;17455:18:1;;;17448:49;17514:18;;30251:63:0;17195:343:1;30251:63:0;30326:7;30322:85;30339:11;30335:15;;:1;:15;;;30322:85;;;30364:34;30370:10;30382:15;;;;:11;:15;:::i;:::-;30364:34;;:5;:34::i;:::-;30352:3;;;;:::i;:::-;;;;30322:85;;28679:490;28776:15;28820:16;28830:5;28820:9;:16::i;:::-;28812:5;:24;28804:80;;;;-1:-1:-1;;;28804:80:0;;;;;;;:::i;:::-;28897:10;28922:6;28918:178;28934:7;:14;28930:18;;28918:178;;;28981:7;28989:1;28981:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28972:19:0;;;28981:10;;28972:19;28969:116;;;29023:5;29014;:14;29011:58;;;29037:1;-1:-1:-1;29030:8:0;;-1:-1:-1;29030:8:0;29011:58;29062:7;;;;:::i;:::-;;;;29011:58;28950:3;;;;:::i;:::-;;;;28918:178;;;;29108:53;;-1:-1:-1;;;29108:53:0;;;;;;;:::i;33091:69::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;33148:6:::1;::::0;;-1:-1:-1;;33138:16:0;::::1;33148:6:::0;;;;::::1;;;33147:7;33138:16:::0;;::::1;;::::0;;33091:69::o;31363:71::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;31422:6:::1;::::0;;-1:-1:-1;;31412:16:0;::::1;31422:6:::0;;;;::::1;;;31421:7;31412:16:::0;;::::1;;::::0;;31363:71::o;33259:144::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;33348:39:::1;::::0;33319:21:::1;::::0;33356:10:::1;::::0;33348:39;::::1;;;::::0;33319:21;;33303:13:::1;33348:39:::0;33303:13;33348:39;33319:21;33356:10;33348:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33298:105;33259:144::o:0;18834:185::-;18972:39;18989:4;18995:2;18999:7;18972:39;;;;;;;;;;;;:16;:39::i;33166:76::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;33222:4:::1;:12:::0;33166:76::o;28390:205::-;28501:7;:14;28465:7;;28493:22;;28485:79;;;;-1:-1:-1;;;28485:79:0;;16984:2:1;28485:79:0;;;16966:21:1;17023:2;17003:18;;;16996:30;17062:34;17042:18;;;17035:62;-1:-1:-1;;;17113:18:1;;;17106:42;17165:19;;28485:79:0;16782:408:1;28485:79:0;-1:-1:-1;28582:5:0;28390:205::o;32842:126::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;32932:30;;::::1;::::0;:9:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;30472:378::-:0;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;30584:7:::1;:14:::0;30643:9:::1;::::0;::::1;;30614:25;30628:11:::0;30584:14;30614:25:::1;:::i;:::-;:38;;;;30606:70;;;::::0;-1:-1:-1;;;30606:70:0;;8789:2:1;30606:70:0::1;::::0;::::1;8771:21:1::0;8828:2;8808:18;;;8801:30;-1:-1:-1;;;8847:18:1;;;8840:49;8906:18;;30606:70:0::1;8587:343:1::0;30606:70:0::1;30687:8;30683:86;30701:11;30697:15;;:1;:15;;;30683:86;;;30726:34;30732:9:::0;30744:15:::1;30758:1:::0;30744:11;:15:::1;:::i;30726:34::-;30714:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30683:86;;;-1:-1:-1::0;;;;30472:378:0:o;32144:694::-;32260:10;32089:4;32112:20;;;:11;:20;;;;;;;;32238:63;;;;-1:-1:-1;;;32238:63:0;;13503:2:1;32238:63:0;;;13485:21:1;13542:2;13522:18;;;13515:30;13581:25;13561:18;;;13554:53;13624:18;;32238:63:0;13301:347:1;32238:63:0;32365:22;;32336:10;32365:22;32320:27;;;:15;:27;;;;;;32365:22;;;;;32320:41;;32350:11;;32320:27;:41;:::i;:::-;:67;;;;32311:107;;;;-1:-1:-1;;;32311:107:0;;11902:2:1;32311:107:0;;;11884:21:1;11941:2;11921:18;;;11914:30;11980:28;11960:18;;;11953:56;12026:18;;32311:107:0;11700:350:1;32311:107:0;32446:8;;;;;;;32445:9;32437:48;;;;-1:-1:-1;;;32437:48:0;;10375:2:1;32437:48:0;;;10357:21:1;10414:2;10394:18;;;10387:30;10453:28;10433:18;;;10426:56;10499:18;;32437:48:0;10173:350:1;32437:48:0;32529:11;32513:27;;:13;;:27;;;;:::i;:::-;32500:9;:40;;32492:72;;;;-1:-1:-1;;;32492:72:0;;17397:2:1;32492:72:0;;;17379:21:1;17436:2;17416:18;;;17409:30;-1:-1:-1;;;17455:18:1;;;17448:49;17514:18;;32492:72:0;17195:343:1;32492:72:0;32604:7;:14;32576:18;32626:86;32643:11;32639:15;;:1;:15;;;32626:86;;;32668:35;32674:10;32687:15;;;;:11;:15;:::i;32668:35::-;32656:3;;;;:::i;:::-;;;;32626:86;;;-1:-1:-1;32736:10:0;32720:27;;;;:15;:27;;;;;:42;;32751:11;;32720:27;:42;;32751:11;;32720:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32771:18;;;32798;;;32203:635;32144:694;:::o;16123:326::-;16240:7;16265:13;16281:7;16289;16281:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16281:16:0;;-1:-1:-1;16330:19:0;16308:110;;;;-1:-1:-1;;;16308:110:0;;13093:2:1;16308:110:0;;;13075:21:1;13132:2;13112:18;;;13105:30;13171:34;13151:18;;;13144:62;-1:-1:-1;;;13222:18:1;;;13215:39;13271:19;;16308:110:0;12891:405:1;15615:446:0;15737:4;-1:-1:-1;;;;;15768:19:0;;15760:74;;;;-1:-1:-1;;;15760:74:0;;12682:2:1;15760:74:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:34;12740:18;;;12733:62;-1:-1:-1;;;12811:18:1;;;12804:40;12861:19;;15760:74:0;12480:406:1;15760:74:0;15881:7;:14;15847:10;;;15906:101;15923:6;15919:1;:10;15906:101;;;15962:7;15970:1;15962:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15953:19:0;;;15962:10;;15953:19;15949:46;;;15988:7;;;:::i;:::-;;;15949:46;15931:3;;;:::i;:::-;;;15906:101;;;-1:-1:-1;16048:5:0;;15615:446;-1:-1:-1;;;15615:446:0:o;3626:103::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;3691:30:::1;3718:1;3691:18;:30::i;:::-;3626:103::o:0;32981:102::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;33055:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;16685:104::-:0;16741:13;16774:7;16767:14;;;;;:::i;17708:327::-;-1:-1:-1;;;;;17843:24:0;;1779:10;17843:24;;17835:62;;;;-1:-1:-1;;;17835:62:0;;11135:2:1;17835:62:0;;;11117:21:1;11174:2;11154:18;;;11147:30;11213:27;11193:18;;;11186:55;11258:18;;17835:62:0;10933:349:1;17835:62:0;1779:10;17910:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17910:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17910:53:0;;;;;;;;;;17979:48;;8311:41:1;;;17910:42:0;;1779:10;17979:48;;8284:18:1;17979:48:0;;;;;;;17708:327;;:::o;19090:365::-;19279:41;1779:10;19312:7;19279:18;:41::i;:::-;19257:140;;;;-1:-1:-1;;;19257:140:0;;;;;;;:::i;:::-;19408:39;19422:4;19428:2;19432:7;19441:5;19408:13;:39::i;31720:124::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;31788:22:::1;:31:::0;;-1:-1:-1;;31788:31:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;31720:124::o;30863:496::-;30962:13;31003:17;31011:8;31003:7;:17::i;:::-;30987:98;;;;-1:-1:-1;;;30987:98:0;;15391:2:1;30987:98:0;;;15373:21:1;15430:2;15410:18;;;15403:30;15469:34;15449:18;;;15442:62;-1:-1:-1;;;15520:18:1;;;15513:45;15575:19;;30987:98:0;15189:411:1;30987:98:0;31102:6;;;;;;;31098:54;;31135:9;31128:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30863:496;;;:::o;31098:54::-;31168:28;31199:10;:8;:10::i;:::-;31168:41;;31254:1;31229:14;31223:28;:32;:130;;;;;;;;;;;;;;;;;31291:14;31307:19;:8;:17;:19::i;:::-;31328:9;31274:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31223:130;31216:137;30863:496;-1:-1:-1;;;30863:496:0:o;31610:106::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;31670:13:::1;:21:::0;31610:106::o;31853:164::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;31935:6:::1;31931:78;31947:8;:15;31943:1;:19;31931:78;;;32005:4;31978:11;:24;31990:8;31999:1;31990:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31978:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;31978:24:0;:31;;-1:-1:-1;;31978:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31964:3;::::1;::::0;::::1;:::i;:::-;;;;31931:78;;29376:81:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3884:201::-;3048:6;;-1:-1:-1;;;;;3048:6:0;1779:10;3195:23;3187:68;;;;-1:-1:-1;;;3187:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3973:22:0;::::1;3965:73;;;::::0;-1:-1:-1;;;3965:73:0;;9968:2:1;3965:73:0::1;::::0;::::1;9950:21:1::0;10007:2;9987:18;;;9980:30;10046:34;10026:18;;;10019:62;-1:-1:-1;;;10097:18:1;;;10090:36;10143:19;;3965:73:0::1;9766:402:1::0;3965:73:0::1;4049:28;4068:8;4049:18;:28::i;:::-;3884:201:::0;:::o;15196:355::-;15343:4;-1:-1:-1;;;;;;15385:40:0;;-1:-1:-1;;;15385:40:0;;:105;;-1:-1:-1;;;;;;;15442:48:0;;-1:-1:-1;;;15442:48:0;15385:105;:158;;;-1:-1:-1;;;;;;;;;;7365:40:0;;;15507:36;7256:157;21002:155;21101:7;:14;21067:4;;21091:24;;:58;;;;;21147:1;-1:-1:-1;;;;;21119:30:0;:7;21127;21119:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21119:16:0;:30;;21084:65;21002:155;-1:-1:-1;;21002:155:0:o;25027:174::-;25102:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;25102:29:0;-1:-1:-1;;;;;25102:29:0;;;;;;;;:24;;25156:23;25102:24;25156:14;:23::i;:::-;-1:-1:-1;;;;;25147:46:0;;;;;;;;;;;25027:174;;:::o;21324:452::-;21453:4;21497:16;21505:7;21497;:16::i;:::-;21475:110;;;;-1:-1:-1;;;21475:110:0;;11489:2:1;21475:110:0;;;11471:21:1;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:42;11670:19;;21475:110:0;11287:408:1;21475:110:0;21596:13;21612:23;21627:7;21612:14;:23::i;:::-;21596:39;;21665:5;-1:-1:-1;;;;;21654:16:0;:7;-1:-1:-1;;;;;21654:16:0;;:64;;;;21711:7;-1:-1:-1;;;;;21687:31:0;:20;21699:7;21687:11;:20::i;:::-;-1:-1:-1;;;;;21687:31:0;;21654:64;:113;;;-1:-1:-1;;;;;;18277:25:0;;;18248:4;18277:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;21735:32;21646:122;21324:452;-1:-1:-1;;;;21324:452:0:o;24356:553::-;24529:4;-1:-1:-1;;;;;24502:31:0;:23;24517:7;24502:14;:23::i;:::-;-1:-1:-1;;;;;24502:31:0;;24480:122;;;;-1:-1:-1;;;24480:122:0;;14981:2:1;24480:122:0;;;14963:21:1;15020:2;15000:18;;;14993:30;15059:34;15039:18;;;15032:62;-1:-1:-1;;;15110:18:1;;;15103:39;15159:19;;24480:122:0;14779:405:1;24480:122:0;-1:-1:-1;;;;;24621:16:0;;24613:65;;;;-1:-1:-1;;;24613:65:0;;10730:2:1;24613:65:0;;;10712:21:1;10769:2;10749:18;;;10742:30;10808:34;10788:18;;;10781:62;-1:-1:-1;;;10859:18:1;;;10852:34;10903:19;;24613:65:0;10528:400:1;24613:65:0;24795:29;24812:1;24816:7;24795:8;:29::i;:::-;24854:2;24835:7;24843;24835:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;24835:21:0;-1:-1:-1;;;;;24835:21:0;;;;;;24874:27;;24893:7;;24874:27;;;;;;;;;;24835:16;24874:27;24356:553;;;:::o;33410:154::-;33491:7;:16;;;;;;;-1:-1:-1;33491:16:0;;;;;;;-1:-1:-1;;;;;;33491:16:0;-1:-1:-1;;;;;33491:16:0;;;;;;;;33523:33;;33548:7;;-1:-1:-1;33523:33:0;;-1:-1:-1;;33523:33:0;33410:154;;:::o;4245:191::-;4338:6;;;-1:-1:-1;;;;;4355:17:0;;;-1:-1:-1;;;;;;4355:17:0;;;;;;;4388:40;;4338:6;;;4355:17;4338:6;;4388:40;;4319:16;;4388:40;4308:128;4245:191;:::o;20337:352::-;20494:28;20504:4;20510:2;20514:7;20494:9;:28::i;:::-;20555:48;20578:4;20584:2;20588:7;20597:5;20555:22;:48::i;:::-;20533:148;;;;-1:-1:-1;;;20533:148:0;;;;;;;:::i;33570:88::-;33614:13;33643:9;33636:16;;;;;:::i;288:723::-;344:13;565:10;561:53;;-1:-1:-1;;592:10:0;;;;;;;;;;;;-1:-1:-1;;;592:10:0;;;;;288:723::o;561:53::-;639:5;624:12;680:78;687:9;;680:78;;713:8;;;;:::i;:::-;;-1:-1:-1;736:10:0;;-1:-1:-1;744:2:0;736:10;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;790:17:0;;768:39;;818:154;825:10;;818:154;;852:11;862:1;852:11;;:::i;:::-;;-1:-1:-1;921:10:0;929:2;921:5;:10;:::i;:::-;908:24;;:2;:24;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;878:56:0;;;;;;;;-1:-1:-1;949:11:0;958:2;949:11;;:::i;:::-;;;818:154;;25766:980;25921:4;-1:-1:-1;;;;;25942:13:0;;14396:20;14444:8;25938:801;;25995:175;;-1:-1:-1;;;25995:175:0;;-1:-1:-1;;;;;25995:36:0;;;;;:175;;1779:10;;26089:4;;26116:7;;26146:5;;25995:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25995:175:0;;;;;;;;-1:-1:-1;;25995:175:0;;;;;;;;;;;;:::i;:::-;;;25974:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26353:13:0;;26349:320;;26396:108;;-1:-1:-1;;;26396:108:0;;;;;;;:::i;26349:320::-;26619:6;26613:13;26604:6;26600:2;26596:15;26589:38;25974:710;-1:-1:-1;;;;;;26234:51:0;-1:-1:-1;;;26234:51:0;;-1:-1:-1;26227:58:0;;25938:801;-1:-1:-1;26723:4:0;25766:980;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:159::-;670:20;;730:6;719:18;;709:29;;699:57;;752:1;749;742:12;767:186;826:6;879:2;867:9;858:7;854:23;850:32;847:52;;;895:1;892;885:12;847:52;918:29;937:9;918:29;:::i;958:260::-;1026:6;1034;1087:2;1075:9;1066:7;1062:23;1058:32;1055:52;;;1103:1;1100;1093:12;1055:52;1126:29;1145:9;1126:29;:::i;:::-;1116:39;;1174:38;1208:2;1197:9;1193:18;1174:38;:::i;:::-;1164:48;;958:260;;;;;:::o;1223:328::-;1300:6;1308;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:52;;;1385:1;1382;1375:12;1337:52;1408:29;1427:9;1408:29;:::i;:::-;1398:39;;1456:38;1490:2;1479:9;1475:18;1456:38;:::i;:::-;1446:48;;1541:2;1530:9;1526:18;1513:32;1503:42;;1223:328;;;;;:::o;1556:666::-;1651:6;1659;1667;1675;1728:3;1716:9;1707:7;1703:23;1699:33;1696:53;;;1745:1;1742;1735:12;1696:53;1768:29;1787:9;1768:29;:::i;:::-;1758:39;;1816:38;1850:2;1839:9;1835:18;1816:38;:::i;:::-;1806:48;;1901:2;1890:9;1886:18;1873:32;1863:42;;1956:2;1945:9;1941:18;1928:32;1983:18;1975:6;1972:30;1969:50;;;2015:1;2012;2005:12;1969:50;2038:22;;2091:4;2083:13;;2079:27;-1:-1:-1;2069:55:1;;2120:1;2117;2110:12;2069:55;2143:73;2208:7;2203:2;2190:16;2185:2;2181;2177:11;2143:73;:::i;:::-;2133:83;;;1556:666;;;;;;;:::o;2227:347::-;2292:6;2300;2353:2;2341:9;2332:7;2328:23;2324:32;2321:52;;;2369:1;2366;2359:12;2321:52;2392:29;2411:9;2392:29;:::i;:::-;2382:39;;2471:2;2460:9;2456:18;2443:32;2518:5;2511:13;2504:21;2497:5;2494:32;2484:60;;2540:1;2537;2530:12;2484:60;2563:5;2553:15;;;2227:347;;;;;:::o;2579:254::-;2647:6;2655;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2747:29;2766:9;2747:29;:::i;:::-;2737:39;2823:2;2808:18;;;;2795:32;;-1:-1:-1;;;2579:254:1:o;2838:963::-;2922:6;2953:2;2996;2984:9;2975:7;2971:23;2967:32;2964:52;;;3012:1;3009;3002:12;2964:52;3052:9;3039:23;3081:18;3122:2;3114:6;3111:14;3108:34;;;3138:1;3135;3128:12;3108:34;3176:6;3165:9;3161:22;3151:32;;3221:7;3214:4;3210:2;3206:13;3202:27;3192:55;;3243:1;3240;3233:12;3192:55;3279:2;3266:16;3301:2;3297;3294:10;3291:36;;;3307:18;;:::i;:::-;3353:2;3350:1;3346:10;3336:20;;3376:28;3400:2;3396;3392:11;3376:28;:::i;:::-;3438:15;;;3469:12;;;;3501:11;;;3531;;;3527:20;;3524:33;-1:-1:-1;3521:53:1;;;3570:1;3567;3560:12;3521:53;3592:1;3583:10;;3602:169;3616:2;3613:1;3610:9;3602:169;;;3673:23;3692:3;3673:23;:::i;:::-;3661:36;;3634:1;3627:9;;;;;3717:12;;;;3749;;3602:169;;;-1:-1:-1;3790:5:1;2838:963;-1:-1:-1;;;;;;;;2838:963:1:o;3806:245::-;3864:6;3917:2;3905:9;3896:7;3892:23;3888:32;3885:52;;;3933:1;3930;3923:12;3885:52;3972:9;3959:23;3991:30;4015:5;3991:30;:::i;4056:249::-;4125:6;4178:2;4166:9;4157:7;4153:23;4149:32;4146:52;;;4194:1;4191;4184:12;4146:52;4226:9;4220:16;4245:30;4269:5;4245:30;:::i;4310:450::-;4379:6;4432:2;4420:9;4411:7;4407:23;4403:32;4400:52;;;4448:1;4445;4438:12;4400:52;4488:9;4475:23;4521:18;4513:6;4510:30;4507:50;;;4553:1;4550;4543:12;4507:50;4576:22;;4629:4;4621:13;;4617:27;-1:-1:-1;4607:55:1;;4658:1;4655;4648:12;4607:55;4681:73;4746:7;4741:2;4728:16;4723:2;4719;4715:11;4681:73;:::i;4765:184::-;4823:6;4876:2;4864:9;4855:7;4851:23;4847:32;4844:52;;;4892:1;4889;4882:12;4844:52;4915:28;4933:9;4915:28;:::i;4954:258::-;5021:6;5029;5082:2;5070:9;5061:7;5057:23;5053:32;5050:52;;;5098:1;5095;5088:12;5050:52;5121:28;5139:9;5121:28;:::i;5217:180::-;5276:6;5329:2;5317:9;5308:7;5304:23;5300:32;5297:52;;;5345:1;5342;5335:12;5297:52;-1:-1:-1;5368:23:1;;5217:180;-1:-1:-1;5217:180:1:o;5402:269::-;5459:6;5512:2;5500:9;5491:7;5487:23;5483:32;5480:52;;;5528:1;5525;5518:12;5480:52;5567:9;5554:23;5617:4;5610:5;5606:16;5599:5;5596:27;5586:55;;5637:1;5634;5627:12;5676:257;5717:3;5755:5;5749:12;5782:6;5777:3;5770:19;5798:63;5854:6;5847:4;5842:3;5838:14;5831:4;5824:5;5820:16;5798:63;:::i;:::-;5915:2;5894:15;-1:-1:-1;;5890:29:1;5881:39;;;;5922:4;5877:50;;5676:257;-1:-1:-1;;5676:257:1:o;5938:1527::-;6162:3;6200:6;6194:13;6226:4;6239:51;6283:6;6278:3;6273:2;6265:6;6261:15;6239:51;:::i;:::-;6353:13;;6312:16;;;;6375:55;6353:13;6312:16;6397:15;;;6375:55;:::i;:::-;6519:13;;6452:20;;;6492:1;;6579;6601:18;;;;6654;;;;6681:93;;6759:4;6749:8;6745:19;6733:31;;6681:93;6822:2;6812:8;6809:16;6789:18;6786:40;6783:167;;;-1:-1:-1;;;6849:33:1;;6905:4;6902:1;6895:15;6935:4;6856:3;6923:17;6783:167;6966:18;6993:110;;;;7117:1;7112:328;;;;6959:481;;6993:110;-1:-1:-1;;7028:24:1;;7014:39;;7073:20;;;;-1:-1:-1;6993:110:1;;7112:328;18460:1;18453:14;;;18497:4;18484:18;;7207:1;7221:169;7235:8;7232:1;7229:15;7221:169;;;7317:14;;7302:13;;;7295:37;7360:16;;;;7252:10;;7221:169;;;7225:3;;7421:8;7414:5;7410:20;7403:27;;6959:481;-1:-1:-1;7456:3:1;;5938:1527;-1:-1:-1;;;;;;;;;;;5938:1527:1:o;7678:488::-;-1:-1:-1;;;;;7947:15:1;;;7929:34;;7999:15;;7994:2;7979:18;;7972:43;8046:2;8031:18;;8024:34;;;8094:3;8089:2;8074:18;;8067:31;;;7872:4;;8115:45;;8140:19;;8132:6;8115:45;:::i;:::-;8107:53;7678:488;-1:-1:-1;;;;;;7678:488:1:o;8363:219::-;8512:2;8501:9;8494:21;8475:4;8532:44;8572:2;8561:9;8557:18;8549:6;8532:44;:::i;8935:407::-;9137:2;9119:21;;;9176:2;9156:18;;;9149:30;9215:34;9210:2;9195:18;;9188:62;-1:-1:-1;;;9281:2:1;9266:18;;9259:41;9332:3;9317:19;;8935:407::o;9347:414::-;9549:2;9531:21;;;9588:2;9568:18;;;9561:30;9627:34;9622:2;9607:18;;9600:62;-1:-1:-1;;;9693:2:1;9678:18;;9671:48;9751:3;9736:19;;9347:414::o;14066:356::-;14268:2;14250:21;;;14287:18;;;14280:30;14346:34;14341:2;14326:18;;14319:62;14413:2;14398:18;;14066:356::o;16007:413::-;16209:2;16191:21;;;16248:2;16228:18;;;16221:30;16287:34;16282:2;16267:18;;16260:62;-1:-1:-1;;;16353:2:1;16338:18;;16331:47;16410:3;16395:19;;16007:413::o;18107:275::-;18178:2;18172:9;18243:2;18224:13;;-1:-1:-1;;18220:27:1;18208:40;;18278:18;18263:34;;18299:22;;;18260:62;18257:88;;;18325:18;;:::i;:::-;18361:2;18354:22;18107:275;;-1:-1:-1;18107:275:1:o;18513:224::-;18552:3;18580:6;18613:2;18610:1;18606:10;18643:2;18640:1;18636:10;18674:3;18670:2;18666:12;18661:3;18658:21;18655:47;;;18682:18;;:::i;:::-;18718:13;;18513:224;-1:-1:-1;;;;18513:224:1:o;18742:128::-;18782:3;18813:1;18809:6;18806:1;18803:13;18800:39;;;18819:18;;:::i;:::-;-1:-1:-1;18855:9:1;;18742:128::o;18875:204::-;18913:3;18949:4;18946:1;18942:12;18981:4;18978:1;18974:12;19016:3;19010:4;19006:14;19001:3;18998:23;18995:49;;;19024:18;;:::i;:::-;19060:13;;18875:204;-1:-1:-1;;;18875:204:1:o;19084:120::-;19124:1;19150;19140:35;;19155:18;;:::i;:::-;-1:-1:-1;19189:9:1;;19084:120::o;19209:168::-;19249:7;19315:1;19311;19307:6;19303:14;19300:1;19297:21;19292:1;19285:9;19278:17;19274:45;19271:71;;;19322:18;;:::i;:::-;-1:-1:-1;19362:9:1;;19209:168::o;19382:125::-;19422:4;19450:1;19447;19444:8;19441:34;;;19455:18;;:::i;:::-;-1:-1:-1;19492:9:1;;19382:125::o;19512:258::-;19584:1;19594:113;19608:6;19605:1;19602:13;19594:113;;;19684:11;;;19678:18;19665:11;;;19658:39;19630:2;19623:10;19594:113;;;19725:6;19722:1;19719:13;19716:48;;;-1:-1:-1;;19760:1:1;19742:16;;19735:27;19512:258::o;19775:380::-;19854:1;19850:12;;;;19897;;;19918:61;;19972:4;19964:6;19960:17;19950:27;;19918:61;20025:2;20017:6;20014:14;19994:18;19991:38;19988:161;;;20071:10;20066:3;20062:20;20059:1;20052:31;20106:4;20103:1;20096:15;20134:4;20131:1;20124:15;19988:161;;19775:380;;;:::o;20160:197::-;20198:3;20226:6;20267:2;20260:5;20256:14;20294:2;20285:7;20282:15;20279:41;;;20300:18;;:::i;:::-;20349:1;20336:15;;20160:197;-1:-1:-1;;;20160:197:1:o;20362:135::-;20401:3;-1:-1:-1;;20422:17:1;;20419:43;;;20442:18;;:::i;:::-;-1:-1:-1;20489:1:1;20478:13;;20362:135::o;20502:175::-;20539:3;20583:4;20576:5;20572:16;20612:4;20603:7;20600:17;20597:43;;;20620:18;;:::i;:::-;20669:1;20656:15;;20502:175;-1:-1:-1;;20502:175:1:o;20682:112::-;20714:1;20740;20730:35;;20745:18;;:::i;:::-;-1:-1:-1;20779:9:1;;20682:112::o;20799:127::-;20860:10;20855:3;20851:20;20848:1;20841:31;20891:4;20888:1;20881:15;20915:4;20912:1;20905:15;20931:127;20992:10;20987:3;20983:20;20980:1;20973:31;21023:4;21020:1;21013:15;21047:4;21044:1;21037:15;21063:127;21124:10;21119:3;21115:20;21112:1;21105:31;21155:4;21152:1;21145:15;21179:4;21176:1;21169:15;21195:127;21256:10;21251:3;21247:20;21244:1;21237:31;21287:4;21284:1;21277:15;21311:4;21308:1;21301:15;21327:131;-1:-1:-1;;;;;;21401:32:1;;21391:43;;21381:71;;21448:1;21445;21438:12
Swarm Source
ipfs://f5ce71fd68c6d2d96900353c137e3c4054dec0b9b64e329264a4c2ad4695ef42
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.