ERC-721
Overview
Max Total Supply
9,001 TROLL
Holders
754
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 TROLLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
trolltowns
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-02 */ /** *Submitted for verification at Etherscan.io on 2022-05-19 */ // SPDX-License-Identifier: MIT // File: contracts/StartTokenIdHelper.sol // ERC721A Contracts v3.3.0 // Creators: Chiru Labs pragma solidity ^0.8.4; /** * This Helper is used to return a dynmamic value in the overriden _startTokenId() function. * Extending this Helper before the ERC721A contract give us access to the herein set `startTokenId` * to be returned by the overriden `_startTokenId()` function of ERC721A in the ERC721AStartTokenId mocks. */ contract StartTokenIdHelper { uint256 public startTokenId; constructor(uint256 startTokenId_) { startTokenId = startTokenId_; } } // 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/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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/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: contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // 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_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * 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) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ''; } /** * @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); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ 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 { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @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) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * 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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * 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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/trolltowns.sol pragma solidity ^0.8.4; contract trolltowns is StartTokenIdHelper, ERC721A, Ownable { using Strings for uint256; string baseURI; uint256 private _maxAmount; uint256 private _mintAmount; uint256 private _maxTXAmount; constructor(string memory name_, string memory symbol_) StartTokenIdHelper(1) ERC721A(name_, symbol_) { baseURI = "https://mnn.mypinata.cloud/ipfs/QmW3iP4s4DhiReQzXUHtui5SbYwWQ1CXB3waqzEtcijJF3/"; _maxAmount = 10000; _mintAmount = 9000; _maxTXAmount = 10; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function totalMinted() public view returns (uint256) { return _totalMinted(); } function getAux(address owner) public view returns (uint64) { return _getAux(owner); } function setAux(address owner, uint64 aux) public { _setAux(owner, aux); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory baseURI_) public onlyOwner { baseURI = baseURI_; } function maxAmount() public view returns (uint256) { return _maxAmount; } function setMaxAmount(uint256 maxAmount_) public onlyOwner { _maxAmount = maxAmount_; } function mintAmount() public view returns (uint256) { return _mintAmount; } function setMintAmount(uint256 mintAmount_) public onlyOwner { _mintAmount = mintAmount_; } function _startTokenId() internal view override returns (uint256) { return startTokenId; } function exists(uint256 tokenId) public view returns (bool) { return _exists(tokenId); } function burn(uint256 tokenId, bool approvalCheck) public onlyOwner { _burn(tokenId, approvalCheck); } function airDropMint(address to, uint256 quantity) external onlyOwner { require(totalMinted() + quantity <= _maxAmount, "Exceed max amount"); _safeMint(to, quantity); } function mint(uint256 quantity) external { // _safeMint's second argument now takes in a quantity, not a tokenId. require(quantity <= _maxTXAmount, "Exceed TX amount"); require(totalMinted() + quantity <= _mintAmount, "Exceed mint amount"); _safeMint(msg.sender, quantity); } function withdraw() external payable onlyOwner { uint256 amount = address(this).balance; Address.sendValue(payable(msg.sender), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airDropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"approvalCheck","type":"bool"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getAux","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"aux","type":"uint64"}],"name":"setAux","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount_","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"setMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
60806040523480156200001157600080fd5b50604051620041d3380380620041d38339818101604052810190620000379190620002fa565b81816001806000819055505081600390805190602001906200005b929190620001d8565b50806004908051906020019062000074929190620001d8565b50620000856200010160201b60201c565b6001819055505050620000ad620000a16200010a60201b60201c565b6200011260201b60201c565b6040518060800160405280604f815260200162004184604f9139600a9080519060200190620000de929190620001d8565b50612710600b81905550612328600c81905550600a600d819055505050620004dd565b60008054905090565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e69062000402565b90600052602060002090601f0160209004810192826200020a576000855562000256565b82601f106200022557805160ff191683800117855562000256565b8280016001018555821562000256579182015b828111156200025557825182559160200191906001019062000238565b5b50905062000265919062000269565b5090565b5b80821115620002845760008160009055506001016200026a565b5090565b60006200029f620002998462000396565b6200036d565b905082815260208101848484011115620002b857600080fd5b620002c5848285620003cc565b509392505050565b600082601f830112620002df57600080fd5b8151620002f184826020860162000288565b91505092915050565b600080604083850312156200030e57600080fd5b600083015167ffffffffffffffff8111156200032957600080fd5b6200033785828601620002cd565b925050602083015167ffffffffffffffff8111156200035557600080fd5b6200036385828601620002cd565b9150509250929050565b6000620003796200038c565b905062000387828262000438565b919050565b6000604051905090565b600067ffffffffffffffff821115620003b457620003b36200049d565b5b620003bf82620004cc565b9050602081019050919050565b60005b83811015620003ec578082015181840152602081019050620003cf565b83811115620003fc576000848401525b50505050565b600060028204905060018216806200041b57607f821691505b602082108114156200043257620004316200046e565b5b50919050565b6200044382620004cc565b810181811067ffffffffffffffff821117156200046557620004646200049d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613c9780620004ed6000396000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063b88d4fde11610095578063dc33e68111610064578063dc33e681146106cd578063e6798baa1461070a578063e985e9c514610735578063f2fde38b14610772576101e3565b8063b88d4fde14610601578063bf0b175e1461062a578063c7cd997f14610667578063c87b56dd14610690576101e3565b80639fac68cb116100d15780639fac68cb1461055b578063a0712d6814610584578063a22cb465146105ad578063a2309ff8146105d6576101e3565b8063715018a6146104c557806375a1ed08146104dc5780638da5cb5b1461050557806395d89b4114610530576101e3565b8063453ab1411161017a5780635a2bcc18116101495780635a2bcc18146103f55780635f48f393146104205780636352211e1461044b57806370a0823114610488576101e3565b8063453ab1411461033d5780634f558e79146103665780634fe47f70146103a357806355f804b3146103cc576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780633ccfd60b1461030a57806342842e0e14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613143565b61079b565b60405161021c9190613500565b60405180910390f35b34801561023157600080fd5b5061023a61087d565b604051610247919061351b565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906131d6565b61090f565b6040516102849190613499565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af91906130cb565b61098b565b005b3480156102c257600080fd5b506102cb610a90565b6040516102d8919061361d565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612fc5565b610aa7565b005b610312610ab7565b005b34801561032057600080fd5b5061033b60048036038101906103369190612fc5565b610b45565b005b34801561034957600080fd5b50610364600480360381019061035f9190613107565b610b65565b005b34801561037257600080fd5b5061038d600480360381019061038891906131d6565b610b73565b60405161039a9190613500565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906131d6565b610b85565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190613195565b610c0b565b005b34801561040157600080fd5b5061040a610ca1565b604051610417919061361d565b60405180910390f35b34801561042c57600080fd5b50610435610cab565b604051610442919061361d565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906131d6565b610cb5565b60405161047f9190613499565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612f60565b610ccb565b6040516104bc919061361d565b60405180910390f35b3480156104d157600080fd5b506104da610d9b565b005b3480156104e857600080fd5b5061050360048036038101906104fe91906130cb565b610e23565b005b34801561051157600080fd5b5061051a610f04565b6040516105279190613499565b60405180910390f35b34801561053c57600080fd5b50610545610f2e565b604051610552919061351b565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906131ff565b610fc0565b005b34801561059057600080fd5b506105ab60048036038101906105a691906131d6565b61104a565b005b3480156105b957600080fd5b506105d460048036038101906105cf919061308f565b6110f3565b005b3480156105e257600080fd5b506105eb61126b565b6040516105f8919061361d565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190613014565b61127a565b005b34801561063657600080fd5b50610651600480360381019061064c9190612f60565b6112f2565b60405161065e9190613638565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906131d6565b611304565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131d6565b61138a565b6040516106c4919061351b565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f60565b611429565b604051610701919061361d565b60405180910390f35b34801561071657600080fd5b5061071f61143b565b60405161072c919061361d565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190612f89565b611441565b6040516107699190613500565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612f60565b6114d5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108765750610875826115cd565b5b9050919050565b60606003805461088c906138ad565b80601f01602080910402602001604051908101604052809291908181526020018280546108b8906138ad565b80156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b5050505050905090565b600061091a82611637565b610950576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099682610cb5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109fe576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a1d611685565b73ffffffffffffffffffffffffffffffffffffffff1614610a8057610a4981610a44611685565b611441565b610a7f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610a8b83838361168d565b505050565b6000610a9a61173f565b6002546001540303905090565b610ab2838383611748565b505050565b610abf611685565b73ffffffffffffffffffffffffffffffffffffffff16610add610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906135bd565b60405180910390fd5b6000479050610b423382611bfe565b50565b610b608383836040518060200160405280600081525061127a565b505050565b610b6f8282611cf2565b5050565b6000610b7e82611637565b9050919050565b610b8d611685565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906135bd565b60405180910390fd5b80600b8190555050565b610c13611685565b73ffffffffffffffffffffffffffffffffffffffff16610c31610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906135bd565b60405180910390fd5b80600a9080519060200190610c9d929190612d2c565b5050565b6000600c54905090565b6000600b54905090565b6000610cc082611d5f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610da3611685565b73ffffffffffffffffffffffffffffffffffffffff16610dc1610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906135bd565b60405180910390fd5b610e216000611fea565b565b610e2b611685565b73ffffffffffffffffffffffffffffffffffffffff16610e49610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e96906135bd565b60405180910390fd5b600b5481610eab61126b565b610eb59190613728565b1115610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906135dd565b60405180910390fd5b610f0082826120b0565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f3d906138ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610f69906138ad565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b610fc8611685565b73ffffffffffffffffffffffffffffffffffffffff16610fe6610f04565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611033906135bd565b60405180910390fd5b61104682826120ce565b5050565b600d5481111561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906135fd565b60405180910390fd5b600c548161109b61126b565b6110a59190613728565b11156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd9061355d565b60405180910390fd5b6110f033826120b0565b50565b6110fb611685565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611160576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061116d611685565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661121a611685565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125f9190613500565b60405180910390a35050565b60006112756124be565b905090565b611285848484611748565b6112a48373ffffffffffffffffffffffffffffffffffffffff166124d1565b156112ec576112b5848484846124f4565b6112eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006112fd82612654565b9050919050565b61130c611685565b73ffffffffffffffffffffffffffffffffffffffff1661132a610f04565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906135bd565b60405180910390fd5b80600c8190555050565b606061139582611637565b6113cb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d56126b4565b90506000815114156113f65760405180602001604052806000815250611421565b8061140084612746565b604051602001611411929190613455565b6040516020818303038152906040525b915050919050565b6000611434826128f3565b9050919050565b60005481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114dd611685565b73ffffffffffffffffffffffffffffffffffffffff166114fb610f04565b73ffffffffffffffffffffffffffffffffffffffff1614611551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611548906135bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061353d565b60405180910390fd5b6115ca81611fea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161164261173f565b11158015611651575060015482105b801561167e575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b600061175382611d5f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146117be576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166117df611685565b73ffffffffffffffffffffffffffffffffffffffff16148061180e575061180d85611808611685565b611441565b5b80611853575061181c611685565b73ffffffffffffffffffffffffffffffffffffffff1661183b8461090f565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061188c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118f3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611900858585600161295d565b61190c6000848761168d565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b8c576001548214611b8b57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bf78585856001612963565b5050505050565b80471015611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c389061359d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611c6790613484565b60006040518083038185875af1925050503d8060008114611ca4576040519150601f19603f3d011682016040523d82523d6000602084013e611ca9565b606091505b5050905080611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce49061357d565b60405180910390fd5b505050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b611d67612db2565b600082905080611d7561173f565b11611fb357600154811015611fb2576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611fb057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e94578092505050611fe5565b5b600115611faf57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611faa578092505050611fe5565b611e95565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120ca828260405180602001604052806000815250612969565b5050565b60006120d983611d5f565b905060008160000151905082156121ba5760008173ffffffffffffffffffffffffffffffffffffffff1661210b611685565b73ffffffffffffffffffffffffffffffffffffffff16148061213a575061213982612134611685565b611441565b5b8061217f5750612148611685565b73ffffffffffffffffffffffffffffffffffffffff166121678661090f565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121b8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6121c881600086600161295d565b6121d46000858361168d565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561243857600154821461243757848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124a6816000866001612963565b60026000815480929190600101919050555050505050565b60006124c861173f565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261251a611685565b8786866040518563ffffffff1660e01b815260040161253c94939291906134b4565b602060405180830381600087803b15801561255657600080fd5b505af192505050801561258757506040513d601f19601f82011682018060405250810190612584919061316c565b60015b612601573d80600081146125b7576040519150601f19603f3d011682016040523d82523d6000602084013e6125bc565b606091505b506000815114156125f9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b6060600a80546126c3906138ad565b80601f01602080910402602001604051908101604052809291908181526020018280546126ef906138ad565b801561273c5780601f106127115761010080835404028352916020019161273c565b820191906000526020600020905b81548152906001019060200180831161271f57829003601f168201915b5050505050905090565b6060600082141561278e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ee565b600082905060005b600082146127c05780806127a990613910565b915050600a826127b9919061377e565b9150612796565b60008167ffffffffffffffff811115612802577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128345781602001600182028036833780820191505090505b5090505b600085146128e75760018261284d91906137af565b9150600a8561285c9190613959565b60306128689190613728565b60f81b8183815181106128a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128e0919061377e565b9450612838565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a12576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a1f600085838661295d565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612be08673ffffffffffffffffffffffffffffffffffffffff166124d1565b15612ca5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c5560008784806001019550876124f4565b612c8b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612be6578260015414612ca057600080fd5b612d10565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612ca6575b816001819055505050612d266000858386612963565b50505050565b828054612d38906138ad565b90600052602060002090601f016020900481019282612d5a5760008555612da1565b82601f10612d7357805160ff1916838001178555612da1565b82800160010185558215612da1579182015b82811115612da0578251825591602001919060010190612d85565b5b509050612dae9190612df5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612e0e576000816000905550600101612df6565b5090565b6000612e25612e2084613678565b613653565b905082815260208101848484011115612e3d57600080fd5b612e4884828561386b565b509392505050565b6000612e63612e5e846136a9565b613653565b905082815260208101848484011115612e7b57600080fd5b612e8684828561386b565b509392505050565b600081359050612e9d81613bee565b92915050565b600081359050612eb281613c05565b92915050565b600081359050612ec781613c1c565b92915050565b600081519050612edc81613c1c565b92915050565b600082601f830112612ef357600080fd5b8135612f03848260208601612e12565b91505092915050565b600082601f830112612f1d57600080fd5b8135612f2d848260208601612e50565b91505092915050565b600081359050612f4581613c33565b92915050565b600081359050612f5a81613c4a565b92915050565b600060208284031215612f7257600080fd5b6000612f8084828501612e8e565b91505092915050565b60008060408385031215612f9c57600080fd5b6000612faa85828601612e8e565b9250506020612fbb85828601612e8e565b9150509250929050565b600080600060608486031215612fda57600080fd5b6000612fe886828701612e8e565b9350506020612ff986828701612e8e565b925050604061300a86828701612f36565b9150509250925092565b6000806000806080858703121561302a57600080fd5b600061303887828801612e8e565b945050602061304987828801612e8e565b935050604061305a87828801612f36565b925050606085013567ffffffffffffffff81111561307757600080fd5b61308387828801612ee2565b91505092959194509250565b600080604083850312156130a257600080fd5b60006130b085828601612e8e565b92505060206130c185828601612ea3565b9150509250929050565b600080604083850312156130de57600080fd5b60006130ec85828601612e8e565b92505060206130fd85828601612f36565b9150509250929050565b6000806040838503121561311a57600080fd5b600061312885828601612e8e565b925050602061313985828601612f4b565b9150509250929050565b60006020828403121561315557600080fd5b600061316384828501612eb8565b91505092915050565b60006020828403121561317e57600080fd5b600061318c84828501612ecd565b91505092915050565b6000602082840312156131a757600080fd5b600082013567ffffffffffffffff8111156131c157600080fd5b6131cd84828501612f0c565b91505092915050565b6000602082840312156131e857600080fd5b60006131f684828501612f36565b91505092915050565b6000806040838503121561321257600080fd5b600061322085828601612f36565b925050602061323185828601612ea3565b9150509250929050565b613244816137e3565b82525050565b613253816137f5565b82525050565b6000613264826136da565b61326e81856136f0565b935061327e81856020860161387a565b61328781613a46565b840191505092915050565b600061329d826136e5565b6132a7818561370c565b93506132b781856020860161387a565b6132c081613a46565b840191505092915050565b60006132d6826136e5565b6132e0818561371d565b93506132f081856020860161387a565b80840191505092915050565b600061330960268361370c565b915061331482613a57565b604082019050919050565b600061332c60128361370c565b915061333782613aa6565b602082019050919050565b600061334f603a8361370c565b915061335a82613acf565b604082019050919050565b6000613372601d8361370c565b915061337d82613b1e565b602082019050919050565b600061339560058361371d565b91506133a082613b47565b600582019050919050565b60006133b860208361370c565b91506133c382613b70565b602082019050919050565b60006133db600083613701565b91506133e682613b99565b600082019050919050565b60006133fe60118361370c565b915061340982613b9c565b602082019050919050565b600061342160108361370c565b915061342c82613bc5565b602082019050919050565b6134408161384d565b82525050565b61344f81613857565b82525050565b600061346182856132cb565b915061346d82846132cb565b915061347882613388565b91508190509392505050565b600061348f826133ce565b9150819050919050565b60006020820190506134ae600083018461323b565b92915050565b60006080820190506134c9600083018761323b565b6134d6602083018661323b565b6134e36040830185613437565b81810360608301526134f58184613259565b905095945050505050565b6000602082019050613515600083018461324a565b92915050565b600060208201905081810360008301526135358184613292565b905092915050565b60006020820190508181036000830152613556816132fc565b9050919050565b600060208201905081810360008301526135768161331f565b9050919050565b6000602082019050818103600083015261359681613342565b9050919050565b600060208201905081810360008301526135b681613365565b9050919050565b600060208201905081810360008301526135d6816133ab565b9050919050565b600060208201905081810360008301526135f6816133f1565b9050919050565b6000602082019050818103600083015261361681613414565b9050919050565b60006020820190506136326000830184613437565b92915050565b600060208201905061364d6000830184613446565b92915050565b600061365d61366e565b905061366982826138df565b919050565b6000604051905090565b600067ffffffffffffffff82111561369357613692613a17565b5b61369c82613a46565b9050602081019050919050565b600067ffffffffffffffff8211156136c4576136c3613a17565b5b6136cd82613a46565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006137338261384d565b915061373e8361384d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137735761377261398a565b5b828201905092915050565b60006137898261384d565b91506137948361384d565b9250826137a4576137a36139b9565b5b828204905092915050565b60006137ba8261384d565b91506137c58361384d565b9250828210156137d8576137d761398a565b5b828203905092915050565b60006137ee8261382d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561389857808201518184015260208101905061387d565b838111156138a7576000848401525b50505050565b600060028204905060018216806138c557607f821691505b602082108114156138d9576138d86139e8565b5b50919050565b6138e882613a46565b810181811067ffffffffffffffff8211171561390757613906613a17565b5b80604052505050565b600061391b8261384d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d61398a565b5b600182019050919050565b60006139648261384d565b915061396f8361384d565b92508261397f5761397e6139b9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d696e7420616d6f756e740000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f457863656564206d617820616d6f756e74000000000000000000000000000000600082015250565b7f45786365656420545820616d6f756e7400000000000000000000000000000000600082015250565b613bf7816137e3565b8114613c0257600080fd5b50565b613c0e816137f5565b8114613c1957600080fd5b50565b613c2581613801565b8114613c3057600080fd5b50565b613c3c8161384d565b8114613c4757600080fd5b50565b613c5381613857565b8114613c5e57600080fd5b5056fea2646970667358221220b0791aa7b3e708ffffaf2531f541700d6f1290dd7bc9f2688ef9c3ad8acbb01864736f6c6343000804003368747470733a2f2f6d6e6e2e6d7970696e6174612e636c6f75642f697066732f516d573369503473344468695265517a5855487475693553625977575131435842337761717a457463696a4a46332f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a74726f6c6c746f776e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554524f4c4c000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063715018a611610102578063b88d4fde11610095578063dc33e68111610064578063dc33e681146106cd578063e6798baa1461070a578063e985e9c514610735578063f2fde38b14610772576101e3565b8063b88d4fde14610601578063bf0b175e1461062a578063c7cd997f14610667578063c87b56dd14610690576101e3565b80639fac68cb116100d15780639fac68cb1461055b578063a0712d6814610584578063a22cb465146105ad578063a2309ff8146105d6576101e3565b8063715018a6146104c557806375a1ed08146104dc5780638da5cb5b1461050557806395d89b4114610530576101e3565b8063453ab1411161017a5780635a2bcc18116101495780635a2bcc18146103f55780635f48f393146104205780636352211e1461044b57806370a0823114610488576101e3565b8063453ab1411461033d5780634f558e79146103665780634fe47f70146103a357806355f804b3146103cc576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780633ccfd60b1461030a57806342842e0e14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613143565b61079b565b60405161021c9190613500565b60405180910390f35b34801561023157600080fd5b5061023a61087d565b604051610247919061351b565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906131d6565b61090f565b6040516102849190613499565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af91906130cb565b61098b565b005b3480156102c257600080fd5b506102cb610a90565b6040516102d8919061361d565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612fc5565b610aa7565b005b610312610ab7565b005b34801561032057600080fd5b5061033b60048036038101906103369190612fc5565b610b45565b005b34801561034957600080fd5b50610364600480360381019061035f9190613107565b610b65565b005b34801561037257600080fd5b5061038d600480360381019061038891906131d6565b610b73565b60405161039a9190613500565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906131d6565b610b85565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190613195565b610c0b565b005b34801561040157600080fd5b5061040a610ca1565b604051610417919061361d565b60405180910390f35b34801561042c57600080fd5b50610435610cab565b604051610442919061361d565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906131d6565b610cb5565b60405161047f9190613499565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612f60565b610ccb565b6040516104bc919061361d565b60405180910390f35b3480156104d157600080fd5b506104da610d9b565b005b3480156104e857600080fd5b5061050360048036038101906104fe91906130cb565b610e23565b005b34801561051157600080fd5b5061051a610f04565b6040516105279190613499565b60405180910390f35b34801561053c57600080fd5b50610545610f2e565b604051610552919061351b565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906131ff565b610fc0565b005b34801561059057600080fd5b506105ab60048036038101906105a691906131d6565b61104a565b005b3480156105b957600080fd5b506105d460048036038101906105cf919061308f565b6110f3565b005b3480156105e257600080fd5b506105eb61126b565b6040516105f8919061361d565b60405180910390f35b34801561060d57600080fd5b5061062860048036038101906106239190613014565b61127a565b005b34801561063657600080fd5b50610651600480360381019061064c9190612f60565b6112f2565b60405161065e9190613638565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906131d6565b611304565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131d6565b61138a565b6040516106c4919061351b565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f60565b611429565b604051610701919061361d565b60405180910390f35b34801561071657600080fd5b5061071f61143b565b60405161072c919061361d565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190612f89565b611441565b6040516107699190613500565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612f60565b6114d5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108765750610875826115cd565b5b9050919050565b60606003805461088c906138ad565b80601f01602080910402602001604051908101604052809291908181526020018280546108b8906138ad565b80156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b5050505050905090565b600061091a82611637565b610950576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099682610cb5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109fe576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a1d611685565b73ffffffffffffffffffffffffffffffffffffffff1614610a8057610a4981610a44611685565b611441565b610a7f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610a8b83838361168d565b505050565b6000610a9a61173f565b6002546001540303905090565b610ab2838383611748565b505050565b610abf611685565b73ffffffffffffffffffffffffffffffffffffffff16610add610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906135bd565b60405180910390fd5b6000479050610b423382611bfe565b50565b610b608383836040518060200160405280600081525061127a565b505050565b610b6f8282611cf2565b5050565b6000610b7e82611637565b9050919050565b610b8d611685565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906135bd565b60405180910390fd5b80600b8190555050565b610c13611685565b73ffffffffffffffffffffffffffffffffffffffff16610c31610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906135bd565b60405180910390fd5b80600a9080519060200190610c9d929190612d2c565b5050565b6000600c54905090565b6000600b54905090565b6000610cc082611d5f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610da3611685565b73ffffffffffffffffffffffffffffffffffffffff16610dc1610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906135bd565b60405180910390fd5b610e216000611fea565b565b610e2b611685565b73ffffffffffffffffffffffffffffffffffffffff16610e49610f04565b73ffffffffffffffffffffffffffffffffffffffff1614610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e96906135bd565b60405180910390fd5b600b5481610eab61126b565b610eb59190613728565b1115610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906135dd565b60405180910390fd5b610f0082826120b0565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f3d906138ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610f69906138ad565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b610fc8611685565b73ffffffffffffffffffffffffffffffffffffffff16610fe6610f04565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611033906135bd565b60405180910390fd5b61104682826120ce565b5050565b600d5481111561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906135fd565b60405180910390fd5b600c548161109b61126b565b6110a59190613728565b11156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd9061355d565b60405180910390fd5b6110f033826120b0565b50565b6110fb611685565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611160576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061116d611685565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661121a611685565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125f9190613500565b60405180910390a35050565b60006112756124be565b905090565b611285848484611748565b6112a48373ffffffffffffffffffffffffffffffffffffffff166124d1565b156112ec576112b5848484846124f4565b6112eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006112fd82612654565b9050919050565b61130c611685565b73ffffffffffffffffffffffffffffffffffffffff1661132a610f04565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906135bd565b60405180910390fd5b80600c8190555050565b606061139582611637565b6113cb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d56126b4565b90506000815114156113f65760405180602001604052806000815250611421565b8061140084612746565b604051602001611411929190613455565b6040516020818303038152906040525b915050919050565b6000611434826128f3565b9050919050565b60005481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114dd611685565b73ffffffffffffffffffffffffffffffffffffffff166114fb610f04565b73ffffffffffffffffffffffffffffffffffffffff1614611551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611548906135bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061353d565b60405180910390fd5b6115ca81611fea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161164261173f565b11158015611651575060015482105b801561167e575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b600061175382611d5f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146117be576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166117df611685565b73ffffffffffffffffffffffffffffffffffffffff16148061180e575061180d85611808611685565b611441565b5b80611853575061181c611685565b73ffffffffffffffffffffffffffffffffffffffff1661183b8461090f565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061188c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118f3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611900858585600161295d565b61190c6000848761168d565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b8c576001548214611b8b57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bf78585856001612963565b5050505050565b80471015611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c389061359d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611c6790613484565b60006040518083038185875af1925050503d8060008114611ca4576040519150601f19603f3d011682016040523d82523d6000602084013e611ca9565b606091505b5050905080611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce49061357d565b60405180910390fd5b505050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b611d67612db2565b600082905080611d7561173f565b11611fb357600154811015611fb2576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611fb057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e94578092505050611fe5565b5b600115611faf57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611faa578092505050611fe5565b611e95565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120ca828260405180602001604052806000815250612969565b5050565b60006120d983611d5f565b905060008160000151905082156121ba5760008173ffffffffffffffffffffffffffffffffffffffff1661210b611685565b73ffffffffffffffffffffffffffffffffffffffff16148061213a575061213982612134611685565b611441565b5b8061217f5750612148611685565b73ffffffffffffffffffffffffffffffffffffffff166121678661090f565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121b8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6121c881600086600161295d565b6121d46000858361168d565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561243857600154821461243757848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124a6816000866001612963565b60026000815480929190600101919050555050505050565b60006124c861173f565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261251a611685565b8786866040518563ffffffff1660e01b815260040161253c94939291906134b4565b602060405180830381600087803b15801561255657600080fd5b505af192505050801561258757506040513d601f19601f82011682018060405250810190612584919061316c565b60015b612601573d80600081146125b7576040519150601f19603f3d011682016040523d82523d6000602084013e6125bc565b606091505b506000815114156125f9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b6060600a80546126c3906138ad565b80601f01602080910402602001604051908101604052809291908181526020018280546126ef906138ad565b801561273c5780601f106127115761010080835404028352916020019161273c565b820191906000526020600020905b81548152906001019060200180831161271f57829003601f168201915b5050505050905090565b6060600082141561278e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ee565b600082905060005b600082146127c05780806127a990613910565b915050600a826127b9919061377e565b9150612796565b60008167ffffffffffffffff811115612802577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128345781602001600182028036833780820191505090505b5090505b600085146128e75760018261284d91906137af565b9150600a8561285c9190613959565b60306128689190613728565b60f81b8183815181106128a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128e0919061377e565b9450612838565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a12576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a1f600085838661295d565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612be08673ffffffffffffffffffffffffffffffffffffffff166124d1565b15612ca5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c5560008784806001019550876124f4565b612c8b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612be6578260015414612ca057600080fd5b612d10565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612ca6575b816001819055505050612d266000858386612963565b50505050565b828054612d38906138ad565b90600052602060002090601f016020900481019282612d5a5760008555612da1565b82601f10612d7357805160ff1916838001178555612da1565b82800160010185558215612da1579182015b82811115612da0578251825591602001919060010190612d85565b5b509050612dae9190612df5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612e0e576000816000905550600101612df6565b5090565b6000612e25612e2084613678565b613653565b905082815260208101848484011115612e3d57600080fd5b612e4884828561386b565b509392505050565b6000612e63612e5e846136a9565b613653565b905082815260208101848484011115612e7b57600080fd5b612e8684828561386b565b509392505050565b600081359050612e9d81613bee565b92915050565b600081359050612eb281613c05565b92915050565b600081359050612ec781613c1c565b92915050565b600081519050612edc81613c1c565b92915050565b600082601f830112612ef357600080fd5b8135612f03848260208601612e12565b91505092915050565b600082601f830112612f1d57600080fd5b8135612f2d848260208601612e50565b91505092915050565b600081359050612f4581613c33565b92915050565b600081359050612f5a81613c4a565b92915050565b600060208284031215612f7257600080fd5b6000612f8084828501612e8e565b91505092915050565b60008060408385031215612f9c57600080fd5b6000612faa85828601612e8e565b9250506020612fbb85828601612e8e565b9150509250929050565b600080600060608486031215612fda57600080fd5b6000612fe886828701612e8e565b9350506020612ff986828701612e8e565b925050604061300a86828701612f36565b9150509250925092565b6000806000806080858703121561302a57600080fd5b600061303887828801612e8e565b945050602061304987828801612e8e565b935050604061305a87828801612f36565b925050606085013567ffffffffffffffff81111561307757600080fd5b61308387828801612ee2565b91505092959194509250565b600080604083850312156130a257600080fd5b60006130b085828601612e8e565b92505060206130c185828601612ea3565b9150509250929050565b600080604083850312156130de57600080fd5b60006130ec85828601612e8e565b92505060206130fd85828601612f36565b9150509250929050565b6000806040838503121561311a57600080fd5b600061312885828601612e8e565b925050602061313985828601612f4b565b9150509250929050565b60006020828403121561315557600080fd5b600061316384828501612eb8565b91505092915050565b60006020828403121561317e57600080fd5b600061318c84828501612ecd565b91505092915050565b6000602082840312156131a757600080fd5b600082013567ffffffffffffffff8111156131c157600080fd5b6131cd84828501612f0c565b91505092915050565b6000602082840312156131e857600080fd5b60006131f684828501612f36565b91505092915050565b6000806040838503121561321257600080fd5b600061322085828601612f36565b925050602061323185828601612ea3565b9150509250929050565b613244816137e3565b82525050565b613253816137f5565b82525050565b6000613264826136da565b61326e81856136f0565b935061327e81856020860161387a565b61328781613a46565b840191505092915050565b600061329d826136e5565b6132a7818561370c565b93506132b781856020860161387a565b6132c081613a46565b840191505092915050565b60006132d6826136e5565b6132e0818561371d565b93506132f081856020860161387a565b80840191505092915050565b600061330960268361370c565b915061331482613a57565b604082019050919050565b600061332c60128361370c565b915061333782613aa6565b602082019050919050565b600061334f603a8361370c565b915061335a82613acf565b604082019050919050565b6000613372601d8361370c565b915061337d82613b1e565b602082019050919050565b600061339560058361371d565b91506133a082613b47565b600582019050919050565b60006133b860208361370c565b91506133c382613b70565b602082019050919050565b60006133db600083613701565b91506133e682613b99565b600082019050919050565b60006133fe60118361370c565b915061340982613b9c565b602082019050919050565b600061342160108361370c565b915061342c82613bc5565b602082019050919050565b6134408161384d565b82525050565b61344f81613857565b82525050565b600061346182856132cb565b915061346d82846132cb565b915061347882613388565b91508190509392505050565b600061348f826133ce565b9150819050919050565b60006020820190506134ae600083018461323b565b92915050565b60006080820190506134c9600083018761323b565b6134d6602083018661323b565b6134e36040830185613437565b81810360608301526134f58184613259565b905095945050505050565b6000602082019050613515600083018461324a565b92915050565b600060208201905081810360008301526135358184613292565b905092915050565b60006020820190508181036000830152613556816132fc565b9050919050565b600060208201905081810360008301526135768161331f565b9050919050565b6000602082019050818103600083015261359681613342565b9050919050565b600060208201905081810360008301526135b681613365565b9050919050565b600060208201905081810360008301526135d6816133ab565b9050919050565b600060208201905081810360008301526135f6816133f1565b9050919050565b6000602082019050818103600083015261361681613414565b9050919050565b60006020820190506136326000830184613437565b92915050565b600060208201905061364d6000830184613446565b92915050565b600061365d61366e565b905061366982826138df565b919050565b6000604051905090565b600067ffffffffffffffff82111561369357613692613a17565b5b61369c82613a46565b9050602081019050919050565b600067ffffffffffffffff8211156136c4576136c3613a17565b5b6136cd82613a46565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006137338261384d565b915061373e8361384d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137735761377261398a565b5b828201905092915050565b60006137898261384d565b91506137948361384d565b9250826137a4576137a36139b9565b5b828204905092915050565b60006137ba8261384d565b91506137c58361384d565b9250828210156137d8576137d761398a565b5b828203905092915050565b60006137ee8261382d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561389857808201518184015260208101905061387d565b838111156138a7576000848401525b50505050565b600060028204905060018216806138c557607f821691505b602082108114156138d9576138d86139e8565b5b50919050565b6138e882613a46565b810181811067ffffffffffffffff8211171561390757613906613a17565b5b80604052505050565b600061391b8261384d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d61398a565b5b600182019050919050565b60006139648261384d565b915061396f8361384d565b92508261397f5761397e6139b9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d696e7420616d6f756e740000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f457863656564206d617820616d6f756e74000000000000000000000000000000600082015250565b7f45786365656420545820616d6f756e7400000000000000000000000000000000600082015250565b613bf7816137e3565b8114613c0257600080fd5b50565b613c0e816137f5565b8114613c1957600080fd5b50565b613c2581613801565b8114613c3057600080fd5b50565b613c3c8161384d565b8114613c4757600080fd5b50565b613c5381613857565b8114613c5e57600080fd5b5056fea2646970667358221220b0791aa7b3e708ffffaf2531f541700d6f1290dd7bc9f2688ef9c3ad8acbb01864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a74726f6c6c746f776e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554524f4c4c000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): trolltowns
Arg [1] : symbol_ (string): TROLL
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 74726f6c6c746f776e7300000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 54524f4c4c000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48132:2621:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29235:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32350:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33863:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33425:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28475:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34728:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50589:161;;;:::i;:::-;;34969:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48994:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49830:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49399:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49198:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49508:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49304:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32158:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29604:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5436:103;;;;;;;;;;;;;:::i;:::-;;50064:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4785:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32519:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49940:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50263:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34139:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48785:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35225:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48886:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49605:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32694:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48664:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;583:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34497:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5694:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29235:305;29337:4;29389:25;29374:40;;;:11;:40;;;;:105;;;;29446:33;29431:48;;;:11;:48;;;;29374:105;:158;;;;29496:36;29520:11;29496:23;:36::i;:::-;29374:158;29354:178;;29235:305;;;:::o;32350:100::-;32404:13;32437:5;32430:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32350:100;:::o;33863:204::-;33931:7;33956:16;33964:7;33956;:16::i;:::-;33951:64;;33981:34;;;;;;;;;;;;;;33951:64;34035:15;:24;34051:7;34035:24;;;;;;;;;;;;;;;;;;;;;34028:31;;33863:204;;;:::o;33425:372::-;33498:13;33514:24;33530:7;33514:15;:24::i;:::-;33498:40;;33559:5;33553:11;;:2;:11;;;33549:48;;;33573:24;;;;;;;;;;;;;;33549:48;33630:5;33614:21;;:12;:10;:12::i;:::-;:21;;;33610:139;;33641:37;33658:5;33665:12;:10;:12::i;:::-;33641:16;:37::i;:::-;33637:112;;33702:35;;;;;;;;;;;;;;33637:112;33610:139;33761:28;33770:2;33774:7;33783:5;33761:8;:28::i;:::-;33425:372;;;:::o;28475:312::-;28528:7;28753:15;:13;:15::i;:::-;28738:12;;28722:13;;:28;:46;28715:53;;28475:312;:::o;34728:170::-;34862:28;34872:4;34878:2;34882:7;34862:9;:28::i;:::-;34728:170;;;:::o;50589:161::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50647:14:::1;50664:21;50647:38;;50696:46;50722:10;50735:6;50696:17;:46::i;:::-;5076:1;50589:161::o:0;34969:185::-;35107:39;35124:4;35130:2;35134:7;35107:39;;;;;;;;;;;;:16;:39::i;:::-;34969:185;;;:::o;48994:88::-;49055:19;49063:5;49070:3;49055:7;:19::i;:::-;48994:88;;:::o;49830:102::-;49884:4;49908:16;49916:7;49908;:16::i;:::-;49901:23;;49830:102;;;:::o;49399:101::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49482:10:::1;49469;:23;;;;49399:101:::0;:::o;49198:98::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49280:8:::1;49270:7;:18;;;;;;;;;;;;:::i;:::-;;49198:98:::0;:::o;49508:89::-;49551:7;49578:11;;49571:18;;49508:89;:::o;49304:87::-;49346:7;49373:10;;49366:17;;49304:87;:::o;32158:125::-;32222:7;32249:21;32262:7;32249:12;:21::i;:::-;:26;;;32242:33;;32158:125;;;:::o;29604:206::-;29668:7;29709:1;29692:19;;:5;:19;;;29688:60;;;29720:28;;;;;;;;;;;;;;29688:60;29774:12;:19;29787:5;29774:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29766:36;;29759:43;;29604:206;;;:::o;5436:103::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5501:30:::1;5528:1;5501:18;:30::i;:::-;5436:103::o:0;50064:191::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50181:10:::1;;50169:8;50153:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;50145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50224:23;50234:2;50238:8;50224:9;:23::i;:::-;50064:191:::0;;:::o;4785:87::-;4831:7;4858:6;;;;;;;;;;;4851:13;;4785:87;:::o;32519:104::-;32575:13;32608:7;32601:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32519:104;:::o;49940:116::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50019:29:::1;50025:7;50034:13;50019:5;:29::i;:::-;49940:116:::0;;:::o;50263:318::-;50415:12;;50403:8;:24;;50395:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50495:11;;50483:8;50467:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:39;;50459:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50542:31;50552:10;50564:8;50542:9;:31::i;:::-;50263:318;:::o;34139:287::-;34250:12;:10;:12::i;:::-;34238:24;;:8;:24;;;34234:54;;;34271:17;;;;;;;;;;;;;;34234:54;34346:8;34301:18;:32;34320:12;:10;:12::i;:::-;34301:32;;;;;;;;;;;;;;;:42;34334:8;34301:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34399:8;34370:48;;34385:12;:10;:12::i;:::-;34370:48;;;34409:8;34370:48;;;;;;:::i;:::-;;;;;;;;34139:287;;:::o;48785:93::-;48829:7;48856:14;:12;:14::i;:::-;48849:21;;48785:93;:::o;35225:370::-;35392:28;35402:4;35408:2;35412:7;35392:9;:28::i;:::-;35435:15;:2;:13;;;:15::i;:::-;35431:157;;;35456:56;35487:4;35493:2;35497:7;35506:5;35456:30;:56::i;:::-;35452:136;;35536:40;;;;;;;;;;;;;;35452:136;35431:157;35225:370;;;;:::o;48886:100::-;48938:6;48964:14;48972:5;48964:7;:14::i;:::-;48957:21;;48886:100;;;:::o;49605:105::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49691:11:::1;49677;:25;;;;49605:105:::0;:::o;32694:327::-;32767:13;32798:16;32806:7;32798;:16::i;:::-;32793:59;;32823:29;;;;;;;;;;;;;;32793:59;32865:21;32889:10;:8;:10::i;:::-;32865:34;;32942:1;32923:7;32917:21;:26;;:96;;;;;;;;;;;;;;;;;32970:7;32979:18;:7;:16;:18::i;:::-;32953:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32917:96;32910:103;;;32694:327;;;:::o;48664:113::-;48722:7;48749:20;48763:5;48749:13;:20::i;:::-;48742:27;;48664:113;;;:::o;583:27::-;;;;:::o;34497:164::-;34594:4;34618:18;:25;34637:5;34618:25;;;;;;;;;;;;;;;:35;34644:8;34618:35;;;;;;;;;;;;;;;;;;;;;;;;;34611:42;;34497:164;;;;:::o;5694:201::-;5016:12;:10;:12::i;:::-;5005:23;;:7;:5;:7::i;:::-;:23;;;4997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5803:1:::1;5783:22;;:8;:22;;;;5775:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5859:28;5878:8;5859:18;:28::i;:::-;5694:201:::0;:::o;17592:157::-;17677:4;17716:25;17701:40;;;:11;:40;;;;17694:47;;17592:157;;;:::o;35850:174::-;35907:4;35950:7;35931:15;:13;:15::i;:::-;:26;;:53;;;;;35971:13;;35961:7;:23;35931:53;:85;;;;;35989:11;:20;36001:7;35989:20;;;;;;;;;;;:27;;;;;;;;;;;;35988:28;35931:85;35924:92;;35850:174;;;:::o;3509:98::-;3562:7;3589:10;3582:17;;3509:98;:::o;45072:196::-;45214:2;45187:15;:24;45203:7;45187:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45252:7;45248:2;45232:28;;45241:5;45232:28;;;;;;;;;;;;45072:196;;;:::o;49718:104::-;49775:7;49802:12;;49795:19;;49718:104;:::o;40020:2130::-;40135:35;40173:21;40186:7;40173:12;:21::i;:::-;40135:59;;40233:4;40211:26;;:13;:18;;;:26;;;40207:67;;40246:28;;;;;;;;;;;;;;40207:67;40287:22;40329:4;40313:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;40350:36;40367:4;40373:12;:10;:12::i;:::-;40350:16;:36::i;:::-;40313:73;:126;;;;40427:12;:10;:12::i;:::-;40403:36;;:20;40415:7;40403:11;:20::i;:::-;:36;;;40313:126;40287:153;;40458:17;40453:66;;40484:35;;;;;;;;;;;;;;40453:66;40548:1;40534:16;;:2;:16;;;40530:52;;;40559:23;;;;;;;;;;;;;;40530:52;40595:43;40617:4;40623:2;40627:7;40636:1;40595:21;:43::i;:::-;40703:35;40720:1;40724:7;40733:4;40703:8;:35::i;:::-;41064:1;41034:12;:18;41047:4;41034:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41108:1;41080:12;:16;41093:2;41080:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41126:31;41160:11;:20;41172:7;41160:20;;;;;;;;;;;41126:54;;41211:2;41195:8;:13;;;:18;;;;;;;;;;;;;;;;;;41261:15;41228:8;:23;;;:49;;;;;;;;;;;;;;;;;;41529:19;41561:1;41551:7;:11;41529:33;;41577:31;41611:11;:24;41623:11;41611:24;;;;;;;;;;;41577:58;;41679:1;41654:27;;:8;:13;;;;;;;;;;;;:27;;;41650:384;;;41864:13;;41849:11;:28;41845:174;;41918:4;41902:8;:13;;;:20;;;;;;;;;;;;;;;;;;41971:13;:28;;;41945:8;:23;;;:54;;;;;;;;;;;;;;;;;;41845:174;41650:384;40020:2130;;;42081:7;42077:2;42062:27;;42071:4;42062:27;;;;;;;;;;;;42100:42;42121:4;42127:2;42131:7;42140:1;42100:20;:42::i;:::-;40020:2130;;;;;:::o;8747:317::-;8862:6;8837:21;:31;;8829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8916:12;8934:9;:14;;8956:6;8934:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:52;;;8986:7;8978:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8747:317;;;:::o;30682:101::-;30772:3;30746:12;:19;30759:5;30746:19;;;;;;;;;;;;;;;:23;;;:29;;;;;;;;;;;;;;;;;;30682:101;;:::o;30985:1111::-;31047:21;;:::i;:::-;31081:12;31096:7;31081:22;;31164:4;31145:15;:13;:15::i;:::-;:23;31141:888;;31181:13;;31174:4;:20;31170:859;;;31215:31;31249:11;:17;31261:4;31249:17;;;;;;;;;;;31215:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31290:9;:16;;;31285:729;;31361:1;31335:28;;:9;:14;;;:28;;;31331:101;;31399:9;31392:16;;;;;;31331:101;31734:261;31741:4;31734:261;;;31774:6;;;;;;;;31819:11;:17;31831:4;31819:17;;;;;;;;;;;31807:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31893:1;31867:28;;:9;:14;;;:28;;;31863:109;;31935:9;31928:16;;;;;;31863:109;31734:261;;;31285:729;31170:859;;31141:888;32057:31;;;;;;;;;;;;;;30985:1111;;;;:::o;6055:191::-;6129:16;6148:6;;;;;;;;;;;6129:25;;6174:8;6165:6;;:17;;;;;;;;;;;;;;;;;;6229:8;6198:40;;6219:8;6198:40;;;;;;;;;;;;6055:191;;:::o;36108:104::-;36177:27;36187:2;36191:8;36177:27;;;;;;;;;;;;:9;:27::i;:::-;36108:104;;:::o;42546:2408::-;42626:35;42664:21;42677:7;42664:12;:21::i;:::-;42626:59;;42698:12;42713:13;:18;;;42698:33;;42748:13;42744:290;;;42778:22;42820:4;42804:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;42845:36;42862:4;42868:12;:10;:12::i;:::-;42845:16;:36::i;:::-;42804:77;:134;;;;42926:12;:10;:12::i;:::-;42902:36;;:20;42914:7;42902:11;:20::i;:::-;:36;;;42804:134;42778:161;;42961:17;42956:66;;42987:35;;;;;;;;;;;;;;42956:66;42744:290;;43046:51;43068:4;43082:1;43086:7;43095:1;43046:21;:51::i;:::-;43162:35;43179:1;43183:7;43192:4;43162:8;:35::i;:::-;43493:31;43527:12;:18;43540:4;43527:18;;;;;;;;;;;;;;;43493:52;;43583:1;43560:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43627:1;43599:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43727:31;43761:11;:20;43773:7;43761:20;;;;;;;;;;;43727:54;;43812:4;43796:8;:13;;;:20;;;;;;;;;;;;;;;;;;43864:15;43831:8;:23;;;:49;;;;;;;;;;;;;;;;;;43913:4;43895:8;:15;;;:22;;;;;;;;;;;;;;;;;;44165:19;44197:1;44187:7;:11;44165:33;;44213:31;44247:11;:24;44259:11;44247:24;;;;;;;;;;;44213:58;;44315:1;44290:27;;:8;:13;;;;;;;;;;;;:27;;;44286:384;;;44500:13;;44485:11;:28;44481:174;;44554:4;44538:8;:13;;;:20;;;;;;;;;;;;;;;;;;44607:13;:28;;;44581:8;:23;;;:54;;;;;;;;;;;;;;;;;;44481:174;44286:384;42546:2408;;;;44725:7;44721:1;44698:35;;44707:4;44698:35;;;;;;;;;;;;44744:50;44765:4;44779:1;44783:7;44792:1;44744:20;:50::i;:::-;44921:12;;:14;;;;;;;;;;;;;42546:2408;;;;:::o;28880:283::-;28927:7;29129:15;:13;:15::i;:::-;29113:13;;:31;29106:38;;28880:283;:::o;7486:326::-;7546:4;7803:1;7781:7;:19;;;:23;7774:30;;7486:326;;;:::o;45760:667::-;45923:4;45960:2;45944:36;;;45981:12;:10;:12::i;:::-;45995:4;46001:7;46010:5;45944:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45940:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46195:1;46178:6;:13;:18;46174:235;;;46224:40;;;;;;;;;;;;;;46174:235;46367:6;46361:13;46352:6;46348:2;46344:15;46337:38;45940:480;46073:45;;;46063:55;;;:6;:55;;;;46056:62;;;45760:667;;;;;;:::o;30382:112::-;30437:6;30463:12;:19;30476:5;30463:19;;;;;;;;;;;;;;;:23;;;;;;;;;;;;30456:30;;30382:112;;;:::o;49090:100::-;49142:13;49175:7;49168:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49090:100;:::o;1071:723::-;1127:13;1357:1;1348:5;:10;1344:53;;;1375:10;;;;;;;;;;;;;;;;;;;;;1344:53;1407:12;1422:5;1407:20;;1438:14;1463:78;1478:1;1470:4;:9;1463:78;;1496:8;;;;;:::i;:::-;;;;1527:2;1519:10;;;;;:::i;:::-;;;1463:78;;;1551:19;1583:6;1573:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1551:39;;1601:154;1617:1;1608:5;:10;1601:154;;1645:1;1635:11;;;;;:::i;:::-;;;1712:2;1704:5;:10;;;;:::i;:::-;1691:2;:24;;;;:::i;:::-;1678:39;;1661:6;1668;1661:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1741:2;1732:11;;;;;:::i;:::-;;;1601:154;;;1779:6;1765:21;;;;;1071:723;;;;:::o;29892:137::-;29953:7;29988:12;:19;30001:5;29988:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;29980:41;;29973:48;;29892:137;;;:::o;47075:159::-;;;;;:::o;47893:158::-;;;;;:::o;36585:1749::-;36708:20;36731:13;;36708:36;;36773:1;36759:16;;:2;:16;;;36755:48;;;36784:19;;;;;;;;;;;;;;36755:48;36830:1;36818:8;:13;36814:44;;;36840:18;;;;;;;;;;;;;;36814:44;36871:61;36901:1;36905:2;36909:12;36923:8;36871:21;:61::i;:::-;37244:8;37209:12;:16;37222:2;37209:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37308:8;37268:12;:16;37281:2;37268:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37367:2;37334:11;:25;37346:12;37334:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37434:15;37384:11;:25;37396:12;37384:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37467:20;37490:12;37467:35;;37517:11;37546:8;37531:12;:23;37517:37;;37575:15;:2;:13;;;:15::i;:::-;37571:631;;;37611:313;37667:12;37663:2;37642:38;;37659:1;37642:38;;;;;;;;;;;;37708:69;37747:1;37751:2;37755:14;;;;;;37771:5;37708:30;:69::i;:::-;37703:174;;37813:40;;;;;;;;;;;;;;37703:174;37919:3;37904:12;:18;37611:313;;38005:12;37988:13;;:29;37984:43;;38019:8;;;37984:43;37571:631;;;38068:119;38124:14;;;;;;38120:2;38099:40;;38116:1;38099:40;;;;;;;;;;;;38182:3;38167:12;:18;38068:119;;37571:631;38232:12;38216:13;:28;;;;36585:1749;;38266:60;38295:1;38299:2;38303:12;38317:8;38266:20;:60::i;:::-;36585:1749;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:137::-;2054:5;2092:6;2079:20;2070:29;;2108:32;2134:5;2108:32;:::i;:::-;2060:86;;;;:::o;2152:262::-;2211:6;2260:2;2248:9;2239:7;2235:23;2231:32;2228:2;;;2276:1;2273;2266:12;2228:2;2319:1;2344:53;2389:7;2380:6;2369:9;2365:22;2344:53;:::i;:::-;2334:63;;2290:117;2218:196;;;;:::o;2420:407::-;2488:6;2496;2545:2;2533:9;2524:7;2520:23;2516:32;2513:2;;;2561:1;2558;2551:12;2513:2;2604:1;2629:53;2674:7;2665:6;2654:9;2650:22;2629:53;:::i;:::-;2619:63;;2575:117;2731:2;2757:53;2802:7;2793:6;2782:9;2778:22;2757:53;:::i;:::-;2747:63;;2702:118;2503:324;;;;;:::o;2833:552::-;2910:6;2918;2926;2975:2;2963:9;2954:7;2950:23;2946:32;2943:2;;;2991:1;2988;2981:12;2943:2;3034:1;3059:53;3104:7;3095:6;3084:9;3080:22;3059:53;:::i;:::-;3049:63;;3005:117;3161:2;3187:53;3232:7;3223:6;3212:9;3208:22;3187:53;:::i;:::-;3177:63;;3132:118;3289:2;3315:53;3360:7;3351:6;3340:9;3336:22;3315:53;:::i;:::-;3305:63;;3260:118;2933:452;;;;;:::o;3391:809::-;3486:6;3494;3502;3510;3559:3;3547:9;3538:7;3534:23;3530:33;3527:2;;;3576:1;3573;3566:12;3527:2;3619:1;3644:53;3689:7;3680:6;3669:9;3665:22;3644:53;:::i;:::-;3634:63;;3590:117;3746:2;3772:53;3817:7;3808:6;3797:9;3793:22;3772:53;:::i;:::-;3762:63;;3717:118;3874:2;3900:53;3945:7;3936:6;3925:9;3921:22;3900:53;:::i;:::-;3890:63;;3845:118;4030:2;4019:9;4015:18;4002:32;4061:18;4053:6;4050:30;4047:2;;;4093:1;4090;4083:12;4047:2;4121:62;4175:7;4166:6;4155:9;4151:22;4121:62;:::i;:::-;4111:72;;3973:220;3517:683;;;;;;;:::o;4206:401::-;4271:6;4279;4328:2;4316:9;4307:7;4303:23;4299:32;4296:2;;;4344:1;4341;4334:12;4296:2;4387:1;4412:53;4457:7;4448:6;4437:9;4433:22;4412:53;:::i;:::-;4402:63;;4358:117;4514:2;4540:50;4582:7;4573:6;4562:9;4558:22;4540:50;:::i;:::-;4530:60;;4485:115;4286:321;;;;;:::o;4613:407::-;4681:6;4689;4738:2;4726:9;4717:7;4713:23;4709:32;4706:2;;;4754:1;4751;4744:12;4706:2;4797:1;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;:::i;:::-;4812:63;;4768:117;4924:2;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4895:118;4696:324;;;;;:::o;5026:405::-;5093:6;5101;5150:2;5138:9;5129:7;5125:23;5121:32;5118:2;;;5166:1;5163;5156:12;5118:2;5209:1;5234:53;5279:7;5270:6;5259:9;5255:22;5234:53;:::i;:::-;5224:63;;5180:117;5336:2;5362:52;5406:7;5397:6;5386:9;5382:22;5362:52;:::i;:::-;5352:62;;5307:117;5108:323;;;;;:::o;5437:260::-;5495:6;5544:2;5532:9;5523:7;5519:23;5515:32;5512:2;;;5560:1;5557;5550:12;5512:2;5603:1;5628:52;5672:7;5663:6;5652:9;5648:22;5628:52;:::i;:::-;5618:62;;5574:116;5502:195;;;;:::o;5703:282::-;5772:6;5821:2;5809:9;5800:7;5796:23;5792:32;5789:2;;;5837:1;5834;5827:12;5789:2;5880:1;5905:63;5960:7;5951:6;5940:9;5936:22;5905:63;:::i;:::-;5895:73;;5851:127;5779:206;;;;:::o;5991:375::-;6060:6;6109:2;6097:9;6088:7;6084:23;6080:32;6077:2;;;6125:1;6122;6115:12;6077:2;6196:1;6185:9;6181:17;6168:31;6226:18;6218:6;6215:30;6212:2;;;6258:1;6255;6248:12;6212:2;6286:63;6341:7;6332:6;6321:9;6317:22;6286:63;:::i;:::-;6276:73;;6139:220;6067:299;;;;:::o;6372:262::-;6431:6;6480:2;6468:9;6459:7;6455:23;6451:32;6448:2;;;6496:1;6493;6486:12;6448:2;6539:1;6564:53;6609:7;6600:6;6589:9;6585:22;6564:53;:::i;:::-;6554:63;;6510:117;6438:196;;;;:::o;6640:401::-;6705:6;6713;6762:2;6750:9;6741:7;6737:23;6733:32;6730:2;;;6778:1;6775;6768:12;6730:2;6821:1;6846:53;6891:7;6882:6;6871:9;6867:22;6846:53;:::i;:::-;6836:63;;6792:117;6948:2;6974:50;7016:7;7007:6;6996:9;6992:22;6974:50;:::i;:::-;6964:60;;6919:115;6720:321;;;;;:::o;7047:118::-;7134:24;7152:5;7134:24;:::i;:::-;7129:3;7122:37;7112:53;;:::o;7171:109::-;7252:21;7267:5;7252:21;:::i;:::-;7247:3;7240:34;7230:50;;:::o;7286:360::-;7372:3;7400:38;7432:5;7400:38;:::i;:::-;7454:70;7517:6;7512:3;7454:70;:::i;:::-;7447:77;;7533:52;7578:6;7573:3;7566:4;7559:5;7555:16;7533:52;:::i;:::-;7610:29;7632:6;7610:29;:::i;:::-;7605:3;7601:39;7594:46;;7376:270;;;;;:::o;7652:364::-;7740:3;7768:39;7801:5;7768:39;:::i;:::-;7823:71;7887:6;7882:3;7823:71;:::i;:::-;7816:78;;7903:52;7948:6;7943:3;7936:4;7929:5;7925:16;7903:52;:::i;:::-;7980:29;8002:6;7980:29;:::i;:::-;7975:3;7971:39;7964:46;;7744:272;;;;;:::o;8022:377::-;8128:3;8156:39;8189:5;8156:39;:::i;:::-;8211:89;8293:6;8288:3;8211:89;:::i;:::-;8204:96;;8309:52;8354:6;8349:3;8342:4;8335:5;8331:16;8309:52;:::i;:::-;8386:6;8381:3;8377:16;8370:23;;8132:267;;;;;:::o;8405:366::-;8547:3;8568:67;8632:2;8627:3;8568:67;:::i;:::-;8561:74;;8644:93;8733:3;8644:93;:::i;:::-;8762:2;8757:3;8753:12;8746:19;;8551:220;;;:::o;8777:366::-;8919:3;8940:67;9004:2;8999:3;8940:67;:::i;:::-;8933:74;;9016:93;9105:3;9016:93;:::i;:::-;9134:2;9129:3;9125:12;9118:19;;8923:220;;;:::o;9149:366::-;9291:3;9312:67;9376:2;9371:3;9312:67;:::i;:::-;9305:74;;9388:93;9477:3;9388:93;:::i;:::-;9506:2;9501:3;9497:12;9490:19;;9295:220;;;:::o;9521:366::-;9663:3;9684:67;9748:2;9743:3;9684:67;:::i;:::-;9677:74;;9760:93;9849:3;9760:93;:::i;:::-;9878:2;9873:3;9869:12;9862:19;;9667:220;;;:::o;9893:400::-;10053:3;10074:84;10156:1;10151:3;10074:84;:::i;:::-;10067:91;;10167:93;10256:3;10167:93;:::i;:::-;10285:1;10280:3;10276:11;10269:18;;10057:236;;;:::o;10299:366::-;10441:3;10462:67;10526:2;10521:3;10462:67;:::i;:::-;10455:74;;10538:93;10627:3;10538:93;:::i;:::-;10656:2;10651:3;10647:12;10640:19;;10445:220;;;:::o;10671:398::-;10830:3;10851:83;10932:1;10927:3;10851:83;:::i;:::-;10844:90;;10943:93;11032:3;10943:93;:::i;:::-;11061:1;11056:3;11052:11;11045:18;;10834:235;;;:::o;11075:366::-;11217:3;11238:67;11302:2;11297:3;11238:67;:::i;:::-;11231:74;;11314:93;11403:3;11314:93;:::i;:::-;11432:2;11427:3;11423:12;11416:19;;11221:220;;;:::o;11447:366::-;11589:3;11610:67;11674:2;11669:3;11610:67;:::i;:::-;11603:74;;11686:93;11775:3;11686:93;:::i;:::-;11804:2;11799:3;11795:12;11788:19;;11593:220;;;:::o;11819:118::-;11906:24;11924:5;11906:24;:::i;:::-;11901:3;11894:37;11884:53;;:::o;11943:115::-;12028:23;12045:5;12028:23;:::i;:::-;12023:3;12016:36;12006:52;;:::o;12064:701::-;12345:3;12367:95;12458:3;12449:6;12367:95;:::i;:::-;12360:102;;12479:95;12570:3;12561:6;12479:95;:::i;:::-;12472:102;;12591:148;12735:3;12591:148;:::i;:::-;12584:155;;12756:3;12749:10;;12349:416;;;;;:::o;12771:379::-;12955:3;12977:147;13120:3;12977:147;:::i;:::-;12970:154;;13141:3;13134:10;;12959:191;;;:::o;13156:222::-;13249:4;13287:2;13276:9;13272:18;13264:26;;13300:71;13368:1;13357:9;13353:17;13344:6;13300:71;:::i;:::-;13254:124;;;;:::o;13384:640::-;13579:4;13617:3;13606:9;13602:19;13594:27;;13631:71;13699:1;13688:9;13684:17;13675:6;13631:71;:::i;:::-;13712:72;13780:2;13769:9;13765:18;13756:6;13712:72;:::i;:::-;13794;13862:2;13851:9;13847:18;13838:6;13794:72;:::i;:::-;13913:9;13907:4;13903:20;13898:2;13887:9;13883:18;13876:48;13941:76;14012:4;14003:6;13941:76;:::i;:::-;13933:84;;13584:440;;;;;;;:::o;14030:210::-;14117:4;14155:2;14144:9;14140:18;14132:26;;14168:65;14230:1;14219:9;14215:17;14206:6;14168:65;:::i;:::-;14122:118;;;;:::o;14246:313::-;14359:4;14397:2;14386:9;14382:18;14374:26;;14446:9;14440:4;14436:20;14432:1;14421:9;14417:17;14410:47;14474:78;14547:4;14538:6;14474:78;:::i;:::-;14466:86;;14364:195;;;;:::o;14565:419::-;14731:4;14769:2;14758:9;14754:18;14746:26;;14818:9;14812:4;14808:20;14804:1;14793:9;14789:17;14782:47;14846:131;14972:4;14846:131;:::i;:::-;14838:139;;14736:248;;;:::o;14990:419::-;15156:4;15194:2;15183:9;15179:18;15171:26;;15243:9;15237:4;15233:20;15229:1;15218:9;15214:17;15207:47;15271:131;15397:4;15271:131;:::i;:::-;15263:139;;15161:248;;;:::o;15415:419::-;15581:4;15619:2;15608:9;15604:18;15596:26;;15668:9;15662:4;15658:20;15654:1;15643:9;15639:17;15632:47;15696:131;15822:4;15696:131;:::i;:::-;15688:139;;15586:248;;;:::o;15840:419::-;16006:4;16044:2;16033:9;16029:18;16021:26;;16093:9;16087:4;16083:20;16079:1;16068:9;16064:17;16057:47;16121:131;16247:4;16121:131;:::i;:::-;16113:139;;16011:248;;;:::o;16265:419::-;16431:4;16469:2;16458:9;16454:18;16446:26;;16518:9;16512:4;16508:20;16504:1;16493:9;16489:17;16482:47;16546:131;16672:4;16546:131;:::i;:::-;16538:139;;16436:248;;;:::o;16690:419::-;16856:4;16894:2;16883:9;16879:18;16871:26;;16943:9;16937:4;16933:20;16929:1;16918:9;16914:17;16907:47;16971:131;17097:4;16971:131;:::i;:::-;16963:139;;16861:248;;;:::o;17115:419::-;17281:4;17319:2;17308:9;17304:18;17296:26;;17368:9;17362:4;17358:20;17354:1;17343:9;17339:17;17332:47;17396:131;17522:4;17396:131;:::i;:::-;17388:139;;17286:248;;;:::o;17540:222::-;17633:4;17671:2;17660:9;17656:18;17648:26;;17684:71;17752:1;17741:9;17737:17;17728:6;17684:71;:::i;:::-;17638:124;;;;:::o;17768:218::-;17859:4;17897:2;17886:9;17882:18;17874:26;;17910:69;17976:1;17965:9;17961:17;17952:6;17910:69;:::i;:::-;17864:122;;;;:::o;17992:129::-;18026:6;18053:20;;:::i;:::-;18043:30;;18082:33;18110:4;18102:6;18082:33;:::i;:::-;18033:88;;;:::o;18127:75::-;18160:6;18193:2;18187:9;18177:19;;18167:35;:::o;18208:307::-;18269:4;18359:18;18351:6;18348:30;18345:2;;;18381:18;;:::i;:::-;18345:2;18419:29;18441:6;18419:29;:::i;:::-;18411:37;;18503:4;18497;18493:15;18485:23;;18274:241;;;:::o;18521:308::-;18583:4;18673:18;18665:6;18662:30;18659:2;;;18695:18;;:::i;:::-;18659:2;18733:29;18755:6;18733:29;:::i;:::-;18725:37;;18817:4;18811;18807:15;18799:23;;18588:241;;;:::o;18835:98::-;18886:6;18920:5;18914:12;18904:22;;18893:40;;;:::o;18939:99::-;18991:6;19025:5;19019:12;19009:22;;18998:40;;;:::o;19044:168::-;19127:11;19161:6;19156:3;19149:19;19201:4;19196:3;19192:14;19177:29;;19139:73;;;;:::o;19218:147::-;19319:11;19356:3;19341:18;;19331:34;;;;:::o;19371:169::-;19455:11;19489:6;19484:3;19477:19;19529:4;19524:3;19520:14;19505:29;;19467:73;;;;:::o;19546:148::-;19648:11;19685:3;19670:18;;19660:34;;;;:::o;19700:305::-;19740:3;19759:20;19777:1;19759:20;:::i;:::-;19754:25;;19793:20;19811:1;19793:20;:::i;:::-;19788:25;;19947:1;19879:66;19875:74;19872:1;19869:81;19866:2;;;19953:18;;:::i;:::-;19866:2;19997:1;19994;19990:9;19983:16;;19744:261;;;;:::o;20011:185::-;20051:1;20068:20;20086:1;20068:20;:::i;:::-;20063:25;;20102:20;20120:1;20102:20;:::i;:::-;20097:25;;20141:1;20131:2;;20146:18;;:::i;:::-;20131:2;20188:1;20185;20181:9;20176:14;;20053:143;;;;:::o;20202:191::-;20242:4;20262:20;20280:1;20262:20;:::i;:::-;20257:25;;20296:20;20314:1;20296:20;:::i;:::-;20291:25;;20335:1;20332;20329:8;20326:2;;;20340:18;;:::i;:::-;20326:2;20385:1;20382;20378:9;20370:17;;20247:146;;;;:::o;20399:96::-;20436:7;20465:24;20483:5;20465:24;:::i;:::-;20454:35;;20444:51;;;:::o;20501:90::-;20535:7;20578:5;20571:13;20564:21;20553:32;;20543:48;;;:::o;20597:149::-;20633:7;20673:66;20666:5;20662:78;20651:89;;20641:105;;;:::o;20752:126::-;20789:7;20829:42;20822:5;20818:54;20807:65;;20797:81;;;:::o;20884:77::-;20921:7;20950:5;20939:16;;20929:32;;;:::o;20967:101::-;21003:7;21043:18;21036:5;21032:30;21021:41;;21011:57;;;:::o;21074:154::-;21158:6;21153:3;21148;21135:30;21220:1;21211:6;21206:3;21202:16;21195:27;21125:103;;;:::o;21234:307::-;21302:1;21312:113;21326:6;21323:1;21320:13;21312:113;;;21411:1;21406:3;21402:11;21396:18;21392:1;21387:3;21383:11;21376:39;21348:2;21345:1;21341:10;21336:15;;21312:113;;;21443:6;21440:1;21437:13;21434:2;;;21523:1;21514:6;21509:3;21505:16;21498:27;21434:2;21283:258;;;;:::o;21547:320::-;21591:6;21628:1;21622:4;21618:12;21608:22;;21675:1;21669:4;21665:12;21696:18;21686:2;;21752:4;21744:6;21740:17;21730:27;;21686:2;21814;21806:6;21803:14;21783:18;21780:38;21777:2;;;21833:18;;:::i;:::-;21777:2;21598:269;;;;:::o;21873:281::-;21956:27;21978:4;21956:27;:::i;:::-;21948:6;21944:40;22086:6;22074:10;22071:22;22050:18;22038:10;22035:34;22032:62;22029:2;;;22097:18;;:::i;:::-;22029:2;22137:10;22133:2;22126:22;21916:238;;;:::o;22160:233::-;22199:3;22222:24;22240:5;22222:24;:::i;:::-;22213:33;;22268:66;22261:5;22258:77;22255:2;;;22338:18;;:::i;:::-;22255:2;22385:1;22378:5;22374:13;22367:20;;22203:190;;;:::o;22399:176::-;22431:1;22448:20;22466:1;22448:20;:::i;:::-;22443:25;;22482:20;22500:1;22482:20;:::i;:::-;22477:25;;22521:1;22511:2;;22526:18;;:::i;:::-;22511:2;22567:1;22564;22560:9;22555:14;;22433:142;;;;:::o;22581:180::-;22629:77;22626:1;22619:88;22726:4;22723:1;22716:15;22750:4;22747:1;22740:15;22767:180;22815:77;22812:1;22805:88;22912:4;22909:1;22902:15;22936:4;22933:1;22926:15;22953:180;23001:77;22998:1;22991:88;23098:4;23095:1;23088:15;23122:4;23119:1;23112:15;23139:180;23187:77;23184:1;23177:88;23284:4;23281:1;23274:15;23308:4;23305:1;23298:15;23325:102;23366:6;23417:2;23413:7;23408:2;23401:5;23397:14;23393:28;23383:38;;23373:54;;;:::o;23433:225::-;23573:34;23569:1;23561:6;23557:14;23550:58;23642:8;23637:2;23629:6;23625:15;23618:33;23539:119;:::o;23664:168::-;23804:20;23800:1;23792:6;23788:14;23781:44;23770:62;:::o;23838:245::-;23978:34;23974:1;23966:6;23962:14;23955:58;24047:28;24042:2;24034:6;24030:15;24023:53;23944:139;:::o;24089:179::-;24229:31;24225:1;24217:6;24213:14;24206:55;24195:73;:::o;24274:155::-;24414:7;24410:1;24402:6;24398:14;24391:31;24380:49;:::o;24435:182::-;24575:34;24571:1;24563:6;24559:14;24552:58;24541:76;:::o;24623:114::-;24729:8;:::o;24743:167::-;24883:19;24879:1;24871:6;24867:14;24860:43;24849:61;:::o;24916:166::-;25056:18;25052:1;25044:6;25040:14;25033:42;25022:60;:::o;25088:122::-;25161:24;25179:5;25161:24;:::i;:::-;25154:5;25151:35;25141:2;;25200:1;25197;25190:12;25141:2;25131:79;:::o;25216:116::-;25286:21;25301:5;25286:21;:::i;:::-;25279:5;25276:32;25266:2;;25322:1;25319;25312:12;25266:2;25256:76;:::o;25338:120::-;25410:23;25427:5;25410:23;:::i;:::-;25403:5;25400:34;25390:2;;25448:1;25445;25438:12;25390:2;25380:78;:::o;25464:122::-;25537:24;25555:5;25537:24;:::i;:::-;25530:5;25527:35;25517:2;;25576:1;25573;25566:12;25517:2;25507:79;:::o;25592:120::-;25664:23;25681:5;25664:23;:::i;:::-;25657:5;25654:34;25644:2;;25702:1;25699;25692:12;25644:2;25634:78;:::o
Swarm Source
ipfs://b0791aa7b3e708ffffaf2531f541700d6f1290dd7bc9f2688ef9c3ad8acbb018
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.