ERC-721
Overview
Max Total Supply
2,265 BBall
Holders
495
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BBallLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BballPandas
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-21 */ // SPDX-License-Identifier: MIT 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); } pragma solidity ^0.8.0; ////import "../../utils/introspection/IERC165.sol"; /** * @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; } pragma solidity ^0.8.0; ////import "./IERC165.sol"; /** * @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; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; ////import "../IERC721.sol"; /** * @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); } 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); } pragma solidity ^0.8.0; ////import "./IERC721.sol"; ////import "./IERC721Receiver.sol"; ////import "./extensions/IERC721Metadata.sol"; ////import "../../utils/Address.sol"; ////import "../../utils/Context.sol"; ////import "../../utils/Strings.sol"; ////import "../../utils/introspection/ERC165.sol"; /** * @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}. 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _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); } /** * @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); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` 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 { } } pragma solidity ^0.8.0; ////import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; ////import "../ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } pragma solidity ^0.8.0; ////import "../ERC721.sol"; ////import "./IERC721Enumerable.sol"; /** * @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(); } } pragma solidity ^0.8.0; ////import "../utils/Context.sol"; /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 no longer needed starting with Solidity 0.8. 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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; } } } pragma solidity ^0.8.0; ////import "@openzeppelin/contracts/utils/math/SafeMath.sol"; ////import "@openzeppelin/contracts/access/Ownable.sol"; ////import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; ////import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; ////import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; /** * @title BballPandas contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract BballPandas is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable { using SafeMath for uint256; uint256 public constant pandaPrice = 80000000000000000; //0.08 ETH uint256 public constant maxPandaPurchase = 20; uint256 public constant MAX_PANDAS = 10000; bool public saleIsActive = false; constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function _baseURI() internal pure override returns (string memory) { return "ipfs://QmWxC8nY73zWYfGdrJFAZuZK9dDbNysK1o2HhdF5y5NAWH/"; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function toggleSale() public onlyOwner { saleIsActive = !saleIsActive; } function reservePandas() public onlyOwner { uint256 supply = totalSupply(); uint256 i; for (i = 0; i < 25; i++) { _safeMint(msg.sender, supply + i); } } function mintPanda(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint Panda"); require(numberOfTokens <= maxPandaPurchase, "Can only mint a maximum of 20 tokens in a single transaction"); require(totalSupply().add(numberOfTokens) <= MAX_PANDAS, "Purchase would exceed max supply of Pandas"); require(pandaPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct"); for(uint256 i = 0; i < numberOfTokens; i++) { uint256 mintIndex = totalSupply(); if (totalSupply() < MAX_PANDAS) { _safeMint(msg.sender, mintIndex); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"MAX_PANDAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPandaPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPanda","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pandaPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservePandas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b60146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200432e3803806200432e83398181016040528101906200005291906200026b565b818181600090805190602001906200006c92919062000149565b5080600190805190602001906200008592919062000149565b50505060006200009a6200014160201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050506200044e565b600033905090565b828054620001579062000373565b90600052602060002090601f0160209004810192826200017b5760008555620001c7565b82601f106200019657805160ff1916838001178555620001c7565b82800160010185558215620001c7579182015b82811115620001c6578251825591602001919060010190620001a9565b5b509050620001d69190620001da565b5090565b5b80821115620001f5576000816000905550600101620001db565b5090565b6000620002106200020a8462000307565b620002de565b9050828152602081018484840111156200022957600080fd5b620002368482856200033d565b509392505050565b600082601f8301126200025057600080fd5b815162000262848260208601620001f9565b91505092915050565b600080604083850312156200027f57600080fd5b600083015167ffffffffffffffff8111156200029a57600080fd5b620002a8858286016200023e565b925050602083015167ffffffffffffffff811115620002c657600080fd5b620002d4858286016200023e565b9150509250929050565b6000620002ea620002fd565b9050620002f88282620003a9565b919050565b6000604051905090565b600067ffffffffffffffff8211156200032557620003246200040e565b5b62000330826200043d565b9050602081019050919050565b60005b838110156200035d57808201518184015260208101905062000340565b838111156200036d576000848401525b50505050565b600060028204905060018216806200038c57607f821691505b60208210811415620003a357620003a2620003df565b5b50919050565b620003b4826200043d565b810181811067ffffffffffffffff82111715620003d657620003d56200040e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ed0806200045e6000396000f3fe60806040526004361061019c5760003560e01c8063545c9e97116100ec57806395d89b411161008a578063c87b56dd11610064578063c87b56dd14610581578063e985e9c5146105be578063eb8d2444146105fb578063f2fde38b146106265761019c565b806395d89b4114610504578063a22cb4651461052f578063b88d4fde146105585761019c565b8063715018a6116100c6578063715018a614610494578063790335ee146104ab5780637d8966e4146104c25780638da5cb5b146104d95761019c565b8063545c9e97146103ef5780636352211e1461041a57806370a08231146104575761019c565b806318160ddd116101595780632f745c59116101335780632f745c59146103355780633ccfd60b1461037257806342842e0e146103895780634f6ccce7146103b25761019c565b806318160ddd146102b657806323b872dd146102e15780632724f6e71461030a5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631056b16d1461026f57806314e843b81461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b6c565b61064f565b6040516101d59190613067565b60405180910390f35b3480156101ea57600080fd5b506101f3610661565b6040516102009190613082565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612bbe565b6106f3565b60405161023d9190613000565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612b30565b610778565b005b34801561027b57600080fd5b50610284610890565b6040516102919190613384565b60405180910390f35b6102b460048036038101906102af9190612bbe565b610896565b005b3480156102c257600080fd5b506102cb610a2f565b6040516102d89190613384565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612a2a565b610a3c565b005b34801561031657600080fd5b5061031f610a9c565b60405161032c9190613384565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612b30565b610aa8565b6040516103699190613384565b60405180910390f35b34801561037e57600080fd5b50610387610b4d565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612a2a565b610c18565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612bbe565b610c38565b6040516103e69190613384565b60405180910390f35b3480156103fb57600080fd5b50610404610ccf565b6040516104119190613384565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190612bbe565b610cd4565b60405161044e9190613000565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906129c5565b610d86565b60405161048b9190613384565b60405180910390f35b3480156104a057600080fd5b506104a9610e3e565b005b3480156104b757600080fd5b506104c0610f7b565b005b3480156104ce57600080fd5b506104d761103b565b005b3480156104e557600080fd5b506104ee6110e3565b6040516104fb9190613000565b60405180910390f35b34801561051057600080fd5b5061051961110d565b6040516105269190613082565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190612af4565b61119f565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612a79565b611320565b005b34801561058d57600080fd5b506105a860048036038101906105a39190612bbe565b611382565b6040516105b59190613082565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e091906129ee565b611394565b6040516105f29190613067565b60405180910390f35b34801561060757600080fd5b50610610611428565b60405161061d9190613067565b60405180910390f35b34801561063257600080fd5b5061064d600480360381019061064891906129c5565b61143b565b005b600061065a826115e7565b9050919050565b60606000805461067090613603565b80601f016020809104026020016040519081016040528092919081815260200182805461069c90613603565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe82611661565b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073490613284565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061078382610cd4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613304565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108136116cd565b73ffffffffffffffffffffffffffffffffffffffff16148061084257506108418161083c6116cd565b611394565b5b610881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610878906131c4565b60405180910390fd5b61088b83836116d5565b505050565b61271081565b600b60149054906101000a900460ff166108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613364565b60405180910390fd5b6014811115610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610920906131e4565b60405180910390fd5b61271061094682610938610a2f565b61178e90919063ffffffff16565b1115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90613164565b60405180910390fd5b346109a38267011c37937e0800006117a490919063ffffffff16565b11156109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613184565b60405180910390fd5b60005b81811015610a2b5760006109f9610a2f565b9050612710610a06610a2f565b1015610a1757610a1633826117ba565b5b508080610a2390613666565b9150506109e7565b5050565b6000600880549050905090565b610a4d610a476116cd565b826117d8565b610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613324565b60405180910390fd5b610a978383836118b6565b505050565b67011c37937e08000081565b6000610ab383610d86565b8210610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb906130a4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b556116cd565b73ffffffffffffffffffffffffffffffffffffffff16610b736110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906132a4565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c14573d6000803e3d6000fd5b5050565b610c3383838360405180602001604052806000815250611320565b505050565b6000610c42610a2f565b8210610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613344565b60405180910390fd5b60088281548110610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613224565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613204565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e466116cd565b73ffffffffffffffffffffffffffffffffffffffff16610e646110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906132a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f836116cd565b73ffffffffffffffffffffffffffffffffffffffff16610fa16110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906132a4565b60405180910390fd5b6000611001610a2f565b905060005b60198110156110375761102433828461101f9190613438565b6117ba565b808061102f90613666565b915050611006565b5050565b6110436116cd565b73ffffffffffffffffffffffffffffffffffffffff166110616110e3565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906132a4565b60405180910390fd5b600b60149054906101000a900460ff1615600b60146101000a81548160ff021916908315150217905550565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461111c90613603565b80601f016020809104026020016040519081016040528092919081815260200182805461114890613603565b80156111955780601f1061116a57610100808354040283529160200191611195565b820191906000526020600020905b81548152906001019060200180831161117857829003601f168201915b5050505050905090565b6111a76116cd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90613144565b60405180910390fd5b80600560006112226116cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112cf6116cd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113149190613067565b60405180910390a35050565b61133161132b6116cd565b836117d8565b611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613324565b60405180910390fd5b61137c84848484611b12565b50505050565b606061138d82611b6e565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60149054906101000a900460ff1681565b6114436116cd565b73ffffffffffffffffffffffffffffffffffffffff166114616110e3565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906132a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906130e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165a575061165982611cc0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174883610cd4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818361179c9190613438565b905092915050565b600081836117b291906134bf565b905092915050565b6117d4828260405180602001604052806000815250611da2565b5050565b60006117e382611661565b611822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611819906131a4565b60405180910390fd5b600061182d83610cd4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061189c57508373ffffffffffffffffffffffffffffffffffffffff16611884846106f3565b73ffffffffffffffffffffffffffffffffffffffff16145b806118ad57506118ac8185611394565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118d682610cd4565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611923906132c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613124565b60405180910390fd5b6119a7838383611dfd565b6119b26000826116d5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a029190613519565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a599190613438565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b1d8484846118b6565b611b2984848484611e0d565b611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f906130c4565b60405180910390fd5b50505050565b6060611b7982611661565b611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613264565b60405180910390fd5b6000600a60008481526020019081526020016000208054611bd890613603565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0490613603565b8015611c515780601f10611c2657610100808354040283529160200191611c51565b820191906000526020600020905b815481529060010190602001808311611c3457829003601f168201915b505050505090506000611c62611fa4565b9050600081511415611c78578192505050611cbb565b600082511115611cad578082604051602001611c95929190612fdc565b60405160208183030381529060405292505050611cbb565b611cb684611fc4565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d8b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d9b5750611d9a8261206b565b5b9050919050565b611dac83836120d5565b611db96000848484611e0d565b611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def906130c4565b60405180910390fd5b505050565b611e088383836122a3565b505050565b6000611e2e8473ffffffffffffffffffffffffffffffffffffffff166123b7565b15611f97578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e576116cd565b8786866040518563ffffffff1660e01b8152600401611e79949392919061301b565b602060405180830381600087803b158015611e9357600080fd5b505af1925050508015611ec457506040513d601f19601f82011682018060405250810190611ec19190612b95565b60015b611f47573d8060008114611ef4576040519150601f19603f3d011682016040523d82523d6000602084013e611ef9565b606091505b50600081511415611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906130c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f9c565b600190505b949350505050565b6060604051806060016040528060368152602001613e6560369139905090565b6060611fcf82611661565b61200e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612005906132e4565b60405180910390fd5b6000612018611fa4565b905060008151116120385760405180602001604052806000815250612063565b80612042846123ca565b604051602001612053929190612fdc565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90613244565b60405180910390fd5b61214e81611661565b1561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590613104565b60405180910390fd5b61219a60008383611dfd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ea9190613438565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122ae838383612577565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122f1576122ec8161257c565b612330565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461232f5761232e83826125c5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123735761236e81612732565b6123b2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b1576123b08282612875565b5b5b505050565b600080823b905060008111915050919050565b60606000821415612412576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612572565b600082905060005b6000821461244457808061242d90613666565b915050600a8261243d919061348e565b915061241a565b60008167ffffffffffffffff811115612486577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b85781602001600182028036833780820191505090505b5090505b6000851461256b576001826124d19190613519565b9150600a856124e091906136af565b60306124ec9190613438565b60f81b818381518110612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612564919061348e565b94506124bc565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125d284610d86565b6125dc9190613519565b90506000600760008481526020019081526020016000205490508181146126c1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127469190613519565b905060006009600084815260200190815260200160002054905060006008838154811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106127e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612859577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061288083610d86565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000612907612902846133c4565b61339f565b90508281526020810184848401111561291f57600080fd5b61292a8482856135c1565b509392505050565b60008135905061294181613e08565b92915050565b60008135905061295681613e1f565b92915050565b60008135905061296b81613e36565b92915050565b60008151905061298081613e36565b92915050565b600082601f83011261299757600080fd5b81356129a78482602086016128f4565b91505092915050565b6000813590506129bf81613e4d565b92915050565b6000602082840312156129d757600080fd5b60006129e584828501612932565b91505092915050565b60008060408385031215612a0157600080fd5b6000612a0f85828601612932565b9250506020612a2085828601612932565b9150509250929050565b600080600060608486031215612a3f57600080fd5b6000612a4d86828701612932565b9350506020612a5e86828701612932565b9250506040612a6f868287016129b0565b9150509250925092565b60008060008060808587031215612a8f57600080fd5b6000612a9d87828801612932565b9450506020612aae87828801612932565b9350506040612abf878288016129b0565b925050606085013567ffffffffffffffff811115612adc57600080fd5b612ae887828801612986565b91505092959194509250565b60008060408385031215612b0757600080fd5b6000612b1585828601612932565b9250506020612b2685828601612947565b9150509250929050565b60008060408385031215612b4357600080fd5b6000612b5185828601612932565b9250506020612b62858286016129b0565b9150509250929050565b600060208284031215612b7e57600080fd5b6000612b8c8482850161295c565b91505092915050565b600060208284031215612ba757600080fd5b6000612bb584828501612971565b91505092915050565b600060208284031215612bd057600080fd5b6000612bde848285016129b0565b91505092915050565b612bf08161354d565b82525050565b612bff8161355f565b82525050565b6000612c10826133f5565b612c1a818561340b565b9350612c2a8185602086016135d0565b612c338161379c565b840191505092915050565b6000612c4982613400565b612c53818561341c565b9350612c638185602086016135d0565b612c6c8161379c565b840191505092915050565b6000612c8282613400565b612c8c818561342d565b9350612c9c8185602086016135d0565b80840191505092915050565b6000612cb5602b8361341c565b9150612cc0826137ad565b604082019050919050565b6000612cd860328361341c565b9150612ce3826137fc565b604082019050919050565b6000612cfb60268361341c565b9150612d068261384b565b604082019050919050565b6000612d1e601c8361341c565b9150612d298261389a565b602082019050919050565b6000612d4160248361341c565b9150612d4c826138c3565b604082019050919050565b6000612d6460198361341c565b9150612d6f82613912565b602082019050919050565b6000612d87602a8361341c565b9150612d928261393b565b604082019050919050565b6000612daa601f8361341c565b9150612db58261398a565b602082019050919050565b6000612dcd602c8361341c565b9150612dd8826139b3565b604082019050919050565b6000612df060388361341c565b9150612dfb82613a02565b604082019050919050565b6000612e13603c8361341c565b9150612e1e82613a51565b604082019050919050565b6000612e36602a8361341c565b9150612e4182613aa0565b604082019050919050565b6000612e5960298361341c565b9150612e6482613aef565b604082019050919050565b6000612e7c60208361341c565b9150612e8782613b3e565b602082019050919050565b6000612e9f60318361341c565b9150612eaa82613b67565b604082019050919050565b6000612ec2602c8361341c565b9150612ecd82613bb6565b604082019050919050565b6000612ee560208361341c565b9150612ef082613c05565b602082019050919050565b6000612f0860298361341c565b9150612f1382613c2e565b604082019050919050565b6000612f2b602f8361341c565b9150612f3682613c7d565b604082019050919050565b6000612f4e60218361341c565b9150612f5982613ccc565b604082019050919050565b6000612f7160318361341c565b9150612f7c82613d1b565b604082019050919050565b6000612f94602c8361341c565b9150612f9f82613d6a565b604082019050919050565b6000612fb760218361341c565b9150612fc282613db9565b604082019050919050565b612fd6816135b7565b82525050565b6000612fe88285612c77565b9150612ff48284612c77565b91508190509392505050565b60006020820190506130156000830184612be7565b92915050565b60006080820190506130306000830187612be7565b61303d6020830186612be7565b61304a6040830185612fcd565b818103606083015261305c8184612c05565b905095945050505050565b600060208201905061307c6000830184612bf6565b92915050565b6000602082019050818103600083015261309c8184612c3e565b905092915050565b600060208201905081810360008301526130bd81612ca8565b9050919050565b600060208201905081810360008301526130dd81612ccb565b9050919050565b600060208201905081810360008301526130fd81612cee565b9050919050565b6000602082019050818103600083015261311d81612d11565b9050919050565b6000602082019050818103600083015261313d81612d34565b9050919050565b6000602082019050818103600083015261315d81612d57565b9050919050565b6000602082019050818103600083015261317d81612d7a565b9050919050565b6000602082019050818103600083015261319d81612d9d565b9050919050565b600060208201905081810360008301526131bd81612dc0565b9050919050565b600060208201905081810360008301526131dd81612de3565b9050919050565b600060208201905081810360008301526131fd81612e06565b9050919050565b6000602082019050818103600083015261321d81612e29565b9050919050565b6000602082019050818103600083015261323d81612e4c565b9050919050565b6000602082019050818103600083015261325d81612e6f565b9050919050565b6000602082019050818103600083015261327d81612e92565b9050919050565b6000602082019050818103600083015261329d81612eb5565b9050919050565b600060208201905081810360008301526132bd81612ed8565b9050919050565b600060208201905081810360008301526132dd81612efb565b9050919050565b600060208201905081810360008301526132fd81612f1e565b9050919050565b6000602082019050818103600083015261331d81612f41565b9050919050565b6000602082019050818103600083015261333d81612f64565b9050919050565b6000602082019050818103600083015261335d81612f87565b9050919050565b6000602082019050818103600083015261337d81612faa565b9050919050565b60006020820190506133996000830184612fcd565b92915050565b60006133a96133ba565b90506133b58282613635565b919050565b6000604051905090565b600067ffffffffffffffff8211156133df576133de61376d565b5b6133e88261379c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613443826135b7565b915061344e836135b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613483576134826136e0565b5b828201905092915050565b6000613499826135b7565b91506134a4836135b7565b9250826134b4576134b361370f565b5b828204905092915050565b60006134ca826135b7565b91506134d5836135b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561350e5761350d6136e0565b5b828202905092915050565b6000613524826135b7565b915061352f836135b7565b925082821015613542576135416136e0565b5b828203905092915050565b600061355882613597565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135ee5780820151818401526020810190506135d3565b838111156135fd576000848401525b50505050565b6000600282049050600182168061361b57607f821691505b6020821081141561362f5761362e61373e565b5b50919050565b61363e8261379c565b810181811067ffffffffffffffff8211171561365d5761365c61376d565b5b80604052505050565b6000613671826135b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136a4576136a36136e0565b5b600182019050919050565b60006136ba826135b7565b91506136c5836135b7565b9250826136d5576136d461370f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662050616e64617300000000000000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c79206d696e742061206d6178696d756d206f6620323020746f60008201527f6b656e7320696e20612073696e676c65207472616e73616374696f6e00000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742050616e6460008201527f6100000000000000000000000000000000000000000000000000000000000000602082015250565b613e118161354d565b8114613e1c57600080fd5b50565b613e288161355f565b8114613e3357600080fd5b50565b613e3f8161356b565b8114613e4a57600080fd5b50565b613e56816135b7565b8114613e6157600080fd5b5056fe697066733a2f2f516d577843386e5937337a5759664764724a46415a755a4b396444624e79734b316f32486864463579354e4157482fa26469706673582212201d6102846051ef15e62706ad7460ce81da31b2a27c092ed4c74c535d0d98712864736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c4262616c6c2050616e646173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054242616c6c000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061019c5760003560e01c8063545c9e97116100ec57806395d89b411161008a578063c87b56dd11610064578063c87b56dd14610581578063e985e9c5146105be578063eb8d2444146105fb578063f2fde38b146106265761019c565b806395d89b4114610504578063a22cb4651461052f578063b88d4fde146105585761019c565b8063715018a6116100c6578063715018a614610494578063790335ee146104ab5780637d8966e4146104c25780638da5cb5b146104d95761019c565b8063545c9e97146103ef5780636352211e1461041a57806370a08231146104575761019c565b806318160ddd116101595780632f745c59116101335780632f745c59146103355780633ccfd60b1461037257806342842e0e146103895780634f6ccce7146103b25761019c565b806318160ddd146102b657806323b872dd146102e15780632724f6e71461030a5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631056b16d1461026f57806314e843b81461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b6c565b61064f565b6040516101d59190613067565b60405180910390f35b3480156101ea57600080fd5b506101f3610661565b6040516102009190613082565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612bbe565b6106f3565b60405161023d9190613000565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612b30565b610778565b005b34801561027b57600080fd5b50610284610890565b6040516102919190613384565b60405180910390f35b6102b460048036038101906102af9190612bbe565b610896565b005b3480156102c257600080fd5b506102cb610a2f565b6040516102d89190613384565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612a2a565b610a3c565b005b34801561031657600080fd5b5061031f610a9c565b60405161032c9190613384565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612b30565b610aa8565b6040516103699190613384565b60405180910390f35b34801561037e57600080fd5b50610387610b4d565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612a2a565b610c18565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612bbe565b610c38565b6040516103e69190613384565b60405180910390f35b3480156103fb57600080fd5b50610404610ccf565b6040516104119190613384565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190612bbe565b610cd4565b60405161044e9190613000565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906129c5565b610d86565b60405161048b9190613384565b60405180910390f35b3480156104a057600080fd5b506104a9610e3e565b005b3480156104b757600080fd5b506104c0610f7b565b005b3480156104ce57600080fd5b506104d761103b565b005b3480156104e557600080fd5b506104ee6110e3565b6040516104fb9190613000565b60405180910390f35b34801561051057600080fd5b5061051961110d565b6040516105269190613082565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190612af4565b61119f565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612a79565b611320565b005b34801561058d57600080fd5b506105a860048036038101906105a39190612bbe565b611382565b6040516105b59190613082565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e091906129ee565b611394565b6040516105f29190613067565b60405180910390f35b34801561060757600080fd5b50610610611428565b60405161061d9190613067565b60405180910390f35b34801561063257600080fd5b5061064d600480360381019061064891906129c5565b61143b565b005b600061065a826115e7565b9050919050565b60606000805461067090613603565b80601f016020809104026020016040519081016040528092919081815260200182805461069c90613603565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe82611661565b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073490613284565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061078382610cd4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613304565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108136116cd565b73ffffffffffffffffffffffffffffffffffffffff16148061084257506108418161083c6116cd565b611394565b5b610881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610878906131c4565b60405180910390fd5b61088b83836116d5565b505050565b61271081565b600b60149054906101000a900460ff166108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613364565b60405180910390fd5b6014811115610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610920906131e4565b60405180910390fd5b61271061094682610938610a2f565b61178e90919063ffffffff16565b1115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90613164565b60405180910390fd5b346109a38267011c37937e0800006117a490919063ffffffff16565b11156109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613184565b60405180910390fd5b60005b81811015610a2b5760006109f9610a2f565b9050612710610a06610a2f565b1015610a1757610a1633826117ba565b5b508080610a2390613666565b9150506109e7565b5050565b6000600880549050905090565b610a4d610a476116cd565b826117d8565b610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613324565b60405180910390fd5b610a978383836118b6565b505050565b67011c37937e08000081565b6000610ab383610d86565b8210610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb906130a4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b556116cd565b73ffffffffffffffffffffffffffffffffffffffff16610b736110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906132a4565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c14573d6000803e3d6000fd5b5050565b610c3383838360405180602001604052806000815250611320565b505050565b6000610c42610a2f565b8210610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613344565b60405180910390fd5b60088281548110610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613224565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613204565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e466116cd565b73ffffffffffffffffffffffffffffffffffffffff16610e646110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906132a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f836116cd565b73ffffffffffffffffffffffffffffffffffffffff16610fa16110e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906132a4565b60405180910390fd5b6000611001610a2f565b905060005b60198110156110375761102433828461101f9190613438565b6117ba565b808061102f90613666565b915050611006565b5050565b6110436116cd565b73ffffffffffffffffffffffffffffffffffffffff166110616110e3565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906132a4565b60405180910390fd5b600b60149054906101000a900460ff1615600b60146101000a81548160ff021916908315150217905550565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461111c90613603565b80601f016020809104026020016040519081016040528092919081815260200182805461114890613603565b80156111955780601f1061116a57610100808354040283529160200191611195565b820191906000526020600020905b81548152906001019060200180831161117857829003601f168201915b5050505050905090565b6111a76116cd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90613144565b60405180910390fd5b80600560006112226116cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112cf6116cd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113149190613067565b60405180910390a35050565b61133161132b6116cd565b836117d8565b611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613324565b60405180910390fd5b61137c84848484611b12565b50505050565b606061138d82611b6e565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60149054906101000a900460ff1681565b6114436116cd565b73ffffffffffffffffffffffffffffffffffffffff166114616110e3565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906132a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906130e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165a575061165982611cc0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174883610cd4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818361179c9190613438565b905092915050565b600081836117b291906134bf565b905092915050565b6117d4828260405180602001604052806000815250611da2565b5050565b60006117e382611661565b611822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611819906131a4565b60405180910390fd5b600061182d83610cd4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061189c57508373ffffffffffffffffffffffffffffffffffffffff16611884846106f3565b73ffffffffffffffffffffffffffffffffffffffff16145b806118ad57506118ac8185611394565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118d682610cd4565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611923906132c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613124565b60405180910390fd5b6119a7838383611dfd565b6119b26000826116d5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a029190613519565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a599190613438565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b1d8484846118b6565b611b2984848484611e0d565b611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f906130c4565b60405180910390fd5b50505050565b6060611b7982611661565b611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613264565b60405180910390fd5b6000600a60008481526020019081526020016000208054611bd890613603565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0490613603565b8015611c515780601f10611c2657610100808354040283529160200191611c51565b820191906000526020600020905b815481529060010190602001808311611c3457829003601f168201915b505050505090506000611c62611fa4565b9050600081511415611c78578192505050611cbb565b600082511115611cad578082604051602001611c95929190612fdc565b60405160208183030381529060405292505050611cbb565b611cb684611fc4565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d8b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d9b5750611d9a8261206b565b5b9050919050565b611dac83836120d5565b611db96000848484611e0d565b611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def906130c4565b60405180910390fd5b505050565b611e088383836122a3565b505050565b6000611e2e8473ffffffffffffffffffffffffffffffffffffffff166123b7565b15611f97578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e576116cd565b8786866040518563ffffffff1660e01b8152600401611e79949392919061301b565b602060405180830381600087803b158015611e9357600080fd5b505af1925050508015611ec457506040513d601f19601f82011682018060405250810190611ec19190612b95565b60015b611f47573d8060008114611ef4576040519150601f19603f3d011682016040523d82523d6000602084013e611ef9565b606091505b50600081511415611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906130c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f9c565b600190505b949350505050565b6060604051806060016040528060368152602001613e6560369139905090565b6060611fcf82611661565b61200e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612005906132e4565b60405180910390fd5b6000612018611fa4565b905060008151116120385760405180602001604052806000815250612063565b80612042846123ca565b604051602001612053929190612fdc565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90613244565b60405180910390fd5b61214e81611661565b1561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590613104565b60405180910390fd5b61219a60008383611dfd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ea9190613438565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122ae838383612577565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122f1576122ec8161257c565b612330565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461232f5761232e83826125c5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123735761236e81612732565b6123b2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b1576123b08282612875565b5b5b505050565b600080823b905060008111915050919050565b60606000821415612412576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612572565b600082905060005b6000821461244457808061242d90613666565b915050600a8261243d919061348e565b915061241a565b60008167ffffffffffffffff811115612486577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b85781602001600182028036833780820191505090505b5090505b6000851461256b576001826124d19190613519565b9150600a856124e091906136af565b60306124ec9190613438565b60f81b818381518110612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612564919061348e565b94506124bc565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125d284610d86565b6125dc9190613519565b90506000600760008481526020019081526020016000205490508181146126c1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127469190613519565b905060006009600084815260200190815260200160002054905060006008838154811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106127e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612859577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061288083610d86565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000612907612902846133c4565b61339f565b90508281526020810184848401111561291f57600080fd5b61292a8482856135c1565b509392505050565b60008135905061294181613e08565b92915050565b60008135905061295681613e1f565b92915050565b60008135905061296b81613e36565b92915050565b60008151905061298081613e36565b92915050565b600082601f83011261299757600080fd5b81356129a78482602086016128f4565b91505092915050565b6000813590506129bf81613e4d565b92915050565b6000602082840312156129d757600080fd5b60006129e584828501612932565b91505092915050565b60008060408385031215612a0157600080fd5b6000612a0f85828601612932565b9250506020612a2085828601612932565b9150509250929050565b600080600060608486031215612a3f57600080fd5b6000612a4d86828701612932565b9350506020612a5e86828701612932565b9250506040612a6f868287016129b0565b9150509250925092565b60008060008060808587031215612a8f57600080fd5b6000612a9d87828801612932565b9450506020612aae87828801612932565b9350506040612abf878288016129b0565b925050606085013567ffffffffffffffff811115612adc57600080fd5b612ae887828801612986565b91505092959194509250565b60008060408385031215612b0757600080fd5b6000612b1585828601612932565b9250506020612b2685828601612947565b9150509250929050565b60008060408385031215612b4357600080fd5b6000612b5185828601612932565b9250506020612b62858286016129b0565b9150509250929050565b600060208284031215612b7e57600080fd5b6000612b8c8482850161295c565b91505092915050565b600060208284031215612ba757600080fd5b6000612bb584828501612971565b91505092915050565b600060208284031215612bd057600080fd5b6000612bde848285016129b0565b91505092915050565b612bf08161354d565b82525050565b612bff8161355f565b82525050565b6000612c10826133f5565b612c1a818561340b565b9350612c2a8185602086016135d0565b612c338161379c565b840191505092915050565b6000612c4982613400565b612c53818561341c565b9350612c638185602086016135d0565b612c6c8161379c565b840191505092915050565b6000612c8282613400565b612c8c818561342d565b9350612c9c8185602086016135d0565b80840191505092915050565b6000612cb5602b8361341c565b9150612cc0826137ad565b604082019050919050565b6000612cd860328361341c565b9150612ce3826137fc565b604082019050919050565b6000612cfb60268361341c565b9150612d068261384b565b604082019050919050565b6000612d1e601c8361341c565b9150612d298261389a565b602082019050919050565b6000612d4160248361341c565b9150612d4c826138c3565b604082019050919050565b6000612d6460198361341c565b9150612d6f82613912565b602082019050919050565b6000612d87602a8361341c565b9150612d928261393b565b604082019050919050565b6000612daa601f8361341c565b9150612db58261398a565b602082019050919050565b6000612dcd602c8361341c565b9150612dd8826139b3565b604082019050919050565b6000612df060388361341c565b9150612dfb82613a02565b604082019050919050565b6000612e13603c8361341c565b9150612e1e82613a51565b604082019050919050565b6000612e36602a8361341c565b9150612e4182613aa0565b604082019050919050565b6000612e5960298361341c565b9150612e6482613aef565b604082019050919050565b6000612e7c60208361341c565b9150612e8782613b3e565b602082019050919050565b6000612e9f60318361341c565b9150612eaa82613b67565b604082019050919050565b6000612ec2602c8361341c565b9150612ecd82613bb6565b604082019050919050565b6000612ee560208361341c565b9150612ef082613c05565b602082019050919050565b6000612f0860298361341c565b9150612f1382613c2e565b604082019050919050565b6000612f2b602f8361341c565b9150612f3682613c7d565b604082019050919050565b6000612f4e60218361341c565b9150612f5982613ccc565b604082019050919050565b6000612f7160318361341c565b9150612f7c82613d1b565b604082019050919050565b6000612f94602c8361341c565b9150612f9f82613d6a565b604082019050919050565b6000612fb760218361341c565b9150612fc282613db9565b604082019050919050565b612fd6816135b7565b82525050565b6000612fe88285612c77565b9150612ff48284612c77565b91508190509392505050565b60006020820190506130156000830184612be7565b92915050565b60006080820190506130306000830187612be7565b61303d6020830186612be7565b61304a6040830185612fcd565b818103606083015261305c8184612c05565b905095945050505050565b600060208201905061307c6000830184612bf6565b92915050565b6000602082019050818103600083015261309c8184612c3e565b905092915050565b600060208201905081810360008301526130bd81612ca8565b9050919050565b600060208201905081810360008301526130dd81612ccb565b9050919050565b600060208201905081810360008301526130fd81612cee565b9050919050565b6000602082019050818103600083015261311d81612d11565b9050919050565b6000602082019050818103600083015261313d81612d34565b9050919050565b6000602082019050818103600083015261315d81612d57565b9050919050565b6000602082019050818103600083015261317d81612d7a565b9050919050565b6000602082019050818103600083015261319d81612d9d565b9050919050565b600060208201905081810360008301526131bd81612dc0565b9050919050565b600060208201905081810360008301526131dd81612de3565b9050919050565b600060208201905081810360008301526131fd81612e06565b9050919050565b6000602082019050818103600083015261321d81612e29565b9050919050565b6000602082019050818103600083015261323d81612e4c565b9050919050565b6000602082019050818103600083015261325d81612e6f565b9050919050565b6000602082019050818103600083015261327d81612e92565b9050919050565b6000602082019050818103600083015261329d81612eb5565b9050919050565b600060208201905081810360008301526132bd81612ed8565b9050919050565b600060208201905081810360008301526132dd81612efb565b9050919050565b600060208201905081810360008301526132fd81612f1e565b9050919050565b6000602082019050818103600083015261331d81612f41565b9050919050565b6000602082019050818103600083015261333d81612f64565b9050919050565b6000602082019050818103600083015261335d81612f87565b9050919050565b6000602082019050818103600083015261337d81612faa565b9050919050565b60006020820190506133996000830184612fcd565b92915050565b60006133a96133ba565b90506133b58282613635565b919050565b6000604051905090565b600067ffffffffffffffff8211156133df576133de61376d565b5b6133e88261379c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613443826135b7565b915061344e836135b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613483576134826136e0565b5b828201905092915050565b6000613499826135b7565b91506134a4836135b7565b9250826134b4576134b361370f565b5b828204905092915050565b60006134ca826135b7565b91506134d5836135b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561350e5761350d6136e0565b5b828202905092915050565b6000613524826135b7565b915061352f836135b7565b925082821015613542576135416136e0565b5b828203905092915050565b600061355882613597565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135ee5780820151818401526020810190506135d3565b838111156135fd576000848401525b50505050565b6000600282049050600182168061361b57607f821691505b6020821081141561362f5761362e61373e565b5b50919050565b61363e8261379c565b810181811067ffffffffffffffff8211171561365d5761365c61376d565b5b80604052505050565b6000613671826135b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136a4576136a36136e0565b5b600182019050919050565b60006136ba826135b7565b91506136c5836135b7565b9250826136d5576136d461370f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662050616e64617300000000000000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c79206d696e742061206d6178696d756d206f6620323020746f60008201527f6b656e7320696e20612073696e676c65207472616e73616374696f6e00000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742050616e6460008201527f6100000000000000000000000000000000000000000000000000000000000000602082015250565b613e118161354d565b8114613e1c57600080fd5b50565b613e288161355f565b8114613e3357600080fd5b50565b613e3f8161356b565b8114613e4a57600080fd5b50565b613e56816135b7565b8114613e6157600080fd5b5056fe697066733a2f2f516d577843386e5937337a5759664764724a46415a755a4b396444624e79734b316f32486864463579354e4157482fa26469706673582212201d6102846051ef15e62706ad7460ce81da31b2a27c092ed4c74c535d0d98712864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c4262616c6c2050616e646173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054242616c6c000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Bball Pandas
Arg [1] : symbol (string): BBall
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 4262616c6c2050616e6461730000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4242616c6c000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
52193:2546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53339:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21545:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23005:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22542:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52440:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54038:698;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36865:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23895:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52312:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36533:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53567:143;;;;;;;;;;;;;:::i;:::-;;24271:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37055:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52386:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21239:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20969:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44087:148;;;;;;;;;;;;;:::i;:::-;;53812:214;;;;;;;;;;;;;:::i;:::-;;53718:86;;;;;;;;;;;;;:::i;:::-;;43436:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21714:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23298:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24493:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52627:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23664:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52491:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44390:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53339:212;53478:4;53507:36;53531:11;53507:23;:36::i;:::-;53500:43;;53339:212;;;:::o;21545:100::-;21599:13;21632:5;21625:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21545:100;:::o;23005:221::-;23081:7;23109:16;23117:7;23109;:16::i;:::-;23101:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23194:15;:24;23210:7;23194:24;;;;;;;;;;;;;;;;;;;;;23187:31;;23005:221;;;:::o;22542:397::-;22623:13;22639:23;22654:7;22639:14;:23::i;:::-;22623:39;;22687:5;22681:11;;:2;:11;;;;22673:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22767:5;22751:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22776:37;22793:5;22800:12;:10;:12::i;:::-;22776:16;:37::i;:::-;22751:62;22743:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22910:21;22919:2;22923:7;22910:8;:21::i;:::-;22542:397;;;:::o;52440:42::-;52477:5;52440:42;:::o;54038:698::-;54112:12;;;;;;;;;;;54104:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;52429:2;54181:14;:34;;54173:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;52477:5;54299:33;54317:14;54299:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:47;;54291:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;54446:9;54412:30;54427:14;52349:17;54412:14;;:30;;;;:::i;:::-;:43;;54404:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;54516:9;54512:217;54535:14;54531:1;:18;54512:217;;;54571:17;54591:13;:11;:13::i;:::-;54571:33;;52477:5;54623:13;:11;:13::i;:::-;:26;54619:99;;;54670:32;54680:10;54692:9;54670;:32::i;:::-;54619:99;54512:217;54551:3;;;;;:::i;:::-;;;;54512:217;;;;54038:698;:::o;36865:113::-;36926:7;36953:10;:17;;;;36946:24;;36865:113;:::o;23895:305::-;24056:41;24075:12;:10;:12::i;:::-;24089:7;24056:18;:41::i;:::-;24048:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24164:28;24174:4;24180:2;24184:7;24164:9;:28::i;:::-;23895:305;;;:::o;52312:54::-;52349:17;52312:54;:::o;36533:256::-;36630:7;36666:23;36683:5;36666:16;:23::i;:::-;36658:5;:31;36650:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36755:12;:19;36768:5;36755:19;;;;;;;;;;;;;;;:26;36775:5;36755:26;;;;;;;;;;;;36748:33;;36533:256;;;;:::o;53567:143::-;43667:12;:10;:12::i;:::-;43656:23;;:7;:5;:7::i;:::-;:23;;;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53615:15:::1;53633:21;53615:39;;53673:10;53665:28;;:37;53694:7;53665:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43727:1;53567:143::o:0;24271:151::-;24375:39;24392:4;24398:2;24402:7;24375:39;;;;;;;;;;;;:16;:39::i;:::-;24271:151;;;:::o;37055:233::-;37130:7;37166:30;:28;:30::i;:::-;37158:5;:38;37150:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37263:10;37274:5;37263:17;;;;;;;;;;;;;;;;;;;;;;;;37256:24;;37055:233;;;:::o;52386:45::-;52429:2;52386:45;:::o;21239:239::-;21311:7;21331:13;21347:7;:16;21355:7;21347:16;;;;;;;;;;;;;;;;;;;;;21331:32;;21399:1;21382:19;;:5;:19;;;;21374:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21465:5;21458:12;;;21239:239;;;:::o;20969:208::-;21041:7;21086:1;21069:19;;:5;:19;;;;21061:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21153:9;:16;21163:5;21153:16;;;;;;;;;;;;;;;;21146:23;;20969:208;;;:::o;44087:148::-;43667:12;:10;:12::i;:::-;43656:23;;:7;:5;:7::i;:::-;:23;;;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44194:1:::1;44157:40;;44178:6;;;;;;;;;;;44157:40;;;;;;;;;;;;44225:1;44208:6;;:19;;;;;;;;;;;;;;;;;;44087:148::o:0;53812:214::-;43667:12;:10;:12::i;:::-;43656:23;;:7;:5;:7::i;:::-;:23;;;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53873:14:::1;53890:13;:11;:13::i;:::-;53873:30;;53914:9;53934:85;53950:2;53946:1;:6;53934:85;;;53974:33;53984:10;54005:1;53996:6;:10;;;;:::i;:::-;53974:9;:33::i;:::-;53954:3;;;;;:::i;:::-;;;;53934:85;;;43727:1;;53812:214::o:0;53718:86::-;43667:12;:10;:12::i;:::-;43656:23;;:7;:5;:7::i;:::-;:23;;;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53784:12:::1;;;;;;;;;;;53783:13;53768:12;;:28;;;;;;;;;;;;;;;;;;53718:86::o:0;43436:87::-;43482:7;43509:6;;;;;;;;;;;43502:13;;43436:87;:::o;21714:104::-;21770:13;21803:7;21796:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21714:104;:::o;23298:295::-;23413:12;:10;:12::i;:::-;23401:24;;:8;:24;;;;23393:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23513:8;23468:18;:32;23487:12;:10;:12::i;:::-;23468:32;;;;;;;;;;;;;;;:42;23501:8;23468:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23566:8;23537:48;;23552:12;:10;:12::i;:::-;23537:48;;;23576:8;23537:48;;;;;;:::i;:::-;;;;;;;;23298:295;;:::o;24493:285::-;24625:41;24644:12;:10;:12::i;:::-;24658:7;24625:18;:41::i;:::-;24617:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:39;24745:4;24751:2;24755:7;24764:5;24731:13;:39::i;:::-;24493:285;;;;:::o;52627:196::-;52754:13;52792:23;52807:7;52792:14;:23::i;:::-;52785:30;;52627:196;;;:::o;23664:164::-;23761:4;23785:18;:25;23804:5;23785:25;;;;;;;;;;;;;;;:35;23811:8;23785:35;;;;;;;;;;;;;;;;;;;;;;;;;23778:42;;23664:164;;;;:::o;52491:32::-;;;;;;;;;;;;;:::o;44390:244::-;43667:12;:10;:12::i;:::-;43656:23;;:7;:5;:7::i;:::-;:23;;;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44499:1:::1;44479:22;;:8;:22;;;;44471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44589:8;44560:38;;44581:6;;;;;;;;;;;44560:38;;;;;;;;;;;;44618:8;44609:6;;:17;;;;;;;;;;;;;;;;;;44390:244:::0;:::o;36212:237::-;36314:4;36353:35;36338:50;;;:11;:50;;;;:103;;;;36405:36;36429:11;36405:23;:36::i;:::-;36338:103;36331:110;;36212:237;;;:::o;26245:127::-;26310:4;26362:1;26334:30;;:7;:16;26342:7;26334:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26327:37;;26245:127;;;:::o;9114:98::-;9167:7;9194:10;9187:17;;9114:98;:::o;30122:174::-;30224:2;30197:15;:24;30213:7;30197:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30280:7;30276:2;30242:46;;30251:23;30266:7;30251:14;:23::i;:::-;30242:46;;;;;;;;;;;;30122:174;;:::o;47395:98::-;47453:7;47484:1;47480;:5;;;;:::i;:::-;47473:12;;47395:98;;;;:::o;48133:::-;48191:7;48222:1;48218;:5;;;;:::i;:::-;48211:12;;48133:98;;;;:::o;27229:110::-;27305:26;27315:2;27319:7;27305:26;;;;;;;;;;;;:9;:26::i;:::-;27229:110;;:::o;26539:348::-;26632:4;26657:16;26665:7;26657;:16::i;:::-;26649:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26733:13;26749:23;26764:7;26749:14;:23::i;:::-;26733:39;;26802:5;26791:16;;:7;:16;;;:51;;;;26835:7;26811:31;;:20;26823:7;26811:11;:20::i;:::-;:31;;;26791:51;:87;;;;26846:32;26863:5;26870:7;26846:16;:32::i;:::-;26791:87;26783:96;;;26539:348;;;;:::o;29460:544::-;29585:4;29558:31;;:23;29573:7;29558:14;:23::i;:::-;:31;;;29550:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29668:1;29654:16;;:2;:16;;;;29646:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29724:39;29745:4;29751:2;29755:7;29724:20;:39::i;:::-;29828:29;29845:1;29849:7;29828:8;:29::i;:::-;29889:1;29870:9;:15;29880:4;29870:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29918:1;29901:9;:13;29911:2;29901:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29949:2;29930:7;:16;29938:7;29930:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29988:7;29984:2;29969:27;;29978:4;29969:27;;;;;;;;;;;;29460:544;;;:::o;25660:272::-;25774:28;25784:4;25790:2;25794:7;25774:9;:28::i;:::-;25821:48;25844:4;25850:2;25854:7;25863:5;25821:22;:48::i;:::-;25813:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:272;;;;:::o;33781:679::-;33854:13;33888:16;33896:7;33888;:16::i;:::-;33880:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33971:23;33997:10;:19;34008:7;33997:19;;;;;;;;;;;33971:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34027:18;34048:10;:8;:10::i;:::-;34027:31;;34156:1;34140:4;34134:18;:23;34130:72;;;34181:9;34174:16;;;;;;34130:72;34332:1;34312:9;34306:23;:27;34302:108;;;34381:4;34387:9;34364:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34350:48;;;;;;34302:108;34429:23;34444:7;34429:14;:23::i;:::-;34422:30;;;;33781:679;;;;:::o;20613:292::-;20715:4;20754:25;20739:40;;;:11;:40;;;;:105;;;;20811:33;20796:48;;;:11;:48;;;;20739:105;:158;;;;20861:36;20885:11;20861:23;:36::i;:::-;20739:158;20732:165;;20613:292;;;:::o;27566:250::-;27662:18;27668:2;27672:7;27662:5;:18::i;:::-;27699:54;27730:1;27734:2;27738:7;27747:5;27699:22;:54::i;:::-;27691:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27566:250;;;:::o;53004:204::-;53155:45;53182:4;53188:2;53192:7;53155:26;:45::i;:::-;53004:204;;;:::o;30861:843::-;30982:4;31008:15;:2;:13;;;:15::i;:::-;31004:693;;;31060:2;31044:36;;;31081:12;:10;:12::i;:::-;31095:4;31101:7;31110:5;31044:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31040:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31307:1;31290:6;:13;:18;31286:341;;;31333:60;;;;;;;;;;:::i;:::-;;;;;;;;31286:341;31577:6;31571:13;31562:6;31558:2;31554:15;31547:38;31040:602;31177:45;;;31167:55;;;:6;:55;;;;31160:62;;;;;31004:693;31681:4;31674:11;;30861:843;;;;;;;:::o;52835:149::-;52887:13;52913:63;;;;;;;;;;;;;;;;;;;52835:149;:::o;21889:360::-;21962:13;21996:16;22004:7;21996;:16::i;:::-;21988:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22077:21;22101:10;:8;:10::i;:::-;22077:34;;22153:1;22135:7;22129:21;:25;:112;;;;;;;;;;;;;;;;;22194:7;22203:18;:7;:16;:18::i;:::-;22177:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22129:112;22122:119;;;21889:360;;;:::o;6326:157::-;6411:4;6450:25;6435:40;;;:11;:40;;;;6428:47;;6326:157;;;:::o;28152:382::-;28246:1;28232:16;;:2;:16;;;;28224:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28305:16;28313:7;28305;:16::i;:::-;28304:17;28296:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28367:45;28396:1;28400:2;28404:7;28367:20;:45::i;:::-;28442:1;28425:9;:13;28435:2;28425:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28473:2;28454:7;:16;28462:7;28454:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28518:7;28514:2;28493:33;;28510:1;28493:33;;;;;;;;;;;;28152:382;;:::o;37901:555::-;38011:45;38038:4;38044:2;38048:7;38011:26;:45::i;:::-;38089:1;38073:18;;:4;:18;;;38069:187;;;38108:40;38140:7;38108:31;:40::i;:::-;38069:187;;;38178:2;38170:10;;:4;:10;;;38166:90;;38197:47;38230:4;38236:7;38197:32;:47::i;:::-;38166:90;38069:187;38284:1;38270:16;;:2;:16;;;38266:183;;;38303:45;38340:7;38303:36;:45::i;:::-;38266:183;;;38376:4;38370:10;;:2;:10;;;38366:83;;38397:40;38425:2;38429:7;38397:27;:40::i;:::-;38366:83;38266:183;37901:555;;;:::o;10200:422::-;10260:4;10468:12;10579:7;10567:20;10559:28;;10613:1;10606:4;:8;10599:15;;;10200:422;;;:::o;6765:723::-;6821:13;7051:1;7042:5;:10;7038:53;;;7069:10;;;;;;;;;;;;;;;;;;;;;7038:53;7101:12;7116:5;7101:20;;7132:14;7157:78;7172:1;7164:4;:9;7157:78;;7190:8;;;;;:::i;:::-;;;;7221:2;7213:10;;;;;:::i;:::-;;;7157:78;;;7245:19;7277:6;7267:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7245:39;;7295:154;7311:1;7302:5;:10;7295:154;;7339:1;7329:11;;;;;:::i;:::-;;;7406:2;7398:5;:10;;;;:::i;:::-;7385:2;:24;;;;:::i;:::-;7372:39;;7355:6;7362;7355:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7435:2;7426:11;;;;;:::i;:::-;;;7295:154;;;7473:6;7459:21;;;;;6765:723;;;;:::o;32317:93::-;;;;:::o;39179:164::-;39283:10;:17;;;;39256:15;:24;39272:7;39256:24;;;;;;;;;;;:44;;;;39311:10;39327:7;39311:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39179:164;:::o;39970:988::-;40236:22;40286:1;40261:22;40278:4;40261:16;:22::i;:::-;:26;;;;:::i;:::-;40236:51;;40298:18;40319:17;:26;40337:7;40319:26;;;;;;;;;;;;40298:47;;40466:14;40452:10;:28;40448:328;;40497:19;40519:12;:18;40532:4;40519:18;;;;;;;;;;;;;;;:34;40538:14;40519:34;;;;;;;;;;;;40497:56;;40603:11;40570:12;:18;40583:4;40570:18;;;;;;;;;;;;;;;:30;40589:10;40570:30;;;;;;;;;;;:44;;;;40720:10;40687:17;:30;40705:11;40687:30;;;;;;;;;;;:43;;;;40448:328;;40872:17;:26;40890:7;40872:26;;;;;;;;;;;40865:33;;;40916:12;:18;40929:4;40916:18;;;;;;;;;;;;;;;:34;40935:14;40916:34;;;;;;;;;;;40909:41;;;39970:988;;;;:::o;41253:1079::-;41506:22;41551:1;41531:10;:17;;;;:21;;;;:::i;:::-;41506:46;;41563:18;41584:15;:24;41600:7;41584:24;;;;;;;;;;;;41563:45;;41935:19;41957:10;41968:14;41957:26;;;;;;;;;;;;;;;;;;;;;;;;41935:48;;42021:11;41996:10;42007;41996:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42132:10;42101:15;:28;42117:11;42101:28;;;;;;;;;;;:41;;;;42273:15;:24;42289:7;42273:24;;;;;;;;;;;42266:31;;;42308:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41253:1079;;;;:::o;38757:221::-;38842:14;38859:20;38876:2;38859:16;:20::i;:::-;38842:37;;38917:7;38890:12;:16;38903:2;38890:16;;;;;;;;;;;;;;;:24;38907:6;38890:24;;;;;;;;;;;:34;;;;38964:6;38935:17;:26;38953:7;38935:26;;;;;;;;;;;:35;;;;38757:221;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1220:139::-;1266:5;1304:6;1291:20;1282:29;;1320:33;1347:5;1320:33;:::i;:::-;1272:87;;;;:::o;1365:262::-;1424:6;1473:2;1461:9;1452:7;1448:23;1444:32;1441:2;;;1489:1;1486;1479:12;1441:2;1532:1;1557:53;1602:7;1593:6;1582:9;1578:22;1557:53;:::i;:::-;1547:63;;1503:117;1431:196;;;;:::o;1633:407::-;1701:6;1709;1758:2;1746:9;1737:7;1733:23;1729:32;1726:2;;;1774:1;1771;1764:12;1726:2;1817:1;1842:53;1887:7;1878:6;1867:9;1863:22;1842:53;:::i;:::-;1832:63;;1788:117;1944:2;1970:53;2015:7;2006:6;1995:9;1991:22;1970:53;:::i;:::-;1960:63;;1915:118;1716:324;;;;;:::o;2046:552::-;2123:6;2131;2139;2188:2;2176:9;2167:7;2163:23;2159:32;2156:2;;;2204:1;2201;2194:12;2156:2;2247:1;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2218:117;2374:2;2400:53;2445:7;2436:6;2425:9;2421:22;2400:53;:::i;:::-;2390:63;;2345:118;2502:2;2528:53;2573:7;2564:6;2553:9;2549:22;2528:53;:::i;:::-;2518:63;;2473:118;2146:452;;;;;:::o;2604:809::-;2699:6;2707;2715;2723;2772:3;2760:9;2751:7;2747:23;2743:33;2740:2;;;2789:1;2786;2779:12;2740:2;2832:1;2857:53;2902:7;2893:6;2882:9;2878:22;2857:53;:::i;:::-;2847:63;;2803:117;2959:2;2985:53;3030:7;3021:6;3010:9;3006:22;2985:53;:::i;:::-;2975:63;;2930:118;3087:2;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3058:118;3243:2;3232:9;3228:18;3215:32;3274:18;3266:6;3263:30;3260:2;;;3306:1;3303;3296:12;3260:2;3334:62;3388:7;3379:6;3368:9;3364:22;3334:62;:::i;:::-;3324:72;;3186:220;2730:683;;;;;;;:::o;3419:401::-;3484:6;3492;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3557:1;3554;3547:12;3509:2;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:50;3795:7;3786:6;3775:9;3771:22;3753:50;:::i;:::-;3743:60;;3698:115;3499:321;;;;;:::o;3826:407::-;3894:6;3902;3951:2;3939:9;3930:7;3926:23;3922:32;3919:2;;;3967:1;3964;3957:12;3919:2;4010:1;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3981:117;4137:2;4163:53;4208:7;4199:6;4188:9;4184:22;4163:53;:::i;:::-;4153:63;;4108:118;3909:324;;;;;:::o;4239:260::-;4297:6;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4362:1;4359;4352:12;4314:2;4405:1;4430:52;4474:7;4465:6;4454:9;4450:22;4430:52;:::i;:::-;4420:62;;4376:116;4304:195;;;;:::o;4505:282::-;4574:6;4623:2;4611:9;4602:7;4598:23;4594:32;4591:2;;;4639:1;4636;4629:12;4591:2;4682:1;4707:63;4762:7;4753:6;4742:9;4738:22;4707:63;:::i;:::-;4697:73;;4653:127;4581:206;;;;:::o;4793:262::-;4852:6;4901:2;4889:9;4880:7;4876:23;4872:32;4869:2;;;4917:1;4914;4907:12;4869:2;4960:1;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4931:117;4859:196;;;;:::o;5061:118::-;5148:24;5166:5;5148:24;:::i;:::-;5143:3;5136:37;5126:53;;:::o;5185:109::-;5266:21;5281:5;5266:21;:::i;:::-;5261:3;5254:34;5244:50;;:::o;5300:360::-;5386:3;5414:38;5446:5;5414:38;:::i;:::-;5468:70;5531:6;5526:3;5468:70;:::i;:::-;5461:77;;5547:52;5592:6;5587:3;5580:4;5573:5;5569:16;5547:52;:::i;:::-;5624:29;5646:6;5624:29;:::i;:::-;5619:3;5615:39;5608:46;;5390:270;;;;;:::o;5666:364::-;5754:3;5782:39;5815:5;5782:39;:::i;:::-;5837:71;5901:6;5896:3;5837:71;:::i;:::-;5830:78;;5917:52;5962:6;5957:3;5950:4;5943:5;5939:16;5917:52;:::i;:::-;5994:29;6016:6;5994:29;:::i;:::-;5989:3;5985:39;5978:46;;5758:272;;;;;:::o;6036:377::-;6142:3;6170:39;6203:5;6170:39;:::i;:::-;6225:89;6307:6;6302:3;6225:89;:::i;:::-;6218:96;;6323:52;6368:6;6363:3;6356:4;6349:5;6345:16;6323:52;:::i;:::-;6400:6;6395:3;6391:16;6384:23;;6146:267;;;;;:::o;6419:366::-;6561:3;6582:67;6646:2;6641:3;6582:67;:::i;:::-;6575:74;;6658:93;6747:3;6658:93;:::i;:::-;6776:2;6771:3;6767:12;6760:19;;6565:220;;;:::o;6791:366::-;6933:3;6954:67;7018:2;7013:3;6954:67;:::i;:::-;6947:74;;7030:93;7119:3;7030:93;:::i;:::-;7148:2;7143:3;7139:12;7132:19;;6937:220;;;:::o;7163:366::-;7305:3;7326:67;7390:2;7385:3;7326:67;:::i;:::-;7319:74;;7402:93;7491:3;7402:93;:::i;:::-;7520:2;7515:3;7511:12;7504:19;;7309:220;;;:::o;7535:366::-;7677:3;7698:67;7762:2;7757:3;7698:67;:::i;:::-;7691:74;;7774:93;7863:3;7774:93;:::i;:::-;7892:2;7887:3;7883:12;7876:19;;7681:220;;;:::o;7907:366::-;8049:3;8070:67;8134:2;8129:3;8070:67;:::i;:::-;8063:74;;8146:93;8235:3;8146:93;:::i;:::-;8264:2;8259:3;8255:12;8248:19;;8053:220;;;:::o;8279:366::-;8421:3;8442:67;8506:2;8501:3;8442:67;:::i;:::-;8435:74;;8518:93;8607:3;8518:93;:::i;:::-;8636:2;8631:3;8627:12;8620:19;;8425:220;;;:::o;8651:366::-;8793:3;8814:67;8878:2;8873:3;8814:67;:::i;:::-;8807:74;;8890:93;8979:3;8890:93;:::i;:::-;9008:2;9003:3;8999:12;8992:19;;8797:220;;;:::o;9023:366::-;9165:3;9186:67;9250:2;9245:3;9186:67;:::i;:::-;9179:74;;9262:93;9351:3;9262:93;:::i;:::-;9380:2;9375:3;9371:12;9364:19;;9169:220;;;:::o;9395:366::-;9537:3;9558:67;9622:2;9617:3;9558:67;:::i;:::-;9551:74;;9634:93;9723:3;9634:93;:::i;:::-;9752:2;9747:3;9743:12;9736:19;;9541:220;;;:::o;9767:366::-;9909:3;9930:67;9994:2;9989:3;9930:67;:::i;:::-;9923:74;;10006:93;10095:3;10006:93;:::i;:::-;10124:2;10119:3;10115:12;10108:19;;9913:220;;;:::o;10139:366::-;10281:3;10302:67;10366:2;10361:3;10302:67;:::i;:::-;10295:74;;10378:93;10467:3;10378:93;:::i;:::-;10496:2;10491:3;10487:12;10480:19;;10285:220;;;:::o;10511:366::-;10653:3;10674:67;10738:2;10733:3;10674:67;:::i;:::-;10667:74;;10750:93;10839:3;10750:93;:::i;:::-;10868:2;10863:3;10859:12;10852:19;;10657:220;;;:::o;10883:366::-;11025:3;11046:67;11110:2;11105:3;11046:67;:::i;:::-;11039:74;;11122:93;11211:3;11122:93;:::i;:::-;11240:2;11235:3;11231:12;11224:19;;11029:220;;;:::o;11255:366::-;11397:3;11418:67;11482:2;11477:3;11418:67;:::i;:::-;11411:74;;11494:93;11583:3;11494:93;:::i;:::-;11612:2;11607:3;11603:12;11596:19;;11401:220;;;:::o;11627:366::-;11769:3;11790:67;11854:2;11849:3;11790:67;:::i;:::-;11783:74;;11866:93;11955:3;11866:93;:::i;:::-;11984:2;11979:3;11975:12;11968:19;;11773:220;;;:::o;11999:366::-;12141:3;12162:67;12226:2;12221:3;12162:67;:::i;:::-;12155:74;;12238:93;12327:3;12238:93;:::i;:::-;12356:2;12351:3;12347:12;12340:19;;12145:220;;;:::o;12371:366::-;12513:3;12534:67;12598:2;12593:3;12534:67;:::i;:::-;12527:74;;12610:93;12699:3;12610:93;:::i;:::-;12728:2;12723:3;12719:12;12712:19;;12517:220;;;:::o;12743:366::-;12885:3;12906:67;12970:2;12965:3;12906:67;:::i;:::-;12899:74;;12982:93;13071:3;12982:93;:::i;:::-;13100:2;13095:3;13091:12;13084:19;;12889:220;;;:::o;13115:366::-;13257:3;13278:67;13342:2;13337:3;13278:67;:::i;:::-;13271:74;;13354:93;13443:3;13354:93;:::i;:::-;13472:2;13467:3;13463:12;13456:19;;13261:220;;;:::o;13487:366::-;13629:3;13650:67;13714:2;13709:3;13650:67;:::i;:::-;13643:74;;13726:93;13815:3;13726:93;:::i;:::-;13844:2;13839:3;13835:12;13828:19;;13633:220;;;:::o;13859:366::-;14001:3;14022:67;14086:2;14081:3;14022:67;:::i;:::-;14015:74;;14098:93;14187:3;14098:93;:::i;:::-;14216:2;14211:3;14207:12;14200:19;;14005:220;;;:::o;14231:366::-;14373:3;14394:67;14458:2;14453:3;14394:67;:::i;:::-;14387:74;;14470:93;14559:3;14470:93;:::i;:::-;14588:2;14583:3;14579:12;14572:19;;14377:220;;;:::o;14603:366::-;14745:3;14766:67;14830:2;14825:3;14766:67;:::i;:::-;14759:74;;14842:93;14931:3;14842:93;:::i;:::-;14960:2;14955:3;14951:12;14944:19;;14749:220;;;:::o;14975:118::-;15062:24;15080:5;15062:24;:::i;:::-;15057:3;15050:37;15040:53;;:::o;15099:435::-;15279:3;15301:95;15392:3;15383:6;15301:95;:::i;:::-;15294:102;;15413:95;15504:3;15495:6;15413:95;:::i;:::-;15406:102;;15525:3;15518:10;;15283:251;;;;;:::o;15540:222::-;15633:4;15671:2;15660:9;15656:18;15648:26;;15684:71;15752:1;15741:9;15737:17;15728:6;15684:71;:::i;:::-;15638:124;;;;:::o;15768:640::-;15963:4;16001:3;15990:9;15986:19;15978:27;;16015:71;16083:1;16072:9;16068:17;16059:6;16015:71;:::i;:::-;16096:72;16164:2;16153:9;16149:18;16140:6;16096:72;:::i;:::-;16178;16246:2;16235:9;16231:18;16222:6;16178:72;:::i;:::-;16297:9;16291:4;16287:20;16282:2;16271:9;16267:18;16260:48;16325:76;16396:4;16387:6;16325:76;:::i;:::-;16317:84;;15968:440;;;;;;;:::o;16414:210::-;16501:4;16539:2;16528:9;16524:18;16516:26;;16552:65;16614:1;16603:9;16599:17;16590:6;16552:65;:::i;:::-;16506:118;;;;:::o;16630:313::-;16743:4;16781:2;16770:9;16766:18;16758:26;;16830:9;16824:4;16820:20;16816:1;16805:9;16801:17;16794:47;16858:78;16931:4;16922:6;16858:78;:::i;:::-;16850:86;;16748:195;;;;:::o;16949:419::-;17115:4;17153:2;17142:9;17138:18;17130:26;;17202:9;17196:4;17192:20;17188:1;17177:9;17173:17;17166:47;17230:131;17356:4;17230:131;:::i;:::-;17222:139;;17120:248;;;:::o;17374:419::-;17540:4;17578:2;17567:9;17563:18;17555:26;;17627:9;17621:4;17617:20;17613:1;17602:9;17598:17;17591:47;17655:131;17781:4;17655:131;:::i;:::-;17647:139;;17545:248;;;:::o;17799:419::-;17965:4;18003:2;17992:9;17988:18;17980:26;;18052:9;18046:4;18042:20;18038:1;18027:9;18023:17;18016:47;18080:131;18206:4;18080:131;:::i;:::-;18072:139;;17970:248;;;:::o;18224:419::-;18390:4;18428:2;18417:9;18413:18;18405:26;;18477:9;18471:4;18467:20;18463:1;18452:9;18448:17;18441:47;18505:131;18631:4;18505:131;:::i;:::-;18497:139;;18395:248;;;:::o;18649:419::-;18815:4;18853:2;18842:9;18838:18;18830:26;;18902:9;18896:4;18892:20;18888:1;18877:9;18873:17;18866:47;18930:131;19056:4;18930:131;:::i;:::-;18922:139;;18820:248;;;:::o;19074:419::-;19240:4;19278:2;19267:9;19263:18;19255:26;;19327:9;19321:4;19317:20;19313:1;19302:9;19298:17;19291:47;19355:131;19481:4;19355:131;:::i;:::-;19347:139;;19245:248;;;:::o;19499:419::-;19665:4;19703:2;19692:9;19688:18;19680:26;;19752:9;19746:4;19742:20;19738:1;19727:9;19723:17;19716:47;19780:131;19906:4;19780:131;:::i;:::-;19772:139;;19670:248;;;:::o;19924:419::-;20090:4;20128:2;20117:9;20113:18;20105:26;;20177:9;20171:4;20167:20;20163:1;20152:9;20148:17;20141:47;20205:131;20331:4;20205:131;:::i;:::-;20197:139;;20095:248;;;:::o;20349:419::-;20515:4;20553:2;20542:9;20538:18;20530:26;;20602:9;20596:4;20592:20;20588:1;20577:9;20573:17;20566:47;20630:131;20756:4;20630:131;:::i;:::-;20622:139;;20520:248;;;:::o;20774:419::-;20940:4;20978:2;20967:9;20963:18;20955:26;;21027:9;21021:4;21017:20;21013:1;21002:9;20998:17;20991:47;21055:131;21181:4;21055:131;:::i;:::-;21047:139;;20945:248;;;:::o;21199:419::-;21365:4;21403:2;21392:9;21388:18;21380:26;;21452:9;21446:4;21442:20;21438:1;21427:9;21423:17;21416:47;21480:131;21606:4;21480:131;:::i;:::-;21472:139;;21370:248;;;:::o;21624:419::-;21790:4;21828:2;21817:9;21813:18;21805:26;;21877:9;21871:4;21867:20;21863:1;21852:9;21848:17;21841:47;21905:131;22031:4;21905:131;:::i;:::-;21897:139;;21795:248;;;:::o;22049:419::-;22215:4;22253:2;22242:9;22238:18;22230:26;;22302:9;22296:4;22292:20;22288:1;22277:9;22273:17;22266:47;22330:131;22456:4;22330:131;:::i;:::-;22322:139;;22220:248;;;:::o;22474:419::-;22640:4;22678:2;22667:9;22663:18;22655:26;;22727:9;22721:4;22717:20;22713:1;22702:9;22698:17;22691:47;22755:131;22881:4;22755:131;:::i;:::-;22747:139;;22645:248;;;:::o;22899:419::-;23065:4;23103:2;23092:9;23088:18;23080:26;;23152:9;23146:4;23142:20;23138:1;23127:9;23123:17;23116:47;23180:131;23306:4;23180:131;:::i;:::-;23172:139;;23070:248;;;:::o;23324:419::-;23490:4;23528:2;23517:9;23513:18;23505:26;;23577:9;23571:4;23567:20;23563:1;23552:9;23548:17;23541:47;23605:131;23731:4;23605:131;:::i;:::-;23597:139;;23495:248;;;:::o;23749:419::-;23915:4;23953:2;23942:9;23938:18;23930:26;;24002:9;23996:4;23992:20;23988:1;23977:9;23973:17;23966:47;24030:131;24156:4;24030:131;:::i;:::-;24022:139;;23920:248;;;:::o;24174:419::-;24340:4;24378:2;24367:9;24363:18;24355:26;;24427:9;24421:4;24417:20;24413:1;24402:9;24398:17;24391:47;24455:131;24581:4;24455:131;:::i;:::-;24447:139;;24345:248;;;:::o;24599:419::-;24765:4;24803:2;24792:9;24788:18;24780:26;;24852:9;24846:4;24842:20;24838:1;24827:9;24823:17;24816:47;24880:131;25006:4;24880:131;:::i;:::-;24872:139;;24770:248;;;:::o;25024:419::-;25190:4;25228:2;25217:9;25213:18;25205:26;;25277:9;25271:4;25267:20;25263:1;25252:9;25248:17;25241:47;25305:131;25431:4;25305:131;:::i;:::-;25297:139;;25195:248;;;:::o;25449:419::-;25615:4;25653:2;25642:9;25638:18;25630:26;;25702:9;25696:4;25692:20;25688:1;25677:9;25673:17;25666:47;25730:131;25856:4;25730:131;:::i;:::-;25722:139;;25620:248;;;:::o;25874:419::-;26040:4;26078:2;26067:9;26063:18;26055:26;;26127:9;26121:4;26117:20;26113:1;26102:9;26098:17;26091:47;26155:131;26281:4;26155:131;:::i;:::-;26147:139;;26045:248;;;:::o;26299:419::-;26465:4;26503:2;26492:9;26488:18;26480:26;;26552:9;26546:4;26542:20;26538:1;26527:9;26523:17;26516:47;26580:131;26706:4;26580:131;:::i;:::-;26572:139;;26470:248;;;:::o;26724:222::-;26817:4;26855:2;26844:9;26840:18;26832:26;;26868:71;26936:1;26925:9;26921:17;26912:6;26868:71;:::i;:::-;26822:124;;;;:::o;26952:129::-;26986:6;27013:20;;:::i;:::-;27003:30;;27042:33;27070:4;27062:6;27042:33;:::i;:::-;26993:88;;;:::o;27087:75::-;27120:6;27153:2;27147:9;27137:19;;27127:35;:::o;27168:307::-;27229:4;27319:18;27311:6;27308:30;27305:2;;;27341:18;;:::i;:::-;27305:2;27379:29;27401:6;27379:29;:::i;:::-;27371:37;;27463:4;27457;27453:15;27445:23;;27234:241;;;:::o;27481:98::-;27532:6;27566:5;27560:12;27550:22;;27539:40;;;:::o;27585:99::-;27637:6;27671:5;27665:12;27655:22;;27644:40;;;:::o;27690:168::-;27773:11;27807:6;27802:3;27795:19;27847:4;27842:3;27838:14;27823:29;;27785:73;;;;:::o;27864:169::-;27948:11;27982:6;27977:3;27970:19;28022:4;28017:3;28013:14;27998:29;;27960:73;;;;:::o;28039:148::-;28141:11;28178:3;28163:18;;28153:34;;;;:::o;28193:305::-;28233:3;28252:20;28270:1;28252:20;:::i;:::-;28247:25;;28286:20;28304:1;28286:20;:::i;:::-;28281:25;;28440:1;28372:66;28368:74;28365:1;28362:81;28359:2;;;28446:18;;:::i;:::-;28359:2;28490:1;28487;28483:9;28476:16;;28237:261;;;;:::o;28504:185::-;28544:1;28561:20;28579:1;28561:20;:::i;:::-;28556:25;;28595:20;28613:1;28595:20;:::i;:::-;28590:25;;28634:1;28624:2;;28639:18;;:::i;:::-;28624:2;28681:1;28678;28674:9;28669:14;;28546:143;;;;:::o;28695:348::-;28735:7;28758:20;28776:1;28758:20;:::i;:::-;28753:25;;28792:20;28810:1;28792:20;:::i;:::-;28787:25;;28980:1;28912:66;28908:74;28905:1;28902:81;28897:1;28890:9;28883:17;28879:105;28876:2;;;28987:18;;:::i;:::-;28876:2;29035:1;29032;29028:9;29017:20;;28743:300;;;;:::o;29049:191::-;29089:4;29109:20;29127:1;29109:20;:::i;:::-;29104:25;;29143:20;29161:1;29143:20;:::i;:::-;29138:25;;29182:1;29179;29176:8;29173:2;;;29187:18;;:::i;:::-;29173:2;29232:1;29229;29225:9;29217:17;;29094:146;;;;:::o;29246:96::-;29283:7;29312:24;29330:5;29312:24;:::i;:::-;29301:35;;29291:51;;;:::o;29348:90::-;29382:7;29425:5;29418:13;29411:21;29400:32;;29390:48;;;:::o;29444:149::-;29480:7;29520:66;29513:5;29509:78;29498:89;;29488:105;;;:::o;29599:126::-;29636:7;29676:42;29669:5;29665:54;29654:65;;29644:81;;;:::o;29731:77::-;29768:7;29797:5;29786:16;;29776:32;;;:::o;29814:154::-;29898:6;29893:3;29888;29875:30;29960:1;29951:6;29946:3;29942:16;29935:27;29865:103;;;:::o;29974:307::-;30042:1;30052:113;30066:6;30063:1;30060:13;30052:113;;;30151:1;30146:3;30142:11;30136:18;30132:1;30127:3;30123:11;30116:39;30088:2;30085:1;30081:10;30076:15;;30052:113;;;30183:6;30180:1;30177:13;30174:2;;;30263:1;30254:6;30249:3;30245:16;30238:27;30174:2;30023:258;;;;:::o;30287:320::-;30331:6;30368:1;30362:4;30358:12;30348:22;;30415:1;30409:4;30405:12;30436:18;30426:2;;30492:4;30484:6;30480:17;30470:27;;30426:2;30554;30546:6;30543:14;30523:18;30520:38;30517:2;;;30573:18;;:::i;:::-;30517:2;30338:269;;;;:::o;30613:281::-;30696:27;30718:4;30696:27;:::i;:::-;30688:6;30684:40;30826:6;30814:10;30811:22;30790:18;30778:10;30775:34;30772:62;30769:2;;;30837:18;;:::i;:::-;30769:2;30877:10;30873:2;30866:22;30656:238;;;:::o;30900:233::-;30939:3;30962:24;30980:5;30962:24;:::i;:::-;30953:33;;31008:66;31001:5;30998:77;30995:2;;;31078:18;;:::i;:::-;30995:2;31125:1;31118:5;31114:13;31107:20;;30943:190;;;:::o;31139:176::-;31171:1;31188:20;31206:1;31188:20;:::i;:::-;31183:25;;31222:20;31240:1;31222:20;:::i;:::-;31217:25;;31261:1;31251:2;;31266:18;;:::i;:::-;31251:2;31307:1;31304;31300:9;31295:14;;31173:142;;;;:::o;31321:180::-;31369:77;31366:1;31359:88;31466:4;31463:1;31456:15;31490:4;31487:1;31480:15;31507:180;31555:77;31552:1;31545:88;31652:4;31649:1;31642:15;31676:4;31673:1;31666:15;31693:180;31741:77;31738:1;31731:88;31838:4;31835:1;31828:15;31862:4;31859:1;31852:15;31879:180;31927:77;31924:1;31917:88;32024:4;32021:1;32014:15;32048:4;32045:1;32038:15;32065:102;32106:6;32157:2;32153:7;32148:2;32141:5;32137:14;32133:28;32123:38;;32113:54;;;:::o;32173:230::-;32313:34;32309:1;32301:6;32297:14;32290:58;32382:13;32377:2;32369:6;32365:15;32358:38;32279:124;:::o;32409:237::-;32549:34;32545:1;32537:6;32533:14;32526:58;32618:20;32613:2;32605:6;32601:15;32594:45;32515:131;:::o;32652:225::-;32792:34;32788:1;32780:6;32776:14;32769:58;32861:8;32856:2;32848:6;32844:15;32837:33;32758:119;:::o;32883:178::-;33023:30;33019:1;33011:6;33007:14;33000:54;32989:72;:::o;33067:223::-;33207:34;33203:1;33195:6;33191:14;33184:58;33276:6;33271:2;33263:6;33259:15;33252:31;33173:117;:::o;33296:175::-;33436:27;33432:1;33424:6;33420:14;33413:51;33402:69;:::o;33477:229::-;33617:34;33613:1;33605:6;33601:14;33594:58;33686:12;33681:2;33673:6;33669:15;33662:37;33583:123;:::o;33712:181::-;33852:33;33848:1;33840:6;33836:14;33829:57;33818:75;:::o;33899:231::-;34039:34;34035:1;34027:6;34023:14;34016:58;34108:14;34103:2;34095:6;34091:15;34084:39;34005:125;:::o;34136:243::-;34276:34;34272:1;34264:6;34260:14;34253:58;34345:26;34340:2;34332:6;34328:15;34321:51;34242:137;:::o;34385:247::-;34525:34;34521:1;34513:6;34509:14;34502:58;34594:30;34589:2;34581:6;34577:15;34570:55;34491:141;:::o;34638:229::-;34778:34;34774:1;34766:6;34762:14;34755:58;34847:12;34842:2;34834:6;34830:15;34823:37;34744:123;:::o;34873:228::-;35013:34;35009:1;35001:6;34997:14;34990:58;35082:11;35077:2;35069:6;35065:15;35058:36;34979:122;:::o;35107:182::-;35247:34;35243:1;35235:6;35231:14;35224:58;35213:76;:::o;35295:236::-;35435:34;35431:1;35423:6;35419:14;35412:58;35504:19;35499:2;35491:6;35487:15;35480:44;35401:130;:::o;35537:231::-;35677:34;35673:1;35665:6;35661:14;35654:58;35746:14;35741:2;35733:6;35729:15;35722:39;35643:125;:::o;35774:182::-;35914:34;35910:1;35902:6;35898:14;35891:58;35880:76;:::o;35962:228::-;36102:34;36098:1;36090:6;36086:14;36079:58;36171:11;36166:2;36158:6;36154:15;36147:36;36068:122;:::o;36196:234::-;36336:34;36332:1;36324:6;36320:14;36313:58;36405:17;36400:2;36392:6;36388:15;36381:42;36302:128;:::o;36436:220::-;36576:34;36572:1;36564:6;36560:14;36553:58;36645:3;36640:2;36632:6;36628:15;36621:28;36542:114;:::o;36662:236::-;36802:34;36798:1;36790:6;36786:14;36779:58;36871:19;36866:2;36858:6;36854:15;36847:44;36768:130;:::o;36904:231::-;37044:34;37040:1;37032:6;37028:14;37021:58;37113:14;37108:2;37100:6;37096:15;37089:39;37010:125;:::o;37141:220::-;37281:34;37277:1;37269:6;37265:14;37258:58;37350:3;37345:2;37337:6;37333:15;37326:28;37247:114;:::o;37367:122::-;37440:24;37458:5;37440:24;:::i;:::-;37433:5;37430:35;37420:2;;37479:1;37476;37469:12;37420:2;37410:79;:::o;37495:116::-;37565:21;37580:5;37565:21;:::i;:::-;37558:5;37555:32;37545:2;;37601:1;37598;37591:12;37545:2;37535:76;:::o;37617:120::-;37689:23;37706:5;37689:23;:::i;:::-;37682:5;37679:34;37669:2;;37727:1;37724;37717:12;37669:2;37659:78;:::o;37743:122::-;37816:24;37834:5;37816:24;:::i;:::-;37809:5;37806:35;37796:2;;37855:1;37852;37845:12;37796:2;37786:79;:::o
Swarm Source
ipfs://1d6102846051ef15e62706ad7460ce81da31b2a27c092ed4c74c535d0d987128
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.