ERC-721
Overview
Max Total Supply
5,000 bp
Holders
2,289
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 bpLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BabyPosers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-24 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // _ _ // | |__ __ _| |__ _ _ _ __ ___ ___ ___ _ __ ___ // | '_ \ / _` | '_ \| | | | | '_ \ / _ \/ __|/ _ \ '__/ __| // | |_) | (_| | |_) | |_| | | |_) | (_) \__ \ __/ | \__ \ // |_.__/ \__,_|_.__/ \__, | | .__/ \___/|___/\___|_| |___/ // |___/ |_| // // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.6.0) (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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: goblintownai-contract.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } //newerc.sol pragma solidity ^0.8.0; contract BabyPosers is ERC721A, Ownable, Pausable, ReentrancyGuard { using Strings for uint256; string public baseURI; uint256 public cost = 0.002 ether; uint256 public maxSupply = 5000; uint256 public maxFree = 5000; uint256 public maxperAddressFreeLimit = 1; uint256 public maxperAddressPublicMint = 10; uint256 public maxperWallet = 20; bool public revealed = false; string public hiddenMetadataUri; mapping(address => uint256) public addressFreeMintedBalance; constructor() ERC721A("Baby Posers", "bp") { setBaseURI(""); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mintFree(uint256 _mintAmount) public payable nonReentrant{ uint256 s = totalSupply(); uint256 addressFreeMintedCount = addressFreeMintedBalance[msg.sender]; require(addressFreeMintedCount + _mintAmount <= maxperAddressFreeLimit, "max NFT per address exceeded!"); require(balanceOf(msg.sender) <= 20, "Max per wallet reached!"); require(balanceOf(msg.sender) + _mintAmount <= 20, "Max per wallet reached!"); require(_mintAmount > 0, "Cant mint 0" ); require(s + _mintAmount <= maxFree, "Cant go over supply!" ); for (uint256 i = 0; i < _mintAmount; ++i) { addressFreeMintedBalance[msg.sender]++; } _safeMint(msg.sender, _mintAmount); delete s; delete addressFreeMintedCount; } function mint(uint256 _mintAmount) public payable nonReentrant { uint256 s = totalSupply(); require(_mintAmount > 0, "Cant mint 0"); require(_mintAmount <= maxperAddressPublicMint, "Cant mint more then maxmint" ); require(balanceOf(msg.sender) <= 20, "Max per wallet reached!"); require(balanceOf(msg.sender) + _mintAmount <= 20, "Max per wallet reached!"); require(s + _mintAmount <= maxSupply, "Cant go over supply"); require(msg.value >= cost * _mintAmount); _safeMint(msg.sender, _mintAmount); delete s; } function mintTeam(uint256[] calldata quantity, address[] calldata recipient) external onlyOwner { require( quantity.length == recipient.length, "Provide quantities and recipients" ); uint256 totalQuantity = 0; uint256 s = totalSupply(); for (uint256 i = 0; i < quantity.length; ++i) { totalQuantity += quantity[i]; } require(s + totalQuantity <= maxSupply, "Too many"); delete totalQuantity; for (uint256 i = 0; i < recipient.length; ++i) { _safeMint(recipient[i], quantity[i]); } delete s; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json")) : ""; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxSupply(uint256 _newMaxSupply) public onlyOwner { require(_newMaxSupply <= maxSupply, "Cannot increase max supply"); maxSupply = _newMaxSupply; } function setmaxFreeSupply(uint256 _newMaxFreeSupply) public onlyOwner { maxFree = _newMaxFreeSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setMaxperAddressPublicMint(uint256 _amount) public onlyOwner { maxperAddressPublicMint = _amount; } function setMaxperAddressFreeMint(uint256 _amount) public onlyOwner{ maxperAddressFreeLimit = _amount; } function withdraw() public payable onlyOwner { (bool os, ) = payable(msg.sender).call{value: address(this).balance}(''); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"hiddenMetadataUri","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":[],"name":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressFreeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintFree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"mintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","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":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFreeSupply","type":"uint256"}],"name":"setmaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266071afd498d0000600a908155611388600b819055600c556001600d55600e556014600f556010805460ff191690553480156200004057600080fd5b50604080518082018252600b81526a4261627920506f7365727360a81b602080830191825283518085019094526002845261062760f41b9084015281519192916200008e91600191620001c1565b508051620000a4906002906020840190620001c1565b505050620000c1620000bb620000f360201b60201c565b620000f7565b6007805460ff60a01b191690556001600855604080516020810190915260008152620000ed9062000149565b620002a4565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6007546001600160a01b03163314620001a85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001bd906009906020840190620001c1565b5050565b828054620001cf9062000267565b90600052602060002090601f016020900481019282620001f357600085556200023e565b82601f106200020e57805160ff19168380011785556200023e565b828001600101855582156200023e579182015b828111156200023e57825182559160200191906001019062000221565b506200024c92915062000250565b5090565b5b808211156200024c576000815560010162000251565b600181811c908216806200027c57607f821691505b602082108114156200029e57634e487b7160e01b600052602260045260246000fd5b50919050565b6127a580620002b46000396000f3fe6080604052600436106102515760003560e01c80636352211e11610139578063a45ba8e7116100b6578063c87b56dd1161007a578063c87b56dd1461067e578063d5abeb011461069e578063dc4e66b5146106b4578063e0a80853146106d4578063e985e9c5146106f4578063f2fde38b1461073d57600080fd5b8063a45ba8e7146105f3578063b88d4fde14610608578063baac9c4314610628578063bde12d731461063e578063c0bc3db31461065e57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461057a57806395d89b4114610598578063a0712d68146105ad578063a22cb465146105c0578063a4146733146105e057600080fd5b80636352211e146104e35780636c0360eb1461050357806370a0823114610518578063715018a6146105385780637c6b172d1461054d57600080fd5b806334c8fd75116101d25780634f6ccce7116101965780634f6ccce7146104345780634fdd43cb14610454578063518302271461047457806355f804b31461048e57806356569a1d146104ae5780635c975abb146104c457600080fd5b806334c8fd75146103c05780633ccfd60b146103d657806342842e0e146103de57806344a0d68a146103fe578063485a68a31461041e57600080fd5b806313faede61161021957806313faede61461032757806318160ddd1461034b578063228025e81461036057806323b872dd146103805780632f745c59146103a057600080fd5b806301ffc9a714610256578063022d67dd1461028b57806306fdde03146102ad578063081812fc146102cf578063095ea7b314610307575b600080fd5b34801561026257600080fd5b506102766102713660046123f3565b61075d565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a6366004612476565b6107ca565b005b3480156102b957600080fd5b506102c2610802565b6040516102829190612537565b3480156102db57600080fd5b506102ef6102ea366004612476565b610894565b6040516001600160a01b039091168152602001610282565b34801561031357600080fd5b506102ab610322366004612342565b61091f565b34801561033357600080fd5b5061033d600a5481565b604051908152602001610282565b34801561035757600080fd5b5060005461033d565b34801561036c57600080fd5b506102ab61037b366004612476565b610a37565b34801561038c57600080fd5b506102ab61039b366004612260565b610ab8565b3480156103ac57600080fd5b5061033d6103bb366004612342565b610ac3565b3480156103cc57600080fd5b5061033d600e5481565b6102ab610c20565b3480156103ea57600080fd5b506102ab6103f9366004612260565b610ca2565b34801561040a57600080fd5b506102ab610419366004612476565b610cbd565b34801561042a57600080fd5b5061033d600c5481565b34801561044057600080fd5b5061033d61044f366004612476565b610cec565b34801561046057600080fd5b506102ab61046f36600461242d565b610d4e565b34801561048057600080fd5b506010546102769060ff1681565b34801561049a57600080fd5b506102ab6104a936600461242d565b610d8f565b3480156104ba57600080fd5b5061033d600d5481565b3480156104d057600080fd5b50600754600160a01b900460ff16610276565b3480156104ef57600080fd5b506102ef6104fe366004612476565b610dcc565b34801561050f57600080fd5b506102c2610dde565b34801561052457600080fd5b5061033d610533366004612212565b610e6c565b34801561054457600080fd5b506102ab610efd565b34801561055957600080fd5b5061033d610568366004612212565b60126020526000908152604090205481565b34801561058657600080fd5b506007546001600160a01b03166102ef565b3480156105a457600080fd5b506102c2610f33565b6102ab6105bb366004612476565b610f42565b3480156105cc57600080fd5b506102ab6105db366004612318565b611105565b6102ab6105ee366004612476565b6111ca565b3480156105ff57600080fd5b506102c26113cd565b34801561061457600080fd5b506102ab61062336600461229c565b6113da565b34801561063457600080fd5b5061033d600f5481565b34801561064a57600080fd5b506102ab610659366004612476565b611413565b34801561066a57600080fd5b506102ab61067936600461236c565b611442565b34801561068a57600080fd5b506102c2610699366004612476565b6115cb565b3480156106aa57600080fd5b5061033d600b5481565b3480156106c057600080fd5b506102ab6106cf366004612476565b611726565b3480156106e057600080fd5b506102ab6106ef3660046123d8565b611755565b34801561070057600080fd5b5061027661070f36600461222d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561074957600080fd5b506102ab610758366004612212565b611792565b60006001600160e01b031982166380ac58cd60e01b148061078e57506001600160e01b03198216635b5e139f60e01b145b806107a957506001600160e01b0319821663780e9d6360e01b145b806107c457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146107fd5760405162461bcd60e51b81526004016107f490612581565b60405180910390fd5b600e55565b60606001805461081190612697565b80601f016020809104026020016040519081016040528092919081815260200182805461083d90612697565b801561088a5780601f1061085f5761010080835404028352916020019161088a565b820191906000526020600020905b81548152906001019060200180831161086d57829003601f168201915b5050505050905090565b60006108a1826000541190565b6109035760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016107f4565b506000908152600560205260409020546001600160a01b031690565b600061092a82610dcc565b9050806001600160a01b0316836001600160a01b031614156109995760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016107f4565b336001600160a01b03821614806109b557506109b5813361070f565b610a275760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016107f4565b610a3283838361182a565b505050565b6007546001600160a01b03163314610a615760405162461bcd60e51b81526004016107f490612581565b600b54811115610ab35760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420696e637265617365206d617820737570706c7900000000000060448201526064016107f4565b600b55565b610a32838383611886565b6000610ace83610e6c565b8210610b275760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016107f4565b600080549080805b83811015610bc0576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610b8257805192505b876001600160a01b0316836001600160a01b03161415610bb75786841415610bb0575093506107c492505050565b6001909301925b50600101610b2f565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016107f4565b6007546001600160a01b03163314610c4a5760405162461bcd60e51b81526004016107f490612581565b604051600090339047908381818185875af1925050503d8060008114610c8c576040519150601f19603f3d011682016040523d82523d6000602084013e610c91565b606091505b5050905080610c9f57600080fd5b50565b610a32838383604051806020016040528060008152506113da565b6007546001600160a01b03163314610ce75760405162461bcd60e51b81526004016107f490612581565b600a55565b600080548210610d4a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016107f4565b5090565b6007546001600160a01b03163314610d785760405162461bcd60e51b81526004016107f490612581565b8051610d8b906011906020840190612094565b5050565b6007546001600160a01b03163314610db95760405162461bcd60e51b81526004016107f490612581565b8051610d8b906009906020840190612094565b6000610dd782611b6b565b5192915050565b60098054610deb90612697565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1790612697565b8015610e645780601f10610e3957610100808354040283529160200191610e64565b820191906000526020600020905b815481529060010190602001808311610e4757829003601f168201915b505050505081565b60006001600160a01b038216610ed85760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016107f4565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b03163314610f275760405162461bcd60e51b81526004016107f490612581565b610f316000611c42565b565b60606002805461081190612697565b60026008541415610f955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107f4565b600260085560005481610fd85760405162461bcd60e51b815260206004820152600b60248201526a043616e74206d696e7420360ac1b60448201526064016107f4565b600e5482111561102a5760405162461bcd60e51b815260206004820152601b60248201527f43616e74206d696e74206d6f7265207468656e206d61786d696e74000000000060448201526064016107f4565b601461103533610e6c565b11156110535760405162461bcd60e51b81526004016107f49061254a565b60148261105f33610e6c565b6110699190612609565b11156110875760405162461bcd60e51b81526004016107f49061254a565b600b546110948383612609565b11156110d85760405162461bcd60e51b815260206004820152601360248201527243616e7420676f206f76657220737570706c7960681b60448201526064016107f4565b81600a546110e69190612635565b3410156110f257600080fd5b6110fc3383611c94565b50506001600855565b6001600160a01b03821633141561115e5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016107f4565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600854141561121d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107f4565b6002600855600080543382526012602052604090912054600d546112418483612609565b111561128f5760405162461bcd60e51b815260206004820152601d60248201527f6d6178204e46542070657220616464726573732065786365656465642100000060448201526064016107f4565b601461129a33610e6c565b11156112b85760405162461bcd60e51b81526004016107f49061254a565b6014836112c433610e6c565b6112ce9190612609565b11156112ec5760405162461bcd60e51b81526004016107f49061254a565b6000831161132a5760405162461bcd60e51b815260206004820152600b60248201526a043616e74206d696e7420360ac1b60448201526064016107f4565b600c546113378484612609565b111561137c5760405162461bcd60e51b815260206004820152601460248201527343616e7420676f206f76657220737570706c792160601b60448201526064016107f4565b60005b838110156113b8573360009081526012602052604081208054916113a2836126d2565b9190505550806113b1906126d2565b905061137f565b506113c33384611c94565b5050600160085550565b60118054610deb90612697565b6113e5848484611886565b6113f184848484611cae565b61140d5760405162461bcd60e51b81526004016107f4906125b6565b50505050565b6007546001600160a01b0316331461143d5760405162461bcd60e51b81526004016107f490612581565b600c55565b6007546001600160a01b0316331461146c5760405162461bcd60e51b81526004016107f490612581565b8281146114c55760405162461bcd60e51b815260206004820152602160248201527f50726f76696465207175616e74697469657320616e6420726563697069656e746044820152607360f81b60648201526084016107f4565b6000806114d160005490565b905060005b85811015611514578686828181106114f0576114f061272d565b90506020020135836115029190612609565b925061150d816126d2565b90506114d6565b50600b546115228383612609565b111561155b5760405162461bcd60e51b8152602060048201526008602482015267546f6f206d616e7960c01b60448201526064016107f4565b6000915060005b838110156115c2576115b285858381811061157f5761157f61272d565b90506020020160208101906115949190612212565b8888848181106115a6576115a661272d565b90506020020135611c94565b6115bb816126d2565b9050611562565b50505050505050565b60606115d8826000541190565b61162e5760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b60648201526084016107f4565b60105460ff166116ca576011805461164590612697565b80601f016020809104026020016040519081016040528092919081815260200182805461167190612697565b80156116be5780601f10611693576101008083540402835291602001916116be565b820191906000526020600020905b8154815290600101906020018083116116a157829003601f168201915b50505050509050919050565b60006116d4611dbc565b905060008151116116f4576040518060200160405280600081525061171f565b806116fe84611dcb565b60405160200161170f9291906124bb565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146117505760405162461bcd60e51b81526004016107f490612581565b600d55565b6007546001600160a01b0316331461177f5760405162461bcd60e51b81526004016107f490612581565b6010805460ff1916911515919091179055565b6007546001600160a01b031633146117bc5760405162461bcd60e51b81526004016107f490612581565b6001600160a01b0381166118215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f4565b610c9f81611c42565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061189182611b6b565b80519091506000906001600160a01b0316336001600160a01b031614806118c85750336118bd84610894565b6001600160a01b0316145b806118da575081516118da903361070f565b9050806119445760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107f4565b846001600160a01b031682600001516001600160a01b0316146119b85760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016107f4565b6001600160a01b038416611a1c5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016107f4565b611a2c600084846000015161182a565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b4267ffffffffffffffff1602179055908601808352912054909116611b2157611ad4816000541190565b15611b21578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6040805180820190915260008082526020820152611b8a826000541190565b611be95760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016107f4565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611c38579392505050565b5060001901611beb565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d8b828260405180602001604052806000815250611ec9565b60006001600160a01b0384163b15611db057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cf29033908990889088906004016124fa565b602060405180830381600087803b158015611d0c57600080fd5b505af1925050508015611d3c575060408051601f3d908101601f19168201909252611d3991810190612410565b60015b611d96573d808015611d6a576040519150601f19603f3d011682016040523d82523d6000602084013e611d6f565b606091505b508051611d8e5760405162461bcd60e51b81526004016107f4906125b6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611db4565b5060015b949350505050565b60606009805461081190612697565b606081611def5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e195780611e03816126d2565b9150611e129050600a83612621565b9150611df3565b60008167ffffffffffffffff811115611e3457611e34612743565b6040519080825280601f01601f191660200182016040528015611e5e576020820181803683370190505b5090505b8415611db457611e73600183612654565b9150611e80600a866126ed565b611e8b906030612609565b60f81b818381518110611ea057611ea061272d565b60200101906001600160f81b031916908160001a905350611ec2600a86612621565b9450611e62565b610a3283838360016000546001600160a01b038516611f345760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107f4565b83611f925760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016107f4565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b4267ffffffffffffffff16021790915581905b8581101561208b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4831561207f576120636000888488611cae565b61207f5760405162461bcd60e51b81526004016107f4906125b6565b60019182019101612010565b50600055611b64565b8280546120a090612697565b90600052602060002090601f0160209004810192826120c25760008555612108565b82601f106120db57805160ff1916838001178555612108565b82800160010185558215612108579182015b828111156121085782518255916020019190600101906120ed565b50610d4a9291505b80821115610d4a5760008155600101612110565b600067ffffffffffffffff8084111561213f5761213f612743565b604051601f8501601f19908116603f0116810190828211818310171561216757612167612743565b8160405280935085815286868601111561218057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121b157600080fd5b919050565b60008083601f8401126121c857600080fd5b50813567ffffffffffffffff8111156121e057600080fd5b6020830191508360208260051b85010111156121fb57600080fd5b9250929050565b803580151581146121b157600080fd5b60006020828403121561222457600080fd5b61171f8261219a565b6000806040838503121561224057600080fd5b6122498361219a565b91506122576020840161219a565b90509250929050565b60008060006060848603121561227557600080fd5b61227e8461219a565b925061228c6020850161219a565b9150604084013590509250925092565b600080600080608085870312156122b257600080fd5b6122bb8561219a565b93506122c96020860161219a565b925060408501359150606085013567ffffffffffffffff8111156122ec57600080fd5b8501601f810187136122fd57600080fd5b61230c87823560208401612124565b91505092959194509250565b6000806040838503121561232b57600080fd5b6123348361219a565b915061225760208401612202565b6000806040838503121561235557600080fd5b61235e8361219a565b946020939093013593505050565b6000806000806040858703121561238257600080fd5b843567ffffffffffffffff8082111561239a57600080fd5b6123a6888389016121b6565b909650945060208701359150808211156123bf57600080fd5b506123cc878288016121b6565b95989497509550505050565b6000602082840312156123ea57600080fd5b61171f82612202565b60006020828403121561240557600080fd5b813561171f81612759565b60006020828403121561242257600080fd5b815161171f81612759565b60006020828403121561243f57600080fd5b813567ffffffffffffffff81111561245657600080fd5b8201601f8101841361246757600080fd5b611db484823560208401612124565b60006020828403121561248857600080fd5b5035919050565b600081518084526124a781602086016020860161266b565b601f01601f19169290920160200192915050565b600083516124cd81846020880161266b565b8351908301906124e181836020880161266b565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061252d9083018461248f565b9695505050505050565b60208152600061171f602083018461248f565b60208082526017908201527f4d6178207065722077616c6c6574207265616368656421000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000821982111561261c5761261c612701565b500190565b60008261263057612630612717565b500490565b600081600019048311821515161561264f5761264f612701565b500290565b60008282101561266657612666612701565b500390565b60005b8381101561268657818101518382015260200161266e565b8381111561140d5750506000910152565b600181811c908216806126ab57607f821691505b602082108114156126cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126e6576126e6612701565b5060010190565b6000826126fc576126fc612717565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c9f57600080fdfea264697066735822122026150cf4889d0ab1d0c947f3757b934da76d6b5e32be7230589428303e82074764736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102515760003560e01c80636352211e11610139578063a45ba8e7116100b6578063c87b56dd1161007a578063c87b56dd1461067e578063d5abeb011461069e578063dc4e66b5146106b4578063e0a80853146106d4578063e985e9c5146106f4578063f2fde38b1461073d57600080fd5b8063a45ba8e7146105f3578063b88d4fde14610608578063baac9c4314610628578063bde12d731461063e578063c0bc3db31461065e57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461057a57806395d89b4114610598578063a0712d68146105ad578063a22cb465146105c0578063a4146733146105e057600080fd5b80636352211e146104e35780636c0360eb1461050357806370a0823114610518578063715018a6146105385780637c6b172d1461054d57600080fd5b806334c8fd75116101d25780634f6ccce7116101965780634f6ccce7146104345780634fdd43cb14610454578063518302271461047457806355f804b31461048e57806356569a1d146104ae5780635c975abb146104c457600080fd5b806334c8fd75146103c05780633ccfd60b146103d657806342842e0e146103de57806344a0d68a146103fe578063485a68a31461041e57600080fd5b806313faede61161021957806313faede61461032757806318160ddd1461034b578063228025e81461036057806323b872dd146103805780632f745c59146103a057600080fd5b806301ffc9a714610256578063022d67dd1461028b57806306fdde03146102ad578063081812fc146102cf578063095ea7b314610307575b600080fd5b34801561026257600080fd5b506102766102713660046123f3565b61075d565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a6366004612476565b6107ca565b005b3480156102b957600080fd5b506102c2610802565b6040516102829190612537565b3480156102db57600080fd5b506102ef6102ea366004612476565b610894565b6040516001600160a01b039091168152602001610282565b34801561031357600080fd5b506102ab610322366004612342565b61091f565b34801561033357600080fd5b5061033d600a5481565b604051908152602001610282565b34801561035757600080fd5b5060005461033d565b34801561036c57600080fd5b506102ab61037b366004612476565b610a37565b34801561038c57600080fd5b506102ab61039b366004612260565b610ab8565b3480156103ac57600080fd5b5061033d6103bb366004612342565b610ac3565b3480156103cc57600080fd5b5061033d600e5481565b6102ab610c20565b3480156103ea57600080fd5b506102ab6103f9366004612260565b610ca2565b34801561040a57600080fd5b506102ab610419366004612476565b610cbd565b34801561042a57600080fd5b5061033d600c5481565b34801561044057600080fd5b5061033d61044f366004612476565b610cec565b34801561046057600080fd5b506102ab61046f36600461242d565b610d4e565b34801561048057600080fd5b506010546102769060ff1681565b34801561049a57600080fd5b506102ab6104a936600461242d565b610d8f565b3480156104ba57600080fd5b5061033d600d5481565b3480156104d057600080fd5b50600754600160a01b900460ff16610276565b3480156104ef57600080fd5b506102ef6104fe366004612476565b610dcc565b34801561050f57600080fd5b506102c2610dde565b34801561052457600080fd5b5061033d610533366004612212565b610e6c565b34801561054457600080fd5b506102ab610efd565b34801561055957600080fd5b5061033d610568366004612212565b60126020526000908152604090205481565b34801561058657600080fd5b506007546001600160a01b03166102ef565b3480156105a457600080fd5b506102c2610f33565b6102ab6105bb366004612476565b610f42565b3480156105cc57600080fd5b506102ab6105db366004612318565b611105565b6102ab6105ee366004612476565b6111ca565b3480156105ff57600080fd5b506102c26113cd565b34801561061457600080fd5b506102ab61062336600461229c565b6113da565b34801561063457600080fd5b5061033d600f5481565b34801561064a57600080fd5b506102ab610659366004612476565b611413565b34801561066a57600080fd5b506102ab61067936600461236c565b611442565b34801561068a57600080fd5b506102c2610699366004612476565b6115cb565b3480156106aa57600080fd5b5061033d600b5481565b3480156106c057600080fd5b506102ab6106cf366004612476565b611726565b3480156106e057600080fd5b506102ab6106ef3660046123d8565b611755565b34801561070057600080fd5b5061027661070f36600461222d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561074957600080fd5b506102ab610758366004612212565b611792565b60006001600160e01b031982166380ac58cd60e01b148061078e57506001600160e01b03198216635b5e139f60e01b145b806107a957506001600160e01b0319821663780e9d6360e01b145b806107c457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146107fd5760405162461bcd60e51b81526004016107f490612581565b60405180910390fd5b600e55565b60606001805461081190612697565b80601f016020809104026020016040519081016040528092919081815260200182805461083d90612697565b801561088a5780601f1061085f5761010080835404028352916020019161088a565b820191906000526020600020905b81548152906001019060200180831161086d57829003601f168201915b5050505050905090565b60006108a1826000541190565b6109035760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016107f4565b506000908152600560205260409020546001600160a01b031690565b600061092a82610dcc565b9050806001600160a01b0316836001600160a01b031614156109995760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016107f4565b336001600160a01b03821614806109b557506109b5813361070f565b610a275760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016107f4565b610a3283838361182a565b505050565b6007546001600160a01b03163314610a615760405162461bcd60e51b81526004016107f490612581565b600b54811115610ab35760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420696e637265617365206d617820737570706c7900000000000060448201526064016107f4565b600b55565b610a32838383611886565b6000610ace83610e6c565b8210610b275760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016107f4565b600080549080805b83811015610bc0576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610b8257805192505b876001600160a01b0316836001600160a01b03161415610bb75786841415610bb0575093506107c492505050565b6001909301925b50600101610b2f565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016107f4565b6007546001600160a01b03163314610c4a5760405162461bcd60e51b81526004016107f490612581565b604051600090339047908381818185875af1925050503d8060008114610c8c576040519150601f19603f3d011682016040523d82523d6000602084013e610c91565b606091505b5050905080610c9f57600080fd5b50565b610a32838383604051806020016040528060008152506113da565b6007546001600160a01b03163314610ce75760405162461bcd60e51b81526004016107f490612581565b600a55565b600080548210610d4a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016107f4565b5090565b6007546001600160a01b03163314610d785760405162461bcd60e51b81526004016107f490612581565b8051610d8b906011906020840190612094565b5050565b6007546001600160a01b03163314610db95760405162461bcd60e51b81526004016107f490612581565b8051610d8b906009906020840190612094565b6000610dd782611b6b565b5192915050565b60098054610deb90612697565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1790612697565b8015610e645780601f10610e3957610100808354040283529160200191610e64565b820191906000526020600020905b815481529060010190602001808311610e4757829003601f168201915b505050505081565b60006001600160a01b038216610ed85760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016107f4565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b03163314610f275760405162461bcd60e51b81526004016107f490612581565b610f316000611c42565b565b60606002805461081190612697565b60026008541415610f955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107f4565b600260085560005481610fd85760405162461bcd60e51b815260206004820152600b60248201526a043616e74206d696e7420360ac1b60448201526064016107f4565b600e5482111561102a5760405162461bcd60e51b815260206004820152601b60248201527f43616e74206d696e74206d6f7265207468656e206d61786d696e74000000000060448201526064016107f4565b601461103533610e6c565b11156110535760405162461bcd60e51b81526004016107f49061254a565b60148261105f33610e6c565b6110699190612609565b11156110875760405162461bcd60e51b81526004016107f49061254a565b600b546110948383612609565b11156110d85760405162461bcd60e51b815260206004820152601360248201527243616e7420676f206f76657220737570706c7960681b60448201526064016107f4565b81600a546110e69190612635565b3410156110f257600080fd5b6110fc3383611c94565b50506001600855565b6001600160a01b03821633141561115e5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016107f4565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600854141561121d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107f4565b6002600855600080543382526012602052604090912054600d546112418483612609565b111561128f5760405162461bcd60e51b815260206004820152601d60248201527f6d6178204e46542070657220616464726573732065786365656465642100000060448201526064016107f4565b601461129a33610e6c565b11156112b85760405162461bcd60e51b81526004016107f49061254a565b6014836112c433610e6c565b6112ce9190612609565b11156112ec5760405162461bcd60e51b81526004016107f49061254a565b6000831161132a5760405162461bcd60e51b815260206004820152600b60248201526a043616e74206d696e7420360ac1b60448201526064016107f4565b600c546113378484612609565b111561137c5760405162461bcd60e51b815260206004820152601460248201527343616e7420676f206f76657220737570706c792160601b60448201526064016107f4565b60005b838110156113b8573360009081526012602052604081208054916113a2836126d2565b9190505550806113b1906126d2565b905061137f565b506113c33384611c94565b5050600160085550565b60118054610deb90612697565b6113e5848484611886565b6113f184848484611cae565b61140d5760405162461bcd60e51b81526004016107f4906125b6565b50505050565b6007546001600160a01b0316331461143d5760405162461bcd60e51b81526004016107f490612581565b600c55565b6007546001600160a01b0316331461146c5760405162461bcd60e51b81526004016107f490612581565b8281146114c55760405162461bcd60e51b815260206004820152602160248201527f50726f76696465207175616e74697469657320616e6420726563697069656e746044820152607360f81b60648201526084016107f4565b6000806114d160005490565b905060005b85811015611514578686828181106114f0576114f061272d565b90506020020135836115029190612609565b925061150d816126d2565b90506114d6565b50600b546115228383612609565b111561155b5760405162461bcd60e51b8152602060048201526008602482015267546f6f206d616e7960c01b60448201526064016107f4565b6000915060005b838110156115c2576115b285858381811061157f5761157f61272d565b90506020020160208101906115949190612212565b8888848181106115a6576115a661272d565b90506020020135611c94565b6115bb816126d2565b9050611562565b50505050505050565b60606115d8826000541190565b61162e5760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b60648201526084016107f4565b60105460ff166116ca576011805461164590612697565b80601f016020809104026020016040519081016040528092919081815260200182805461167190612697565b80156116be5780601f10611693576101008083540402835291602001916116be565b820191906000526020600020905b8154815290600101906020018083116116a157829003601f168201915b50505050509050919050565b60006116d4611dbc565b905060008151116116f4576040518060200160405280600081525061171f565b806116fe84611dcb565b60405160200161170f9291906124bb565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146117505760405162461bcd60e51b81526004016107f490612581565b600d55565b6007546001600160a01b0316331461177f5760405162461bcd60e51b81526004016107f490612581565b6010805460ff1916911515919091179055565b6007546001600160a01b031633146117bc5760405162461bcd60e51b81526004016107f490612581565b6001600160a01b0381166118215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f4565b610c9f81611c42565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061189182611b6b565b80519091506000906001600160a01b0316336001600160a01b031614806118c85750336118bd84610894565b6001600160a01b0316145b806118da575081516118da903361070f565b9050806119445760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107f4565b846001600160a01b031682600001516001600160a01b0316146119b85760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016107f4565b6001600160a01b038416611a1c5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016107f4565b611a2c600084846000015161182a565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b4267ffffffffffffffff1602179055908601808352912054909116611b2157611ad4816000541190565b15611b21578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6040805180820190915260008082526020820152611b8a826000541190565b611be95760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016107f4565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611c38579392505050565b5060001901611beb565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d8b828260405180602001604052806000815250611ec9565b60006001600160a01b0384163b15611db057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cf29033908990889088906004016124fa565b602060405180830381600087803b158015611d0c57600080fd5b505af1925050508015611d3c575060408051601f3d908101601f19168201909252611d3991810190612410565b60015b611d96573d808015611d6a576040519150601f19603f3d011682016040523d82523d6000602084013e611d6f565b606091505b508051611d8e5760405162461bcd60e51b81526004016107f4906125b6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611db4565b5060015b949350505050565b60606009805461081190612697565b606081611def5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e195780611e03816126d2565b9150611e129050600a83612621565b9150611df3565b60008167ffffffffffffffff811115611e3457611e34612743565b6040519080825280601f01601f191660200182016040528015611e5e576020820181803683370190505b5090505b8415611db457611e73600183612654565b9150611e80600a866126ed565b611e8b906030612609565b60f81b818381518110611ea057611ea061272d565b60200101906001600160f81b031916908160001a905350611ec2600a86612621565b9450611e62565b610a3283838360016000546001600160a01b038516611f345760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107f4565b83611f925760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016107f4565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b4267ffffffffffffffff16021790915581905b8581101561208b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4831561207f576120636000888488611cae565b61207f5760405162461bcd60e51b81526004016107f4906125b6565b60019182019101612010565b50600055611b64565b8280546120a090612697565b90600052602060002090601f0160209004810192826120c25760008555612108565b82601f106120db57805160ff1916838001178555612108565b82800160010185558215612108579182015b828111156121085782518255916020019190600101906120ed565b50610d4a9291505b80821115610d4a5760008155600101612110565b600067ffffffffffffffff8084111561213f5761213f612743565b604051601f8501601f19908116603f0116810190828211818310171561216757612167612743565b8160405280935085815286868601111561218057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121b157600080fd5b919050565b60008083601f8401126121c857600080fd5b50813567ffffffffffffffff8111156121e057600080fd5b6020830191508360208260051b85010111156121fb57600080fd5b9250929050565b803580151581146121b157600080fd5b60006020828403121561222457600080fd5b61171f8261219a565b6000806040838503121561224057600080fd5b6122498361219a565b91506122576020840161219a565b90509250929050565b60008060006060848603121561227557600080fd5b61227e8461219a565b925061228c6020850161219a565b9150604084013590509250925092565b600080600080608085870312156122b257600080fd5b6122bb8561219a565b93506122c96020860161219a565b925060408501359150606085013567ffffffffffffffff8111156122ec57600080fd5b8501601f810187136122fd57600080fd5b61230c87823560208401612124565b91505092959194509250565b6000806040838503121561232b57600080fd5b6123348361219a565b915061225760208401612202565b6000806040838503121561235557600080fd5b61235e8361219a565b946020939093013593505050565b6000806000806040858703121561238257600080fd5b843567ffffffffffffffff8082111561239a57600080fd5b6123a6888389016121b6565b909650945060208701359150808211156123bf57600080fd5b506123cc878288016121b6565b95989497509550505050565b6000602082840312156123ea57600080fd5b61171f82612202565b60006020828403121561240557600080fd5b813561171f81612759565b60006020828403121561242257600080fd5b815161171f81612759565b60006020828403121561243f57600080fd5b813567ffffffffffffffff81111561245657600080fd5b8201601f8101841361246757600080fd5b611db484823560208401612124565b60006020828403121561248857600080fd5b5035919050565b600081518084526124a781602086016020860161266b565b601f01601f19169290920160200192915050565b600083516124cd81846020880161266b565b8351908301906124e181836020880161266b565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061252d9083018461248f565b9695505050505050565b60208152600061171f602083018461248f565b60208082526017908201527f4d6178207065722077616c6c6574207265616368656421000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000821982111561261c5761261c612701565b500190565b60008261263057612630612717565b500490565b600081600019048311821515161561264f5761264f612701565b500290565b60008282101561266657612666612701565b500390565b60005b8381101561268657818101518382015260200161266e565b8381111561140d5750506000910152565b600181811c908216806126ab57607f821691505b602082108114156126cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126e6576126e6612701565b5060010190565b6000826126fc576126fc612717565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c9f57600080fdfea264697066735822122026150cf4889d0ab1d0c947f3757b934da76d6b5e32be7230589428303e82074764736f6c63430008070033
Deployed Bytecode Sourcemap
45618:4535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25295:372;;;;;;;;;;-1:-1:-1;25295:372:0;;;;;:::i;:::-;;:::i;:::-;;;7430:14:1;;7423:22;7405:41;;7393:2;7378:18;25295:372:0;;;;;;;;49731:122;;;;;;;;;;-1:-1:-1;49731:122:0;;;;;:::i;:::-;;:::i;:::-;;27181:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28743:214::-;;;;;;;;;;-1:-1:-1;28743:214:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6728:32:1;;;6710:51;;6698:2;6683:18;28743:214:0;6564:203:1;28264:413:0;;;;;;;;;;-1:-1:-1;28264:413:0;;;;;:::i;:::-;;:::i;45752:33::-;;;;;;;;;;;;;;;;;;;19075:25:1;;;19063:2;19048:18;45752:33:0;18929:177:1;23552:100:0;;;;;;;;;;-1:-1:-1;23605:7:0;23632:12;23552:100;;49058:182;;;;;;;;;;-1:-1:-1;49058:182:0;;;;;:::i;:::-;;:::i;29619:162::-;;;;;;;;;;-1:-1:-1;29619:162:0;;;;;:::i;:::-;;:::i;24216:1007::-;;;;;;;;;;-1:-1:-1;24216:1007:0;;;;;:::i;:::-;;:::i;45914:43::-;;;;;;;;;;;;;;;;49987:163;;;:::i;29852:177::-;;;;;;;;;;-1:-1:-1;29852:177:0;;;;;:::i;:::-;;:::i;48964:86::-;;;;;;;;;;-1:-1:-1;48964:86:0;;;;;:::i;:::-;;:::i;45830:29::-;;;;;;;;;;;;;;;;23729:187;;;;;;;;;;-1:-1:-1;23729:187:0;;;;;:::i;:::-;;:::i;49585:138::-;;;;;;;;;;-1:-1:-1;49585:138:0;;;;;:::i;:::-;;:::i;46003:28::-;;;;;;;;;;-1:-1:-1;46003:28:0;;;;;;;;49378:104;;;;;;;;;;-1:-1:-1;49378:104:0;;;;;:::i;:::-;;:::i;45866:41::-;;;;;;;;;;;;;;;;39469:86;;;;;;;;;;-1:-1:-1;39540:7:0;;-1:-1:-1;;;39540:7:0;;;;39469:86;;26990:124;;;;;;;;;;-1:-1:-1;26990:124:0;;;;;:::i;:::-;;:::i;45724:21::-;;;;;;;;;;;;;:::i;25731:221::-;;;;;;;;;;-1:-1:-1;25731:221:0;;;;;:::i;:::-;;:::i;42286:94::-;;;;;;;;;;;;;:::i;46078:59::-;;;;;;;;;;-1:-1:-1;46078:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;41635:87;;;;;;;;;;-1:-1:-1;41708:6:0;;-1:-1:-1;;;;;41708:6:0;41635:87;;27350:104;;;;;;;;;;;;;:::i;47131:595::-;;;;;;:::i;:::-;;:::i;29029:288::-;;;;;;;;;;-1:-1:-1;29029:288:0;;;;;:::i;:::-;;:::i;46348:773::-;;;;;;:::i;:::-;;:::i;46038:31::-;;;;;;;;;;;;;:::i;30100:355::-;;;;;;;;;;-1:-1:-1;30100:355:0;;;;;:::i;:::-;;:::i;45964:32::-;;;;;;;;;;;;;;;;49247:123;;;;;;;;;;-1:-1:-1;49247:123:0;;;;;:::i;:::-;;:::i;47734:671::-;;;;;;;;;;-1:-1:-1;47734:671:0;;;;;:::i;:::-;;:::i;48413:543::-;;;;;;;;;;-1:-1:-1;48413:543:0;;;;;:::i;:::-;;:::i;45792:31::-;;;;;;;;;;;;;;;;49861:118;;;;;;;;;;-1:-1:-1;49861:118:0;;;;;:::i;:::-;;:::i;49490:87::-;;;;;;;;;;-1:-1:-1;49490:87:0;;;;;:::i;:::-;;:::i;29388:164::-;;;;;;;;;;-1:-1:-1;29388:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29509:25:0;;;29485:4;29509:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29388:164;42535:229;;;;;;;;;;-1:-1:-1;42535:229:0;;;;;:::i;:::-;;:::i;25295:372::-;25397:4;-1:-1:-1;;;;;;25434:40:0;;-1:-1:-1;;;25434:40:0;;:105;;-1:-1:-1;;;;;;;25491:48:0;;-1:-1:-1;;;25491:48:0;25434:105;:172;;;-1:-1:-1;;;;;;;25556:50:0;;-1:-1:-1;;;25556:50:0;25434:172;:225;;;-1:-1:-1;;;;;;;;;;14924:40:0;;;25623:36;25414:245;25295:372;-1:-1:-1;;25295:372:0:o;49731:122::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;;;;;;;;;49812:23:::1;:33:::0;49731:122::o;27181:100::-;27235:13;27268:5;27261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27181:100;:::o;28743:214::-;28811:7;28839:16;28847:7;30767:4;30801:12;-1:-1:-1;30791:22:0;30710:111;28839:16;28831:74;;;;-1:-1:-1;;;28831:74:0;;18717:2:1;28831:74:0;;;18699:21:1;18756:2;18736:18;;;18729:30;18795:34;18775:18;;;18768:62;-1:-1:-1;;;18846:18:1;;;18839:43;18899:19;;28831:74:0;18515:409:1;28831:74:0;-1:-1:-1;28925:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28925:24:0;;28743:214::o;28264:413::-;28337:13;28353:24;28369:7;28353:15;:24::i;:::-;28337:40;;28402:5;-1:-1:-1;;;;;28396:11:0;:2;-1:-1:-1;;;;;28396:11:0;;;28388:58;;;;-1:-1:-1;;;28388:58:0;;15536:2:1;28388:58:0;;;15518:21:1;15575:2;15555:18;;;15548:30;15614:34;15594:18;;;15587:62;-1:-1:-1;;;15665:18:1;;;15658:32;15707:19;;28388:58:0;15334:398:1;28388:58:0;3342:10;-1:-1:-1;;;;;28481:21:0;;;;:62;;-1:-1:-1;28506:37:0;28523:5;3342:10;29388:164;:::i;28506:37::-;28459:169;;;;-1:-1:-1;;;28459:169:0;;12117:2:1;28459:169:0;;;12099:21:1;12156:2;12136:18;;;12129:30;12195:34;12175:18;;;12168:62;12266:27;12246:18;;;12239:55;12311:19;;28459:169:0;11915:421:1;28459:169:0;28641:28;28650:2;28654:7;28663:5;28641:8;:28::i;:::-;28326:351;28264:413;;:::o;49058:182::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49156:9:::1;;49139:13;:26;;49131:65;;;::::0;-1:-1:-1;;;49131:65:0;;12543:2:1;49131:65:0::1;::::0;::::1;12525:21:1::0;12582:2;12562:18;;;12555:30;12621:28;12601:18;;;12594:56;12667:18;;49131:65:0::1;12341:350:1::0;49131:65:0::1;49207:9;:25:::0;49058:182::o;29619:162::-;29745:28;29755:4;29761:2;29765:7;29745:9;:28::i;24216:1007::-;24305:7;24341:16;24351:5;24341:9;:16::i;:::-;24333:5;:24;24325:71;;;;-1:-1:-1;;;24325:71:0;;7883:2:1;24325:71:0;;;7865:21:1;7922:2;7902:18;;;7895:30;7961:34;7941:18;;;7934:62;-1:-1:-1;;;8012:18:1;;;8005:32;8054:19;;24325:71:0;7681:398:1;24325:71:0;24407:22;23632:12;;;24407:22;;24670:466;24690:14;24686:1;:18;24670:466;;;24730:31;24764:14;;;:11;:14;;;;;;;;;24730:48;;;;;;;;;-1:-1:-1;;;;;24730:48:0;;;;;-1:-1:-1;;;24730:48:0;;;;;;;;;;;;24801:28;24797:111;;24874:14;;;-1:-1:-1;24797:111:0;24951:5;-1:-1:-1;;;;;24930:26:0;:17;-1:-1:-1;;;;;24930:26:0;;24926:195;;;25000:5;24985:11;:20;24981:85;;;-1:-1:-1;25041:1:0;-1:-1:-1;25034:8:0;;-1:-1:-1;;;25034:8:0;24981:85;25088:13;;;;;24926:195;-1:-1:-1;24706:3:0;;24670:466;;;-1:-1:-1;25159:56:0;;-1:-1:-1;;;25159:56:0;;17526:2:1;25159:56:0;;;17508:21:1;17565:2;17545:18;;;17538:30;17604:34;17584:18;;;17577:62;-1:-1:-1;;;17655:18:1;;;17648:44;17709:19;;25159:56:0;17324:410:1;49987:163:0;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;50059:58:::1;::::0;50046:7:::1;::::0;50067:10:::1;::::0;50091:21:::1;::::0;50046:7;50059:58;50046:7;50059:58;50091:21;50067:10;50059:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50045:72;;;50136:2;50128:11;;;::::0;::::1;;50032:118;49987:163::o:0;29852:177::-;29982:39;29999:4;30005:2;30009:7;29982:39;;;;;;;;;;;;:16;:39::i;48964:86::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49027:4:::1;:15:::0;48964:86::o;23729:187::-;23796:7;23632:12;;23824:5;:21;23816:69;;;;-1:-1:-1;;;23816:69:0;;10553:2:1;23816:69:0;;;10535:21:1;10592:2;10572:18;;;10565:30;10631:34;10611:18;;;10604:62;-1:-1:-1;;;10682:18:1;;;10675:33;10725:19;;23816:69:0;10351:399:1;23816:69:0;-1:-1:-1;23903:5:0;23729:187::o;49585:138::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49677:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49585:138:::0;:::o;49378:104::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49453:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;26990:124::-:0;27054:7;27081:20;27093:7;27081:11;:20::i;:::-;:25;;26990:124;-1:-1:-1;;26990:124:0:o;45724:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25731:221::-;25795:7;-1:-1:-1;;;;;25823:19:0;;25815:75;;;;-1:-1:-1;;;25815:75:0;;12898:2:1;25815:75:0;;;12880:21:1;12937:2;12917:18;;;12910:30;12976:34;12956:18;;;12949:62;-1:-1:-1;;;13027:18:1;;;13020:41;13078:19;;25815:75:0;12696:407:1;25815:75:0;-1:-1:-1;;;;;;25916:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;25916:27:0;;25731:221::o;42286:94::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;42351:21:::1;42369:1;42351:9;:21::i;:::-;42286:94::o:0;27350:104::-;27406:13;27439:7;27432:14;;;;;:::i;47131:595::-;44630:1;45226:7;;:19;;45218:63;;;;-1:-1:-1;;;45218:63:0;;17941:2:1;45218:63:0;;;17923:21:1;17980:2;17960:18;;;17953:30;18019:33;17999:18;;;17992:61;18070:18;;45218:63:0;17739:355:1;45218:63:0;44630:1;45359:7;:18;47205:9:::1;23632:12:::0;47249:15;47241:39:::1;;;::::0;-1:-1:-1;;;47241:39:0;;8286:2:1;47241:39:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;-1:-1:-1;;;8344:18:1;;;8337:41;8395:18;;47241:39:0::1;8084:335:1::0;47241:39:0::1;47314:23;;47299:11;:38;;47291:79;;;::::0;-1:-1:-1;;;47291:79:0;;16359:2:1;47291:79:0::1;::::0;::::1;16341:21:1::0;16398:2;16378:18;;;16371:30;16437:29;16417:18;;;16410:57;16484:18;;47291:79:0::1;16157:351:1::0;47291:79:0::1;47414:2;47389:21;47399:10;47389:9;:21::i;:::-;:27;;47381:63;;;;-1:-1:-1::0;;;47381:63:0::1;;;;;;;:::i;:::-;47502:2;47487:11;47463:21;47473:10;47463:9;:21::i;:::-;:35;;;;:::i;:::-;:41;;47455:77;;;;-1:-1:-1::0;;;47455:77:0::1;;;;;;;:::i;:::-;47570:9;::::0;47551:15:::1;47555:11:::0;47551:1;:15:::1;:::i;:::-;:28;;47543:60;;;::::0;-1:-1:-1;;;47543:60:0;;13310:2:1;47543:60:0::1;::::0;::::1;13292:21:1::0;13349:2;13329:18;;;13322:30;-1:-1:-1;;;13368:18:1;;;13361:49;13427:18;;47543:60:0::1;13108:343:1::0;47543:60:0::1;47642:11;47635:4;;:18;;;;:::i;:::-;47622:9;:31;;47614:40;;;::::0;::::1;;47665:34;47675:10;47687:11;47665:9;:34::i;:::-;-1:-1:-1::0;;44586:1:0;45538:7;:22;47131:595::o;29029:288::-;-1:-1:-1;;;;;29124:24:0;;3342:10;29124:24;;29116:63;;;;-1:-1:-1;;;29116:63:0;;14762:2:1;29116:63:0;;;14744:21:1;14801:2;14781:18;;;14774:30;14840:28;14820:18;;;14813:56;14886:18;;29116:63:0;14560:350:1;29116:63:0;3342:10;29192:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29192:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29192:53:0;;;;;;;;;;29261:48;;7405:41:1;;;29192:42:0;;3342:10;29261:48;;7378:18:1;29261:48:0;;;;;;;29029:288;;:::o;46348:773::-;44630:1;45226:7;;:19;;45218:63;;;;-1:-1:-1;;;45218:63:0;;17941:2:1;45218:63:0;;;17923:21:1;17980:2;17960:18;;;17953:30;18019:33;17999:18;;;17992:61;18070:18;;45218:63:0;17739:355:1;45218:63:0;44630:1;45359:7;:18;46419:9:::1;23632:12:::0;;46513:10:::1;46488:36:::0;;:24:::1;:36;::::0;;;;;;46583:22:::1;::::0;46543:36:::1;46568:11:::0;46488:36;46543::::1;:::i;:::-;:62;;46535:104;;;::::0;-1:-1:-1;;;46535:104:0;;9846:2:1;46535:104:0::1;::::0;::::1;9828:21:1::0;9885:2;9865:18;;;9858:30;9924:31;9904:18;;;9897:59;9973:18;;46535:104:0::1;9644:353:1::0;46535:104:0::1;46683:2;46658:21;46668:10;46658:9;:21::i;:::-;:27;;46650:63;;;;-1:-1:-1::0;;;46650:63:0::1;;;;;;;:::i;:::-;46771:2;46756:11;46732:21;46742:10;46732:9;:21::i;:::-;:35;;;;:::i;:::-;:41;;46724:77;;;;-1:-1:-1::0;;;46724:77:0::1;;;;;;;:::i;:::-;46828:1;46814:11;:15;46806:40;;;::::0;-1:-1:-1;;;46806:40:0;;8286:2:1;46806:40:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;-1:-1:-1;;;8344:18:1;;;8337:41;8395:18;;46806:40:0::1;8084:335:1::0;46806:40:0::1;46878:7;::::0;46859:15:::1;46863:11:::0;46859:1;:15:::1;:::i;:::-;:26;;46851:60;;;::::0;-1:-1:-1;;;46851:60:0;;10204:2:1;46851:60:0::1;::::0;::::1;10186:21:1::0;10243:2;10223:18;;;10216:30;-1:-1:-1;;;10262:18:1;;;10255:50;10322:18;;46851:60:0::1;10002:344:1::0;46851:60:0::1;46921:9;46916:103;46940:11;46936:1;:15;46916:103;;;46998:10;46973:36;::::0;;;:24:::1;:36;::::0;;;;:38;;;::::1;::::0;::::1;:::i;:::-;;;;;;46953:3;;;;:::i;:::-;;;46916:103;;;;47029:34;47039:10;47051:11;47029:9;:34::i;:::-;-1:-1:-1::0;;44586:1:0;45538:7;:22;-1:-1:-1;46348:773:0:o;46038:31::-;;;;;;;:::i;30100:355::-;30259:28;30269:4;30275:2;30279:7;30259:9;:28::i;:::-;30320:48;30343:4;30349:2;30353:7;30362:5;30320:22;:48::i;:::-;30298:149;;;;-1:-1:-1;;;30298:149:0;;;;;;;:::i;:::-;30100:355;;;;:::o;49247:123::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49335:7:::1;:27:::0;49247:123::o;47734:671::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;47886:35;;::::1;47864:118;;;::::0;-1:-1:-1;;;47864:118:0;;11715:2:1;47864:118:0::1;::::0;::::1;11697:21:1::0;11754:2;11734:18;;;11727:30;11793:34;11773:18;;;11766:62;-1:-1:-1;;;11844:18:1;;;11837:31;11885:19;;47864:118:0::1;11513:397:1::0;47864:118:0::1;47993:21;48029:9:::0;48041:13:::1;23605:7:::0;23632:12;;23552:100;48041:13:::1;48029:25;;48070:9;48065:101;48085:19:::0;;::::1;48065:101;;;48143:8;;48152:1;48143:11;;;;;;;:::i;:::-;;;;;;;48126:28;;;;;:::i;:::-;::::0;-1:-1:-1;48106:3:0::1;::::0;::::1;:::i;:::-;;;48065:101;;;-1:-1:-1::0;48205:9:0::1;::::0;48184:17:::1;48188:13:::0;48184:1;:17:::1;:::i;:::-;:30;;48176:51;;;::::0;-1:-1:-1;;;48176:51:0;;14065:2:1;48176:51:0::1;::::0;::::1;14047:21:1::0;14104:1;14084:18;;;14077:29;-1:-1:-1;;;14122:18:1;;;14115:38;14170:18;;48176:51:0::1;13863:331:1::0;48176:51:0::1;48238:20;;;48274:9;48269:110;48289:20:::0;;::::1;48269:110;;;48331:36;48341:9;;48351:1;48341:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;48355:8;;48364:1;48355:11;;;;;;;:::i;:::-;;;;;;;48331:9;:36::i;:::-;48311:3;::::0;::::1;:::i;:::-;;;48269:110;;;-1:-1:-1::0;;;;;;;47734:671:0:o;48413:543::-;48531:13;48570:16;48578:7;30767:4;30801:12;-1:-1:-1;30791:22:0;30710:111;48570:16;48562:62;;;;-1:-1:-1;;;48562:62:0;;8626:2:1;48562:62:0;;;8608:21:1;8665:2;8645:18;;;8638:30;8704:34;8684:18;;;8677:62;-1:-1:-1;;;8755:18:1;;;8748:31;8796:19;;48562:62:0;8424:397:1;48562:62:0;48641:8;;;;48637:74;;48682:17;48675:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48413:543;;;:::o;48637:74::-;48733:28;48764:10;:8;:10::i;:::-;48733:41;;48836:1;48811:14;48805:28;:32;:143;;;;;;;;;;;;;;;;;48881:14;48897:18;:7;:16;:18::i;:::-;48864:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48805:143;48785:163;48413:543;-1:-1:-1;;;48413:543:0:o;49861:118::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49939:22:::1;:32:::0;49861:118::o;49490:87::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;49552:8:::1;:17:::0;;-1:-1:-1;;49552:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49490:87::o;42535:229::-;41708:6;;-1:-1:-1;;;;;41708:6:0;3342:10;41855:23;41847:68;;;;-1:-1:-1;;;41847:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42638:22:0;::::1;42616:110;;;::::0;-1:-1:-1;;;42616:110:0;;9028:2:1;42616:110:0::1;::::0;::::1;9010:21:1::0;9067:2;9047:18;;;9040:30;9106:34;9086:18;;;9079:62;-1:-1:-1;;;9157:18:1;;;9150:36;9203:19;;42616:110:0::1;8826:402:1::0;42616:110:0::1;42737:19;42747:8;42737:9;:19::i;35630:196::-:0;35745:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;35745:29:0;-1:-1:-1;;;;;35745:29:0;;;;;;;;;35790:28;;35745:24;;35790:28;;;;;;;35630:196;;;:::o;33510:2002::-;33625:35;33663:20;33675:7;33663:11;:20::i;:::-;33738:18;;33625:58;;-1:-1:-1;33696:22:0;;-1:-1:-1;;;;;33722:34:0;3342:10;-1:-1:-1;;;;;33722:34:0;;:87;;;-1:-1:-1;3342:10:0;33773:20;33785:7;33773:11;:20::i;:::-;-1:-1:-1;;;;;33773:36:0;;33722:87;:154;;;-1:-1:-1;33843:18:0;;33826:50;;3342:10;29388:164;:::i;33826:50::-;33696:181;;33898:17;33890:80;;;;-1:-1:-1;;;33890:80:0;;15117:2:1;33890:80:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:34;15175:18;;;15168:62;-1:-1:-1;;;15246:18:1;;;15239:48;15304:19;;33890:80:0;14915:414:1;33890:80:0;34013:4;-1:-1:-1;;;;;33991:26:0;:13;:18;;;-1:-1:-1;;;;;33991:26:0;;33983:77;;;;-1:-1:-1;;;33983:77:0;;13658:2:1;33983:77:0;;;13640:21:1;13697:2;13677:18;;;13670:30;13736:34;13716:18;;;13709:62;-1:-1:-1;;;13787:18:1;;;13780:36;13833:19;;33983:77:0;13456:402:1;33983:77:0;-1:-1:-1;;;;;34079:16:0;;34071:66;;;;-1:-1:-1;;;34071:66:0;;10957:2:1;34071:66:0;;;10939:21:1;10996:2;10976:18;;;10969:30;11035:34;11015:18;;;11008:62;-1:-1:-1;;;11086:18:1;;;11079:35;11131:19;;34071:66:0;10755:401:1;34071:66:0;34258:49;34275:1;34279:7;34288:13;:18;;;34258:8;:49::i;:::-;-1:-1:-1;;;;;34603:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;;;;;34603:31:0;;;-1:-1:-1;;;;;34603:31:0;;;-1:-1:-1;;34603:31:0;;;;;;;34649:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;34649:29:0;;;;;;;;;;;;;34695:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;34740:61:0;;;;-1:-1:-1;;;34785:15:0;34740:61;;;;;;35075:11;;;35105:24;;;;;:29;35075:11;;35105:29;35101:295;;35173:20;35181:11;30767:4;30801:12;-1:-1:-1;30791:22:0;30710:111;35173:20;35169:212;;;35250:18;;;35218:24;;;:11;:24;;;;;;;;:50;;35333:28;;;;35291:70;;-1:-1:-1;;;35291:70:0;-1:-1:-1;;;;;;35291:70:0;;;-1:-1:-1;;;;;35218:50:0;;;35291:70;;;;;;;35169:212;34578:829;35443:7;35439:2;-1:-1:-1;;;;;35424:27:0;35433:4;-1:-1:-1;;;;;35424:27:0;;;;;;;;;;;35462:42;33614:1898;;33510:2002;;;:::o;26391:537::-;-1:-1:-1;;;;;;;;;;;;;;;;;26494:16:0;26502:7;30767:4;30801:12;-1:-1:-1;30791:22:0;30710:111;26494:16;26486:71;;;;-1:-1:-1;;;26486:71:0;;9435:2:1;26486:71:0;;;9417:21:1;9474:2;9454:18;;;9447:30;9513:34;9493:18;;;9486:62;-1:-1:-1;;;9564:18:1;;;9557:40;9614:19;;26486:71:0;9233:406:1;26486:71:0;26615:7;26595:245;26662:31;26696:17;;;:11;:17;;;;;;;;;26662:51;;;;;;;;;-1:-1:-1;;;;;26662:51:0;;;;;-1:-1:-1;;;26662:51:0;;;;;;;;;;;;26736:28;26732:93;;26796:9;26391:537;-1:-1:-1;;;26391:537:0:o;26732:93::-;-1:-1:-1;;;26635:6:0;26595:245;;42772:173;42847:6;;;-1:-1:-1;;;;;42864:17:0;;;-1:-1:-1;;;;;;42864:17:0;;;;;;;42897:40;;42847:6;;;42864:17;42847:6;;42897:40;;42828:16;;42897:40;42817:128;42772:173;:::o;30829:104::-;30898:27;30908:2;30912:8;30898:27;;;;;;;;;;;;:9;:27::i;36391:804::-;36546:4;-1:-1:-1;;;;;36567:13:0;;5004:19;:23;36563:625;;36603:72;;-1:-1:-1;;;36603:72:0;;-1:-1:-1;;;;;36603:36:0;;;;;:72;;3342:10;;36654:4;;36660:7;;36669:5;;36603:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36603:72:0;;;;;;;;-1:-1:-1;;36603:72:0;;;;;;;;;;;;:::i;:::-;;;36599:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36849:13:0;;36845:273;;36892:61;;-1:-1:-1;;;36892:61:0;;;;;;;:::i;36845:273::-;37068:6;37062:13;37053:6;37049:2;37045:15;37038:38;36599:534;-1:-1:-1;;;;;;36726:55:0;-1:-1:-1;;;36726:55:0;;-1:-1:-1;36719:62:0;;36563:625;-1:-1:-1;37172:4:0;36563:625;36391:804;;;;;;:::o;46232:108::-;46292:13;46325:7;46318:14;;;;;:::i;824:723::-;880:13;1101:10;1097:53;;-1:-1:-1;;1128:10:0;;;;;;;;;;;;-1:-1:-1;;;1128:10:0;;;;;824:723::o;1097:53::-;1175:5;1160:12;1216:78;1223:9;;1216:78;;1249:8;;;;:::i;:::-;;-1:-1:-1;1272:10:0;;-1:-1:-1;1280:2:0;1272:10;;:::i;:::-;;;1216:78;;;1304:19;1336:6;1326:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1326:17:0;;1304:39;;1354:154;1361:10;;1354:154;;1388:11;1398:1;1388:11;;:::i;:::-;;-1:-1:-1;1457:10:0;1465:2;1457:5;:10;:::i;:::-;1444:24;;:2;:24;:::i;:::-;1431:39;;1414:6;1421;1414:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1414:56:0;;;;;;;;-1:-1:-1;1485:11:0;1494:2;1485:11;;:::i;:::-;;;1354:154;;31296:163;31419:32;31425:2;31429:8;31439:5;31446:4;31857:20;31880:12;-1:-1:-1;;;;;31911:16:0;;31903:62;;;;-1:-1:-1;;;31903:62:0;;16715:2:1;31903:62:0;;;16697:21:1;16754:2;16734:18;;;16727:30;16793:34;16773:18;;;16766:62;-1:-1:-1;;;16844:18:1;;;16837:31;16885:19;;31903:62:0;16513:397:1;31903:62:0;31984:13;31976:66;;;;-1:-1:-1;;;31976:66:0;;17117:2:1;31976:66:0;;;17099:21:1;17156:2;17136:18;;;17129:30;17195:34;17175:18;;;17168:62;-1:-1:-1;;;17246:18:1;;;17239:38;17294:19;;31976:66:0;16915:404:1;31976:66:0;-1:-1:-1;;;;;32394:16:0;;;;;;:12;:16;;;;;;;;:45;;-1:-1:-1;;;;;;;;;32394:45:0;;-1:-1:-1;;;;;32394:45:0;;;;;;;;;;32454:50;;;;;;;;;;;;;;32521:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;32571:66:0;;;;-1:-1:-1;;;32621:15:0;32571:66;;;;;;;32521:25;;32706:415;32726:8;32722:1;:12;32706:415;;;32765:38;;32790:12;;-1:-1:-1;;;;;32765:38:0;;;32782:1;;32765:38;;32782:1;;32765:38;32826:4;32822:249;;;32889:59;32920:1;32924:2;32928:12;32942:5;32889:22;:59::i;:::-;32855:196;;;;-1:-1:-1;;;32855:196:0;;;;;;;:::i;:::-;33091:14;;;;;32736:3;32706:415;;;-1:-1:-1;33137:12:0;:27;33188:60;30100:355;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;2581:18;2573:6;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3084:254:1:o;3343:773::-;3465:6;3473;3481;3489;3542:2;3530:9;3521:7;3517:23;3513:32;3510:52;;;3558:1;3555;3548:12;3510:52;3598:9;3585:23;3627:18;3668:2;3660:6;3657:14;3654:34;;;3684:1;3681;3674:12;3654:34;3723:70;3785:7;3776:6;3765:9;3761:22;3723:70;:::i;:::-;3812:8;;-1:-1:-1;3697:96:1;-1:-1:-1;3900:2:1;3885:18;;3872:32;;-1:-1:-1;3916:16:1;;;3913:36;;;3945:1;3942;3935:12;3913:36;;3984:72;4048:7;4037:8;4026:9;4022:24;3984:72;:::i;:::-;3343:773;;;;-1:-1:-1;4075:8:1;-1:-1:-1;;;;3343:773:1:o;4121:180::-;4177:6;4230:2;4218:9;4209:7;4205:23;4201:32;4198:52;;;4246:1;4243;4236:12;4198:52;4269:26;4285:9;4269:26;:::i;4306:245::-;4364:6;4417:2;4405:9;4396:7;4392:23;4388:32;4385:52;;;4433:1;4430;4423:12;4385:52;4472:9;4459:23;4491:30;4515:5;4491:30;:::i;4556:249::-;4625:6;4678:2;4666:9;4657:7;4653:23;4649:32;4646:52;;;4694:1;4691;4684:12;4646:52;4726:9;4720:16;4745:30;4769:5;4745:30;:::i;4810:450::-;4879:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:52;;;4948:1;4945;4938:12;4900:52;4988:9;4975:23;5021:18;5013:6;5010:30;5007:50;;;5053:1;5050;5043:12;5007:50;5076:22;;5129:4;5121:13;;5117:27;-1:-1:-1;5107:55:1;;5158:1;5155;5148:12;5107:55;5181:73;5246:7;5241:2;5228:16;5223:2;5219;5215:11;5181:73;:::i;5265:180::-;5324:6;5377:2;5365:9;5356:7;5352:23;5348:32;5345:52;;;5393:1;5390;5383:12;5345:52;-1:-1:-1;5416:23:1;;5265:180;-1:-1:-1;5265:180:1:o;5450:257::-;5491:3;5529:5;5523:12;5556:6;5551:3;5544:19;5572:63;5628:6;5621:4;5616:3;5612:14;5605:4;5598:5;5594:16;5572:63;:::i;:::-;5689:2;5668:15;-1:-1:-1;;5664:29:1;5655:39;;;;5696:4;5651:50;;5450:257;-1:-1:-1;;5450:257:1:o;5712:637::-;5992:3;6030:6;6024:13;6046:53;6092:6;6087:3;6080:4;6072:6;6068:17;6046:53;:::i;:::-;6162:13;;6121:16;;;;6184:57;6162:13;6121:16;6218:4;6206:17;;6184:57;:::i;:::-;-1:-1:-1;;;6263:20:1;;6292:22;;;6341:1;6330:13;;5712:637;-1:-1:-1;;;;5712:637:1:o;6772:488::-;-1:-1:-1;;;;;7041:15:1;;;7023:34;;7093:15;;7088:2;7073:18;;7066:43;7140:2;7125:18;;7118:34;;;7188:3;7183:2;7168:18;;7161:31;;;6966:4;;7209:45;;7234:19;;7226:6;7209:45;:::i;:::-;7201:53;6772:488;-1:-1:-1;;;;;;6772:488:1:o;7457:219::-;7606:2;7595:9;7588:21;7569:4;7626:44;7666:2;7655:9;7651:18;7643:6;7626:44;:::i;11161:347::-;11363:2;11345:21;;;11402:2;11382:18;;;11375:30;11441:25;11436:2;11421:18;;11414:53;11499:2;11484:18;;11161:347::o;14199:356::-;14401:2;14383:21;;;14420:18;;;14413:30;14479:34;14474:2;14459:18;;14452:62;14546:2;14531:18;;14199:356::o;15737:415::-;15939:2;15921:21;;;15978:2;15958:18;;;15951:30;16017:34;16012:2;15997:18;;15990:62;-1:-1:-1;;;16083:2:1;16068:18;;16061:49;16142:3;16127:19;;15737:415::o;19111:128::-;19151:3;19182:1;19178:6;19175:1;19172:13;19169:39;;;19188:18;;:::i;:::-;-1:-1:-1;19224:9:1;;19111:128::o;19244:120::-;19284:1;19310;19300:35;;19315:18;;:::i;:::-;-1:-1:-1;19349:9:1;;19244:120::o;19369:168::-;19409:7;19475:1;19471;19467:6;19463:14;19460:1;19457:21;19452:1;19445:9;19438:17;19434:45;19431:71;;;19482:18;;:::i;:::-;-1:-1:-1;19522:9:1;;19369:168::o;19542:125::-;19582:4;19610:1;19607;19604:8;19601:34;;;19615:18;;:::i;:::-;-1:-1:-1;19652:9:1;;19542:125::o;19672:258::-;19744:1;19754:113;19768:6;19765:1;19762:13;19754:113;;;19844:11;;;19838:18;19825:11;;;19818:39;19790:2;19783:10;19754:113;;;19885:6;19882:1;19879:13;19876:48;;;-1:-1:-1;;19920:1:1;19902:16;;19895:27;19672:258::o;19935:380::-;20014:1;20010:12;;;;20057;;;20078:61;;20132:4;20124:6;20120:17;20110:27;;20078:61;20185:2;20177:6;20174:14;20154:18;20151:38;20148:161;;;20231:10;20226:3;20222:20;20219:1;20212:31;20266:4;20263:1;20256:15;20294:4;20291:1;20284:15;20148:161;;19935:380;;;:::o;20320:135::-;20359:3;-1:-1:-1;;20380:17:1;;20377:43;;;20400:18;;:::i;:::-;-1:-1:-1;20447:1:1;20436:13;;20320:135::o;20460:112::-;20492:1;20518;20508:35;;20523:18;;:::i;:::-;-1:-1:-1;20557:9:1;;20460:112::o;20577:127::-;20638:10;20633:3;20629:20;20626:1;20619:31;20669:4;20666:1;20659:15;20693:4;20690:1;20683:15;20709:127;20770:10;20765:3;20761:20;20758:1;20751:31;20801:4;20798:1;20791:15;20825:4;20822:1;20815:15;20841:127;20902:10;20897:3;20893:20;20890:1;20883:31;20933:4;20930:1;20923:15;20957:4;20954:1;20947:15;20973:127;21034:10;21029:3;21025:20;21022:1;21015:31;21065:4;21062:1;21055:15;21089:4;21086:1;21079:15;21105:131;-1:-1:-1;;;;;;21179:32:1;;21169:43;;21159:71;;21226:1;21223;21216:12
Swarm Source
ipfs://26150cf4889d0ab1d0c947f3757b934da76d6b5e32be7230589428303e820747
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.