ERC-721
Overview
Max Total Supply
3,000 BB
Holders
457
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BannerBuddies
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-03-01 */ // Sources flattened with hardhat v2.8.2 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // 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/token/ERC721/[email protected] // 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/[email protected] // 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/token/ERC721/extensions/[email protected] // 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 @openzeppelin/contracts/utils/[email protected] // 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/utils/[email protected] // 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/[email protected] // 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/introspection/[email protected] // 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/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/IERC2981.sol /*** * ███████╗██╗██████╗ ██████╗ █████╗ █████╗ ██╗ * ██╔════╝██║██╔══██╗ ╚════██╗██╔══██╗██╔══██╗███║ * █████╗ ██║██████╔╝█████╗ █████╔╝╚██████║╚█████╔╝╚██║ * ██╔══╝ ██║██╔═══╝ ╚════╝██╔═══╝ ╚═══██║██╔══██╗ ██║ * ███████╗██║██║ ███████╗ █████╔╝╚█████╔╝ ██║ * ╚══════╝╚═╝╚═╝ ╚══════╝ ╚════╝ ╚════╝ ╚═╝ * Zach Burks, James Morgan, Blaine Malone, James Seibel, * "EIP-2981: NFT Royalty Standard," * Ethereum Improvement Proposals, no. 2981, September 2020. [Online serial]. * Available: https://eips.ethereum.org/EIPS/eip-2981. * * Minor edit on comments to mirror the rest of the interfaces * by @MaxFlowO2 on 29 Dec 2021 for v2.1 */ pragma solidity >=0.8.0 <0.9.0; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol) pragma solidity ^0.8.0; /** * @dev Storage based implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165Storage is ERC165 { /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File contracts/ERC2981.sol /*** * ███████╗██████╗ ██████╗██████╗ █████╗ █████╗ ██╗ * ██╔════╝██╔══██╗██╔════╝╚════██╗██╔══██╗██╔══██╗███║ * █████╗ ██████╔╝██║ █████╔╝╚██████║╚█████╔╝╚██║ * ██╔══╝ ██╔══██╗██║ ██╔═══╝ ╚═══██║██╔══██╗ ██║ * ███████╗██║ ██║╚██████╗███████╗ █████╔╝╚█████╔╝ ██║ * ╚══════╝╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚════╝ ╚════╝ ╚═╝ * Written by MaxflowO2 * You can follow along at https://github.com/MaxflowO2/ERC2981 */ pragma solidity ^0.8.4; abstract contract ERC2981 is IERC2981, ERC165Storage { using SafeMath for uint256; // Bytes4 Code for EIP-2981 bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; // Mappings _tokenID -> values address receiver; uint256 royaltyPercentage; constructor() { // Using ERC165Storage set EIP-2981 _registerInterface(_INTERFACE_ID_ERC2981); } // Set to be internal function _setReceiver function _setReceiver(address _address) internal { receiver = _address; } // Set to be internal function _setRoyaltyPercentage function _setRoyaltyPercentage(uint256 _royaltyPercentage) internal { royaltyPercentage = _royaltyPercentage; } // Override for royaltyInfo(uint256, uint256) // uses SafeMath for uint256 function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view override(IERC2981) returns (address Receiver, uint256 royaltyAmount) { Receiver = receiver; royaltyAmount = _salePrice.div(100).mul(royaltyPercentage); } } // File contracts/BannerBuddies.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract BannerBuddies is ERC721Enumerable, Ownable, ERC2981 { using Strings for uint256; string baseURI; string public baseExtension = ".json"; mapping(address => uint256) private whitelist; address[] private team = [ 0x962A2880Eb188AB4C2Cfe9874247fCC60a243d13, //30% - MacePapa - dev 0xf1B9FABd8E0cA7Dd6333a94182D4b37C0f999059, //22.5% - SG - Lead 0xDC8f198515E4059428f1a99fa6af4A0Ab54BE958, //22.5% - Melon - Lead 0x8922720485893029a970AEc9063F68e8Edc47AD9 //25% - ashar - artist ]; uint256 public cost = 6900000000000000000; uint256 public maxSupply = 3000; uint256 public maxMintAmount = 20; bool public publicPaused = true; bool public whitelistPaused = true; bool public revealed = true; string public notRevealedUri; address public giveawayAddr = 0xC339a333F7A1DB2F1CeAEE1D3e77875Bf6dEb533; uint256 constant private ROYALTIES_PERCENTAGE = 5; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); _setReceiver(address(giveawayAddr)); _setRoyaltyPercentage(ROYALTIES_PERCENTAGE); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 totalPayout = 0; require(!publicPaused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } totalPayout = msg.value; //First payout to wallet in team 0 index //30% payout payable(team[0]).transfer(totalPayout * 29 / 100); //22.5% payout payable(team[1]).transfer(totalPayout * 23 / 100); //22.5% payout payable(team[2]).transfer(totalPayout * 23 / 100); //25% payout payable(team[3]).transfer(totalPayout * 25 / 100); } // public function whitelistMint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 totalPayout = 0; require(whitelist[msg.sender] == 1); require(!whitelistPaused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } totalPayout = msg.value; //First payout to wallet in team 0 index //30% payout payable(team[0]).transfer(totalPayout * 29 / 100); //22.5% payout payable(team[1]).transfer(totalPayout * 23 / 100); //22.5% payout payable(team[2]).transfer(totalPayout * 23 / 100); //25% payout payable(team[3]).transfer(totalPayout * 25 / 100); } function mintGiveaways() public onlyOwner { uint256 supply = totalSupply(); require(supply <= 54); for(uint256 i = 1; i < 28; i++) { _safeMint(giveawayAddr, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function checkWhitelist(address _addr) public view returns (bool) { if(whitelist[_addr] == 1) { return true; } else { return false; } } //only owner function setWhitelist(address[] memory _whitelist) public onlyOwner { //Sets the mapping of address => uint256 //Each whitelisted address will be given uint256 value of 1 //Require statement for free mint will contain check for address with mapped value > 0 for(uint256 i = 0; i < _whitelist.length; i++) { whitelist[_whitelist[i]] = 1; } } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pausePublic(bool _state) public onlyOwner { publicPaused = _state; } function pauseWhitelist(bool _state) public onlyOwner { whitelistPaused = _state; } function withdraw() public payable onlyOwner { // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintGiveaways","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pausePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pauseWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"Receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000519291906200060c565b50604051806080016040528073962a2880eb188ab4c2cfe9874247fcc60a243d1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f1b9fabd8e0ca7dd6333a94182d4b37c0f99905973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173dc8f198515e4059428f1a99fa6af4a0ab54be95873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738922720485893029a970aec9063f68e8edc47ad973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506011906004620001859291906200069d565b50675fc1b97136320000601255610bb8601355601480556001601560006101000a81548160ff0219169083151502179055506001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff02191690831515021790555073c339a333f7a1db2f1ceaee1d3e77875bf6deb533601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200024f57600080fd5b5060405162005c9f38038062005c9f8339818101604052810190620002759190620007bd565b828281600090805190602001906200028f9291906200060c565b508060019080519060200190620002a89291906200060c565b505050620002cb620002bf6200034260201b60201c565b6200034a60201b60201c565b620002e3632a55205a60e01b6200041060201b60201c565b620002f481620004e960201b60201c565b62000327601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200059460201b60201c565b620003396005620005d860201b60201c565b50505062000ac3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200047c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047390620008ac565b60405180910390fd5b6001600b6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b620004f96200034260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200051f620005e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000578576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056f90620008ce565b60405180910390fd5b80600e9080519060200190620005909291906200060c565b5050565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600d8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200061a9062000996565b90600052602060002090601f0160209004810192826200063e57600085556200068a565b82601f106200065957805160ff19168380011785556200068a565b828001600101855582156200068a579182015b82811115620006895782518255916020019190600101906200066c565b5b5090506200069991906200072c565b5090565b82805482825590600052602060002090810192821562000719579160200282015b82811115620007185782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620006be565b5b5090506200072891906200072c565b5090565b5b80821115620007475760008160009055506001016200072d565b5090565b6000620007626200075c8462000919565b620008f0565b9050828152602081018484840111156200077b57600080fd5b6200078884828562000960565b509392505050565b600082601f830112620007a257600080fd5b8151620007b48482602086016200074b565b91505092915050565b600080600060608486031215620007d357600080fd5b600084015167ffffffffffffffff811115620007ee57600080fd5b620007fc8682870162000790565b935050602084015167ffffffffffffffff8111156200081a57600080fd5b620008288682870162000790565b925050604084015167ffffffffffffffff8111156200084657600080fd5b620008548682870162000790565b9150509250925092565b60006200086d601c836200094f565b91506200087a8262000a71565b602082019050919050565b6000620008946020836200094f565b9150620008a18262000a9a565b602082019050919050565b60006020820190508181036000830152620008c7816200085e565b9050919050565b60006020820190508181036000830152620008e98162000885565b9050919050565b6000620008fc6200090f565b90506200090a8282620009cc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000937576200093662000a31565b5b620009428262000a60565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200098057808201518184015260208101905062000963565b8381111562000990576000848401525b50505050565b60006002820490506001821680620009af57607f821691505b60208210811415620009c657620009c562000a02565b5b50919050565b620009d78262000a60565b810181811067ffffffffffffffff82111715620009f957620009f862000a31565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6151cc8062000ad36000396000f3fe6080604052600436106102515760003560e01c80636352211e11610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb011461089e578063da3ef23f146108c9578063e985e9c5146108f2578063f2fde38b1461092f578063f421764814610958578063f79c173f1461098157610251565b8063b88d4fde146107cb578063c6682862146107f4578063c87b56dd1461081f578063ce0d0d671461085c578063d4f96a091461087357610251565b8063868ff4a2116100fd578063868ff4a2146107145780638da5cb5b1461073057806395d89b411461075b578063a0712d6814610786578063a22cb465146107a257610251565b80636352211e1461063157806366cb24a51461066e57806370a0823114610697578063715018a6146106d45780637f00c7a6146106eb57610251565b806323b872dd116101d2578063438b630011610196578063438b63001461050f57806344a0d68a1461054c5780634f6ccce71461057557806351830227146105b257806355f804b3146105dd57806361e61a251461060657610251565b806323b872dd146104385780632a55205a146104615780632f745c591461049f5780633ccfd60b146104dc57806342842e0e146104e657610251565b80630bb12bb8116102195780630bb12bb81461034f57806313faede61461037a57806318160ddd146103a55780631950c218146103d0578063239c70ae1461040d57610251565b806301ffc9a71461025657806306fdde0314610293578063081812fc146102be578063081c8c44146102fb578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613e88565b6109aa565b60405161028a91906144e5565b60405180910390f35b34801561029f57600080fd5b506102a8610a22565b6040516102b59190614500565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190613f1b565b610ab4565b6040516102f29190614433565b60405180910390f35b34801561030757600080fd5b50610310610b39565b60405161031d9190614500565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613de2565b610bc7565b005b34801561035b57600080fd5b50610364610cdf565b60405161037191906144e5565b60405180910390f35b34801561038657600080fd5b5061038f610cf2565b60405161039c9190614762565b60405180910390f35b3480156103b157600080fd5b506103ba610cf8565b6040516103c79190614762565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613c77565b610d05565b60405161040491906144e5565b60405180910390f35b34801561041957600080fd5b50610422610d62565b60405161042f9190614762565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613cdc565b610d68565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f44565b610dc8565b60405161049692919061449a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613de2565b610e21565b6040516104d39190614762565b60405180910390f35b6104e4610ec6565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613cdc565b610fc2565b005b34801561051b57600080fd5b5061053660048036038101906105319190613c77565b610fe2565b60405161054391906144c3565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613f1b565b6110dc565b005b34801561058157600080fd5b5061059c60048036038101906105979190613f1b565b611162565b6040516105a99190614762565b60405180910390f35b3480156105be57600080fd5b506105c76111f9565b6040516105d491906144e5565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613eda565b61120c565b005b34801561061257600080fd5b5061061b6112a2565b60405161062891906144e5565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613f1b565b6112b5565b6040516106659190614433565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613e5f565b611367565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613c77565b611400565b6040516106cb9190614762565b60405180910390f35b3480156106e057600080fd5b506106e96114b8565b005b3480156106f757600080fd5b50610712600480360381019061070d9190613f1b565b611540565b005b61072e60048036038101906107299190613f1b565b6115c6565b005b34801561073c57600080fd5b50610745611a14565b6040516107529190614433565b60405180910390f35b34801561076757600080fd5b50610770611a3e565b60405161077d9190614500565b60405180910390f35b6107a0600480360381019061079b9190613f1b565b611ad0565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190613da6565b611ed2565b005b3480156107d757600080fd5b506107f260048036038101906107ed9190613d2b565b611ee8565b005b34801561080057600080fd5b50610809611f4a565b6040516108169190614500565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613f1b565b611fd8565b6040516108539190614500565b60405180910390f35b34801561086857600080fd5b50610871612131565b005b34801561087f57600080fd5b50610888612225565b6040516108959190614433565b60405180910390f35b3480156108aa57600080fd5b506108b361224b565b6040516108c09190614762565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb9190613eda565b612251565b005b3480156108fe57600080fd5b5061091960048036038101906109149190613ca0565b6122e7565b60405161092691906144e5565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190613c77565b61237b565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613e1e565b612473565b005b34801561098d57600080fd5b506109a860048036038101906109a39190613e5f565b612597565b005b60006109b582612630565b80610a1b5750600b6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b606060008054610a3190614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5d90614a97565b8015610aaa5780601f10610a7f57610100808354040283529160200191610aaa565b820191906000526020600020905b815481529060010190602001808311610a8d57829003601f168201915b5050505050905090565b6000610abf826126aa565b610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af5906146a2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60168054610b4690614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7290614a97565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b505050505081565b6000610bd2826112b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90614702565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c62612716565b73ffffffffffffffffffffffffffffffffffffffff161480610c915750610c9081610c8b612716565b6122e7565b5b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790614622565b60405180910390fd5b610cda838361271e565b505050565b601560009054906101000a900460ff1681565b60125481565b6000600880549050905090565b60006001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610d585760019050610d5d565b600090505b919050565b60145481565b610d79610d73612716565b826127d7565b610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90614722565b60405180910390fd5b610dc38383836128b5565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150610e18600d54610e0a606486612b1c90919063ffffffff16565b612b3290919063ffffffff16565b90509250929050565b6000610e2c83611400565b8210610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490614522565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ece612716565b73ffffffffffffffffffffffffffffffffffffffff16610eec611a14565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906146c2565b60405180910390fd5b6000610f4c611a14565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f6f9061441e565b60006040518083038185875af1925050503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5050905080610fbf57600080fd5b50565b610fdd83838360405180602001604052806000815250611ee8565b505050565b60606000610fef83611400565b905060008167ffffffffffffffff811115611033577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110615781602001602082028036833780820191505090505b50905060005b828110156110d1576110798582610e21565b8282815181106110b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110c990614afa565b915050611067565b508092505050919050565b6110e4612716565b73ffffffffffffffffffffffffffffffffffffffff16611102611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906146c2565b60405180910390fd5b8060128190555050565b600061116c610cf8565b82106111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614742565b60405180910390fd5b600882815481106111e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601560029054906101000a900460ff1681565b611214612716565b73ffffffffffffffffffffffffffffffffffffffff16611232611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906146c2565b60405180910390fd5b80600e908051906020019061129e929190613a05565b5050565b601560019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590614662565b60405180910390fd5b80915050919050565b61136f612716565b73ffffffffffffffffffffffffffffffffffffffff1661138d611a14565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906146c2565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614642565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c0612716565b73ffffffffffffffffffffffffffffffffffffffff166114de611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b906146c2565b60405180910390fd5b61153e6000612b48565b565b611548612716565b73ffffffffffffffffffffffffffffffffffffffff16611566611a14565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906146c2565b60405180910390fd5b8060148190555050565b60006115d0610cf8565b905060006001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461162057600080fd5b601560019054906101000a900460ff161561163a57600080fd5b6000831161164757600080fd5b60145483111561165657600080fd5b601354838361166591906148cc565b111561167057600080fd5b611678611a14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c557826012546116b89190614953565b3410156116c457600080fd5b5b6000600190505b8381116116fb576116e83382856116e391906148cc565b612c0e565b80806116f390614afa565b9150506116cc565b50349050601160008154811061173a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601d8461178d9190614953565b6117979190614922565b9081150290604051600060405180830381858888f193505050501580156117c2573d6000803e3d6000fd5b5060116001815481106117fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646017846118519190614953565b61185b9190614922565b9081150290604051600060405180830381858888f19350505050158015611886573d6000803e3d6000fd5b5060116002815481106118c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646017846119159190614953565b61191f9190614922565b9081150290604051600060405180830381858888f1935050505015801561194a573d6000803e3d6000fd5b506011600381548110611986577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646019846119d99190614953565b6119e39190614922565b9081150290604051600060405180830381858888f19350505050158015611a0e573d6000803e3d6000fd5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a4d90614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7990614a97565b8015611ac65780601f10611a9b57610100808354040283529160200191611ac6565b820191906000526020600020905b815481529060010190602001808311611aa957829003601f168201915b5050505050905090565b6000611ada610cf8565b90506000601560009054906101000a900460ff1615611af857600080fd5b60008311611b0557600080fd5b601454831115611b1457600080fd5b6013548383611b2391906148cc565b1115611b2e57600080fd5b611b36611a14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b835782601254611b769190614953565b341015611b8257600080fd5b5b6000600190505b838111611bb957611ba6338285611ba191906148cc565b612c0e565b8080611bb190614afa565b915050611b8a565b503490506011600081548110611bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601d84611c4b9190614953565b611c559190614922565b9081150290604051600060405180830381858888f19350505050158015611c80573d6000803e3d6000fd5b506011600181548110611cbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601784611d0f9190614953565b611d199190614922565b9081150290604051600060405180830381858888f19350505050158015611d44573d6000803e3d6000fd5b506011600281548110611d80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601784611dd39190614953565b611ddd9190614922565b9081150290604051600060405180830381858888f19350505050158015611e08573d6000803e3d6000fd5b506011600381548110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601984611e979190614953565b611ea19190614922565b9081150290604051600060405180830381858888f19350505050158015611ecc573d6000803e3d6000fd5b50505050565b611ee4611edd612716565b8383612c2c565b5050565b611ef9611ef3612716565b836127d7565b611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90614722565b60405180910390fd5b611f4484848484612d99565b50505050565b600f8054611f5790614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8390614a97565b8015611fd05780601f10611fa557610100808354040283529160200191611fd0565b820191906000526020600020905b815481529060010190602001808311611fb357829003601f168201915b505050505081565b6060611fe3826126aa565b612022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612019906146e2565b60405180910390fd5b60001515601560029054906101000a900460ff16151514156120d0576016805461204b90614a97565b80601f016020809104026020016040519081016040528092919081815260200182805461207790614a97565b80156120c45780601f10612099576101008083540402835291602001916120c4565b820191906000526020600020905b8154815290600101906020018083116120a757829003601f168201915b5050505050905061212c565b60006120da612df5565b905060008151116120fa5760405180602001604052806000815250612128565b8061210484612e87565b600f604051602001612118939291906143ed565b6040516020818303038152906040525b9150505b919050565b612139612716565b73ffffffffffffffffffffffffffffffffffffffff16612157611a14565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906146c2565b60405180910390fd5b60006121b7610cf8565b905060368111156121c757600080fd5b6000600190505b601c8110156122215761220e601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828461220991906148cc565b612c0e565b808061221990614afa565b9150506121ce565b5050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b612259612716565b73ffffffffffffffffffffffffffffffffffffffff16612277611a14565b73ffffffffffffffffffffffffffffffffffffffff16146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c4906146c2565b60405180910390fd5b80600f90805190602001906122e3929190613a05565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612383612716565b73ffffffffffffffffffffffffffffffffffffffff166123a1611a14565b73ffffffffffffffffffffffffffffffffffffffff16146123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee906146c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614562565b60405180910390fd5b61247081612b48565b50565b61247b612716565b73ffffffffffffffffffffffffffffffffffffffff16612499611a14565b73ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906146c2565b60405180910390fd5b60005b81518110156125935760016010600084848151811061253a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061258b90614afa565b9150506124f2565b5050565b61259f612716565b73ffffffffffffffffffffffffffffffffffffffff166125bd611a14565b73ffffffffffffffffffffffffffffffffffffffff1614612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906146c2565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126a357506126a282613034565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612791836112b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127e2826126aa565b612821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281890614602565b60405180910390fd5b600061282c836112b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061289b57508373ffffffffffffffffffffffffffffffffffffffff1661288384610ab4565b73ffffffffffffffffffffffffffffffffffffffff16145b806128ac57506128ab81856122e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128d5826112b5565b73ffffffffffffffffffffffffffffffffffffffff161461292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612992906145c2565b60405180910390fd5b6129a6838383613116565b6129b160008261271e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0191906149ad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5891906148cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b1783838361322a565b505050565b60008183612b2a9190614922565b905092915050565b60008183612b409190614953565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c2882826040518060200160405280600081525061322f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c92906145e2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d8c91906144e5565b60405180910390a3505050565b612da48484846128b5565b612db08484848461328a565b612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de690614542565b60405180910390fd5b50505050565b6060600e8054612e0490614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054612e3090614a97565b8015612e7d5780601f10612e5257610100808354040283529160200191612e7d565b820191906000526020600020905b815481529060010190602001808311612e6057829003601f168201915b5050505050905090565b60606000821415612ecf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061302f565b600082905060005b60008214612f01578080612eea90614afa565b915050600a82612efa9190614922565b9150612ed7565b60008167ffffffffffffffff811115612f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f755781602001600182028036833780820191505090505b5090505b6000851461302857600182612f8e91906149ad565b9150600a85612f9d9190614b43565b6030612fa991906148cc565b60f81b818381518110612fe5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130219190614922565b9450612f79565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061310f575061310e82613421565b5b9050919050565b61312183838361348b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131645761315f81613490565b6131a3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131a2576131a183826134d9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e6576131e181613646565b613225565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613224576132238282613789565b5b5b505050565b505050565b6132398383613808565b613246600084848461328a565b613285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c90614542565b60405180910390fd5b505050565b60006132ab8473ffffffffffffffffffffffffffffffffffffffff166139e2565b15613414578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132d4612716565b8786866040518563ffffffff1660e01b81526004016132f6949392919061444e565b602060405180830381600087803b15801561331057600080fd5b505af192505050801561334157506040513d601f19601f8201168201806040525081019061333e9190613eb1565b60015b6133c4573d8060008114613371576040519150601f19603f3d011682016040523d82523d6000602084013e613376565b606091505b506000815114156133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b390614542565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613419565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016134e684611400565b6134f091906149ad565b90506000600760008481526020019081526020016000205490508181146135d5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061365a91906149ad565b90506000600960008481526020019081526020016000205490506000600883815481106136b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106136f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061376d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061379483611400565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386f90614682565b60405180910390fd5b613881816126aa565b156138c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b8906145a2565b60405180910390fd5b6138cd60008383613116565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461391d91906148cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139de6000838361322a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613a1190614a97565b90600052602060002090601f016020900481019282613a335760008555613a7a565b82601f10613a4c57805160ff1916838001178555613a7a565b82800160010185558215613a7a579182015b82811115613a79578251825591602001919060010190613a5e565b5b509050613a879190613a8b565b5090565b5b80821115613aa4576000816000905550600101613a8c565b5090565b6000613abb613ab6846147a2565b61477d565b90508083825260208201905082856020860282011115613ada57600080fd5b60005b85811015613b0a5781613af08882613b90565b845260208401935060208301925050600181019050613add565b5050509392505050565b6000613b27613b22846147ce565b61477d565b905082815260208101848484011115613b3f57600080fd5b613b4a848285614a55565b509392505050565b6000613b65613b60846147ff565b61477d565b905082815260208101848484011115613b7d57600080fd5b613b88848285614a55565b509392505050565b600081359050613b9f8161513a565b92915050565b600082601f830112613bb657600080fd5b8135613bc6848260208601613aa8565b91505092915050565b600081359050613bde81615151565b92915050565b600081359050613bf381615168565b92915050565b600081519050613c0881615168565b92915050565b600082601f830112613c1f57600080fd5b8135613c2f848260208601613b14565b91505092915050565b600082601f830112613c4957600080fd5b8135613c59848260208601613b52565b91505092915050565b600081359050613c718161517f565b92915050565b600060208284031215613c8957600080fd5b6000613c9784828501613b90565b91505092915050565b60008060408385031215613cb357600080fd5b6000613cc185828601613b90565b9250506020613cd285828601613b90565b9150509250929050565b600080600060608486031215613cf157600080fd5b6000613cff86828701613b90565b9350506020613d1086828701613b90565b9250506040613d2186828701613c62565b9150509250925092565b60008060008060808587031215613d4157600080fd5b6000613d4f87828801613b90565b9450506020613d6087828801613b90565b9350506040613d7187828801613c62565b925050606085013567ffffffffffffffff811115613d8e57600080fd5b613d9a87828801613c0e565b91505092959194509250565b60008060408385031215613db957600080fd5b6000613dc785828601613b90565b9250506020613dd885828601613bcf565b9150509250929050565b60008060408385031215613df557600080fd5b6000613e0385828601613b90565b9250506020613e1485828601613c62565b9150509250929050565b600060208284031215613e3057600080fd5b600082013567ffffffffffffffff811115613e4a57600080fd5b613e5684828501613ba5565b91505092915050565b600060208284031215613e7157600080fd5b6000613e7f84828501613bcf565b91505092915050565b600060208284031215613e9a57600080fd5b6000613ea884828501613be4565b91505092915050565b600060208284031215613ec357600080fd5b6000613ed184828501613bf9565b91505092915050565b600060208284031215613eec57600080fd5b600082013567ffffffffffffffff811115613f0657600080fd5b613f1284828501613c38565b91505092915050565b600060208284031215613f2d57600080fd5b6000613f3b84828501613c62565b91505092915050565b60008060408385031215613f5757600080fd5b6000613f6585828601613c62565b9250506020613f7685828601613c62565b9150509250929050565b6000613f8c83836143cf565b60208301905092915050565b613fa1816149e1565b82525050565b6000613fb282614855565b613fbc8185614883565b9350613fc783614830565b8060005b83811015613ff8578151613fdf8882613f80565b9750613fea83614876565b925050600181019050613fcb565b5085935050505092915050565b61400e816149f3565b82525050565b600061401f82614860565b6140298185614894565b9350614039818560208601614a64565b61404281614c30565b840191505092915050565b60006140588261486b565b61406281856148b0565b9350614072818560208601614a64565b61407b81614c30565b840191505092915050565b60006140918261486b565b61409b81856148c1565b93506140ab818560208601614a64565b80840191505092915050565b600081546140c481614a97565b6140ce81866148c1565b945060018216600081146140e957600181146140fa5761412d565b60ff1983168652818601935061412d565b61410385614840565b60005b8381101561412557815481890152600182019150602081019050614106565b838801955050505b50505092915050565b6000614143602b836148b0565b915061414e82614c41565b604082019050919050565b60006141666032836148b0565b915061417182614c90565b604082019050919050565b60006141896026836148b0565b915061419482614cdf565b604082019050919050565b60006141ac6025836148b0565b91506141b782614d2e565b604082019050919050565b60006141cf601c836148b0565b91506141da82614d7d565b602082019050919050565b60006141f26024836148b0565b91506141fd82614da6565b604082019050919050565b60006142156019836148b0565b915061422082614df5565b602082019050919050565b6000614238602c836148b0565b915061424382614e1e565b604082019050919050565b600061425b6038836148b0565b915061426682614e6d565b604082019050919050565b600061427e602a836148b0565b915061428982614ebc565b604082019050919050565b60006142a16029836148b0565b91506142ac82614f0b565b604082019050919050565b60006142c46020836148b0565b91506142cf82614f5a565b602082019050919050565b60006142e7602c836148b0565b91506142f282614f83565b604082019050919050565b600061430a6020836148b0565b915061431582614fd2565b602082019050919050565b600061432d602f836148b0565b915061433882614ffb565b604082019050919050565b60006143506021836148b0565b915061435b8261504a565b604082019050919050565b60006143736000836148a5565b915061437e82615099565b600082019050919050565b60006143966031836148b0565b91506143a18261509c565b604082019050919050565b60006143b9602c836148b0565b91506143c4826150eb565b604082019050919050565b6143d881614a4b565b82525050565b6143e781614a4b565b82525050565b60006143f98286614086565b91506144058285614086565b915061441182846140b7565b9150819050949350505050565b600061442982614366565b9150819050919050565b60006020820190506144486000830184613f98565b92915050565b60006080820190506144636000830187613f98565b6144706020830186613f98565b61447d60408301856143de565b818103606083015261448f8184614014565b905095945050505050565b60006040820190506144af6000830185613f98565b6144bc60208301846143de565b9392505050565b600060208201905081810360008301526144dd8184613fa7565b905092915050565b60006020820190506144fa6000830184614005565b92915050565b6000602082019050818103600083015261451a818461404d565b905092915050565b6000602082019050818103600083015261453b81614136565b9050919050565b6000602082019050818103600083015261455b81614159565b9050919050565b6000602082019050818103600083015261457b8161417c565b9050919050565b6000602082019050818103600083015261459b8161419f565b9050919050565b600060208201905081810360008301526145bb816141c2565b9050919050565b600060208201905081810360008301526145db816141e5565b9050919050565b600060208201905081810360008301526145fb81614208565b9050919050565b6000602082019050818103600083015261461b8161422b565b9050919050565b6000602082019050818103600083015261463b8161424e565b9050919050565b6000602082019050818103600083015261465b81614271565b9050919050565b6000602082019050818103600083015261467b81614294565b9050919050565b6000602082019050818103600083015261469b816142b7565b9050919050565b600060208201905081810360008301526146bb816142da565b9050919050565b600060208201905081810360008301526146db816142fd565b9050919050565b600060208201905081810360008301526146fb81614320565b9050919050565b6000602082019050818103600083015261471b81614343565b9050919050565b6000602082019050818103600083015261473b81614389565b9050919050565b6000602082019050818103600083015261475b816143ac565b9050919050565b600060208201905061477760008301846143de565b92915050565b6000614787614798565b90506147938282614ac9565b919050565b6000604051905090565b600067ffffffffffffffff8211156147bd576147bc614c01565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e9576147e8614c01565b5b6147f282614c30565b9050602081019050919050565b600067ffffffffffffffff82111561481a57614819614c01565b5b61482382614c30565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148d782614a4b565b91506148e283614a4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561491757614916614b74565b5b828201905092915050565b600061492d82614a4b565b915061493883614a4b565b92508261494857614947614ba3565b5b828204905092915050565b600061495e82614a4b565b915061496983614a4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149a2576149a1614b74565b5b828202905092915050565b60006149b882614a4b565b91506149c383614a4b565b9250828210156149d6576149d5614b74565b5b828203905092915050565b60006149ec82614a2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a82578082015181840152602081019050614a67565b83811115614a91576000848401525b50505050565b60006002820490506001821680614aaf57607f821691505b60208210811415614ac357614ac2614bd2565b5b50919050565b614ad282614c30565b810181811067ffffffffffffffff82111715614af157614af0614c01565b5b80604052505050565b6000614b0582614a4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b3857614b37614b74565b5b600182019050919050565b6000614b4e82614a4b565b9150614b5983614a4b565b925082614b6957614b68614ba3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615143816149e1565b811461514e57600080fd5b50565b61515a816149f3565b811461516557600080fd5b50565b615171816149ff565b811461517c57600080fd5b50565b61518881614a4b565b811461519357600080fd5b5056fea2646970667358221220fb27620abb89ceace600de61d7d584ad324422afd22b5571cbf85e320591978264736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d42616e6e65724275646469657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80636352211e11610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb011461089e578063da3ef23f146108c9578063e985e9c5146108f2578063f2fde38b1461092f578063f421764814610958578063f79c173f1461098157610251565b8063b88d4fde146107cb578063c6682862146107f4578063c87b56dd1461081f578063ce0d0d671461085c578063d4f96a091461087357610251565b8063868ff4a2116100fd578063868ff4a2146107145780638da5cb5b1461073057806395d89b411461075b578063a0712d6814610786578063a22cb465146107a257610251565b80636352211e1461063157806366cb24a51461066e57806370a0823114610697578063715018a6146106d45780637f00c7a6146106eb57610251565b806323b872dd116101d2578063438b630011610196578063438b63001461050f57806344a0d68a1461054c5780634f6ccce71461057557806351830227146105b257806355f804b3146105dd57806361e61a251461060657610251565b806323b872dd146104385780632a55205a146104615780632f745c591461049f5780633ccfd60b146104dc57806342842e0e146104e657610251565b80630bb12bb8116102195780630bb12bb81461034f57806313faede61461037a57806318160ddd146103a55780631950c218146103d0578063239c70ae1461040d57610251565b806301ffc9a71461025657806306fdde0314610293578063081812fc146102be578063081c8c44146102fb578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613e88565b6109aa565b60405161028a91906144e5565b60405180910390f35b34801561029f57600080fd5b506102a8610a22565b6040516102b59190614500565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190613f1b565b610ab4565b6040516102f29190614433565b60405180910390f35b34801561030757600080fd5b50610310610b39565b60405161031d9190614500565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613de2565b610bc7565b005b34801561035b57600080fd5b50610364610cdf565b60405161037191906144e5565b60405180910390f35b34801561038657600080fd5b5061038f610cf2565b60405161039c9190614762565b60405180910390f35b3480156103b157600080fd5b506103ba610cf8565b6040516103c79190614762565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613c77565b610d05565b60405161040491906144e5565b60405180910390f35b34801561041957600080fd5b50610422610d62565b60405161042f9190614762565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613cdc565b610d68565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f44565b610dc8565b60405161049692919061449a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613de2565b610e21565b6040516104d39190614762565b60405180910390f35b6104e4610ec6565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613cdc565b610fc2565b005b34801561051b57600080fd5b5061053660048036038101906105319190613c77565b610fe2565b60405161054391906144c3565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613f1b565b6110dc565b005b34801561058157600080fd5b5061059c60048036038101906105979190613f1b565b611162565b6040516105a99190614762565b60405180910390f35b3480156105be57600080fd5b506105c76111f9565b6040516105d491906144e5565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613eda565b61120c565b005b34801561061257600080fd5b5061061b6112a2565b60405161062891906144e5565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613f1b565b6112b5565b6040516106659190614433565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613e5f565b611367565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613c77565b611400565b6040516106cb9190614762565b60405180910390f35b3480156106e057600080fd5b506106e96114b8565b005b3480156106f757600080fd5b50610712600480360381019061070d9190613f1b565b611540565b005b61072e60048036038101906107299190613f1b565b6115c6565b005b34801561073c57600080fd5b50610745611a14565b6040516107529190614433565b60405180910390f35b34801561076757600080fd5b50610770611a3e565b60405161077d9190614500565b60405180910390f35b6107a0600480360381019061079b9190613f1b565b611ad0565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190613da6565b611ed2565b005b3480156107d757600080fd5b506107f260048036038101906107ed9190613d2b565b611ee8565b005b34801561080057600080fd5b50610809611f4a565b6040516108169190614500565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613f1b565b611fd8565b6040516108539190614500565b60405180910390f35b34801561086857600080fd5b50610871612131565b005b34801561087f57600080fd5b50610888612225565b6040516108959190614433565b60405180910390f35b3480156108aa57600080fd5b506108b361224b565b6040516108c09190614762565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb9190613eda565b612251565b005b3480156108fe57600080fd5b5061091960048036038101906109149190613ca0565b6122e7565b60405161092691906144e5565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190613c77565b61237b565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613e1e565b612473565b005b34801561098d57600080fd5b506109a860048036038101906109a39190613e5f565b612597565b005b60006109b582612630565b80610a1b5750600b6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b606060008054610a3190614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5d90614a97565b8015610aaa5780601f10610a7f57610100808354040283529160200191610aaa565b820191906000526020600020905b815481529060010190602001808311610a8d57829003601f168201915b5050505050905090565b6000610abf826126aa565b610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af5906146a2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60168054610b4690614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7290614a97565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b505050505081565b6000610bd2826112b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90614702565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c62612716565b73ffffffffffffffffffffffffffffffffffffffff161480610c915750610c9081610c8b612716565b6122e7565b5b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790614622565b60405180910390fd5b610cda838361271e565b505050565b601560009054906101000a900460ff1681565b60125481565b6000600880549050905090565b60006001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610d585760019050610d5d565b600090505b919050565b60145481565b610d79610d73612716565b826127d7565b610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90614722565b60405180910390fd5b610dc38383836128b5565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150610e18600d54610e0a606486612b1c90919063ffffffff16565b612b3290919063ffffffff16565b90509250929050565b6000610e2c83611400565b8210610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490614522565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ece612716565b73ffffffffffffffffffffffffffffffffffffffff16610eec611a14565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906146c2565b60405180910390fd5b6000610f4c611a14565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f6f9061441e565b60006040518083038185875af1925050503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5050905080610fbf57600080fd5b50565b610fdd83838360405180602001604052806000815250611ee8565b505050565b60606000610fef83611400565b905060008167ffffffffffffffff811115611033577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110615781602001602082028036833780820191505090505b50905060005b828110156110d1576110798582610e21565b8282815181106110b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110c990614afa565b915050611067565b508092505050919050565b6110e4612716565b73ffffffffffffffffffffffffffffffffffffffff16611102611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906146c2565b60405180910390fd5b8060128190555050565b600061116c610cf8565b82106111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614742565b60405180910390fd5b600882815481106111e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601560029054906101000a900460ff1681565b611214612716565b73ffffffffffffffffffffffffffffffffffffffff16611232611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906146c2565b60405180910390fd5b80600e908051906020019061129e929190613a05565b5050565b601560019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590614662565b60405180910390fd5b80915050919050565b61136f612716565b73ffffffffffffffffffffffffffffffffffffffff1661138d611a14565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906146c2565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614642565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c0612716565b73ffffffffffffffffffffffffffffffffffffffff166114de611a14565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b906146c2565b60405180910390fd5b61153e6000612b48565b565b611548612716565b73ffffffffffffffffffffffffffffffffffffffff16611566611a14565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906146c2565b60405180910390fd5b8060148190555050565b60006115d0610cf8565b905060006001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461162057600080fd5b601560019054906101000a900460ff161561163a57600080fd5b6000831161164757600080fd5b60145483111561165657600080fd5b601354838361166591906148cc565b111561167057600080fd5b611678611a14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c557826012546116b89190614953565b3410156116c457600080fd5b5b6000600190505b8381116116fb576116e83382856116e391906148cc565b612c0e565b80806116f390614afa565b9150506116cc565b50349050601160008154811061173a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601d8461178d9190614953565b6117979190614922565b9081150290604051600060405180830381858888f193505050501580156117c2573d6000803e3d6000fd5b5060116001815481106117fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646017846118519190614953565b61185b9190614922565b9081150290604051600060405180830381858888f19350505050158015611886573d6000803e3d6000fd5b5060116002815481106118c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646017846119159190614953565b61191f9190614922565b9081150290604051600060405180830381858888f1935050505015801561194a573d6000803e3d6000fd5b506011600381548110611986577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646019846119d99190614953565b6119e39190614922565b9081150290604051600060405180830381858888f19350505050158015611a0e573d6000803e3d6000fd5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a4d90614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7990614a97565b8015611ac65780601f10611a9b57610100808354040283529160200191611ac6565b820191906000526020600020905b815481529060010190602001808311611aa957829003601f168201915b5050505050905090565b6000611ada610cf8565b90506000601560009054906101000a900460ff1615611af857600080fd5b60008311611b0557600080fd5b601454831115611b1457600080fd5b6013548383611b2391906148cc565b1115611b2e57600080fd5b611b36611a14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b835782601254611b769190614953565b341015611b8257600080fd5b5b6000600190505b838111611bb957611ba6338285611ba191906148cc565b612c0e565b8080611bb190614afa565b915050611b8a565b503490506011600081548110611bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601d84611c4b9190614953565b611c559190614922565b9081150290604051600060405180830381858888f19350505050158015611c80573d6000803e3d6000fd5b506011600181548110611cbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601784611d0f9190614953565b611d199190614922565b9081150290604051600060405180830381858888f19350505050158015611d44573d6000803e3d6000fd5b506011600281548110611d80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601784611dd39190614953565b611ddd9190614922565b9081150290604051600060405180830381858888f19350505050158015611e08573d6000803e3d6000fd5b506011600381548110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064601984611e979190614953565b611ea19190614922565b9081150290604051600060405180830381858888f19350505050158015611ecc573d6000803e3d6000fd5b50505050565b611ee4611edd612716565b8383612c2c565b5050565b611ef9611ef3612716565b836127d7565b611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90614722565b60405180910390fd5b611f4484848484612d99565b50505050565b600f8054611f5790614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8390614a97565b8015611fd05780601f10611fa557610100808354040283529160200191611fd0565b820191906000526020600020905b815481529060010190602001808311611fb357829003601f168201915b505050505081565b6060611fe3826126aa565b612022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612019906146e2565b60405180910390fd5b60001515601560029054906101000a900460ff16151514156120d0576016805461204b90614a97565b80601f016020809104026020016040519081016040528092919081815260200182805461207790614a97565b80156120c45780601f10612099576101008083540402835291602001916120c4565b820191906000526020600020905b8154815290600101906020018083116120a757829003601f168201915b5050505050905061212c565b60006120da612df5565b905060008151116120fa5760405180602001604052806000815250612128565b8061210484612e87565b600f604051602001612118939291906143ed565b6040516020818303038152906040525b9150505b919050565b612139612716565b73ffffffffffffffffffffffffffffffffffffffff16612157611a14565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906146c2565b60405180910390fd5b60006121b7610cf8565b905060368111156121c757600080fd5b6000600190505b601c8110156122215761220e601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828461220991906148cc565b612c0e565b808061221990614afa565b9150506121ce565b5050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b612259612716565b73ffffffffffffffffffffffffffffffffffffffff16612277611a14565b73ffffffffffffffffffffffffffffffffffffffff16146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c4906146c2565b60405180910390fd5b80600f90805190602001906122e3929190613a05565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612383612716565b73ffffffffffffffffffffffffffffffffffffffff166123a1611a14565b73ffffffffffffffffffffffffffffffffffffffff16146123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee906146c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614562565b60405180910390fd5b61247081612b48565b50565b61247b612716565b73ffffffffffffffffffffffffffffffffffffffff16612499611a14565b73ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906146c2565b60405180910390fd5b60005b81518110156125935760016010600084848151811061253a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061258b90614afa565b9150506124f2565b5050565b61259f612716565b73ffffffffffffffffffffffffffffffffffffffff166125bd611a14565b73ffffffffffffffffffffffffffffffffffffffff1614612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906146c2565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126a357506126a282613034565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612791836112b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127e2826126aa565b612821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281890614602565b60405180910390fd5b600061282c836112b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061289b57508373ffffffffffffffffffffffffffffffffffffffff1661288384610ab4565b73ffffffffffffffffffffffffffffffffffffffff16145b806128ac57506128ab81856122e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128d5826112b5565b73ffffffffffffffffffffffffffffffffffffffff161461292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612992906145c2565b60405180910390fd5b6129a6838383613116565b6129b160008261271e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0191906149ad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5891906148cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b1783838361322a565b505050565b60008183612b2a9190614922565b905092915050565b60008183612b409190614953565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c2882826040518060200160405280600081525061322f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c92906145e2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d8c91906144e5565b60405180910390a3505050565b612da48484846128b5565b612db08484848461328a565b612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de690614542565b60405180910390fd5b50505050565b6060600e8054612e0490614a97565b80601f0160208091040260200160405190810160405280929190818152602001828054612e3090614a97565b8015612e7d5780601f10612e5257610100808354040283529160200191612e7d565b820191906000526020600020905b815481529060010190602001808311612e6057829003601f168201915b5050505050905090565b60606000821415612ecf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061302f565b600082905060005b60008214612f01578080612eea90614afa565b915050600a82612efa9190614922565b9150612ed7565b60008167ffffffffffffffff811115612f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f755781602001600182028036833780820191505090505b5090505b6000851461302857600182612f8e91906149ad565b9150600a85612f9d9190614b43565b6030612fa991906148cc565b60f81b818381518110612fe5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130219190614922565b9450612f79565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061310f575061310e82613421565b5b9050919050565b61312183838361348b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131645761315f81613490565b6131a3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131a2576131a183826134d9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e6576131e181613646565b613225565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613224576132238282613789565b5b5b505050565b505050565b6132398383613808565b613246600084848461328a565b613285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c90614542565b60405180910390fd5b505050565b60006132ab8473ffffffffffffffffffffffffffffffffffffffff166139e2565b15613414578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132d4612716565b8786866040518563ffffffff1660e01b81526004016132f6949392919061444e565b602060405180830381600087803b15801561331057600080fd5b505af192505050801561334157506040513d601f19601f8201168201806040525081019061333e9190613eb1565b60015b6133c4573d8060008114613371576040519150601f19603f3d011682016040523d82523d6000602084013e613376565b606091505b506000815114156133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b390614542565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613419565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016134e684611400565b6134f091906149ad565b90506000600760008481526020019081526020016000205490508181146135d5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061365a91906149ad565b90506000600960008481526020019081526020016000205490506000600883815481106136b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106136f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061376d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061379483611400565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386f90614682565b60405180910390fd5b613881816126aa565b156138c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b8906145a2565b60405180910390fd5b6138cd60008383613116565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461391d91906148cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139de6000838361322a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613a1190614a97565b90600052602060002090601f016020900481019282613a335760008555613a7a565b82601f10613a4c57805160ff1916838001178555613a7a565b82800160010185558215613a7a579182015b82811115613a79578251825591602001919060010190613a5e565b5b509050613a879190613a8b565b5090565b5b80821115613aa4576000816000905550600101613a8c565b5090565b6000613abb613ab6846147a2565b61477d565b90508083825260208201905082856020860282011115613ada57600080fd5b60005b85811015613b0a5781613af08882613b90565b845260208401935060208301925050600181019050613add565b5050509392505050565b6000613b27613b22846147ce565b61477d565b905082815260208101848484011115613b3f57600080fd5b613b4a848285614a55565b509392505050565b6000613b65613b60846147ff565b61477d565b905082815260208101848484011115613b7d57600080fd5b613b88848285614a55565b509392505050565b600081359050613b9f8161513a565b92915050565b600082601f830112613bb657600080fd5b8135613bc6848260208601613aa8565b91505092915050565b600081359050613bde81615151565b92915050565b600081359050613bf381615168565b92915050565b600081519050613c0881615168565b92915050565b600082601f830112613c1f57600080fd5b8135613c2f848260208601613b14565b91505092915050565b600082601f830112613c4957600080fd5b8135613c59848260208601613b52565b91505092915050565b600081359050613c718161517f565b92915050565b600060208284031215613c8957600080fd5b6000613c9784828501613b90565b91505092915050565b60008060408385031215613cb357600080fd5b6000613cc185828601613b90565b9250506020613cd285828601613b90565b9150509250929050565b600080600060608486031215613cf157600080fd5b6000613cff86828701613b90565b9350506020613d1086828701613b90565b9250506040613d2186828701613c62565b9150509250925092565b60008060008060808587031215613d4157600080fd5b6000613d4f87828801613b90565b9450506020613d6087828801613b90565b9350506040613d7187828801613c62565b925050606085013567ffffffffffffffff811115613d8e57600080fd5b613d9a87828801613c0e565b91505092959194509250565b60008060408385031215613db957600080fd5b6000613dc785828601613b90565b9250506020613dd885828601613bcf565b9150509250929050565b60008060408385031215613df557600080fd5b6000613e0385828601613b90565b9250506020613e1485828601613c62565b9150509250929050565b600060208284031215613e3057600080fd5b600082013567ffffffffffffffff811115613e4a57600080fd5b613e5684828501613ba5565b91505092915050565b600060208284031215613e7157600080fd5b6000613e7f84828501613bcf565b91505092915050565b600060208284031215613e9a57600080fd5b6000613ea884828501613be4565b91505092915050565b600060208284031215613ec357600080fd5b6000613ed184828501613bf9565b91505092915050565b600060208284031215613eec57600080fd5b600082013567ffffffffffffffff811115613f0657600080fd5b613f1284828501613c38565b91505092915050565b600060208284031215613f2d57600080fd5b6000613f3b84828501613c62565b91505092915050565b60008060408385031215613f5757600080fd5b6000613f6585828601613c62565b9250506020613f7685828601613c62565b9150509250929050565b6000613f8c83836143cf565b60208301905092915050565b613fa1816149e1565b82525050565b6000613fb282614855565b613fbc8185614883565b9350613fc783614830565b8060005b83811015613ff8578151613fdf8882613f80565b9750613fea83614876565b925050600181019050613fcb565b5085935050505092915050565b61400e816149f3565b82525050565b600061401f82614860565b6140298185614894565b9350614039818560208601614a64565b61404281614c30565b840191505092915050565b60006140588261486b565b61406281856148b0565b9350614072818560208601614a64565b61407b81614c30565b840191505092915050565b60006140918261486b565b61409b81856148c1565b93506140ab818560208601614a64565b80840191505092915050565b600081546140c481614a97565b6140ce81866148c1565b945060018216600081146140e957600181146140fa5761412d565b60ff1983168652818601935061412d565b61410385614840565b60005b8381101561412557815481890152600182019150602081019050614106565b838801955050505b50505092915050565b6000614143602b836148b0565b915061414e82614c41565b604082019050919050565b60006141666032836148b0565b915061417182614c90565b604082019050919050565b60006141896026836148b0565b915061419482614cdf565b604082019050919050565b60006141ac6025836148b0565b91506141b782614d2e565b604082019050919050565b60006141cf601c836148b0565b91506141da82614d7d565b602082019050919050565b60006141f26024836148b0565b91506141fd82614da6565b604082019050919050565b60006142156019836148b0565b915061422082614df5565b602082019050919050565b6000614238602c836148b0565b915061424382614e1e565b604082019050919050565b600061425b6038836148b0565b915061426682614e6d565b604082019050919050565b600061427e602a836148b0565b915061428982614ebc565b604082019050919050565b60006142a16029836148b0565b91506142ac82614f0b565b604082019050919050565b60006142c46020836148b0565b91506142cf82614f5a565b602082019050919050565b60006142e7602c836148b0565b91506142f282614f83565b604082019050919050565b600061430a6020836148b0565b915061431582614fd2565b602082019050919050565b600061432d602f836148b0565b915061433882614ffb565b604082019050919050565b60006143506021836148b0565b915061435b8261504a565b604082019050919050565b60006143736000836148a5565b915061437e82615099565b600082019050919050565b60006143966031836148b0565b91506143a18261509c565b604082019050919050565b60006143b9602c836148b0565b91506143c4826150eb565b604082019050919050565b6143d881614a4b565b82525050565b6143e781614a4b565b82525050565b60006143f98286614086565b91506144058285614086565b915061441182846140b7565b9150819050949350505050565b600061442982614366565b9150819050919050565b60006020820190506144486000830184613f98565b92915050565b60006080820190506144636000830187613f98565b6144706020830186613f98565b61447d60408301856143de565b818103606083015261448f8184614014565b905095945050505050565b60006040820190506144af6000830185613f98565b6144bc60208301846143de565b9392505050565b600060208201905081810360008301526144dd8184613fa7565b905092915050565b60006020820190506144fa6000830184614005565b92915050565b6000602082019050818103600083015261451a818461404d565b905092915050565b6000602082019050818103600083015261453b81614136565b9050919050565b6000602082019050818103600083015261455b81614159565b9050919050565b6000602082019050818103600083015261457b8161417c565b9050919050565b6000602082019050818103600083015261459b8161419f565b9050919050565b600060208201905081810360008301526145bb816141c2565b9050919050565b600060208201905081810360008301526145db816141e5565b9050919050565b600060208201905081810360008301526145fb81614208565b9050919050565b6000602082019050818103600083015261461b8161422b565b9050919050565b6000602082019050818103600083015261463b8161424e565b9050919050565b6000602082019050818103600083015261465b81614271565b9050919050565b6000602082019050818103600083015261467b81614294565b9050919050565b6000602082019050818103600083015261469b816142b7565b9050919050565b600060208201905081810360008301526146bb816142da565b9050919050565b600060208201905081810360008301526146db816142fd565b9050919050565b600060208201905081810360008301526146fb81614320565b9050919050565b6000602082019050818103600083015261471b81614343565b9050919050565b6000602082019050818103600083015261473b81614389565b9050919050565b6000602082019050818103600083015261475b816143ac565b9050919050565b600060208201905061477760008301846143de565b92915050565b6000614787614798565b90506147938282614ac9565b919050565b6000604051905090565b600067ffffffffffffffff8211156147bd576147bc614c01565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e9576147e8614c01565b5b6147f282614c30565b9050602081019050919050565b600067ffffffffffffffff82111561481a57614819614c01565b5b61482382614c30565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148d782614a4b565b91506148e283614a4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561491757614916614b74565b5b828201905092915050565b600061492d82614a4b565b915061493883614a4b565b92508261494857614947614ba3565b5b828204905092915050565b600061495e82614a4b565b915061496983614a4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149a2576149a1614b74565b5b828202905092915050565b60006149b882614a4b565b91506149c383614a4b565b9250828210156149d6576149d5614b74565b5b828203905092915050565b60006149ec82614a2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a82578082015181840152602081019050614a67565b83811115614a91576000848401525b50505050565b60006002820490506001821680614aaf57607f821691505b60208210811415614ac357614ac2614bd2565b5b50919050565b614ad282614c30565b810181811067ffffffffffffffff82111715614af157614af0614c01565b5b80604052505050565b6000614b0582614a4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b3857614b37614b74565b5b600182019050919050565b6000614b4e82614a4b565b9150614b5983614a4b565b925082614b6957614b68614ba3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615143816149e1565b811461514e57600080fd5b50565b61515a816149f3565b811461516557600080fd5b50565b615171816149ff565b811461517c57600080fd5b50565b61518881614a4b565b811461519357600080fd5b5056fea2646970667358221220fb27620abb89ceace600de61d7d584ad324422afd22b5571cbf85e320591978264736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d42616e6e65724275646469657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): BannerBuddies
Arg [1] : _symbol (string): BB
Arg [2] : _initBaseURI (string):
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 42616e6e65724275646469657300000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4242000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
58304:5700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48255:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22632:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24191:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59061:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23714:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58954:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58834:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37540:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62462:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58916:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24941:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57951:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37208:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63680:321;;;:::i;:::-;;25351:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61605:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63051:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37730:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59029:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63259:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58990:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22326:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63582:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22056:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44765:103;;;;;;;;;;;;;:::i;:::-;;63137:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60489:899;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22801:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59625:845;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24484:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25607:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58421:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61959:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61394:203;;;;;;;;;;;;;:::i;:::-;;59094:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58880:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63363:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24710:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45023:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62656:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63491:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48255:190;48340:4;48364:36;48388:11;48364:23;:36::i;:::-;:73;;;;48404:20;:33;48425:11;48404:33;;;;;;;;;;;;;;;;;;;;;;;;;;;48364:73;48357:80;;48255:190;;;:::o;22632:100::-;22686:13;22719:5;22712:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22632:100;:::o;24191:221::-;24267:7;24295:16;24303:7;24295;:16::i;:::-;24287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24380:15;:24;24396:7;24380:24;;;;;;;;;;;;;;;;;;;;;24373:31;;24191:221;;;:::o;59061:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23714:411::-;23795:13;23811:23;23826:7;23811:14;:23::i;:::-;23795:39;;23859:5;23853:11;;:2;:11;;;;23845:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23953:5;23937:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23962:37;23979:5;23986:12;:10;:12::i;:::-;23962:16;:37::i;:::-;23937:62;23915:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24096:21;24105:2;24109:7;24096:8;:21::i;:::-;23714:411;;;:::o;58954:31::-;;;;;;;;;;;;;:::o;58834:41::-;;;;:::o;37540:113::-;37601:7;37628:10;:17;;;;37621:24;;37540:113;:::o;62462:172::-;62522:4;62558:1;62538:9;:16;62548:5;62538:16;;;;;;;;;;;;;;;;:21;62535:94;;;62577:4;62570:11;;;;62535:94;62616:5;62609:12;;62462:172;;;;:::o;58916:33::-;;;;:::o;24941:339::-;25136:41;25155:12;:10;:12::i;:::-;25169:7;25136:18;:41::i;:::-;25128:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25244:28;25254:4;25260:2;25264:7;25244:9;:28::i;:::-;24941:339;;;:::o;57951:239::-;58052:16;58070:21;58111:8;;;;;;;;;;;58100:19;;58142:42;58166:17;;58142:19;58157:3;58142:10;:14;;:19;;;;:::i;:::-;:23;;:42;;;;:::i;:::-;58126:58;;57951:239;;;;;:::o;37208:256::-;37305:7;37341:23;37358:5;37341:16;:23::i;:::-;37333:5;:31;37325:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37430:12;:19;37443:5;37430:19;;;;;;;;;;;;;;;:26;37450:5;37430:26;;;;;;;;;;;;37423:33;;37208:256;;;;:::o;63680:321::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63823:7:::1;63844;:5;:7::i;:::-;63836:21;;63865;63836:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63822:69;;;63906:2;63898:11;;;::::0;::::1;;44405:1;63680:321::o:0;25351:185::-;25489:39;25506:4;25512:2;25516:7;25489:39;;;;;;;;;;;;:16;:39::i;:::-;25351:185;;;:::o;61605:348::-;61680:16;61708:23;61734:17;61744:6;61734:9;:17::i;:::-;61708:43;;61758:25;61800:15;61786:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61758:58;;61828:9;61823:103;61843:15;61839:1;:19;61823:103;;;61888:30;61908:6;61916:1;61888:19;:30::i;:::-;61874:8;61883:1;61874:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;61860:3;;;;;:::i;:::-;;;;61823:103;;;;61939:8;61932:15;;;;61605:348;;;:::o;63051:80::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63117:8:::1;63110:4;:15;;;;63051:80:::0;:::o;37730:233::-;37805:7;37841:30;:28;:30::i;:::-;37833:5;:38;37825:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:10;37949:5;37938:17;;;;;;;;;;;;;;;;;;;;;;;;37931:24;;37730:233;;;:::o;59029:27::-;;;;;;;;;;;;;:::o;63259:98::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63340:11:::1;63330:7;:21;;;;;;;;;;;;:::i;:::-;;63259:98:::0;:::o;58990:34::-;;;;;;;;;;;;;:::o;22326:239::-;22398:7;22418:13;22434:7;:16;22442:7;22434:16;;;;;;;;;;;;;;;;;;;;;22418:32;;22486:1;22469:19;;:5;:19;;;;22461:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22552:5;22545:12;;;22326:239;;;:::o;63582:91::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63661:6:::1;63643:15;;:24;;;;;;;;;;;;;;;;;;63582:91:::0;:::o;22056:208::-;22128:7;22173:1;22156:19;;:5;:19;;;;22148:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22240:9;:16;22250:5;22240:16;;;;;;;;;;;;;;;;22233:23;;22056:208;;;:::o;44765:103::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44830:30:::1;44857:1;44830:18;:30::i;:::-;44765:103::o:0;63137:116::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63230:17:::1;63214:13;:33;;;;63137:116:::0;:::o;60489:899::-;60555:14;60572:13;:11;:13::i;:::-;60555:30;;60592:19;60655:1;60630:9;:21;60640:10;60630:21;;;;;;;;;;;;;;;;:26;60622:35;;;;;;60673:15;;;;;;;;;;;60672:16;60664:25;;;;;;60718:1;60704:11;:15;60696:24;;;;;;60750:13;;60735:11;:28;;60727:37;;;;;;60803:9;;60788:11;60779:6;:20;;;;:::i;:::-;:33;;60771:42;;;;;;60840:7;:5;:7::i;:::-;60826:21;;:10;:21;;;60822:84;;60886:11;60879:4;;:18;;;;:::i;:::-;60866:9;:31;;60858:40;;;;;;60822:84;60919:9;60931:1;60919:13;;60914:93;60939:11;60934:1;:16;60914:93;;60966:33;60976:10;60997:1;60988:6;:10;;;;:::i;:::-;60966:9;:33::i;:::-;60952:3;;;;;:::i;:::-;;;;60914:93;;;;61027:9;61013:23;;61115:4;61120:1;61115:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61107:25;;:49;61152:3;61147:2;61133:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;61107:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61191:4;61196:1;61191:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61183:25;;:49;61228:3;61223:2;61209:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;61183:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61267:4;61272:1;61267:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61259:25;;:49;61304:3;61299:2;61285:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;61259:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61341:4;61346:1;61341:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61333:25;;:49;61378:3;61373:2;61359:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;61333:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60489:899;;;:::o;44114:87::-;44160:7;44187:6;;;;;;;;;;;44180:13;;44114:87;:::o;22801:104::-;22857:13;22890:7;22883:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22801:104;:::o;59625:845::-;59682:14;59699:13;:11;:13::i;:::-;59682:30;;59719:19;59758:12;;;;;;;;;;;59757:13;59749:22;;;;;;59800:1;59786:11;:15;59778:24;;;;;;59832:13;;59817:11;:28;;59809:37;;;;;;59885:9;;59870:11;59861:6;:20;;;;:::i;:::-;:33;;59853:42;;;;;;59922:7;:5;:7::i;:::-;59908:21;;:10;:21;;;59904:84;;59968:11;59961:4;;:18;;;;:::i;:::-;59948:9;:31;;59940:40;;;;;;59904:84;60001:9;60013:1;60001:13;;59996:93;60021:11;60016:1;:16;59996:93;;60048:33;60058:10;60079:1;60070:6;:10;;;;:::i;:::-;60048:9;:33::i;:::-;60034:3;;;;;:::i;:::-;;;;59996:93;;;;60109:9;60095:23;;60197:4;60202:1;60197:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60189:25;;:49;60234:3;60229:2;60215:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;60189:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60273:4;60278:1;60273:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60265:25;;:49;60310:3;60305:2;60291:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;60265:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60349:4;60354:1;60349:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60341:25;;:49;60386:3;60381:2;60367:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;60341:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60423:4;60428:1;60423:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60415:25;;:49;60460:3;60455:2;60441:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;60415:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59625:845;;;:::o;24484:155::-;24579:52;24598:12;:10;:12::i;:::-;24612:8;24622;24579:18;:52::i;:::-;24484:155;;:::o;25607:328::-;25782:41;25801:12;:10;:12::i;:::-;25815:7;25782:18;:41::i;:::-;25774:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25888:39;25902:4;25908:2;25912:7;25921:5;25888:13;:39::i;:::-;25607:328;;;;:::o;58421:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;61959:497::-;62057:13;62098:16;62106:7;62098;:16::i;:::-;62082:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;62207:5;62195:17;;:8;;;;;;;;;;;:17;;;62192:62;;;62232:14;62225:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62192:62;62262:28;62293:10;:8;:10::i;:::-;62262:41;;62348:1;62323:14;62317:28;:32;:133;;;;;;;;;;;;;;;;;62385:14;62401:18;:7;:16;:18::i;:::-;62421:13;62368:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62317:133;62310:140;;;61959:497;;;;:::o;61394:203::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61443:14:::1;61460:13;:11;:13::i;:::-;61443:30;;61498:2;61488:6;:12;;61480:21;;;::::0;::::1;;61512:9;61524:1;61512:13;;61508:84;61531:2;61527:1;:6;61508:84;;;61549:35;61559:12;;;;;;;;;;;61582:1;61573:6;:10;;;;:::i;:::-;61549:9;:35::i;:::-;61535:3;;;;;:::i;:::-;;;;61508:84;;;;44405:1;61394:203::o:0;59094:72::-;;;;;;;;;;;;;:::o;58880:31::-;;;;:::o;63363:122::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63462:17:::1;63446:13;:33;;;;;;;;;;;;:::i;:::-;;63363:122:::0;:::o;24710:164::-;24807:4;24831:18;:25;24850:5;24831:25;;;;;;;;;;;;;;;:35;24857:8;24831:35;;;;;;;;;;;;;;;;;;;;;;;;;24824:42;;24710:164;;;;:::o;45023:201::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45132:1:::1;45112:22;;:8;:22;;;;45104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45188:28;45207:8;45188:18;:28::i;:::-;45023:201:::0;:::o;62656:387::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62946:9:::1;62942:96;62965:10;:17;62961:1;:21;62942:96;;;63027:1;63000:9;:24;63010:10;63021:1;63010:13;;;;;;;;;;;;;;;;;;;;;;63000:24;;;;;;;;;;;;;;;:28;;;;62984:3;;;;;:::i;:::-;;;;62942:96;;;;62656:387:::0;:::o;63491:85::-;44345:12;:10;:12::i;:::-;44334:23;;:7;:5;:7::i;:::-;:23;;;44326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63564:6:::1;63549:12;;:21;;;;;;;;;;;;;;;;;;63491:85:::0;:::o;36900:224::-;37002:4;37041:35;37026:50;;;:11;:50;;;;:90;;;;37080:36;37104:11;37080:23;:36::i;:::-;37026:90;37019:97;;36900:224;;;:::o;27445:127::-;27510:4;27562:1;27534:30;;:7;:16;27542:7;27534:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27527:37;;27445:127;;;:::o;16899:98::-;16952:7;16979:10;16972:17;;16899:98;:::o;31591:174::-;31693:2;31666:15;:24;31682:7;31666:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31749:7;31745:2;31711:46;;31720:23;31735:7;31720:14;:23::i;:::-;31711:46;;;;;;;;;;;;31591:174;;:::o;27739:348::-;27832:4;27857:16;27865:7;27857;:16::i;:::-;27849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27933:13;27949:23;27964:7;27949:14;:23::i;:::-;27933:39;;28002:5;27991:16;;:7;:16;;;:51;;;;28035:7;28011:31;;:20;28023:7;28011:11;:20::i;:::-;:31;;;27991:51;:87;;;;28046:32;28063:5;28070:7;28046:16;:32::i;:::-;27991:87;27983:96;;;27739:348;;;;:::o;30848:625::-;31007:4;30980:31;;:23;30995:7;30980:14;:23::i;:::-;:31;;;30972:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31086:1;31072:16;;:2;:16;;;;31064:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31142:39;31163:4;31169:2;31173:7;31142:20;:39::i;:::-;31246:29;31263:1;31267:7;31246:8;:29::i;:::-;31307:1;31288:9;:15;31298:4;31288:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31336:1;31319:9;:13;31329:2;31319:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31367:2;31348:7;:16;31356:7;31348:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31406:7;31402:2;31387:27;;31396:4;31387:27;;;;;;;;;;;;31427:38;31447:4;31453:2;31457:7;31427:19;:38::i;:::-;30848:625;;;:::o;53065:98::-;53123:7;53154:1;53150;:5;;;;:::i;:::-;53143:12;;53065:98;;;;:::o;52666:::-;52724:7;52755:1;52751;:5;;;;:::i;:::-;52744:12;;52666:98;;;;:::o;45384:191::-;45458:16;45477:6;;;;;;;;;;;45458:25;;45503:8;45494:6;;:17;;;;;;;;;;;;;;;;;;45558:8;45527:40;;45548:8;45527:40;;;;;;;;;;;;45384:191;;:::o;28429:110::-;28505:26;28515:2;28519:7;28505:26;;;;;;;;;;;;:9;:26::i;:::-;28429:110;;:::o;31907:315::-;32062:8;32053:17;;:5;:17;;;;32045:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32149:8;32111:18;:25;32130:5;32111:25;;;;;;;;;;;;;;;:35;32137:8;32111:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32195:8;32173:41;;32188:5;32173:41;;;32205:8;32173:41;;;;;;:::i;:::-;;;;;;;;31907:315;;;:::o;26817:::-;26974:28;26984:4;26990:2;26994:7;26974:9;:28::i;:::-;27021:48;27044:4;27050:2;27054:7;27063:5;27021:22;:48::i;:::-;27013:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26817:315;;;;:::o;59504:102::-;59564:13;59593:7;59586:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59504:102;:::o;17484:723::-;17540:13;17770:1;17761:5;:10;17757:53;;;17788:10;;;;;;;;;;;;;;;;;;;;;17757:53;17820:12;17835:5;17820:20;;17851:14;17876:78;17891:1;17883:4;:9;17876:78;;17909:8;;;;;:::i;:::-;;;;17940:2;17932:10;;;;;:::i;:::-;;;17876:78;;;17964:19;17996:6;17986:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17964:39;;18014:154;18030:1;18021:5;:10;18014:154;;18058:1;18048:11;;;;;:::i;:::-;;;18125:2;18117:5;:10;;;;:::i;:::-;18104:2;:24;;;;:::i;:::-;18091:39;;18074:6;18081;18074:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18154:2;18145:11;;;;;:::i;:::-;;;18014:154;;;18192:6;18178:21;;;;;17484:723;;;;:::o;21687:305::-;21789:4;21841:25;21826:40;;;:11;:40;;;;:105;;;;21898:33;21883:48;;;:11;:48;;;;21826:105;:158;;;;21948:36;21972:11;21948:23;:36::i;:::-;21826:158;21806:178;;21687:305;;;:::o;38576:589::-;38720:45;38747:4;38753:2;38757:7;38720:26;:45::i;:::-;38798:1;38782:18;;:4;:18;;;38778:187;;;38817:40;38849:7;38817:31;:40::i;:::-;38778:187;;;38887:2;38879:10;;:4;:10;;;38875:90;;38906:47;38939:4;38945:7;38906:32;:47::i;:::-;38875:90;38778:187;38993:1;38979:16;;:2;:16;;;38975:183;;;39012:45;39049:7;39012:36;:45::i;:::-;38975:183;;;39085:4;39079:10;;:2;:10;;;39075:83;;39106:40;39134:2;39138:7;39106:27;:40::i;:::-;39075:83;38975:183;38576:589;;;:::o;34669:125::-;;;;:::o;28766:321::-;28896:18;28902:2;28906:7;28896:5;:18::i;:::-;28947:54;28978:1;28982:2;28986:7;28995:5;28947:22;:54::i;:::-;28925:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28766:321;;;:::o;32787:799::-;32942:4;32963:15;:2;:13;;;:15::i;:::-;32959:620;;;33015:2;32999:36;;;33036:12;:10;:12::i;:::-;33050:4;33056:7;33065:5;32999:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32995:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33258:1;33241:6;:13;:18;33237:272;;;33284:60;;;;;;;;;;:::i;:::-;;;;;;;;33237:272;33459:6;33453:13;33444:6;33440:2;33436:15;33429:38;32995:529;33132:41;;;33122:51;;;:6;:51;;;;33115:58;;;;;32959:620;33563:4;33556:11;;32787:799;;;;;;;:::o;20112:157::-;20197:4;20236:25;20221:40;;;:11;:40;;;;20214:47;;20112:157;;;:::o;34158:126::-;;;;:::o;39888:164::-;39992:10;:17;;;;39965:15;:24;39981:7;39965:24;;;;;;;;;;;:44;;;;40020:10;40036:7;40020:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39888:164;:::o;40679:988::-;40945:22;40995:1;40970:22;40987:4;40970:16;:22::i;:::-;:26;;;;:::i;:::-;40945:51;;41007:18;41028:17;:26;41046:7;41028:26;;;;;;;;;;;;41007:47;;41175:14;41161:10;:28;41157:328;;41206:19;41228:12;:18;41241:4;41228:18;;;;;;;;;;;;;;;:34;41247:14;41228:34;;;;;;;;;;;;41206:56;;41312:11;41279:12;:18;41292:4;41279:18;;;;;;;;;;;;;;;:30;41298:10;41279:30;;;;;;;;;;;:44;;;;41429:10;41396:17;:30;41414:11;41396:30;;;;;;;;;;;:43;;;;41157:328;;41581:17;:26;41599:7;41581:26;;;;;;;;;;;41574:33;;;41625:12;:18;41638:4;41625:18;;;;;;;;;;;;;;;:34;41644:14;41625:34;;;;;;;;;;;41618:41;;;40679:988;;;;:::o;41962:1079::-;42215:22;42260:1;42240:10;:17;;;;:21;;;;:::i;:::-;42215:46;;42272:18;42293:15;:24;42309:7;42293:24;;;;;;;;;;;;42272:45;;42644:19;42666:10;42677:14;42666:26;;;;;;;;;;;;;;;;;;;;;;;;42644:48;;42730:11;42705:10;42716;42705:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42841:10;42810:15;:28;42826:11;42810:28;;;;;;;;;;;:41;;;;42982:15;:24;42998:7;42982:24;;;;;;;;;;;42975:31;;;43017:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41962:1079;;;;:::o;39466:221::-;39551:14;39568:20;39585:2;39568:16;:20::i;:::-;39551:37;;39626:7;39599:12;:16;39612:2;39599:16;;;;;;;;;;;;;;;:24;39616:6;39599:24;;;;;;;;;;;:34;;;;39673:6;39644:17;:26;39662:7;39644:26;;;;;;;;;;;:35;;;;39466:221;;;:::o;29423:439::-;29517:1;29503:16;;:2;:16;;;;29495:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29576:16;29584:7;29576;:16::i;:::-;29575:17;29567:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29638:45;29667:1;29671:2;29675:7;29638:20;:45::i;:::-;29713:1;29696:9;:13;29706:2;29696:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29744:2;29725:7;:16;29733:7;29725:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29789:7;29785:2;29764:33;;29781:1;29764:33;;;;;;;;;;;;29810:44;29838:1;29842:2;29846:7;29810:19;:44::i;:::-;29423:439;;:::o;8944:326::-;9004:4;9261:1;9239:7;:19;;;:23;9232:30;;8944:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:137::-;2040:5;2078:6;2065:20;2056:29;;2094:32;2120:5;2094:32;:::i;:::-;2046:86;;;;:::o;2138:141::-;2194:5;2225:6;2219:13;2210:22;;2241:32;2267:5;2241:32;:::i;:::-;2200:79;;;;:::o;2298:271::-;2353:5;2402:3;2395:4;2387:6;2383:17;2379:27;2369:2;;2420:1;2417;2410:12;2369:2;2460:6;2447:20;2485:78;2559:3;2551:6;2544:4;2536:6;2532:17;2485:78;:::i;:::-;2476:87;;2359:210;;;;;:::o;2589:273::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2651:211;;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2920:87;;;;:::o;3013:262::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:2;;;3137:1;3134;3127:12;3089:2;3180:1;3205:53;3250:7;3241:6;3230:9;3226:22;3205:53;:::i;:::-;3195:63;;3151:117;3079:196;;;;:::o;3281:407::-;3349:6;3357;3406:2;3394:9;3385:7;3381:23;3377:32;3374:2;;;3422:1;3419;3412:12;3374:2;3465:1;3490:53;3535:7;3526:6;3515:9;3511:22;3490:53;:::i;:::-;3480:63;;3436:117;3592:2;3618:53;3663:7;3654:6;3643:9;3639:22;3618:53;:::i;:::-;3608:63;;3563:118;3364:324;;;;;:::o;3694:552::-;3771:6;3779;3787;3836:2;3824:9;3815:7;3811:23;3807:32;3804:2;;;3852:1;3849;3842:12;3804:2;3895:1;3920:53;3965:7;3956:6;3945:9;3941:22;3920:53;:::i;:::-;3910:63;;3866:117;4022:2;4048:53;4093:7;4084:6;4073:9;4069:22;4048:53;:::i;:::-;4038:63;;3993:118;4150:2;4176:53;4221:7;4212:6;4201:9;4197:22;4176:53;:::i;:::-;4166:63;;4121:118;3794:452;;;;;:::o;4252:809::-;4347:6;4355;4363;4371;4420:3;4408:9;4399:7;4395:23;4391:33;4388:2;;;4437:1;4434;4427:12;4388:2;4480:1;4505:53;4550:7;4541:6;4530:9;4526:22;4505:53;:::i;:::-;4495:63;;4451:117;4607:2;4633:53;4678:7;4669:6;4658:9;4654:22;4633:53;:::i;:::-;4623:63;;4578:118;4735:2;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4706:118;4891:2;4880:9;4876:18;4863:32;4922:18;4914:6;4911:30;4908:2;;;4954:1;4951;4944:12;4908:2;4982:62;5036:7;5027:6;5016:9;5012:22;4982:62;:::i;:::-;4972:72;;4834:220;4378:683;;;;;;;:::o;5067:401::-;5132:6;5140;5189:2;5177:9;5168:7;5164:23;5160:32;5157:2;;;5205:1;5202;5195:12;5157:2;5248:1;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5219:117;5375:2;5401:50;5443:7;5434:6;5423:9;5419:22;5401:50;:::i;:::-;5391:60;;5346:115;5147:321;;;;;:::o;5474:407::-;5542:6;5550;5599:2;5587:9;5578:7;5574:23;5570:32;5567:2;;;5615:1;5612;5605:12;5567:2;5658:1;5683:53;5728:7;5719:6;5708:9;5704:22;5683:53;:::i;:::-;5673:63;;5629:117;5785:2;5811:53;5856:7;5847:6;5836:9;5832:22;5811:53;:::i;:::-;5801:63;;5756:118;5557:324;;;;;:::o;5887:405::-;5971:6;6020:2;6008:9;5999:7;5995:23;5991:32;5988:2;;;6036:1;6033;6026:12;5988:2;6107:1;6096:9;6092:17;6079:31;6137:18;6129:6;6126:30;6123:2;;;6169:1;6166;6159:12;6123:2;6197:78;6267:7;6258:6;6247:9;6243:22;6197:78;:::i;:::-;6187:88;;6050:235;5978:314;;;;:::o;6298:256::-;6354:6;6403:2;6391:9;6382:7;6378:23;6374:32;6371:2;;;6419:1;6416;6409:12;6371:2;6462:1;6487:50;6529:7;6520:6;6509:9;6505:22;6487:50;:::i;:::-;6477:60;;6433:114;6361:193;;;;:::o;6560:260::-;6618:6;6667:2;6655:9;6646:7;6642:23;6638:32;6635:2;;;6683:1;6680;6673:12;6635:2;6726:1;6751:52;6795:7;6786:6;6775:9;6771:22;6751:52;:::i;:::-;6741:62;;6697:116;6625:195;;;;:::o;6826:282::-;6895:6;6944:2;6932:9;6923:7;6919:23;6915:32;6912:2;;;6960:1;6957;6950:12;6912:2;7003:1;7028:63;7083:7;7074:6;7063:9;7059:22;7028:63;:::i;:::-;7018:73;;6974:127;6902:206;;;;:::o;7114:375::-;7183:6;7232:2;7220:9;7211:7;7207:23;7203:32;7200:2;;;7248:1;7245;7238:12;7200:2;7319:1;7308:9;7304:17;7291:31;7349:18;7341:6;7338:30;7335:2;;;7381:1;7378;7371:12;7335:2;7409:63;7464:7;7455:6;7444:9;7440:22;7409:63;:::i;:::-;7399:73;;7262:220;7190:299;;;;:::o;7495:262::-;7554:6;7603:2;7591:9;7582:7;7578:23;7574:32;7571:2;;;7619:1;7616;7609:12;7571:2;7662:1;7687:53;7732:7;7723:6;7712:9;7708:22;7687:53;:::i;:::-;7677:63;;7633:117;7561:196;;;;:::o;7763:407::-;7831:6;7839;7888:2;7876:9;7867:7;7863:23;7859:32;7856:2;;;7904:1;7901;7894:12;7856:2;7947:1;7972:53;8017:7;8008:6;7997:9;7993:22;7972:53;:::i;:::-;7962:63;;7918:117;8074:2;8100:53;8145:7;8136:6;8125:9;8121:22;8100:53;:::i;:::-;8090:63;;8045:118;7846:324;;;;;:::o;8176:179::-;8245:10;8266:46;8308:3;8300:6;8266:46;:::i;:::-;8344:4;8339:3;8335:14;8321:28;;8256:99;;;;:::o;8361:118::-;8448:24;8466:5;8448:24;:::i;:::-;8443:3;8436:37;8426:53;;:::o;8515:732::-;8634:3;8663:54;8711:5;8663:54;:::i;:::-;8733:86;8812:6;8807:3;8733:86;:::i;:::-;8726:93;;8843:56;8893:5;8843:56;:::i;:::-;8922:7;8953:1;8938:284;8963:6;8960:1;8957:13;8938:284;;;9039:6;9033:13;9066:63;9125:3;9110:13;9066:63;:::i;:::-;9059:70;;9152:60;9205:6;9152:60;:::i;:::-;9142:70;;8998:224;8985:1;8982;8978:9;8973:14;;8938:284;;;8942:14;9238:3;9231:10;;8639:608;;;;;;;:::o;9253:109::-;9334:21;9349:5;9334:21;:::i;:::-;9329:3;9322:34;9312:50;;:::o;9368:360::-;9454:3;9482:38;9514:5;9482:38;:::i;:::-;9536:70;9599:6;9594:3;9536:70;:::i;:::-;9529:77;;9615:52;9660:6;9655:3;9648:4;9641:5;9637:16;9615:52;:::i;:::-;9692:29;9714:6;9692:29;:::i;:::-;9687:3;9683:39;9676:46;;9458:270;;;;;:::o;9734:364::-;9822:3;9850:39;9883:5;9850:39;:::i;:::-;9905:71;9969:6;9964:3;9905:71;:::i;:::-;9898:78;;9985:52;10030:6;10025:3;10018:4;10011:5;10007:16;9985:52;:::i;:::-;10062:29;10084:6;10062:29;:::i;:::-;10057:3;10053:39;10046:46;;9826:272;;;;;:::o;10104:377::-;10210:3;10238:39;10271:5;10238:39;:::i;:::-;10293:89;10375:6;10370:3;10293:89;:::i;:::-;10286:96;;10391:52;10436:6;10431:3;10424:4;10417:5;10413:16;10391:52;:::i;:::-;10468:6;10463:3;10459:16;10452:23;;10214:267;;;;;:::o;10511:845::-;10614:3;10651:5;10645:12;10680:36;10706:9;10680:36;:::i;:::-;10732:89;10814:6;10809:3;10732:89;:::i;:::-;10725:96;;10852:1;10841:9;10837:17;10868:1;10863:137;;;;11014:1;11009:341;;;;10830:520;;10863:137;10947:4;10943:9;10932;10928:25;10923:3;10916:38;10983:6;10978:3;10974:16;10967:23;;10863:137;;11009:341;11076:38;11108:5;11076:38;:::i;:::-;11136:1;11150:154;11164:6;11161:1;11158:13;11150:154;;;11238:7;11232:14;11228:1;11223:3;11219:11;11212:35;11288:1;11279:7;11275:15;11264:26;;11186:4;11183:1;11179:12;11174:17;;11150:154;;;11333:6;11328:3;11324:16;11317:23;;11016:334;;10830:520;;10618:738;;;;;;:::o;11362:366::-;11504:3;11525:67;11589:2;11584:3;11525:67;:::i;:::-;11518:74;;11601:93;11690:3;11601:93;:::i;:::-;11719:2;11714:3;11710:12;11703:19;;11508:220;;;:::o;11734:366::-;11876:3;11897:67;11961:2;11956:3;11897:67;:::i;:::-;11890:74;;11973:93;12062:3;11973:93;:::i;:::-;12091:2;12086:3;12082:12;12075:19;;11880:220;;;:::o;12106:366::-;12248:3;12269:67;12333:2;12328:3;12269:67;:::i;:::-;12262:74;;12345:93;12434:3;12345:93;:::i;:::-;12463:2;12458:3;12454:12;12447:19;;12252:220;;;:::o;12478:366::-;12620:3;12641:67;12705:2;12700:3;12641:67;:::i;:::-;12634:74;;12717:93;12806:3;12717:93;:::i;:::-;12835:2;12830:3;12826:12;12819:19;;12624:220;;;:::o;12850:366::-;12992:3;13013:67;13077:2;13072:3;13013:67;:::i;:::-;13006:74;;13089:93;13178:3;13089:93;:::i;:::-;13207:2;13202:3;13198:12;13191:19;;12996:220;;;:::o;13222:366::-;13364:3;13385:67;13449:2;13444:3;13385:67;:::i;:::-;13378:74;;13461:93;13550:3;13461:93;:::i;:::-;13579:2;13574:3;13570:12;13563:19;;13368:220;;;:::o;13594:366::-;13736:3;13757:67;13821:2;13816:3;13757:67;:::i;:::-;13750:74;;13833:93;13922:3;13833:93;:::i;:::-;13951:2;13946:3;13942:12;13935:19;;13740:220;;;:::o;13966:366::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;14112:220;;;:::o;14338:366::-;14480:3;14501:67;14565:2;14560:3;14501:67;:::i;:::-;14494:74;;14577:93;14666:3;14577:93;:::i;:::-;14695:2;14690:3;14686:12;14679:19;;14484:220;;;:::o;14710:366::-;14852:3;14873:67;14937:2;14932:3;14873:67;:::i;:::-;14866:74;;14949:93;15038:3;14949:93;:::i;:::-;15067:2;15062:3;15058:12;15051:19;;14856:220;;;:::o;15082:366::-;15224:3;15245:67;15309:2;15304:3;15245:67;:::i;:::-;15238:74;;15321:93;15410:3;15321:93;:::i;:::-;15439:2;15434:3;15430:12;15423:19;;15228:220;;;:::o;15454:366::-;15596:3;15617:67;15681:2;15676:3;15617:67;:::i;:::-;15610:74;;15693:93;15782:3;15693:93;:::i;:::-;15811:2;15806:3;15802:12;15795:19;;15600:220;;;:::o;15826:366::-;15968:3;15989:67;16053:2;16048:3;15989:67;:::i;:::-;15982:74;;16065:93;16154:3;16065:93;:::i;:::-;16183:2;16178:3;16174:12;16167:19;;15972:220;;;:::o;16198:366::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16344:220;;;:::o;16570:366::-;16712:3;16733:67;16797:2;16792:3;16733:67;:::i;:::-;16726:74;;16809:93;16898:3;16809:93;:::i;:::-;16927:2;16922:3;16918:12;16911:19;;16716:220;;;:::o;16942:366::-;17084:3;17105:67;17169:2;17164:3;17105:67;:::i;:::-;17098:74;;17181:93;17270:3;17181:93;:::i;:::-;17299:2;17294:3;17290:12;17283:19;;17088:220;;;:::o;17314:398::-;17473:3;17494:83;17575:1;17570:3;17494:83;:::i;:::-;17487:90;;17586:93;17675:3;17586:93;:::i;:::-;17704:1;17699:3;17695:11;17688:18;;17477:235;;;:::o;17718:366::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17864:220;;;:::o;18090:366::-;18232:3;18253:67;18317:2;18312:3;18253:67;:::i;:::-;18246:74;;18329:93;18418:3;18329:93;:::i;:::-;18447:2;18442:3;18438:12;18431:19;;18236:220;;;:::o;18462:108::-;18539:24;18557:5;18539:24;:::i;:::-;18534:3;18527:37;18517:53;;:::o;18576:118::-;18663:24;18681:5;18663:24;:::i;:::-;18658:3;18651:37;18641:53;;:::o;18700:589::-;18925:3;18947:95;19038:3;19029:6;18947:95;:::i;:::-;18940:102;;19059:95;19150:3;19141:6;19059:95;:::i;:::-;19052:102;;19171:92;19259:3;19250:6;19171:92;:::i;:::-;19164:99;;19280:3;19273:10;;18929:360;;;;;;:::o;19295:379::-;19479:3;19501:147;19644:3;19501:147;:::i;:::-;19494:154;;19665:3;19658:10;;19483:191;;;:::o;19680:222::-;19773:4;19811:2;19800:9;19796:18;19788:26;;19824:71;19892:1;19881:9;19877:17;19868:6;19824:71;:::i;:::-;19778:124;;;;:::o;19908:640::-;20103:4;20141:3;20130:9;20126:19;20118:27;;20155:71;20223:1;20212:9;20208:17;20199:6;20155:71;:::i;:::-;20236:72;20304:2;20293:9;20289:18;20280:6;20236:72;:::i;:::-;20318;20386:2;20375:9;20371:18;20362:6;20318:72;:::i;:::-;20437:9;20431:4;20427:20;20422:2;20411:9;20407:18;20400:48;20465:76;20536:4;20527:6;20465:76;:::i;:::-;20457:84;;20108:440;;;;;;;:::o;20554:332::-;20675:4;20713:2;20702:9;20698:18;20690:26;;20726:71;20794:1;20783:9;20779:17;20770:6;20726:71;:::i;:::-;20807:72;20875:2;20864:9;20860:18;20851:6;20807:72;:::i;:::-;20680:206;;;;;:::o;20892:373::-;21035:4;21073:2;21062:9;21058:18;21050:26;;21122:9;21116:4;21112:20;21108:1;21097:9;21093:17;21086:47;21150:108;21253:4;21244:6;21150:108;:::i;:::-;21142:116;;21040:225;;;;:::o;21271:210::-;21358:4;21396:2;21385:9;21381:18;21373:26;;21409:65;21471:1;21460:9;21456:17;21447:6;21409:65;:::i;:::-;21363:118;;;;:::o;21487:313::-;21600:4;21638:2;21627:9;21623:18;21615:26;;21687:9;21681:4;21677:20;21673:1;21662:9;21658:17;21651:47;21715:78;21788:4;21779:6;21715:78;:::i;:::-;21707:86;;21605:195;;;;:::o;21806:419::-;21972:4;22010:2;21999:9;21995:18;21987:26;;22059:9;22053:4;22049:20;22045:1;22034:9;22030:17;22023:47;22087:131;22213:4;22087:131;:::i;:::-;22079:139;;21977:248;;;:::o;22231:419::-;22397:4;22435:2;22424:9;22420:18;22412:26;;22484:9;22478:4;22474:20;22470:1;22459:9;22455:17;22448:47;22512:131;22638:4;22512:131;:::i;:::-;22504:139;;22402:248;;;:::o;22656:419::-;22822:4;22860:2;22849:9;22845:18;22837:26;;22909:9;22903:4;22899:20;22895:1;22884:9;22880:17;22873:47;22937:131;23063:4;22937:131;:::i;:::-;22929:139;;22827:248;;;:::o;23081:419::-;23247:4;23285:2;23274:9;23270:18;23262:26;;23334:9;23328:4;23324:20;23320:1;23309:9;23305:17;23298:47;23362:131;23488:4;23362:131;:::i;:::-;23354:139;;23252:248;;;:::o;23506:419::-;23672:4;23710:2;23699:9;23695:18;23687:26;;23759:9;23753:4;23749:20;23745:1;23734:9;23730:17;23723:47;23787:131;23913:4;23787:131;:::i;:::-;23779:139;;23677:248;;;:::o;23931:419::-;24097:4;24135:2;24124:9;24120:18;24112:26;;24184:9;24178:4;24174:20;24170:1;24159:9;24155:17;24148:47;24212:131;24338:4;24212:131;:::i;:::-;24204:139;;24102:248;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24527:248;;;:::o;24781:419::-;24947:4;24985:2;24974:9;24970:18;24962:26;;25034:9;25028:4;25024:20;25020:1;25009:9;25005:17;24998:47;25062:131;25188:4;25062:131;:::i;:::-;25054:139;;24952:248;;;:::o;25206:419::-;25372:4;25410:2;25399:9;25395:18;25387:26;;25459:9;25453:4;25449:20;25445:1;25434:9;25430:17;25423:47;25487:131;25613:4;25487:131;:::i;:::-;25479:139;;25377:248;;;:::o;25631:419::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25884:9;25878:4;25874:20;25870:1;25859:9;25855:17;25848:47;25912:131;26038:4;25912:131;:::i;:::-;25904:139;;25802:248;;;:::o;26056:419::-;26222:4;26260:2;26249:9;26245:18;26237:26;;26309:9;26303:4;26299:20;26295:1;26284:9;26280:17;26273:47;26337:131;26463:4;26337:131;:::i;:::-;26329:139;;26227:248;;;:::o;26481:419::-;26647:4;26685:2;26674:9;26670:18;26662:26;;26734:9;26728:4;26724:20;26720:1;26709:9;26705:17;26698:47;26762:131;26888:4;26762:131;:::i;:::-;26754:139;;26652:248;;;:::o;26906:419::-;27072:4;27110:2;27099:9;27095:18;27087:26;;27159:9;27153:4;27149:20;27145:1;27134:9;27130:17;27123:47;27187:131;27313:4;27187:131;:::i;:::-;27179:139;;27077:248;;;:::o;27331:419::-;27497:4;27535:2;27524:9;27520:18;27512:26;;27584:9;27578:4;27574:20;27570:1;27559:9;27555:17;27548:47;27612:131;27738:4;27612:131;:::i;:::-;27604:139;;27502:248;;;:::o;27756:419::-;27922:4;27960:2;27949:9;27945:18;27937:26;;28009:9;28003:4;27999:20;27995:1;27984:9;27980:17;27973:47;28037:131;28163:4;28037:131;:::i;:::-;28029:139;;27927:248;;;:::o;28181:419::-;28347:4;28385:2;28374:9;28370:18;28362:26;;28434:9;28428:4;28424:20;28420:1;28409:9;28405:17;28398:47;28462:131;28588:4;28462:131;:::i;:::-;28454:139;;28352:248;;;:::o;28606:419::-;28772:4;28810:2;28799:9;28795:18;28787:26;;28859:9;28853:4;28849:20;28845:1;28834:9;28830:17;28823:47;28887:131;29013:4;28887:131;:::i;:::-;28879:139;;28777:248;;;:::o;29031:419::-;29197:4;29235:2;29224:9;29220:18;29212:26;;29284:9;29278:4;29274:20;29270:1;29259:9;29255:17;29248:47;29312:131;29438:4;29312:131;:::i;:::-;29304:139;;29202:248;;;:::o;29456:222::-;29549:4;29587:2;29576:9;29572:18;29564:26;;29600:71;29668:1;29657:9;29653:17;29644:6;29600:71;:::i;:::-;29554:124;;;;:::o;29684:129::-;29718:6;29745:20;;:::i;:::-;29735:30;;29774:33;29802:4;29794:6;29774:33;:::i;:::-;29725:88;;;:::o;29819:75::-;29852:6;29885:2;29879:9;29869:19;;29859:35;:::o;29900:311::-;29977:4;30067:18;30059:6;30056:30;30053:2;;;30089:18;;:::i;:::-;30053:2;30139:4;30131:6;30127:17;30119:25;;30199:4;30193;30189:15;30181:23;;29982:229;;;:::o;30217:307::-;30278:4;30368:18;30360:6;30357:30;30354:2;;;30390:18;;:::i;:::-;30354:2;30428:29;30450:6;30428:29;:::i;:::-;30420:37;;30512:4;30506;30502:15;30494:23;;30283:241;;;:::o;30530:308::-;30592:4;30682:18;30674:6;30671:30;30668:2;;;30704:18;;:::i;:::-;30668:2;30742:29;30764:6;30742:29;:::i;:::-;30734:37;;30826:4;30820;30816:15;30808:23;;30597:241;;;:::o;30844:132::-;30911:4;30934:3;30926:11;;30964:4;30959:3;30955:14;30947:22;;30916:60;;;:::o;30982:141::-;31031:4;31054:3;31046:11;;31077:3;31074:1;31067:14;31111:4;31108:1;31098:18;31090:26;;31036:87;;;:::o;31129:114::-;31196:6;31230:5;31224:12;31214:22;;31203:40;;;:::o;31249:98::-;31300:6;31334:5;31328:12;31318:22;;31307:40;;;:::o;31353:99::-;31405:6;31439:5;31433:12;31423:22;;31412:40;;;:::o;31458:113::-;31528:4;31560;31555:3;31551:14;31543:22;;31533:38;;;:::o;31577:184::-;31676:11;31710:6;31705:3;31698:19;31750:4;31745:3;31741:14;31726:29;;31688:73;;;;:::o;31767:168::-;31850:11;31884:6;31879:3;31872:19;31924:4;31919:3;31915:14;31900:29;;31862:73;;;;:::o;31941:147::-;32042:11;32079:3;32064:18;;32054:34;;;;:::o;32094:169::-;32178:11;32212:6;32207:3;32200:19;32252:4;32247:3;32243:14;32228:29;;32190:73;;;;:::o;32269:148::-;32371:11;32408:3;32393:18;;32383:34;;;;:::o;32423:305::-;32463:3;32482:20;32500:1;32482:20;:::i;:::-;32477:25;;32516:20;32534:1;32516:20;:::i;:::-;32511:25;;32670:1;32602:66;32598:74;32595:1;32592:81;32589:2;;;32676:18;;:::i;:::-;32589:2;32720:1;32717;32713:9;32706:16;;32467:261;;;;:::o;32734:185::-;32774:1;32791:20;32809:1;32791:20;:::i;:::-;32786:25;;32825:20;32843:1;32825:20;:::i;:::-;32820:25;;32864:1;32854:2;;32869:18;;:::i;:::-;32854:2;32911:1;32908;32904:9;32899:14;;32776:143;;;;:::o;32925:348::-;32965:7;32988:20;33006:1;32988:20;:::i;:::-;32983:25;;33022:20;33040:1;33022:20;:::i;:::-;33017:25;;33210:1;33142:66;33138:74;33135:1;33132:81;33127:1;33120:9;33113:17;33109:105;33106:2;;;33217:18;;:::i;:::-;33106:2;33265:1;33262;33258:9;33247:20;;32973:300;;;;:::o;33279:191::-;33319:4;33339:20;33357:1;33339:20;:::i;:::-;33334:25;;33373:20;33391:1;33373:20;:::i;:::-;33368:25;;33412:1;33409;33406:8;33403:2;;;33417:18;;:::i;:::-;33403:2;33462:1;33459;33455:9;33447:17;;33324:146;;;;:::o;33476:96::-;33513:7;33542:24;33560:5;33542:24;:::i;:::-;33531:35;;33521:51;;;:::o;33578:90::-;33612:7;33655:5;33648:13;33641:21;33630:32;;33620:48;;;:::o;33674:149::-;33710:7;33750:66;33743:5;33739:78;33728:89;;33718:105;;;:::o;33829:126::-;33866:7;33906:42;33899:5;33895:54;33884:65;;33874:81;;;:::o;33961:77::-;33998:7;34027:5;34016:16;;34006:32;;;:::o;34044:154::-;34128:6;34123:3;34118;34105:30;34190:1;34181:6;34176:3;34172:16;34165:27;34095:103;;;:::o;34204:307::-;34272:1;34282:113;34296:6;34293:1;34290:13;34282:113;;;34381:1;34376:3;34372:11;34366:18;34362:1;34357:3;34353:11;34346:39;34318:2;34315:1;34311:10;34306:15;;34282:113;;;34413:6;34410:1;34407:13;34404:2;;;34493:1;34484:6;34479:3;34475:16;34468:27;34404:2;34253:258;;;;:::o;34517:320::-;34561:6;34598:1;34592:4;34588:12;34578:22;;34645:1;34639:4;34635:12;34666:18;34656:2;;34722:4;34714:6;34710:17;34700:27;;34656:2;34784;34776:6;34773:14;34753:18;34750:38;34747:2;;;34803:18;;:::i;:::-;34747:2;34568:269;;;;:::o;34843:281::-;34926:27;34948:4;34926:27;:::i;:::-;34918:6;34914:40;35056:6;35044:10;35041:22;35020:18;35008:10;35005:34;35002:62;34999:2;;;35067:18;;:::i;:::-;34999:2;35107:10;35103:2;35096:22;34886:238;;;:::o;35130:233::-;35169:3;35192:24;35210:5;35192:24;:::i;:::-;35183:33;;35238:66;35231:5;35228:77;35225:2;;;35308:18;;:::i;:::-;35225:2;35355:1;35348:5;35344:13;35337:20;;35173:190;;;:::o;35369:176::-;35401:1;35418:20;35436:1;35418:20;:::i;:::-;35413:25;;35452:20;35470:1;35452:20;:::i;:::-;35447:25;;35491:1;35481:2;;35496:18;;:::i;:::-;35481:2;35537:1;35534;35530:9;35525:14;;35403:142;;;;:::o;35551:180::-;35599:77;35596:1;35589:88;35696:4;35693:1;35686:15;35720:4;35717:1;35710:15;35737:180;35785:77;35782:1;35775:88;35882:4;35879:1;35872:15;35906:4;35903:1;35896:15;35923:180;35971:77;35968:1;35961:88;36068:4;36065:1;36058:15;36092:4;36089:1;36082:15;36109:180;36157:77;36154:1;36147:88;36254:4;36251:1;36244:15;36278:4;36275:1;36268:15;36295:102;36336:6;36387:2;36383:7;36378:2;36371:5;36367:14;36363:28;36353:38;;36343:54;;;:::o;36403:230::-;36543:34;36539:1;36531:6;36527:14;36520:58;36612:13;36607:2;36599:6;36595:15;36588:38;36509:124;:::o;36639:237::-;36779:34;36775:1;36767:6;36763:14;36756:58;36848:20;36843:2;36835:6;36831:15;36824:45;36745:131;:::o;36882:225::-;37022:34;37018:1;37010:6;37006:14;36999:58;37091:8;37086:2;37078:6;37074:15;37067:33;36988:119;:::o;37113:224::-;37253:34;37249:1;37241:6;37237:14;37230:58;37322:7;37317:2;37309:6;37305:15;37298:32;37219:118;:::o;37343:178::-;37483:30;37479:1;37471:6;37467:14;37460:54;37449:72;:::o;37527:223::-;37667:34;37663:1;37655:6;37651:14;37644:58;37736:6;37731:2;37723:6;37719:15;37712:31;37633:117;:::o;37756:175::-;37896:27;37892:1;37884:6;37880:14;37873:51;37862:69;:::o;37937:231::-;38077:34;38073:1;38065:6;38061:14;38054:58;38146:14;38141:2;38133:6;38129:15;38122:39;38043:125;:::o;38174:243::-;38314:34;38310:1;38302:6;38298:14;38291:58;38383:26;38378:2;38370:6;38366:15;38359:51;38280:137;:::o;38423:229::-;38563:34;38559:1;38551:6;38547:14;38540:58;38632:12;38627:2;38619:6;38615:15;38608:37;38529:123;:::o;38658:228::-;38798:34;38794:1;38786:6;38782:14;38775:58;38867:11;38862:2;38854:6;38850:15;38843:36;38764:122;:::o;38892:182::-;39032:34;39028:1;39020:6;39016:14;39009:58;38998:76;:::o;39080:231::-;39220:34;39216:1;39208:6;39204:14;39197:58;39289:14;39284:2;39276:6;39272:15;39265:39;39186:125;:::o;39317:182::-;39457:34;39453:1;39445:6;39441:14;39434:58;39423:76;:::o;39505:234::-;39645:34;39641:1;39633:6;39629:14;39622:58;39714:17;39709:2;39701:6;39697:15;39690:42;39611:128;:::o;39745:220::-;39885:34;39881:1;39873:6;39869:14;39862:58;39954:3;39949:2;39941:6;39937:15;39930:28;39851:114;:::o;39971:::-;40077:8;:::o;40091:236::-;40231:34;40227:1;40219:6;40215:14;40208:58;40300:19;40295:2;40287:6;40283:15;40276:44;40197:130;:::o;40333:231::-;40473:34;40469:1;40461:6;40457:14;40450:58;40542:14;40537:2;40529:6;40525:15;40518:39;40439:125;:::o;40570:122::-;40643:24;40661:5;40643:24;:::i;:::-;40636:5;40633:35;40623:2;;40682:1;40679;40672:12;40623:2;40613:79;:::o;40698:116::-;40768:21;40783:5;40768:21;:::i;:::-;40761:5;40758:32;40748:2;;40804:1;40801;40794:12;40748:2;40738:76;:::o;40820:120::-;40892:23;40909:5;40892:23;:::i;:::-;40885:5;40882:34;40872:2;;40930:1;40927;40920:12;40872:2;40862:78;:::o;40946:122::-;41019:24;41037:5;41019:24;:::i;:::-;41012:5;41009:35;40999:2;;41058:1;41055;41048:12;40999:2;40989:79;:::o
Swarm Source
ipfs://fb27620abb89ceace600de61d7d584ad324422afd22b5571cbf85e3205919782
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.