ERC-721
Overview
Max Total Supply
6,545 NFT
Holders
870
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
17 NFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OGAC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-12 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @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, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // 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; } // 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 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 && 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())) : ''; } /** * @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 && !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() && !_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; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; 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 (safe && 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 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 This is 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: OGAC.sol pragma solidity ^0.8.7; interface IOGToken { function updateRewardOnMint( address _user, uint256 _amount, uint8 _type ) external; } contract OGAC is ERC721A { using Strings for uint256; IOGToken public ogToken; string private baseApiURI; bool public mintClosed = false; bool public whiteListSale = true; uint256 public maxMintWhiteList = 5; uint256 public maxSupply = 8420; uint256 public florPrice = 0.06 ether; address internal breedingContract; address public owner; event OGMinted(address owner, uint256 amount); event ReceivedEth(address, uint256); constructor(string memory baseUri, address tokenAddress) payable ERC721A("OG Ape Club", "NFT") { owner = msg.sender; baseApiURI = baseUri; ogToken = IOGToken(tokenAddress); } fallback() external payable {} receive() external payable { emit ReceivedEth(msg.sender, msg.value); } modifier onlyOwner(address sender) { require(sender == owner, "Only Owner"); _; } /////////////////////////////////////////////////////////////// // OG Set States /////////////////////////////////////////////////////////////// function setBreedingContractAddress(address _stakingAddress) public onlyOwner(msg.sender) { breedingContract = _stakingAddress; } function setOGTokenAddress(address _address) public onlyOwner(msg.sender) { ogToken = IOGToken(_address); } function changeTotalSupply(uint256 _supply) public onlyOwner(msg.sender) { maxSupply = _supply; } function changeMintState(bool _pause, uint8 mintType) public onlyOwner(msg.sender) { if (mintType == 1) { mintClosed = _pause; } else if (mintType == 2) { whiteListSale = _pause; } } function changeFlorPrice(uint256 _new_price) external onlyOwner(msg.sender) { florPrice = _new_price; } function setBaseURI(string memory _baseURILink) external onlyOwner(msg.sender) { baseApiURI = _baseURILink; } function changeMaxMintWhiteList(uint256 _max) external onlyOwner(msg.sender) { maxMintWhiteList = _max; } /////////////////////////////////////////////////////////////// // OG Mint /////////////////////////////////////////////////////////////// function mint(address receiver, uint256 _mintAmount) public payable { require(!mintClosed, "Mint Closed"); if (msg.sender != owner) { require(msg.value >= florPrice * _mintAmount, "Not Enough ETH!"); } if (whiteListSale && msg.sender != owner) { require( _mintAmount + balanceOf(receiver) <= maxMintWhiteList, "Whitelist Mint Limit" ); } _safeMint(msg.sender, _mintAmount); ogToken.updateRewardOnMint(receiver, _mintAmount, 1); emit OGMinted(msg.sender, _mintAmount); } function mintBreeding(address _address, uint256 _mintAmount) external { require(msg.sender == breedingContract, "Only Breeding contract"); _safeMint(_address, _mintAmount); ogToken.updateRewardOnMint(_address, _mintAmount, 1); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "Nonexistent token!"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), ".json" ) ) : ""; } function getBaseURI() public view onlyOwner(msg.sender) returns (string memory) { string memory currentBaseURI = _baseURI(); return currentBaseURI; } function _baseURI() internal view virtual override returns (string memory) { return baseApiURI; } /////////////////////////////////////////////////////////////// // OG Finance /////////////////////////////////////////////////////////////// function withdraw(address payable receiver, uint256 amount) public onlyOwner(msg.sender) { require(amount <= address(this).balance, "Too much asked!"); receiver.transfer(amount); } function getWalletBalance() public view onlyOwner(msg.sender) returns (uint256) { return address(this).balance; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"payable","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"},{"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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OGMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ReceivedEth","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"},{"stateMutability":"payable","type":"fallback"},{"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":"_new_price","type":"uint256"}],"name":"changeFlorPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"changeMaxMintWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"},{"internalType":"uint8","name":"mintType","type":"uint8"}],"name":"changeMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"changeTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"florPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxMintWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintBreeding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogToken","outputs":[{"internalType":"contract IOGToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURILink","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setBreedingContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setOGTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506005600b556120e4600c5566d529ae9e860000600d55604051620041f2380380620041f2833981810160405281019062000075919062000318565b6040518060400160405280600b81526020017f4f472041706520436c75620000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e465400000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000f9929190620001d3565b50806003908051906020019062000112929190620001d3565b5062000123620001ce60201b60201c565b600081905550505033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816009908051906020019062000184929190620001d3565b5080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000550565b600090565b828054620001e19062000447565b90600052602060002090601f01602090048101928262000205576000855562000251565b82601f106200022057805160ff191683800117855562000251565b8280016001018555821562000251579182015b828111156200025057825182559160200191906001019062000233565b5b50905062000260919062000264565b5090565b5b808211156200027f57600081600090555060010162000265565b5090565b60006200029a6200029484620003a7565b6200037e565b905082815260208101848484011115620002b957620002b862000516565b5b620002c684828562000411565b509392505050565b600081519050620002df8162000536565b92915050565b600082601f830112620002fd57620002fc62000511565b5b81516200030f84826020860162000283565b91505092915050565b6000806040838503121562000332576200033162000520565b5b600083015167ffffffffffffffff8111156200035357620003526200051b565b5b6200036185828601620002e5565b92505060206200037485828601620002ce565b9150509250929050565b60006200038a6200039d565b90506200039882826200047d565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c557620003c4620004e2565b5b620003d08262000525565b9050602081019050919050565b6000620003ea82620003f1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200043157808201518184015260208101905062000414565b8381111562000441576000848401525b50505050565b600060028204905060018216806200046057607f821691505b60208210811415620004775762000476620004b3565b5b50919050565b620004888262000525565b810181811067ffffffffffffffff82111715620004aa57620004a9620004e2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200054181620003dd565b81146200054d57600080fd5b50565b613c9280620005606000396000f3fe6080604052600436106101f25760003560e01c8063743703a11161010d578063b69b2a65116100a0578063d663d3701161006f578063d663d3701461071d578063e985e9c514610748578063ea9ec67414610785578063f36ba287146107ae578063f3fef3a3146107d757610232565b8063b69b2a6514610661578063b88d4fde1461068c578063c87b56dd146106b5578063d5abeb01146106f257610232565b806395d89b41116100dc57806395d89b41146105b95780639a3910ab146105e4578063a22cb4651461060f578063a6ed4dac1461063857610232565b8063743703a11461051157806386a173ee1461053a5780638725c3ad146105655780638da5cb5b1461058e57610232565b806342842e0e116101855780636352211e116101545780636352211e1461044357806368570bd61461048057806370a08231146104a9578063714c5398146104e657610232565b806342842e0e1461039d57806352e97326146103c6578063534a0546146103ef57806355f804b31461041a57610232565b806318160ddd116101c157806318160ddd1461030257806323b872dd1461032d578063329a27e71461035657806340c10f191461038157610232565b806301ffc9a71461023457806306fdde0314610271578063081812fc1461029c578063095ea7b3146102d957610232565b36610232577f52a6cdf67c40ce333b3d846e4e143db87f71dd7935612a4cafcf6ba76047ca1f33346040516102289291906133ee565b60405180910390a1005b005b34801561024057600080fd5b5061025b60048036038101906102569190613082565b610800565b604051610268919061344e565b60405180910390f35b34801561027d57600080fd5b506102866108e2565b6040516102939190613484565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613125565b610974565b6040516102d09190613387565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613002565b6109f0565b005b34801561030e57600080fd5b50610317610afb565b6040516103249190613586565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190612eec565b610b12565b005b34801561036257600080fd5b5061036b610b22565b6040516103789190613586565b60405180910390f35b61039b60048036038101906103969190613002565b610bbc565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612eec565b610e53565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613125565b610e73565b005b3480156103fb57600080fd5b50610404610f0f565b6040516104119190613586565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906130dc565b610f15565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613125565b610fc1565b6040516104779190613387565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612e3f565b610fd7565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612e3f565b6110ad565b6040516104dd9190613586565b60405180910390f35b3480156104f257600080fd5b506104fb61117d565b6040516105089190613484565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613125565b611224565b005b34801561054657600080fd5b5061054f6112c0565b60405161055c919061344e565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613125565b6112d3565b005b34801561059a57600080fd5b506105a361136f565b6040516105b09190613387565b60405180910390f35b3480156105c557600080fd5b506105ce611395565b6040516105db9190613484565b60405180910390f35b3480156105f057600080fd5b506105f9611427565b6040516106069190613586565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190612fc2565b61142d565b005b34801561064457600080fd5b5061065f600480360381019061065a9190612e3f565b6115a5565b005b34801561066d57600080fd5b5061067661167b565b6040516106839190613469565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612f3f565b6116a1565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613125565b61171d565b6040516106e99190613484565b60405180910390f35b3480156106fe57600080fd5b506107076117c4565b6040516107149190613586565b60405180910390f35b34801561072957600080fd5b506107326117ca565b60405161073f919061344e565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190612eac565b6117dd565b60405161077c919061344e565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613042565b611871565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613002565b61195a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190612e6c565b611a8a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108db57506108da82611baa565b5b9050919050565b6060600280546108f19061389d565b80601f016020809104026020016040519081016040528092919081815260200182805461091d9061389d565b801561096a5780601f1061093f5761010080835404028352916020019161096a565b820191906000526020600020905b81548152906001019060200180831161094d57829003601f168201915b5050505050905090565b600061097f82611c14565b6109b5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109fb82610fc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a63576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a82611c62565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ab45750610ab281610aad611c62565b6117dd565b155b15610aeb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610af6838383611c6a565b505050565b6000610b05611d1c565b6001546000540303905090565b610b1d838383611d21565b505050565b600033600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613566565b60405180910390fd5b4791505090565b600a60009054906101000a900460ff1615610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613526565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb25780600d54610c6f91906136f2565b341015610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906134a6565b60405180910390fd5b5b600a60019054906101000a900460ff168015610d1c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d7a57600b54610d2d836110ad565b82610d38919061366b565b1115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090613506565b60405180910390fd5b5b610d8433826121d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bac99eeb838360016040518463ffffffff1660e01b8152600401610de493929190613417565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050507f07305140b01a1091e6eb875e5b0b95ce2b81c159dc1bf9a97b3c3671a0c8a9e33382604051610e479291906133ee565b60405180910390a15050565b610e6e838383604051806020016040528060008152506116a1565b505050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613566565b60405180910390fd5b81600c819055505050565b600b5481565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90613566565b60405180910390fd5b8160099080519060200190610fbc929190612be6565b505050565b6000610fcc826121f5565b600001519050919050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613566565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611115576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b606033600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613566565b60405180910390fd5b600061121a612484565b9050809250505090565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613566565b60405180910390fd5b81600d819055505050565b600a60019054906101000a900460ff1681565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613566565b60405180910390fd5b81600b819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546113a49061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546113d09061389d565b801561141d5780601f106113f25761010080835404028352916020019161141d565b820191906000526020600020905b81548152906001019060200180831161140057829003601f168201915b5050505050905090565b600d5481565b611435611c62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114a7611c62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611554611c62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611599919061344e565b60405180910390a35050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613566565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ac848484611d21565b6116cb8373ffffffffffffffffffffffffffffffffffffffff16612516565b80156116e057506116de84848484612539565b155b15611717576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061172882611c14565b611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906134c6565b60405180910390fd5b6000611771612484565b9050600081511161179157604051806020016040528060008152506117bc565b8061179b84612699565b6040516020016117ac929190613358565b6040516020818303038152906040525b915050919050565b600c5481565b600a60009054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990613566565b60405180910390fd5b60018260ff16141561192d5782600a60006101000a81548160ff021916908315150217905550611955565b60028260ff1614156119545782600a60016101000a81548160ff0219169083151502179055505b5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906134e6565b60405180910390fd5b6119f482826121d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bac99eeb838360016040518463ffffffff1660e01b8152600401611a5493929190613417565b600060405180830381600087803b158015611a6e57600080fd5b505af1158015611a82573d6000803e3d6000fd5b505050505050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290613566565b60405180910390fd5b47821115611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5590613546565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611ba4573d6000803e3d6000fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c1f611d1c565b11158015611c2e575060005482105b8015611c5b575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d2c826121f5565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d97576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db8611c62565b73ffffffffffffffffffffffffffffffffffffffff161480611de75750611de685611de1611c62565b6117dd565b5b80611e2c5750611df5611c62565b73ffffffffffffffffffffffffffffffffffffffff16611e1484610974565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e65576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ecc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed985858560016127fa565b611ee560008487611c6a565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561216557600054821461216457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d08585856001612800565b5050505050565b6121f1828260405180602001604052806000815250612806565b5050565b6121fd612c6c565b60008290508061220b611d1c565b1115801561221a575060005481105b1561244d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161244b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232f57809250505061247f565b5b60011561244a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461244557809250505061247f565b612330565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6060600980546124939061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546124bf9061389d565b801561250c5780601f106124e15761010080835404028352916020019161250c565b820191906000526020600020905b8154815290600101906020018083116124ef57829003601f168201915b5050505050905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255f611c62565b8786866040518563ffffffff1660e01b815260040161258194939291906133a2565b602060405180830381600087803b15801561259b57600080fd5b505af19250505080156125cc57506040513d601f19601f820116820180604052508101906125c991906130af565b60015b612646573d80600081146125fc576040519150601f19603f3d011682016040523d82523d6000602084013e612601565b606091505b5060008151141561263e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156126e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127f5565b600082905060005b600082146127135780806126fc90613900565b915050600a8261270c91906136c1565b91506126e9565b60008167ffffffffffffffff81111561272f5761272e613a36565b5b6040519080825280601f01601f1916602001820160405280156127615781602001600182028036833780820191505090505b5090505b600085146127ee5760018261277a919061374c565b9150600a856127899190613949565b6030612795919061366b565b60f81b8183815181106127ab576127aa613a07565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127e791906136c1565b9450612765565b8093505050505b919050565b50505050565b50505050565b6128138383836001612818565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612885576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156128c0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128cd60008683876127fa565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612a975750612a968773ffffffffffffffffffffffffffffffffffffffff16612516565b5b15612b5d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b0c6000888480600101955088612539565b612b42576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612a9d578260005414612b5857600080fd5b612bc9565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612b5e575b816000819055505050612bdf6000868387612800565b5050505050565b828054612bf29061389d565b90600052602060002090601f016020900481019282612c145760008555612c5b565b82601f10612c2d57805160ff1916838001178555612c5b565b82800160010185558215612c5b579182015b82811115612c5a578251825591602001919060010190612c3f565b5b509050612c689190612caf565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612cc8576000816000905550600101612cb0565b5090565b6000612cdf612cda846135c6565b6135a1565b905082815260208101848484011115612cfb57612cfa613a6a565b5b612d0684828561385b565b509392505050565b6000612d21612d1c846135f7565b6135a1565b905082815260208101848484011115612d3d57612d3c613a6a565b5b612d4884828561385b565b509392505050565b600081359050612d5f81613bd2565b92915050565b600081359050612d7481613be9565b92915050565b600081359050612d8981613c00565b92915050565b600081359050612d9e81613c17565b92915050565b600081519050612db381613c17565b92915050565b600082601f830112612dce57612dcd613a65565b5b8135612dde848260208601612ccc565b91505092915050565b600082601f830112612dfc57612dfb613a65565b5b8135612e0c848260208601612d0e565b91505092915050565b600081359050612e2481613c2e565b92915050565b600081359050612e3981613c45565b92915050565b600060208284031215612e5557612e54613a74565b5b6000612e6384828501612d50565b91505092915050565b60008060408385031215612e8357612e82613a74565b5b6000612e9185828601612d65565b9250506020612ea285828601612e15565b9150509250929050565b60008060408385031215612ec357612ec2613a74565b5b6000612ed185828601612d50565b9250506020612ee285828601612d50565b9150509250929050565b600080600060608486031215612f0557612f04613a74565b5b6000612f1386828701612d50565b9350506020612f2486828701612d50565b9250506040612f3586828701612e15565b9150509250925092565b60008060008060808587031215612f5957612f58613a74565b5b6000612f6787828801612d50565b9450506020612f7887828801612d50565b9350506040612f8987828801612e15565b925050606085013567ffffffffffffffff811115612faa57612fa9613a6f565b5b612fb687828801612db9565b91505092959194509250565b60008060408385031215612fd957612fd8613a74565b5b6000612fe785828601612d50565b9250506020612ff885828601612d7a565b9150509250929050565b6000806040838503121561301957613018613a74565b5b600061302785828601612d50565b925050602061303885828601612e15565b9150509250929050565b6000806040838503121561305957613058613a74565b5b600061306785828601612d7a565b925050602061307885828601612e2a565b9150509250929050565b60006020828403121561309857613097613a74565b5b60006130a684828501612d8f565b91505092915050565b6000602082840312156130c5576130c4613a74565b5b60006130d384828501612da4565b91505092915050565b6000602082840312156130f2576130f1613a74565b5b600082013567ffffffffffffffff8111156131105761310f613a6f565b5b61311c84828501612de7565b91505092915050565b60006020828403121561313b5761313a613a74565b5b600061314984828501612e15565b91505092915050565b61315b81613780565b82525050565b61316a816137a4565b82525050565b600061317b82613628565b613185818561363e565b935061319581856020860161386a565b61319e81613a79565b840191505092915050565b6131b281613813565b82525050565b6131c181613825565b82525050565b60006131d282613633565b6131dc818561364f565b93506131ec81856020860161386a565b6131f581613a79565b840191505092915050565b600061320b82613633565b6132158185613660565b935061322581856020860161386a565b80840191505092915050565b600061323e600f8361364f565b915061324982613a8a565b602082019050919050565b600061326160128361364f565b915061326c82613ab3565b602082019050919050565b6000613284600583613660565b915061328f82613adc565b600582019050919050565b60006132a760168361364f565b91506132b282613b05565b602082019050919050565b60006132ca60148361364f565b91506132d582613b2e565b602082019050919050565b60006132ed600b8361364f565b91506132f882613b57565b602082019050919050565b6000613310600f8361364f565b915061331b82613b80565b602082019050919050565b6000613333600a8361364f565b915061333e82613ba9565b602082019050919050565b613352816137fc565b82525050565b60006133648285613200565b91506133708284613200565b915061337b82613277565b91508190509392505050565b600060208201905061339c6000830184613152565b92915050565b60006080820190506133b76000830187613152565b6133c46020830186613152565b6133d16040830185613349565b81810360608301526133e38184613170565b905095945050505050565b60006040820190506134036000830185613152565b6134106020830184613349565b9392505050565b600060608201905061342c6000830186613152565b6134396020830185613349565b61344660408301846131b8565b949350505050565b60006020820190506134636000830184613161565b92915050565b600060208201905061347e60008301846131a9565b92915050565b6000602082019050818103600083015261349e81846131c7565b905092915050565b600060208201905081810360008301526134bf81613231565b9050919050565b600060208201905081810360008301526134df81613254565b9050919050565b600060208201905081810360008301526134ff8161329a565b9050919050565b6000602082019050818103600083015261351f816132bd565b9050919050565b6000602082019050818103600083015261353f816132e0565b9050919050565b6000602082019050818103600083015261355f81613303565b9050919050565b6000602082019050818103600083015261357f81613326565b9050919050565b600060208201905061359b6000830184613349565b92915050565b60006135ab6135bc565b90506135b782826138cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e1576135e0613a36565b5b6135ea82613a79565b9050602081019050919050565b600067ffffffffffffffff82111561361257613611613a36565b5b61361b82613a79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613676826137fc565b9150613681836137fc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b6576136b561397a565b5b828201905092915050565b60006136cc826137fc565b91506136d7836137fc565b9250826136e7576136e66139a9565b5b828204905092915050565b60006136fd826137fc565b9150613708836137fc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137415761374061397a565b5b828202905092915050565b6000613757826137fc565b9150613762836137fc565b9250828210156137755761377461397a565b5b828203905092915050565b600061378b826137dc565b9050919050565b600061379d826137dc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061381e82613837565b9050919050565b600061383082613806565b9050919050565b600061384282613849565b9050919050565b6000613854826137dc565b9050919050565b82818337600083830152505050565b60005b8381101561388857808201518184015260208101905061386d565b83811115613897576000848401525b50505050565b600060028204905060018216806138b557607f821691505b602082108114156138c9576138c86139d8565b5b50919050565b6138d882613a79565b810181811067ffffffffffffffff821117156138f7576138f6613a36565b5b80604052505050565b600061390b826137fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561393e5761393d61397a565b5b600182019050919050565b6000613954826137fc565b915061395f836137fc565b92508261396f5761396e6139a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420456e6f75676820455448210000000000000000000000000000000000600082015250565b7f4e6f6e6578697374656e7420746f6b656e210000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6c79204272656564696e6720636f6e747261637400000000000000000000600082015250565b7f57686974656c697374204d696e74204c696d6974000000000000000000000000600082015250565b7f4d696e7420436c6f736564000000000000000000000000000000000000000000600082015250565b7f546f6f206d7563682061736b6564210000000000000000000000000000000000600082015250565b7f4f6e6c79204f776e657200000000000000000000000000000000000000000000600082015250565b613bdb81613780565b8114613be657600080fd5b50565b613bf281613792565b8114613bfd57600080fd5b50565b613c09816137a4565b8114613c1457600080fd5b50565b613c20816137b0565b8114613c2b57600080fd5b50565b613c37816137fc565b8114613c4257600080fd5b50565b613c4e81613806565b8114613c5957600080fd5b5056fea2646970667358221220f9767fd479714b670f341253f9a83ecd5d3be2ed5965c895db1b8ee652f639e464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fdade2fcc08286beff02795c1164eb9dbb5ec4c00000000000000000000000000000000000000000000000000000000000000005656d707479000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f25760003560e01c8063743703a11161010d578063b69b2a65116100a0578063d663d3701161006f578063d663d3701461071d578063e985e9c514610748578063ea9ec67414610785578063f36ba287146107ae578063f3fef3a3146107d757610232565b8063b69b2a6514610661578063b88d4fde1461068c578063c87b56dd146106b5578063d5abeb01146106f257610232565b806395d89b41116100dc57806395d89b41146105b95780639a3910ab146105e4578063a22cb4651461060f578063a6ed4dac1461063857610232565b8063743703a11461051157806386a173ee1461053a5780638725c3ad146105655780638da5cb5b1461058e57610232565b806342842e0e116101855780636352211e116101545780636352211e1461044357806368570bd61461048057806370a08231146104a9578063714c5398146104e657610232565b806342842e0e1461039d57806352e97326146103c6578063534a0546146103ef57806355f804b31461041a57610232565b806318160ddd116101c157806318160ddd1461030257806323b872dd1461032d578063329a27e71461035657806340c10f191461038157610232565b806301ffc9a71461023457806306fdde0314610271578063081812fc1461029c578063095ea7b3146102d957610232565b36610232577f52a6cdf67c40ce333b3d846e4e143db87f71dd7935612a4cafcf6ba76047ca1f33346040516102289291906133ee565b60405180910390a1005b005b34801561024057600080fd5b5061025b60048036038101906102569190613082565b610800565b604051610268919061344e565b60405180910390f35b34801561027d57600080fd5b506102866108e2565b6040516102939190613484565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613125565b610974565b6040516102d09190613387565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613002565b6109f0565b005b34801561030e57600080fd5b50610317610afb565b6040516103249190613586565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190612eec565b610b12565b005b34801561036257600080fd5b5061036b610b22565b6040516103789190613586565b60405180910390f35b61039b60048036038101906103969190613002565b610bbc565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612eec565b610e53565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613125565b610e73565b005b3480156103fb57600080fd5b50610404610f0f565b6040516104119190613586565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906130dc565b610f15565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613125565b610fc1565b6040516104779190613387565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612e3f565b610fd7565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612e3f565b6110ad565b6040516104dd9190613586565b60405180910390f35b3480156104f257600080fd5b506104fb61117d565b6040516105089190613484565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613125565b611224565b005b34801561054657600080fd5b5061054f6112c0565b60405161055c919061344e565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613125565b6112d3565b005b34801561059a57600080fd5b506105a361136f565b6040516105b09190613387565b60405180910390f35b3480156105c557600080fd5b506105ce611395565b6040516105db9190613484565b60405180910390f35b3480156105f057600080fd5b506105f9611427565b6040516106069190613586565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190612fc2565b61142d565b005b34801561064457600080fd5b5061065f600480360381019061065a9190612e3f565b6115a5565b005b34801561066d57600080fd5b5061067661167b565b6040516106839190613469565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612f3f565b6116a1565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613125565b61171d565b6040516106e99190613484565b60405180910390f35b3480156106fe57600080fd5b506107076117c4565b6040516107149190613586565b60405180910390f35b34801561072957600080fd5b506107326117ca565b60405161073f919061344e565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190612eac565b6117dd565b60405161077c919061344e565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613042565b611871565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613002565b61195a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190612e6c565b611a8a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108db57506108da82611baa565b5b9050919050565b6060600280546108f19061389d565b80601f016020809104026020016040519081016040528092919081815260200182805461091d9061389d565b801561096a5780601f1061093f5761010080835404028352916020019161096a565b820191906000526020600020905b81548152906001019060200180831161094d57829003601f168201915b5050505050905090565b600061097f82611c14565b6109b5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109fb82610fc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a63576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a82611c62565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ab45750610ab281610aad611c62565b6117dd565b155b15610aeb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610af6838383611c6a565b505050565b6000610b05611d1c565b6001546000540303905090565b610b1d838383611d21565b505050565b600033600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613566565b60405180910390fd5b4791505090565b600a60009054906101000a900460ff1615610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613526565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb25780600d54610c6f91906136f2565b341015610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906134a6565b60405180910390fd5b5b600a60019054906101000a900460ff168015610d1c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d7a57600b54610d2d836110ad565b82610d38919061366b565b1115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090613506565b60405180910390fd5b5b610d8433826121d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bac99eeb838360016040518463ffffffff1660e01b8152600401610de493929190613417565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050507f07305140b01a1091e6eb875e5b0b95ce2b81c159dc1bf9a97b3c3671a0c8a9e33382604051610e479291906133ee565b60405180910390a15050565b610e6e838383604051806020016040528060008152506116a1565b505050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613566565b60405180910390fd5b81600c819055505050565b600b5481565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90613566565b60405180910390fd5b8160099080519060200190610fbc929190612be6565b505050565b6000610fcc826121f5565b600001519050919050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613566565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611115576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b606033600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613566565b60405180910390fd5b600061121a612484565b9050809250505090565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613566565b60405180910390fd5b81600d819055505050565b600a60019054906101000a900460ff1681565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613566565b60405180910390fd5b81600b819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546113a49061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546113d09061389d565b801561141d5780601f106113f25761010080835404028352916020019161141d565b820191906000526020600020905b81548152906001019060200180831161140057829003601f168201915b5050505050905090565b600d5481565b611435611c62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114a7611c62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611554611c62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611599919061344e565b60405180910390a35050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613566565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ac848484611d21565b6116cb8373ffffffffffffffffffffffffffffffffffffffff16612516565b80156116e057506116de84848484612539565b155b15611717576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061172882611c14565b611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906134c6565b60405180910390fd5b6000611771612484565b9050600081511161179157604051806020016040528060008152506117bc565b8061179b84612699565b6040516020016117ac929190613358565b6040516020818303038152906040525b915050919050565b600c5481565b600a60009054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990613566565b60405180910390fd5b60018260ff16141561192d5782600a60006101000a81548160ff021916908315150217905550611955565b60028260ff1614156119545782600a60016101000a81548160ff0219169083151502179055505b5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906134e6565b60405180910390fd5b6119f482826121d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bac99eeb838360016040518463ffffffff1660e01b8152600401611a5493929190613417565b600060405180830381600087803b158015611a6e57600080fd5b505af1158015611a82573d6000803e3d6000fd5b505050505050565b33600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290613566565b60405180910390fd5b47821115611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5590613546565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611ba4573d6000803e3d6000fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c1f611d1c565b11158015611c2e575060005482105b8015611c5b575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d2c826121f5565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d97576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db8611c62565b73ffffffffffffffffffffffffffffffffffffffff161480611de75750611de685611de1611c62565b6117dd565b5b80611e2c5750611df5611c62565b73ffffffffffffffffffffffffffffffffffffffff16611e1484610974565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e65576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ecc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed985858560016127fa565b611ee560008487611c6a565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561216557600054821461216457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d08585856001612800565b5050505050565b6121f1828260405180602001604052806000815250612806565b5050565b6121fd612c6c565b60008290508061220b611d1c565b1115801561221a575060005481105b1561244d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161244b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232f57809250505061247f565b5b60011561244a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461244557809250505061247f565b612330565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6060600980546124939061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546124bf9061389d565b801561250c5780601f106124e15761010080835404028352916020019161250c565b820191906000526020600020905b8154815290600101906020018083116124ef57829003601f168201915b5050505050905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255f611c62565b8786866040518563ffffffff1660e01b815260040161258194939291906133a2565b602060405180830381600087803b15801561259b57600080fd5b505af19250505080156125cc57506040513d601f19601f820116820180604052508101906125c991906130af565b60015b612646573d80600081146125fc576040519150601f19603f3d011682016040523d82523d6000602084013e612601565b606091505b5060008151141561263e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156126e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127f5565b600082905060005b600082146127135780806126fc90613900565b915050600a8261270c91906136c1565b91506126e9565b60008167ffffffffffffffff81111561272f5761272e613a36565b5b6040519080825280601f01601f1916602001820160405280156127615781602001600182028036833780820191505090505b5090505b600085146127ee5760018261277a919061374c565b9150600a856127899190613949565b6030612795919061366b565b60f81b8183815181106127ab576127aa613a07565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127e791906136c1565b9450612765565b8093505050505b919050565b50505050565b50505050565b6128138383836001612818565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612885576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156128c0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128cd60008683876127fa565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612a975750612a968773ffffffffffffffffffffffffffffffffffffffff16612516565b5b15612b5d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b0c6000888480600101955088612539565b612b42576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612a9d578260005414612b5857600080fd5b612bc9565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612b5e575b816000819055505050612bdf6000868387612800565b5050505050565b828054612bf29061389d565b90600052602060002090601f016020900481019282612c145760008555612c5b565b82601f10612c2d57805160ff1916838001178555612c5b565b82800160010185558215612c5b579182015b82811115612c5a578251825591602001919060010190612c3f565b5b509050612c689190612caf565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612cc8576000816000905550600101612cb0565b5090565b6000612cdf612cda846135c6565b6135a1565b905082815260208101848484011115612cfb57612cfa613a6a565b5b612d0684828561385b565b509392505050565b6000612d21612d1c846135f7565b6135a1565b905082815260208101848484011115612d3d57612d3c613a6a565b5b612d4884828561385b565b509392505050565b600081359050612d5f81613bd2565b92915050565b600081359050612d7481613be9565b92915050565b600081359050612d8981613c00565b92915050565b600081359050612d9e81613c17565b92915050565b600081519050612db381613c17565b92915050565b600082601f830112612dce57612dcd613a65565b5b8135612dde848260208601612ccc565b91505092915050565b600082601f830112612dfc57612dfb613a65565b5b8135612e0c848260208601612d0e565b91505092915050565b600081359050612e2481613c2e565b92915050565b600081359050612e3981613c45565b92915050565b600060208284031215612e5557612e54613a74565b5b6000612e6384828501612d50565b91505092915050565b60008060408385031215612e8357612e82613a74565b5b6000612e9185828601612d65565b9250506020612ea285828601612e15565b9150509250929050565b60008060408385031215612ec357612ec2613a74565b5b6000612ed185828601612d50565b9250506020612ee285828601612d50565b9150509250929050565b600080600060608486031215612f0557612f04613a74565b5b6000612f1386828701612d50565b9350506020612f2486828701612d50565b9250506040612f3586828701612e15565b9150509250925092565b60008060008060808587031215612f5957612f58613a74565b5b6000612f6787828801612d50565b9450506020612f7887828801612d50565b9350506040612f8987828801612e15565b925050606085013567ffffffffffffffff811115612faa57612fa9613a6f565b5b612fb687828801612db9565b91505092959194509250565b60008060408385031215612fd957612fd8613a74565b5b6000612fe785828601612d50565b9250506020612ff885828601612d7a565b9150509250929050565b6000806040838503121561301957613018613a74565b5b600061302785828601612d50565b925050602061303885828601612e15565b9150509250929050565b6000806040838503121561305957613058613a74565b5b600061306785828601612d7a565b925050602061307885828601612e2a565b9150509250929050565b60006020828403121561309857613097613a74565b5b60006130a684828501612d8f565b91505092915050565b6000602082840312156130c5576130c4613a74565b5b60006130d384828501612da4565b91505092915050565b6000602082840312156130f2576130f1613a74565b5b600082013567ffffffffffffffff8111156131105761310f613a6f565b5b61311c84828501612de7565b91505092915050565b60006020828403121561313b5761313a613a74565b5b600061314984828501612e15565b91505092915050565b61315b81613780565b82525050565b61316a816137a4565b82525050565b600061317b82613628565b613185818561363e565b935061319581856020860161386a565b61319e81613a79565b840191505092915050565b6131b281613813565b82525050565b6131c181613825565b82525050565b60006131d282613633565b6131dc818561364f565b93506131ec81856020860161386a565b6131f581613a79565b840191505092915050565b600061320b82613633565b6132158185613660565b935061322581856020860161386a565b80840191505092915050565b600061323e600f8361364f565b915061324982613a8a565b602082019050919050565b600061326160128361364f565b915061326c82613ab3565b602082019050919050565b6000613284600583613660565b915061328f82613adc565b600582019050919050565b60006132a760168361364f565b91506132b282613b05565b602082019050919050565b60006132ca60148361364f565b91506132d582613b2e565b602082019050919050565b60006132ed600b8361364f565b91506132f882613b57565b602082019050919050565b6000613310600f8361364f565b915061331b82613b80565b602082019050919050565b6000613333600a8361364f565b915061333e82613ba9565b602082019050919050565b613352816137fc565b82525050565b60006133648285613200565b91506133708284613200565b915061337b82613277565b91508190509392505050565b600060208201905061339c6000830184613152565b92915050565b60006080820190506133b76000830187613152565b6133c46020830186613152565b6133d16040830185613349565b81810360608301526133e38184613170565b905095945050505050565b60006040820190506134036000830185613152565b6134106020830184613349565b9392505050565b600060608201905061342c6000830186613152565b6134396020830185613349565b61344660408301846131b8565b949350505050565b60006020820190506134636000830184613161565b92915050565b600060208201905061347e60008301846131a9565b92915050565b6000602082019050818103600083015261349e81846131c7565b905092915050565b600060208201905081810360008301526134bf81613231565b9050919050565b600060208201905081810360008301526134df81613254565b9050919050565b600060208201905081810360008301526134ff8161329a565b9050919050565b6000602082019050818103600083015261351f816132bd565b9050919050565b6000602082019050818103600083015261353f816132e0565b9050919050565b6000602082019050818103600083015261355f81613303565b9050919050565b6000602082019050818103600083015261357f81613326565b9050919050565b600060208201905061359b6000830184613349565b92915050565b60006135ab6135bc565b90506135b782826138cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e1576135e0613a36565b5b6135ea82613a79565b9050602081019050919050565b600067ffffffffffffffff82111561361257613611613a36565b5b61361b82613a79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613676826137fc565b9150613681836137fc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b6576136b561397a565b5b828201905092915050565b60006136cc826137fc565b91506136d7836137fc565b9250826136e7576136e66139a9565b5b828204905092915050565b60006136fd826137fc565b9150613708836137fc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137415761374061397a565b5b828202905092915050565b6000613757826137fc565b9150613762836137fc565b9250828210156137755761377461397a565b5b828203905092915050565b600061378b826137dc565b9050919050565b600061379d826137dc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061381e82613837565b9050919050565b600061383082613806565b9050919050565b600061384282613849565b9050919050565b6000613854826137dc565b9050919050565b82818337600083830152505050565b60005b8381101561388857808201518184015260208101905061386d565b83811115613897576000848401525b50505050565b600060028204905060018216806138b557607f821691505b602082108114156138c9576138c86139d8565b5b50919050565b6138d882613a79565b810181811067ffffffffffffffff821117156138f7576138f6613a36565b5b80604052505050565b600061390b826137fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561393e5761393d61397a565b5b600182019050919050565b6000613954826137fc565b915061395f836137fc565b92508261396f5761396e6139a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420456e6f75676820455448210000000000000000000000000000000000600082015250565b7f4e6f6e6578697374656e7420746f6b656e210000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6c79204272656564696e6720636f6e747261637400000000000000000000600082015250565b7f57686974656c697374204d696e74204c696d6974000000000000000000000000600082015250565b7f4d696e7420436c6f736564000000000000000000000000000000000000000000600082015250565b7f546f6f206d7563682061736b6564210000000000000000000000000000000000600082015250565b7f4f6e6c79204f776e657200000000000000000000000000000000000000000000600082015250565b613bdb81613780565b8114613be657600080fd5b50565b613bf281613792565b8114613bfd57600080fd5b50565b613c09816137a4565b8114613c1457600080fd5b50565b613c20816137b0565b8114613c2b57600080fd5b50565b613c37816137fc565b8114613c4257600080fd5b50565b613c4e81613806565b8114613c5957600080fd5b5056fea2646970667358221220f9767fd479714b670f341253f9a83ecd5d3be2ed5965c895db1b8ee652f639e464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fdade2fcc08286beff02795c1164eb9dbb5ec4c00000000000000000000000000000000000000000000000000000000000000005656d707479000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseUri (string): empty
Arg [1] : tokenAddress (address): 0xFdADe2fcc08286BEfF02795C1164eB9dbb5eC4C0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000fdade2fcc08286beff02795c1164eb9dbb5ec4c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 656d707479000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42401:4823:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43220:34;43232:10;43244:9;43220:34;;;;;;;:::i;:::-;;;;;;;;42401:4823;;;24442:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27555:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29058:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28621:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23691:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29923:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47053:168;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44841:627;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30164:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43845:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42611:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44383:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27363:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43542:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24811:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46322:213;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44235:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42570:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44537:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42777:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27724:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42691:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29334:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43716:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42467:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45744:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42653:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42533:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43964:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45476:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46819:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24442:305;24544:4;24596:25;24581:40;;;:11;:40;;;;:105;;;;24653:33;24638:48;;;:11;:48;;;;24581:105;:158;;;;24703:36;24727:11;24703:23;:36::i;:::-;24581:158;24561:178;;24442:305;;;:::o;27555:100::-;27609:13;27642:5;27635:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27555:100;:::o;29058:204::-;29126:7;29151:16;29159:7;29151;:16::i;:::-;29146:64;;29176:34;;;;;;;;;;;;;;29146:64;29230:15;:24;29246:7;29230:24;;;;;;;;;;;;;;;;;;;;;29223:31;;29058:204;;;:::o;28621:371::-;28694:13;28710:24;28726:7;28710:15;:24::i;:::-;28694:40;;28755:5;28749:11;;:2;:11;;;28745:48;;;28769:24;;;;;;;;;;;;;;28745:48;28826:5;28810:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;28836:37;28853:5;28860:12;:10;:12::i;:::-;28836:16;:37::i;:::-;28835:38;28810:63;28806:138;;;28897:35;;;;;;;;;;;;;;28806:138;28956:28;28965:2;28969:7;28978:5;28956:8;:28::i;:::-;28683:309;28621:371;;:::o;23691:303::-;23735:7;23960:15;:13;:15::i;:::-;23945:12;;23929:13;;:28;:46;23922:53;;23691:303;:::o;29923:170::-;30057:28;30067:4;30073:2;30077:7;30057:9;:28::i;:::-;29923:170;;;:::o;47053:168::-;47160:7;47130:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;47192:21:::1;47185:28;;47053:168:::0;;:::o;44841:627::-;44929:10;;;;;;;;;;;44928:11;44920:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44986:5;;;;;;;;;;;44972:19;;:10;:19;;;44968:116;;45041:11;45029:9;;:23;;;;:::i;:::-;45016:9;:36;;45008:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44968:116;45100:13;;;;;;;;;;;:36;;;;;45131:5;;;;;;;;;;;45117:19;;:10;:19;;;;45100:36;45096:204;;;45216:16;;45193:19;45203:8;45193:9;:19::i;:::-;45179:11;:33;;;;:::i;:::-;:53;;45153:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;45096:204;45312:34;45322:10;45334:11;45312:9;:34::i;:::-;45357:7;;;;;;;;;;;:26;;;45384:8;45394:11;45407:1;45357:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45427:33;45436:10;45448:11;45427:33;;;;;;;:::i;:::-;;;;;;;;44841:627;;:::o;30164:185::-;30302:39;30319:4;30325:2;30329:7;30302:39;;;;;;;;;;;;:16;:39::i;:::-;30164:185;;;:::o;43845:111::-;43906:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43941:7:::1;43929:9;:19;;;;43845:111:::0;;:::o;42611:35::-;;;;:::o;44383:146::-;44468:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44509:12:::1;44496:10;:25;;;;;;;;;;;;:::i;:::-;;44383:146:::0;;:::o;27363:125::-;27427:7;27454:21;27467:7;27454:12;:21::i;:::-;:26;;;27447:33;;27363:125;;;:::o;43542:166::-;43638:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43685:15:::1;43666:16;;:34;;;;;;;;;;;;;;;;;;43542:166:::0;;:::o;24811:206::-;24875:7;24916:1;24899:19;;:5;:19;;;24895:60;;;24927:28;;;;;;;;;;;;;;24895:60;24981:12;:19;24994:5;24981:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24973:36;;24966:43;;24811:206;;;:::o;46322:213::-;46423:13;46393:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46454:28:::1;46485:10;:8;:10::i;:::-;46454:41;;46513:14;46506:21;;;46322:213:::0;;:::o;44235:140::-;44317:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44357:10:::1;44345:9;:22;;;;44235:140:::0;;:::o;42570:32::-;;;;;;;;;;;;;:::o;44537:142::-;44620:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44667:4:::1;44648:16;:23;;;;44537:142:::0;;:::o;42777:20::-;;;;;;;;;;;;;:::o;27724:104::-;27780:13;27813:7;27806:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27724:104;:::o;42691:37::-;;;;:::o;29334:287::-;29445:12;:10;:12::i;:::-;29433:24;;:8;:24;;;29429:54;;;29466:17;;;;;;;;;;;;;;29429:54;29541:8;29496:18;:32;29515:12;:10;:12::i;:::-;29496:32;;;;;;;;;;;;;;;:42;29529:8;29496:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29594:8;29565:48;;29580:12;:10;:12::i;:::-;29565:48;;;29604:8;29565:48;;;;;;:::i;:::-;;;;;;;;29334:287;;:::o;43716:121::-;43778:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43820:8:::1;43801:7;;:28;;;;;;;;;;;;;;;;;;43716:121:::0;;:::o;42467:23::-;;;;;;;;;;;;;:::o;30420:369::-;30587:28;30597:4;30603:2;30607:7;30587:9;:28::i;:::-;30630:15;:2;:13;;;:15::i;:::-;:76;;;;;30650:56;30681:4;30687:2;30691:7;30700:5;30650:30;:56::i;:::-;30649:57;30630:76;30626:156;;;30730:40;;;;;;;;;;;;;;30626:156;30420:369;;;;:::o;45744:570::-;45862:13;45901:16;45909:7;45901;:16::i;:::-;45893:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45951:28;45982:10;:8;:10::i;:::-;45951:41;;46056:1;46031:14;46025:28;:32;:281;;;;;;;;;;;;;;;;;46149:14;46190:18;:7;:16;:18::i;:::-;46106:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46025:281;46005:301;;;45744:570;;;:::o;42653:31::-;;;;:::o;42533:30::-;;;;;;;;;;;;;:::o;29692:164::-;29789:4;29813:18;:25;29832:5;29813:25;;;;;;;;;;;;;;;:35;29839:8;29813:35;;;;;;;;;;;;;;;;;;;;;;;;;29806:42;;29692:164;;;;:::o;43964:263::-;44053:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44097:1:::1;44085:8;:13;;;44081:139;;;44128:6;44115:10;;:19;;;;;;;;;;;;;;;;;;44081:139;;;44168:1;44156:8;:13;;;44152:68;;;44202:6;44186:13;;:22;;;;;;;;;;;;;;;;;;44152:68;44081:139;43964:263:::0;;;:::o;45476:260::-;45579:16;;;;;;;;;;;45565:30;;:10;:30;;;45557:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45633:32;45643:8;45653:11;45633:9;:32::i;:::-;45676:7;;;;;;;;;;;:26;;;45703:8;45713:11;45726:1;45676:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45476:260;;:::o;46819:226::-;46914:10;43334:5;;;;;;;;;;;43324:15;;:6;:15;;;43316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46960:21:::1;46950:6;:31;;46942:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47012:8;:17;;:25;47030:6;47012:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46819:226:::0;;;:::o;14333:157::-;14418:4;14457:25;14442:40;;;:11;:40;;;;14435:47;;14333:157;;;:::o;31044:187::-;31101:4;31144:7;31125:15;:13;:15::i;:::-;:26;;:53;;;;;31165:13;;31155:7;:23;31125:53;:98;;;;;31196:11;:20;31208:7;31196:20;;;;;;;;;;;:27;;;;;;;;;;;;31195:28;31125:98;31118:105;;31044:187;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;39214:196::-;39356:2;39329:15;:24;39345:7;39329:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39394:7;39390:2;39374:28;;39383:5;39374:28;;;;;;;;;;;;39214:196;;;:::o;23465:92::-;23521:7;23465:92;:::o;34157:2130::-;34272:35;34310:21;34323:7;34310:12;:21::i;:::-;34272:59;;34370:4;34348:26;;:13;:18;;;:26;;;34344:67;;34383:28;;;;;;;;;;;;;;34344:67;34424:22;34466:4;34450:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;34487:36;34504:4;34510:12;:10;:12::i;:::-;34487:16;:36::i;:::-;34450:73;:126;;;;34564:12;:10;:12::i;:::-;34540:36;;:20;34552:7;34540:11;:20::i;:::-;:36;;;34450:126;34424:153;;34595:17;34590:66;;34621:35;;;;;;;;;;;;;;34590:66;34685:1;34671:16;;:2;:16;;;34667:52;;;34696:23;;;;;;;;;;;;;;34667:52;34732:43;34754:4;34760:2;34764:7;34773:1;34732:21;:43::i;:::-;34840:35;34857:1;34861:7;34870:4;34840:8;:35::i;:::-;35201:1;35171:12;:18;35184:4;35171:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35245:1;35217:12;:16;35230:2;35217:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35263:31;35297:11;:20;35309:7;35297:20;;;;;;;;;;;35263:54;;35348:2;35332:8;:13;;;:18;;;;;;;;;;;;;;;;;;35398:15;35365:8;:23;;;:49;;;;;;;;;;;;;;;;;;35666:19;35698:1;35688:7;:11;35666:33;;35714:31;35748:11;:24;35760:11;35748:24;;;;;;;;;;;35714:58;;35816:1;35791:27;;:8;:13;;;;;;;;;;;;:27;;;35787:384;;;36001:13;;35986:11;:28;35982:174;;36055:4;36039:8;:13;;;:20;;;;;;;;;;;;;;;;;;36108:13;:28;;;36082:8;:23;;;:54;;;;;;;;;;;;;;;;;;35982:174;35787:384;35146:1036;;;36218:7;36214:2;36199:27;;36208:4;36199:27;;;;;;;;;;;;36237:42;36258:4;36264:2;36268:7;36277:1;36237:20;:42::i;:::-;34261:2026;;34157:2130;;;:::o;31239:104::-;31308:27;31318:2;31322:8;31308:27;;;;;;;;;;;;:9;:27::i;:::-;31239:104;;:::o;26192:1109::-;26254:21;;:::i;:::-;26288:12;26303:7;26288:22;;26371:4;26352:15;:13;:15::i;:::-;:23;;:47;;;;;26386:13;;26379:4;:20;26352:47;26348:886;;;26420:31;26454:11;:17;26466:4;26454:17;;;;;;;;;;;26420:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26495:9;:16;;;26490:729;;26566:1;26540:28;;:9;:14;;;:28;;;26536:101;;26604:9;26597:16;;;;;;26536:101;26939:261;26946:4;26939:261;;;26979:6;;;;;;;;27024:11;:17;27036:4;27024:17;;;;;;;;;;;27012:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27098:1;27072:28;;:9;:14;;;:28;;;27068:109;;27140:9;27133:16;;;;;;27068:109;26939:261;;;26490:729;26401:833;26348:886;27262:31;;;;;;;;;;;;;;26192:1109;;;;:::o;46543:111::-;46603:13;46636:10;46629:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46543:111;:::o;4250:326::-;4310:4;4567:1;4545:7;:19;;;:23;4538:30;;4250:326;;;:::o;39902:667::-;40065:4;40102:2;40086:36;;;40123:12;:10;:12::i;:::-;40137:4;40143:7;40152:5;40086:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40082:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40337:1;40320:6;:13;:18;40316:235;;;40366:40;;;;;;;;;;;;;;40316:235;40509:6;40503:13;40494:6;40490:2;40486:15;40479:38;40082:480;40215:45;;;40205:55;;;:6;:55;;;;40198:62;;;39902:667;;;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;41217:159::-;;;;;:::o;42035:158::-;;;;;:::o;31706:163::-;31829:32;31835:2;31839:8;31849:5;31856:4;31829:5;:32::i;:::-;31706:163;;;:::o;32128:1775::-;32267:20;32290:13;;32267:36;;32332:1;32318:16;;:2;:16;;;32314:48;;;32343:19;;;;;;;;;;;;;;32314:48;32389:1;32377:8;:13;32373:44;;;32399:18;;;;;;;;;;;;;;32373:44;32430:61;32460:1;32464:2;32468:12;32482:8;32430:21;:61::i;:::-;32803:8;32768:12;:16;32781:2;32768:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32867:8;32827:12;:16;32840:2;32827:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32926:2;32893:11;:25;32905:12;32893:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32993:15;32943:11;:25;32955:12;32943:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;33026:20;33049:12;33026:35;;33076:11;33105:8;33090:12;:23;33076:37;;33134:4;:23;;;;;33142:15;:2;:13;;;:15::i;:::-;33134:23;33130:641;;;33178:314;33234:12;33230:2;33209:38;;33226:1;33209:38;;;;;;;;;;;;33275:69;33314:1;33318:2;33322:14;;;;;;33338:5;33275:30;:69::i;:::-;33270:174;;33380:40;;;;;;;;;;;;;;33270:174;33487:3;33471:12;:19;;33178:314;;33573:12;33556:13;;:29;33552:43;;33587:8;;;33552:43;33130:641;;;33636:120;33692:14;;;;;;33688:2;33667:40;;33684:1;33667:40;;;;;;;;;;;;33751:3;33735:12;:19;;33636:120;;33130:641;33801:12;33785:13;:28;;;;32743:1082;;33835:60;33864:1;33868:2;33872:12;33886:8;33835:20;:60::i;:::-;32256:1647;32128:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410: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:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;986:155;;;;:::o;1147:133::-;1190:5;1228:6;1215:20;1206:29;;1244:30;1268:5;1244:30;:::i;:::-;1147:133;;;;:::o;1286:137::-;1331:5;1369:6;1356:20;1347:29;;1385:32;1411:5;1385:32;:::i;:::-;1286:137;;;;:::o;1429:141::-;1485:5;1516:6;1510:13;1501:22;;1532:32;1558:5;1532:32;:::i;:::-;1429:141;;;;:::o;1589:338::-;1644:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:122;;1701:79;;:::i;:::-;1660:122;1818:6;1805:20;1843:78;1917:3;1909:6;1902:4;1894:6;1890:17;1843:78;:::i;:::-;1834:87;;1650:277;1589:338;;;;:::o;1947:340::-;2003:5;2052:3;2045:4;2037:6;2033:17;2029:27;2019:122;;2060:79;;:::i;:::-;2019:122;2177:6;2164:20;2202:79;2277:3;2269:6;2262:4;2254:6;2250:17;2202:79;:::i;:::-;2193:88;;2009:278;1947:340;;;;:::o;2293:139::-;2339:5;2377:6;2364:20;2355:29;;2393:33;2420:5;2393:33;:::i;:::-;2293:139;;;;:::o;2438:135::-;2482:5;2520:6;2507:20;2498:29;;2536:31;2561:5;2536:31;:::i;:::-;2438:135;;;;:::o;2579:329::-;2638:6;2687:2;2675:9;2666:7;2662:23;2658:32;2655:119;;;2693:79;;:::i;:::-;2655:119;2813:1;2838:53;2883:7;2874:6;2863:9;2859:22;2838:53;:::i;:::-;2828:63;;2784:117;2579:329;;;;:::o;2914:490::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:61;3251:7;3242:6;3231:9;3227:22;3198:61;:::i;:::-;3188:71;;3144:125;3308:2;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3279:118;2914:490;;;;;:::o;3410:474::-;3478:6;3486;3535:2;3523:9;3514:7;3510:23;3506:32;3503:119;;;3541:79;;:::i;:::-;3503:119;3661:1;3686:53;3731:7;3722:6;3711:9;3707:22;3686:53;:::i;:::-;3676:63;;3632:117;3788:2;3814:53;3859:7;3850:6;3839:9;3835:22;3814:53;:::i;:::-;3804:63;;3759:118;3410:474;;;;;:::o;3890:619::-;3967:6;3975;3983;4032:2;4020:9;4011:7;4007:23;4003:32;4000:119;;;4038:79;;:::i;:::-;4000:119;4158:1;4183:53;4228:7;4219:6;4208:9;4204:22;4183:53;:::i;:::-;4173:63;;4129:117;4285:2;4311:53;4356:7;4347:6;4336:9;4332:22;4311:53;:::i;:::-;4301:63;;4256:118;4413:2;4439:53;4484:7;4475:6;4464:9;4460:22;4439:53;:::i;:::-;4429:63;;4384:118;3890:619;;;;;:::o;4515:943::-;4610:6;4618;4626;4634;4683:3;4671:9;4662:7;4658:23;4654:33;4651:120;;;4690:79;;:::i;:::-;4651:120;4810:1;4835:53;4880:7;4871:6;4860:9;4856:22;4835:53;:::i;:::-;4825:63;;4781:117;4937:2;4963:53;5008:7;4999:6;4988:9;4984:22;4963:53;:::i;:::-;4953:63;;4908:118;5065:2;5091:53;5136:7;5127:6;5116:9;5112:22;5091:53;:::i;:::-;5081:63;;5036:118;5221:2;5210:9;5206:18;5193:32;5252:18;5244:6;5241:30;5238:117;;;5274:79;;:::i;:::-;5238:117;5379:62;5433:7;5424:6;5413:9;5409:22;5379:62;:::i;:::-;5369:72;;5164:287;4515:943;;;;;;;:::o;5464:468::-;5529:6;5537;5586:2;5574:9;5565:7;5561:23;5557:32;5554:119;;;5592:79;;:::i;:::-;5554:119;5712:1;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;:::i;:::-;5727:63;;5683:117;5839:2;5865:50;5907:7;5898:6;5887:9;5883:22;5865:50;:::i;:::-;5855:60;;5810:115;5464:468;;;;;:::o;5938:474::-;6006:6;6014;6063:2;6051:9;6042:7;6038:23;6034:32;6031:119;;;6069:79;;:::i;:::-;6031:119;6189:1;6214:53;6259:7;6250:6;6239:9;6235:22;6214:53;:::i;:::-;6204:63;;6160:117;6316:2;6342:53;6387:7;6378:6;6367:9;6363:22;6342:53;:::i;:::-;6332:63;;6287:118;5938:474;;;;;:::o;6418:464::-;6481:6;6489;6538:2;6526:9;6517:7;6513:23;6509:32;6506:119;;;6544:79;;:::i;:::-;6506:119;6664:1;6689:50;6731:7;6722:6;6711:9;6707:22;6689:50;:::i;:::-;6679:60;;6635:114;6788:2;6814:51;6857:7;6848:6;6837:9;6833:22;6814:51;:::i;:::-;6804:61;;6759:116;6418:464;;;;;:::o;6888:327::-;6946:6;6995:2;6983:9;6974:7;6970:23;6966:32;6963:119;;;7001:79;;:::i;:::-;6963:119;7121:1;7146:52;7190:7;7181:6;7170:9;7166:22;7146:52;:::i;:::-;7136:62;;7092:116;6888:327;;;;:::o;7221:349::-;7290:6;7339:2;7327:9;7318:7;7314:23;7310:32;7307:119;;;7345:79;;:::i;:::-;7307:119;7465:1;7490:63;7545:7;7536:6;7525:9;7521:22;7490:63;:::i;:::-;7480:73;;7436:127;7221:349;;;;:::o;7576:509::-;7645:6;7694:2;7682:9;7673:7;7669:23;7665:32;7662:119;;;7700:79;;:::i;:::-;7662:119;7848:1;7837:9;7833:17;7820:31;7878:18;7870:6;7867:30;7864:117;;;7900:79;;:::i;:::-;7864:117;8005:63;8060:7;8051:6;8040:9;8036:22;8005:63;:::i;:::-;7995:73;;7791:287;7576:509;;;;:::o;8091:329::-;8150:6;8199:2;8187:9;8178:7;8174:23;8170:32;8167:119;;;8205:79;;:::i;:::-;8167:119;8325:1;8350:53;8395:7;8386:6;8375:9;8371:22;8350:53;:::i;:::-;8340:63;;8296:117;8091:329;;;;:::o;8426:118::-;8513:24;8531:5;8513:24;:::i;:::-;8508:3;8501:37;8426:118;;:::o;8550:109::-;8631:21;8646:5;8631:21;:::i;:::-;8626:3;8619:34;8550:109;;:::o;8665:360::-;8751:3;8779:38;8811:5;8779:38;:::i;:::-;8833:70;8896:6;8891:3;8833:70;:::i;:::-;8826:77;;8912:52;8957:6;8952:3;8945:4;8938:5;8934:16;8912:52;:::i;:::-;8989:29;9011:6;8989:29;:::i;:::-;8984:3;8980:39;8973:46;;8755:270;8665:360;;;;:::o;9031:165::-;9135:54;9183:5;9135:54;:::i;:::-;9130:3;9123:67;9031:165;;:::o;9202:143::-;9295:43;9332:5;9295:43;:::i;:::-;9290:3;9283:56;9202:143;;:::o;9351:364::-;9439:3;9467:39;9500:5;9467:39;:::i;:::-;9522:71;9586:6;9581:3;9522:71;:::i;:::-;9515:78;;9602:52;9647:6;9642:3;9635:4;9628:5;9624:16;9602:52;:::i;:::-;9679:29;9701:6;9679:29;:::i;:::-;9674:3;9670:39;9663:46;;9443:272;9351:364;;;;:::o;9721:377::-;9827:3;9855:39;9888:5;9855:39;:::i;:::-;9910:89;9992:6;9987:3;9910:89;:::i;:::-;9903:96;;10008:52;10053:6;10048:3;10041:4;10034:5;10030:16;10008:52;:::i;:::-;10085:6;10080:3;10076:16;10069:23;;9831:267;9721:377;;;;:::o;10104:366::-;10246:3;10267:67;10331:2;10326:3;10267:67;:::i;:::-;10260:74;;10343:93;10432:3;10343:93;:::i;:::-;10461:2;10456:3;10452:12;10445:19;;10104:366;;;:::o;10476:::-;10618:3;10639:67;10703:2;10698:3;10639:67;:::i;:::-;10632:74;;10715:93;10804:3;10715:93;:::i;:::-;10833:2;10828:3;10824:12;10817:19;;10476:366;;;:::o;10848:400::-;11008:3;11029:84;11111:1;11106:3;11029:84;:::i;:::-;11022:91;;11122:93;11211:3;11122:93;:::i;:::-;11240:1;11235:3;11231:11;11224:18;;10848:400;;;:::o;11254:366::-;11396:3;11417:67;11481:2;11476:3;11417:67;:::i;:::-;11410:74;;11493:93;11582:3;11493:93;:::i;:::-;11611:2;11606:3;11602:12;11595:19;;11254:366;;;:::o;11626:::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:::-;12140:3;12161:67;12225:2;12220:3;12161:67;:::i;:::-;12154:74;;12237:93;12326:3;12237:93;:::i;:::-;12355:2;12350:3;12346:12;12339:19;;11998:366;;;:::o;12370:::-;12512:3;12533:67;12597:2;12592:3;12533:67;:::i;:::-;12526:74;;12609:93;12698:3;12609:93;:::i;:::-;12727:2;12722:3;12718:12;12711:19;;12370:366;;;:::o;12742:::-;12884:3;12905:67;12969:2;12964:3;12905:67;:::i;:::-;12898:74;;12981:93;13070:3;12981:93;:::i;:::-;13099:2;13094:3;13090:12;13083:19;;12742:366;;;:::o;13114:118::-;13201:24;13219:5;13201:24;:::i;:::-;13196:3;13189:37;13114:118;;:::o;13238:701::-;13519:3;13541:95;13632:3;13623:6;13541:95;:::i;:::-;13534:102;;13653:95;13744:3;13735:6;13653:95;:::i;:::-;13646:102;;13765:148;13909:3;13765:148;:::i;:::-;13758:155;;13930:3;13923:10;;13238:701;;;;;:::o;13945:222::-;14038:4;14076:2;14065:9;14061:18;14053:26;;14089:71;14157:1;14146:9;14142:17;14133:6;14089:71;:::i;:::-;13945:222;;;;:::o;14173:640::-;14368:4;14406:3;14395:9;14391:19;14383:27;;14420:71;14488:1;14477:9;14473:17;14464:6;14420:71;:::i;:::-;14501:72;14569:2;14558:9;14554:18;14545:6;14501:72;:::i;:::-;14583;14651:2;14640:9;14636:18;14627:6;14583:72;:::i;:::-;14702:9;14696:4;14692:20;14687:2;14676:9;14672:18;14665:48;14730:76;14801:4;14792:6;14730:76;:::i;:::-;14722:84;;14173:640;;;;;;;:::o;14819:332::-;14940:4;14978:2;14967:9;14963:18;14955:26;;14991:71;15059:1;15048:9;15044:17;15035:6;14991:71;:::i;:::-;15072:72;15140:2;15129:9;15125:18;15116:6;15072:72;:::i;:::-;14819:332;;;;;:::o;15157:454::-;15312:4;15350:2;15339:9;15335:18;15327:26;;15363:71;15431:1;15420:9;15416:17;15407:6;15363:71;:::i;:::-;15444:72;15512:2;15501:9;15497:18;15488:6;15444:72;:::i;:::-;15526:78;15600:2;15589:9;15585:18;15576:6;15526:78;:::i;:::-;15157:454;;;;;;:::o;15617:210::-;15704:4;15742:2;15731:9;15727:18;15719:26;;15755:65;15817:1;15806:9;15802:17;15793:6;15755:65;:::i;:::-;15617:210;;;;:::o;15833:256::-;15943:4;15981:2;15970:9;15966:18;15958:26;;15994:88;16079:1;16068:9;16064:17;16055:6;15994:88;:::i;:::-;15833:256;;;;:::o;16095:313::-;16208:4;16246:2;16235:9;16231:18;16223:26;;16295:9;16289:4;16285:20;16281:1;16270:9;16266:17;16259:47;16323:78;16396:4;16387:6;16323:78;:::i;:::-;16315:86;;16095:313;;;;:::o;16414:419::-;16580:4;16618:2;16607:9;16603:18;16595:26;;16667:9;16661:4;16657:20;16653:1;16642:9;16638:17;16631:47;16695:131;16821:4;16695:131;:::i;:::-;16687:139;;16414:419;;;:::o;16839:::-;17005:4;17043:2;17032:9;17028:18;17020:26;;17092:9;17086:4;17082:20;17078:1;17067:9;17063:17;17056:47;17120:131;17246:4;17120:131;:::i;:::-;17112:139;;16839:419;;;:::o;17264:::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17517:9;17511:4;17507:20;17503:1;17492:9;17488:17;17481:47;17545:131;17671:4;17545:131;:::i;:::-;17537:139;;17264:419;;;:::o;17689:::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17689:419;;;:::o;18114:::-;18280:4;18318:2;18307:9;18303:18;18295:26;;18367:9;18361:4;18357:20;18353:1;18342:9;18338:17;18331:47;18395:131;18521:4;18395:131;:::i;:::-;18387:139;;18114:419;;;:::o;18539:::-;18705:4;18743:2;18732:9;18728:18;18720:26;;18792:9;18786:4;18782:20;18778:1;18767:9;18763:17;18756:47;18820:131;18946:4;18820:131;:::i;:::-;18812:139;;18539:419;;;:::o;18964:::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;18964:419;;;:::o;19389:222::-;19482:4;19520:2;19509:9;19505:18;19497:26;;19533:71;19601:1;19590:9;19586:17;19577:6;19533:71;:::i;:::-;19389:222;;;;:::o;19617:129::-;19651:6;19678:20;;:::i;:::-;19668:30;;19707:33;19735:4;19727:6;19707:33;:::i;:::-;19617:129;;;:::o;19752:75::-;19785:6;19818:2;19812:9;19802:19;;19752:75;:::o;19833:307::-;19894:4;19984:18;19976:6;19973:30;19970:56;;;20006:18;;:::i;:::-;19970:56;20044:29;20066:6;20044:29;:::i;:::-;20036:37;;20128:4;20122;20118:15;20110:23;;19833:307;;;:::o;20146:308::-;20208:4;20298:18;20290:6;20287:30;20284:56;;;20320:18;;:::i;:::-;20284:56;20358:29;20380:6;20358:29;:::i;:::-;20350:37;;20442:4;20436;20432:15;20424:23;;20146:308;;;:::o;20460:98::-;20511:6;20545:5;20539:12;20529:22;;20460:98;;;:::o;20564:99::-;20616:6;20650:5;20644:12;20634:22;;20564:99;;;:::o;20669:168::-;20752:11;20786:6;20781:3;20774:19;20826:4;20821:3;20817:14;20802:29;;20669:168;;;;:::o;20843:169::-;20927:11;20961:6;20956:3;20949:19;21001:4;20996:3;20992:14;20977:29;;20843:169;;;;:::o;21018:148::-;21120:11;21157:3;21142:18;;21018:148;;;;:::o;21172:305::-;21212:3;21231:20;21249:1;21231:20;:::i;:::-;21226:25;;21265:20;21283:1;21265:20;:::i;:::-;21260:25;;21419:1;21351:66;21347:74;21344:1;21341:81;21338:107;;;21425:18;;:::i;:::-;21338:107;21469:1;21466;21462:9;21455:16;;21172:305;;;;:::o;21483:185::-;21523:1;21540:20;21558:1;21540:20;:::i;:::-;21535:25;;21574:20;21592:1;21574:20;:::i;:::-;21569:25;;21613:1;21603:35;;21618:18;;:::i;:::-;21603:35;21660:1;21657;21653:9;21648:14;;21483:185;;;;:::o;21674:348::-;21714:7;21737:20;21755:1;21737:20;:::i;:::-;21732:25;;21771:20;21789:1;21771:20;:::i;:::-;21766:25;;21959:1;21891:66;21887:74;21884:1;21881:81;21876:1;21869:9;21862:17;21858:105;21855:131;;;21966:18;;:::i;:::-;21855:131;22014:1;22011;22007:9;21996:20;;21674:348;;;;:::o;22028:191::-;22068:4;22088:20;22106:1;22088:20;:::i;:::-;22083:25;;22122:20;22140:1;22122:20;:::i;:::-;22117:25;;22161:1;22158;22155:8;22152:34;;;22166:18;;:::i;:::-;22152:34;22211:1;22208;22204:9;22196:17;;22028:191;;;;:::o;22225:96::-;22262:7;22291:24;22309:5;22291:24;:::i;:::-;22280:35;;22225:96;;;:::o;22327:104::-;22372:7;22401:24;22419:5;22401:24;:::i;:::-;22390:35;;22327:104;;;:::o;22437:90::-;22471:7;22514:5;22507:13;22500:21;22489:32;;22437:90;;;:::o;22533:149::-;22569:7;22609:66;22602:5;22598:78;22587:89;;22533:149;;;:::o;22688:126::-;22725:7;22765:42;22758:5;22754:54;22743:65;;22688:126;;;:::o;22820:77::-;22857:7;22886:5;22875:16;;22820:77;;;:::o;22903:86::-;22938:7;22978:4;22971:5;22967:16;22956:27;;22903:86;;;:::o;22995:143::-;23062:9;23095:37;23126:5;23095:37;:::i;:::-;23082:50;;22995:143;;;:::o;23144:117::-;23200:9;23233:22;23249:5;23233:22;:::i;:::-;23220:35;;23144:117;;;:::o;23267:126::-;23317:9;23350:37;23381:5;23350:37;:::i;:::-;23337:50;;23267:126;;;:::o;23399:113::-;23449:9;23482:24;23500:5;23482:24;:::i;:::-;23469:37;;23399:113;;;:::o;23518:154::-;23602:6;23597:3;23592;23579:30;23664:1;23655:6;23650:3;23646:16;23639:27;23518:154;;;:::o;23678:307::-;23746:1;23756:113;23770:6;23767:1;23764:13;23756:113;;;23855:1;23850:3;23846:11;23840:18;23836:1;23831:3;23827:11;23820:39;23792:2;23789:1;23785:10;23780:15;;23756:113;;;23887:6;23884:1;23881:13;23878:101;;;23967:1;23958:6;23953:3;23949:16;23942:27;23878:101;23727:258;23678:307;;;:::o;23991:320::-;24035:6;24072:1;24066:4;24062:12;24052:22;;24119:1;24113:4;24109:12;24140:18;24130:81;;24196:4;24188:6;24184:17;24174:27;;24130:81;24258:2;24250:6;24247:14;24227:18;24224:38;24221:84;;;24277:18;;:::i;:::-;24221:84;24042:269;23991:320;;;:::o;24317:281::-;24400:27;24422:4;24400:27;:::i;:::-;24392:6;24388:40;24530:6;24518:10;24515:22;24494:18;24482:10;24479:34;24476:62;24473:88;;;24541:18;;:::i;:::-;24473:88;24581:10;24577:2;24570:22;24360:238;24317:281;;:::o;24604:233::-;24643:3;24666:24;24684:5;24666:24;:::i;:::-;24657:33;;24712:66;24705:5;24702:77;24699:103;;;24782:18;;:::i;:::-;24699:103;24829:1;24822:5;24818:13;24811:20;;24604:233;;;:::o;24843:176::-;24875:1;24892:20;24910:1;24892:20;:::i;:::-;24887:25;;24926:20;24944:1;24926:20;:::i;:::-;24921:25;;24965:1;24955:35;;24970:18;;:::i;:::-;24955:35;25011:1;25008;25004:9;24999:14;;24843:176;;;;:::o;25025:180::-;25073:77;25070:1;25063:88;25170:4;25167:1;25160:15;25194:4;25191:1;25184:15;25211:180;25259:77;25256:1;25249:88;25356:4;25353:1;25346:15;25380:4;25377:1;25370:15;25397:180;25445:77;25442:1;25435:88;25542:4;25539:1;25532:15;25566:4;25563:1;25556:15;25583:180;25631:77;25628:1;25621:88;25728:4;25725:1;25718:15;25752:4;25749:1;25742:15;25769:180;25817:77;25814:1;25807:88;25914:4;25911:1;25904:15;25938:4;25935:1;25928:15;25955:117;26064:1;26061;26054:12;26078:117;26187:1;26184;26177:12;26201:117;26310:1;26307;26300:12;26324:117;26433:1;26430;26423:12;26447:102;26488:6;26539:2;26535:7;26530:2;26523:5;26519:14;26515:28;26505:38;;26447:102;;;:::o;26555:165::-;26695:17;26691:1;26683:6;26679:14;26672:41;26555:165;:::o;26726:168::-;26866:20;26862:1;26854:6;26850:14;26843:44;26726:168;:::o;26900:155::-;27040:7;27036:1;27028:6;27024:14;27017:31;26900:155;:::o;27061:172::-;27201:24;27197:1;27189:6;27185:14;27178:48;27061:172;:::o;27239:170::-;27379:22;27375:1;27367:6;27363:14;27356:46;27239:170;:::o;27415:161::-;27555:13;27551:1;27543:6;27539:14;27532:37;27415:161;:::o;27582:165::-;27722:17;27718:1;27710:6;27706:14;27699:41;27582:165;:::o;27753:160::-;27893:12;27889:1;27881:6;27877:14;27870:36;27753:160;:::o;27919:122::-;27992:24;28010:5;27992:24;:::i;:::-;27985:5;27982:35;27972:63;;28031:1;28028;28021:12;27972:63;27919:122;:::o;28047:138::-;28128:32;28154:5;28128:32;:::i;:::-;28121:5;28118:43;28108:71;;28175:1;28172;28165:12;28108:71;28047:138;:::o;28191:116::-;28261:21;28276:5;28261:21;:::i;:::-;28254:5;28251:32;28241:60;;28297:1;28294;28287:12;28241:60;28191:116;:::o;28313:120::-;28385:23;28402:5;28385:23;:::i;:::-;28378:5;28375:34;28365:62;;28423:1;28420;28413:12;28365:62;28313:120;:::o;28439:122::-;28512:24;28530:5;28512:24;:::i;:::-;28505:5;28502:35;28492:63;;28551:1;28548;28541:12;28492:63;28439:122;:::o;28567:118::-;28638:22;28654:5;28638:22;:::i;:::-;28631:5;28628:33;28618:61;;28675:1;28672;28665:12;28618:61;28567:118;:::o
Swarm Source
ipfs://f9767fd479714b670f341253f9a83ecd5d3be2ed5965c895db1b8ee652f639e4
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.