Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
151 BB
Holders
44
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
11 BBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BambuBillionaires
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-09 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: BambuBillionaires.sol // Created by AlecWilliams // Panda Mania NFT pragma solidity ^0.8.0; interface PandasInterface { function ownerOf(uint256 tokenId) external view returns (address owner); function balanceOf(address owner) external view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); } contract BambuBillionaires is ERC721Enumerable, Ownable { using Strings for uint256; PandasInterface public immutable Pandas; string public baseURI; string public baseExtension = ".json"; uint256 public cost = .05 ether; uint256 public maxSupply = 1500; uint256 public maxMintAmount = 50; bool public paused = false; mapping(address => bool) public whitelisted; constructor( address _Pandas, string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); mint(msg.sender, 1); Pandas = PandasInterface(_Pandas); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function claim(uint256 [] memory _tokenIds) public { for (uint i = 0; i < _tokenIds.length; i++) { require(Pandas_ownerOf(_tokenIds[i]) == msg.sender, "It is possible to claim only corresponding tokens"); if (totalSupply() < maxSupply) { _safeMint(msg.sender, _tokenIds[i]); } } } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function Pandas_ownerOf(uint256 tokenId) public view returns (address) { return Pandas.ownerOf(tokenId); } function Pandas_balanceOf(address owner) public view returns (uint256) { return Pandas.balanceOf(owner); } function Pandas_tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { return Pandas.tokenOfOwnerByIndex(owner, index); } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_Pandas","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Pandas","outputs":[{"internalType":"contract PandasInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"Pandas_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Pandas_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"Pandas_tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000e89565b5066b1a2bc2ec50000600d556105dc600e556032600f556000601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b506040516200634c3803806200634c8339818101604052810190620000b691906200113b565b82828160009080519060200190620000d092919062000e89565b508060019080519060200190620000e992919062000e89565b5050506200010c620001006200016e60201b60201c565b6200017660201b60201c565b6200011d816200023c60201b60201c565b62000130336001620002e760201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050505062001844565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024c6200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002726200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c2906200126b565b60405180910390fd5b80600b9080519060200190620002e392919062000e89565b5050565b6000620002f96200048060201b60201c565b9050601060009054906101000a900460ff16156200031657600080fd5b600082116200032457600080fd5b600f548211156200033457600080fd5b600e548282620003459190620012c6565b11156200035157600080fd5b620003616200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200040c5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146200040b5781600d54620003fd919062001323565b3410156200040a57600080fd5b5b5b6000600190505b82811162000450576200043a8482846200042e9190620012c6565b6200048d60201b60201c565b8080620004479062001384565b91505062000413565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004af828260405180602001604052806000815250620004b360201b60201c565b5050565b620004c583836200052160201b60201c565b620004da60008484846200071a60201b60201c565b6200051c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005139062001447565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000593576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058a90620014b9565b60405180910390fd5b620005a481620008c360201b60201c565b15620005e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005de906200152b565b60405180910390fd5b620005fb600083836200092f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200064d9190620012c6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620007166000838362000a7460201b60201c565b5050565b6000620007488473ffffffffffffffffffffffffffffffffffffffff1662000a7960201b62001ee51760201c565b15620008b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200077a6200016e60201b60201c565b8786866040518563ffffffff1660e01b81526004016200079e9493929190620015cc565b6020604051808303816000875af1925050508015620007dd57506040513d601f19601f82011682018060405250810190620007da91906200167d565b60015b62000865573d806000811462000810576040519150601f19603f3d011682016040523d82523d6000602084013e62000815565b606091505b5060008151036200085d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008549062001447565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008bb565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200094783838362000a9c60201b62001f081760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000993576200098d8162000aa160201b60201c565b620009db565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009da57620009d9838262000aea60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a275762000a218162000c6760201b60201c565b62000a6f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a6e5762000a6d828262000d4360201b60201c565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b048462000dcf60201b620017271760201c565b62000b109190620016af565b905060006007600084815260200190815260200160002054905081811462000bf6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c7d9190620016af565b905060006009600084815260200190815260200160002054905060006008838154811062000cb05762000caf620016ea565b5b90600052602060002001549050806008838154811062000cd55762000cd4620016ea565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d275762000d2662001719565b5b6001900381819060005260206000200160009055905550505050565b600062000d5b8362000dcf60201b620017271760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e3990620017be565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e97906200180f565b90600052602060002090601f01602090048101928262000ebb576000855562000f07565b82601f1062000ed657805160ff191683800117855562000f07565b8280016001018555821562000f07579182015b8281111562000f0657825182559160200191906001019062000ee9565b5b50905062000f16919062000f1a565b5090565b5b8082111562000f3557600081600090555060010162000f1b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f7a8262000f4d565b9050919050565b62000f8c8162000f6d565b811462000f9857600080fd5b50565b60008151905062000fac8162000f81565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620010078262000fbc565b810181811067ffffffffffffffff8211171562001029576200102862000fcd565b5b80604052505050565b60006200103e62000f39565b90506200104c828262000ffc565b919050565b600067ffffffffffffffff8211156200106f576200106e62000fcd565b5b6200107a8262000fbc565b9050602081019050919050565b60005b83811015620010a75780820151818401526020810190506200108a565b83811115620010b7576000848401525b50505050565b6000620010d4620010ce8462001051565b62001032565b905082815260208101848484011115620010f357620010f262000fb7565b5b6200110084828562001087565b509392505050565b600082601f83011262001120576200111f62000fb2565b5b815162001132848260208601620010bd565b91505092915050565b6000806000806080858703121562001158576200115762000f43565b5b6000620011688782880162000f9b565b945050602085015167ffffffffffffffff8111156200118c576200118b62000f48565b5b6200119a8782880162001108565b935050604085015167ffffffffffffffff811115620011be57620011bd62000f48565b5b620011cc8782880162001108565b925050606085015167ffffffffffffffff811115620011f057620011ef62000f48565b5b620011fe8782880162001108565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012536020836200120a565b915062001260826200121b565b602082019050919050565b60006020820190508181036000830152620012868162001244565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012d3826200128d565b9150620012e0836200128d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001318576200131762001297565b5b828201905092915050565b600062001330826200128d565b91506200133d836200128d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001379576200137862001297565b5b828202905092915050565b600062001391826200128d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620013c657620013c562001297565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200142f6032836200120a565b91506200143c82620013d1565b604082019050919050565b60006020820190508181036000830152620014628162001420565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620014a16020836200120a565b9150620014ae8262001469565b602082019050919050565b60006020820190508181036000830152620014d48162001492565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001513601c836200120a565b91506200152082620014db565b602082019050919050565b60006020820190508181036000830152620015468162001504565b9050919050565b620015588162000f6d565b82525050565b62001569816200128d565b82525050565b600081519050919050565b600082825260208201905092915050565b600062001598826200156f565b620015a481856200157a565b9350620015b681856020860162001087565b620015c18162000fbc565b840191505092915050565b6000608082019050620015e360008301876200154d565b620015f260208301866200154d565b6200160160408301856200155e565b81810360608301526200161581846200158b565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620016578162001620565b81146200166357600080fd5b50565b60008151905062001677816200164c565b92915050565b60006020828403121562001696576200169562000f43565b5b6000620016a68482850162001666565b91505092915050565b6000620016bc826200128d565b9150620016c9836200128d565b925082821015620016df57620016de62001297565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000620017a6602a836200120a565b9150620017b38262001748565b604082019050919050565b60006020820190508181036000830152620017d98162001797565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200182857607f821691505b6020821081036200183e576200183d620017e0565b5b50919050565b608051614ad76200187560003960008181610ef2015281816114ca015281816118f00152611d4f0152614ad76000f3fe6080604052600436106102465760003560e01c8063597a4f791161013957806395d89b41116100b6578063d5abeb011161007a578063d5abeb0114610884578063d936547e146108af578063da3ef23f146108ec578063e985e9c514610915578063f12f508f14610952578063f2fde38b1461098f57610246565b806395d89b411461079f578063a22cb465146107ca578063b88d4fde146107f3578063c66828621461081c578063c87b56dd1461084757610246565b806370a08231116100fd57806370a08231146106ba578063715018a6146106f75780637f00c7a61461070e5780638537999b146107375780638da5cb5b1461077457610246565b8063597a4f79146105d35780635c975abb146105fe5780636352211e146106295780636ba4c138146106665780636c0360eb1461068f57610246565b806330cc7ae0116101c7578063438b63001161018b578063438b6300146104de57806344a0d68a1461051b5780634a4c560d146105445780634f6ccce71461056d57806355f804b3146105aa57610246565b806330cc7ae01461042957806339fe03ab146104525780633ccfd60b1461048f57806340c10f191461049957806342842e0e146104b557610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d578063239c70ae1461039857806323b872dd146103c35780632f745c59146103ec57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061324f565b6109b8565b60405161027f9190613297565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132de565b610a32565b005b3480156102bd57600080fd5b506102c6610acb565b6040516102d391906133a4565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906133fc565b610b5d565b604051610310919061346a565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906134b1565b610be2565b005b34801561034e57600080fd5b50610357610cf9565b6040516103649190613500565b60405180910390f35b34801561037957600080fd5b50610382610cff565b60405161038f9190613500565b60405180910390f35b3480156103a457600080fd5b506103ad610d0c565b6040516103ba9190613500565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e5919061351b565b610d12565b005b3480156103f857600080fd5b50610413600480360381019061040e91906134b1565b610d72565b6040516104209190613500565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b919061356e565b610e17565b005b34801561045e57600080fd5b50610479600480360381019061047491906134b1565b610eee565b6040516104869190613500565b60405180910390f35b610497610f94565b005b6104b360048036038101906104ae91906134b1565b611050565b005b3480156104c157600080fd5b506104dc60048036038101906104d7919061351b565b611196565b005b3480156104ea57600080fd5b506105056004803603810190610500919061356e565b6111b6565b6040516105129190613659565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906133fc565b611264565b005b34801561055057600080fd5b5061056b6004803603810190610566919061356e565b6112ea565b005b34801561057957600080fd5b50610594600480360381019061058f91906133fc565b6113c1565b6040516105a19190613500565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906137b0565b611432565b005b3480156105df57600080fd5b506105e86114c8565b6040516105f59190613858565b60405180910390f35b34801561060a57600080fd5b506106136114ec565b6040516106209190613297565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906133fc565b6114ff565b60405161065d919061346a565b60405180910390f35b34801561067257600080fd5b5061068d6004803603810190610688919061393b565b6115b0565b005b34801561069b57600080fd5b506106a4611699565b6040516106b191906133a4565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc919061356e565b611727565b6040516106ee9190613500565b60405180910390f35b34801561070357600080fd5b5061070c6117de565b005b34801561071a57600080fd5b50610735600480360381019061073091906133fc565b611866565b005b34801561074357600080fd5b5061075e6004803603810190610759919061356e565b6118ec565b60405161076b9190613500565b60405180910390f35b34801561078057600080fd5b5061078961198f565b604051610796919061346a565b60405180910390f35b3480156107ab57600080fd5b506107b46119b9565b6040516107c191906133a4565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613984565b611a4b565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613a65565b611a61565b005b34801561082857600080fd5b50610831611ac3565b60405161083e91906133a4565b60405180910390f35b34801561085357600080fd5b5061086e600480360381019061086991906133fc565b611b51565b60405161087b91906133a4565b60405180910390f35b34801561089057600080fd5b50610899611bfb565b6040516108a69190613500565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061356e565b611c01565b6040516108e39190613297565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906137b0565b611c21565b005b34801561092157600080fd5b5061093c60048036038101906109379190613ae8565b611cb7565b6040516109499190613297565b60405180910390f35b34801561095e57600080fd5b50610979600480360381019061097491906133fc565b611d4b565b604051610986919061346a565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061356e565b611dee565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b5750610a2a82611f0d565b5b9050919050565b610a3a611fef565b73ffffffffffffffffffffffffffffffffffffffff16610a5861198f565b73ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613b74565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610ada90613bc3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690613bc3565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b6882611ff7565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613c66565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bed826114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613cf8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7c611fef565b73ffffffffffffffffffffffffffffffffffffffff161480610cab5750610caa81610ca5611fef565b611cb7565b5b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613d8a565b60405180910390fd5b610cf48383612063565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d23610d1d611fef565b8261211c565b610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613e1c565b60405180910390fd5b610d6d8383836121fa565b505050565b6000610d7d83611727565b8210610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613eae565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e1f611fef565b73ffffffffffffffffffffffffffffffffffffffff16610e3d61198f565b73ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613b74565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401610f4b929190613ece565b602060405180830381865afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613f0c565b905092915050565b610f9c611fef565b73ffffffffffffffffffffffffffffffffffffffff16610fba61198f565b73ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613b74565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061104e57600080fd5b565b600061105a610cff565b9050601060009054906101000a900460ff161561107657600080fd5b6000821161108357600080fd5b600f5482111561109257600080fd5b600e5482826110a19190613f68565b11156110ac57600080fd5b6110b461198f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461115a5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111595781600d5461114c9190613fbe565b34101561115857600080fd5b5b5b6000600190505b8281116111905761117d8482846111789190613f68565b612460565b808061118890614018565b915050611161565b50505050565b6111b183838360405180602001604052806000815250611a61565b505050565b606060006111c383611727565b905060008167ffffffffffffffff8111156111e1576111e0613685565b5b60405190808252806020026020018201604052801561120f5781602001602082028036833780820191505090505b50905060005b82811015611259576112278582610d72565b82828151811061123a57611239614060565b5b602002602001018181525050808061125190614018565b915050611215565b508092505050919050565b61126c611fef565b73ffffffffffffffffffffffffffffffffffffffff1661128a61198f565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613b74565b60405180910390fd5b80600d8190555050565b6112f2611fef565b73ffffffffffffffffffffffffffffffffffffffff1661131061198f565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613b74565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006113cb610cff565b821061140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614101565b60405180910390fd5b600882815481106114205761141f614060565b5b90600052602060002001549050919050565b61143a611fef565b73ffffffffffffffffffffffffffffffffffffffff1661145861198f565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613b74565b60405180910390fd5b80600b90805190602001906114c4929190613140565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614193565b60405180910390fd5b80915050919050565b60005b8151811015611695573373ffffffffffffffffffffffffffffffffffffffff166115f68383815181106115e9576115e8614060565b5b6020026020010151611d4b565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390614225565b60405180910390fd5b600e54611657610cff565b1015611682576116813383838151811061167457611673614060565b5b6020026020010151612460565b5b808061168d90614018565b9150506115b3565b5050565b600b80546116a690613bc3565b80601f01602080910402602001604051908101604052809291908181526020018280546116d290613bc3565b801561171f5780601f106116f45761010080835404028352916020019161171f565b820191906000526020600020905b81548152906001019060200180831161170257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e906142b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e6611fef565b73ffffffffffffffffffffffffffffffffffffffff1661180461198f565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613b74565b60405180910390fd5b611864600061247e565b565b61186e611fef565b73ffffffffffffffffffffffffffffffffffffffff1661188c61198f565b73ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613b74565b60405180910390fd5b80600f8190555050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611947919061346a565b602060405180830381865afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119889190613f0c565b9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119c890613bc3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f490613bc3565b8015611a415780601f10611a1657610100808354040283529160200191611a41565b820191906000526020600020905b815481529060010190602001808311611a2457829003601f168201915b5050505050905090565b611a5d611a56611fef565b8383612544565b5050565b611a72611a6c611fef565b8361211c565b611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613e1c565b60405180910390fd5b611abd848484846126b0565b50505050565b600c8054611ad090613bc3565b80601f0160208091040260200160405190810160405280929190818152602001828054611afc90613bc3565b8015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b505050505081565b6060611b5c82611ff7565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614349565b60405180910390fd5b6000611ba561270c565b90506000815111611bc55760405180602001604052806000815250611bf3565b80611bcf8461279e565b600c604051602001611be393929190614439565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611c29611fef565b73ffffffffffffffffffffffffffffffffffffffff16611c4761198f565b73ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613b74565b60405180910390fd5b80600c9080519060200190611cb3929190613140565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611da69190613500565b602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061447f565b9050919050565b611df6611fef565b73ffffffffffffffffffffffffffffffffffffffff16611e1461198f565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed09061451e565b60405180910390fd5b611ee28161247e565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fd857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fe85750611fe7826128fe565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120d6836114ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061212782611ff7565b612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d906145b0565b60405180910390fd5b6000612171836114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121b357506121b28185611cb7565b5b806121f157508373ffffffffffffffffffffffffffffffffffffffff166121d984610b5d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661221a826114ff565b73ffffffffffffffffffffffffffffffffffffffff1614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790614642565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906146d4565b60405180910390fd5b6122ea838383612968565b6122f5600082612063565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234591906146f4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239c9190613f68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245b838383612a7a565b505050565b61247a828260405180602001604052806000815250612a7f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614774565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126a39190613297565b60405180910390a3505050565b6126bb8484846121fa565b6126c784848484612ada565b612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd90614806565b60405180910390fd5b50505050565b6060600b805461271b90613bc3565b80601f016020809104026020016040519081016040528092919081815260200182805461274790613bc3565b80156127945780601f1061276957610100808354040283529160200191612794565b820191906000526020600020905b81548152906001019060200180831161277757829003601f168201915b5050505050905090565b6060600082036127e5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128f9565b600082905060005b6000821461281757808061280090614018565b915050600a826128109190614855565b91506127ed565b60008167ffffffffffffffff81111561283357612832613685565b5b6040519080825280601f01601f1916602001820160405280156128655781602001600182028036833780820191505090505b5090505b600085146128f25760018261287e91906146f4565b9150600a8561288d9190614886565b60306128999190613f68565b60f81b8183815181106128af576128ae614060565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128eb9190614855565b9450612869565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612973838383611f08565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b5576129b081612c61565b6129f4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129f3576129f28382612caa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a3657612a3181612e17565b612a75565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7457612a738282612ee8565b5b5b505050565b505050565b612a898383612f67565b612a966000848484612ada565b612ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acc90614806565b60405180910390fd5b505050565b6000612afb8473ffffffffffffffffffffffffffffffffffffffff16611ee5565b15612c54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b24611fef565b8786866040518563ffffffff1660e01b8152600401612b46949392919061490c565b6020604051808303816000875af1925050508015612b8257506040513d601f19601f82011682018060405250810190612b7f919061496d565b60015b612c04573d8060008114612bb2576040519150601f19603f3d011682016040523d82523d6000602084013e612bb7565b606091505b506000815103612bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf390614806565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c59565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cb784611727565b612cc191906146f4565b9050600060076000848152602001908152602001600020549050818114612da6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e2b91906146f4565b9050600060096000848152602001908152602001600020549050600060088381548110612e5b57612e5a614060565b5b906000526020600020015490508060088381548110612e7d57612e7c614060565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ecc57612ecb61499a565b5b6001900381819060005260206000200160009055905550505050565b6000612ef383611727565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd90614a15565b60405180910390fd5b612fdf81611ff7565b1561301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614a81565b60405180910390fd5b61302b60008383612968565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307b9190613f68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461313c60008383612a7a565b5050565b82805461314c90613bc3565b90600052602060002090601f01602090048101928261316e57600085556131b5565b82601f1061318757805160ff19168380011785556131b5565b828001600101855582156131b5579182015b828111156131b4578251825591602001919060010190613199565b5b5090506131c291906131c6565b5090565b5b808211156131df5760008160009055506001016131c7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61322c816131f7565b811461323757600080fd5b50565b60008135905061324981613223565b92915050565b600060208284031215613265576132646131ed565b5b60006132738482850161323a565b91505092915050565b60008115159050919050565b6132918161327c565b82525050565b60006020820190506132ac6000830184613288565b92915050565b6132bb8161327c565b81146132c657600080fd5b50565b6000813590506132d8816132b2565b92915050565b6000602082840312156132f4576132f36131ed565b5b6000613302848285016132c9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334557808201518184015260208101905061332a565b83811115613354576000848401525b50505050565b6000601f19601f8301169050919050565b60006133768261330b565b6133808185613316565b9350613390818560208601613327565b6133998161335a565b840191505092915050565b600060208201905081810360008301526133be818461336b565b905092915050565b6000819050919050565b6133d9816133c6565b81146133e457600080fd5b50565b6000813590506133f6816133d0565b92915050565b600060208284031215613412576134116131ed565b5b6000613420848285016133e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345482613429565b9050919050565b61346481613449565b82525050565b600060208201905061347f600083018461345b565b92915050565b61348e81613449565b811461349957600080fd5b50565b6000813590506134ab81613485565b92915050565b600080604083850312156134c8576134c76131ed565b5b60006134d68582860161349c565b92505060206134e7858286016133e7565b9150509250929050565b6134fa816133c6565b82525050565b600060208201905061351560008301846134f1565b92915050565b600080600060608486031215613534576135336131ed565b5b60006135428682870161349c565b93505060206135538682870161349c565b9250506040613564868287016133e7565b9150509250925092565b600060208284031215613584576135836131ed565b5b60006135928482850161349c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135d0816133c6565b82525050565b60006135e283836135c7565b60208301905092915050565b6000602082019050919050565b60006136068261359b565b61361081856135a6565b935061361b836135b7565b8060005b8381101561364c57815161363388826135d6565b975061363e836135ee565b92505060018101905061361f565b5085935050505092915050565b6000602082019050818103600083015261367381846135fb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136bd8261335a565b810181811067ffffffffffffffff821117156136dc576136db613685565b5b80604052505050565b60006136ef6131e3565b90506136fb82826136b4565b919050565b600067ffffffffffffffff82111561371b5761371a613685565b5b6137248261335a565b9050602081019050919050565b82818337600083830152505050565b600061375361374e84613700565b6136e5565b90508281526020810184848401111561376f5761376e613680565b5b61377a848285613731565b509392505050565b600082601f8301126137975761379661367b565b5b81356137a7848260208601613740565b91505092915050565b6000602082840312156137c6576137c56131ed565b5b600082013567ffffffffffffffff8111156137e4576137e36131f2565b5b6137f084828501613782565b91505092915050565b6000819050919050565b600061381e61381961381484613429565b6137f9565b613429565b9050919050565b600061383082613803565b9050919050565b600061384282613825565b9050919050565b61385281613837565b82525050565b600060208201905061386d6000830184613849565b92915050565b600067ffffffffffffffff82111561388e5761388d613685565b5b602082029050602081019050919050565b600080fd5b60006138b76138b284613873565b6136e5565b905080838252602082019050602084028301858111156138da576138d961389f565b5b835b8181101561390357806138ef88826133e7565b8452602084019350506020810190506138dc565b5050509392505050565b600082601f8301126139225761392161367b565b5b81356139328482602086016138a4565b91505092915050565b600060208284031215613951576139506131ed565b5b600082013567ffffffffffffffff81111561396f5761396e6131f2565b5b61397b8482850161390d565b91505092915050565b6000806040838503121561399b5761399a6131ed565b5b60006139a98582860161349c565b92505060206139ba858286016132c9565b9150509250929050565b600067ffffffffffffffff8211156139df576139de613685565b5b6139e88261335a565b9050602081019050919050565b6000613a08613a03846139c4565b6136e5565b905082815260208101848484011115613a2457613a23613680565b5b613a2f848285613731565b509392505050565b600082601f830112613a4c57613a4b61367b565b5b8135613a5c8482602086016139f5565b91505092915050565b60008060008060808587031215613a7f57613a7e6131ed565b5b6000613a8d8782880161349c565b9450506020613a9e8782880161349c565b9350506040613aaf878288016133e7565b925050606085013567ffffffffffffffff811115613ad057613acf6131f2565b5b613adc87828801613a37565b91505092959194509250565b60008060408385031215613aff57613afe6131ed565b5b6000613b0d8582860161349c565b9250506020613b1e8582860161349c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5e602083613316565b9150613b6982613b28565b602082019050919050565b60006020820190508181036000830152613b8d81613b51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bdb57607f821691505b602082108103613bee57613bed613b94565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c50602c83613316565b9150613c5b82613bf4565b604082019050919050565b60006020820190508181036000830152613c7f81613c43565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ce2602183613316565b9150613ced82613c86565b604082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d74603883613316565b9150613d7f82613d18565b604082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e06603183613316565b9150613e1182613daa565b604082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e98602b83613316565b9150613ea382613e3c565b604082019050919050565b60006020820190508181036000830152613ec781613e8b565b9050919050565b6000604082019050613ee3600083018561345b565b613ef060208301846134f1565b9392505050565b600081519050613f06816133d0565b92915050565b600060208284031215613f2257613f216131ed565b5b6000613f3084828501613ef7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f73826133c6565b9150613f7e836133c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fb357613fb2613f39565b5b828201905092915050565b6000613fc9826133c6565b9150613fd4836133c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400d5761400c613f39565b5b828202905092915050565b6000614023826133c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361405557614054613f39565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006140eb602c83613316565b91506140f68261408f565b604082019050919050565b6000602082019050818103600083015261411a816140de565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061417d602983613316565b915061418882614121565b604082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f497420697320706f737369626c6520746f20636c61696d206f6e6c7920636f7260008201527f726573706f6e64696e6720746f6b656e73000000000000000000000000000000602082015250565b600061420f603183613316565b915061421a826141b3565b604082019050919050565b6000602082019050818103600083015261423e81614202565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006142a1602a83613316565b91506142ac82614245565b604082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614333602f83613316565b915061433e826142d7565b604082019050919050565b6000602082019050818103600083015261436281614326565b9050919050565b600081905092915050565b600061437f8261330b565b6143898185614369565b9350614399818560208601613327565b80840191505092915050565b60008190508160005260206000209050919050565b600081546143c781613bc3565b6143d18186614369565b945060018216600081146143ec57600181146143fd57614430565b60ff19831686528186019350614430565b614406856143a5565b60005b8381101561442857815481890152600182019150602081019050614409565b838801955050505b50505092915050565b60006144458286614374565b91506144518285614374565b915061445d82846143ba565b9150819050949350505050565b60008151905061447981613485565b92915050565b600060208284031215614495576144946131ed565b5b60006144a38482850161446a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614508602683613316565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061459a602c83613316565b91506145a58261453e565b604082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061462c602583613316565b9150614637826145d0565b604082019050919050565b6000602082019050818103600083015261465b8161461f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146be602483613316565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b60006146ff826133c6565b915061470a836133c6565b92508282101561471d5761471c613f39565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061475e601983613316565b915061476982614728565b602082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147f0603283613316565b91506147fb82614794565b604082019050919050565b6000602082019050818103600083015261481f816147e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614860826133c6565b915061486b836133c6565b92508261487b5761487a614826565b5b828204905092915050565b6000614891826133c6565b915061489c836133c6565b9250826148ac576148ab614826565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006148de826148b7565b6148e881856148c2565b93506148f8818560208601613327565b6149018161335a565b840191505092915050565b6000608082019050614921600083018761345b565b61492e602083018661345b565b61493b60408301856134f1565b818103606083015261494d81846148d3565b905095945050505050565b60008151905061496781613223565b92915050565b600060208284031215614983576149826131ed565b5b600061499184828501614958565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149ff602083613316565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614a6b601c83613316565b9150614a7682614a35565b602082019050919050565b60006020820190508181036000830152614a9a81614a5e565b905091905056fea2646970667358221220b405a9b8cef55326c8a4a7e2341471faa534437b918a56e325027f453a52ef3064736f6c634300080e00330000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001242616d62752042696c6c696f6e61697265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5253584c42743977467468535154763255324d426b674856555a39366e6e323866506b3674397531707839442f00000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c8063597a4f791161013957806395d89b41116100b6578063d5abeb011161007a578063d5abeb0114610884578063d936547e146108af578063da3ef23f146108ec578063e985e9c514610915578063f12f508f14610952578063f2fde38b1461098f57610246565b806395d89b411461079f578063a22cb465146107ca578063b88d4fde146107f3578063c66828621461081c578063c87b56dd1461084757610246565b806370a08231116100fd57806370a08231146106ba578063715018a6146106f75780637f00c7a61461070e5780638537999b146107375780638da5cb5b1461077457610246565b8063597a4f79146105d35780635c975abb146105fe5780636352211e146106295780636ba4c138146106665780636c0360eb1461068f57610246565b806330cc7ae0116101c7578063438b63001161018b578063438b6300146104de57806344a0d68a1461051b5780634a4c560d146105445780634f6ccce71461056d57806355f804b3146105aa57610246565b806330cc7ae01461042957806339fe03ab146104525780633ccfd60b1461048f57806340c10f191461049957806342842e0e146104b557610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d578063239c70ae1461039857806323b872dd146103c35780632f745c59146103ec57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061324f565b6109b8565b60405161027f9190613297565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132de565b610a32565b005b3480156102bd57600080fd5b506102c6610acb565b6040516102d391906133a4565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906133fc565b610b5d565b604051610310919061346a565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906134b1565b610be2565b005b34801561034e57600080fd5b50610357610cf9565b6040516103649190613500565b60405180910390f35b34801561037957600080fd5b50610382610cff565b60405161038f9190613500565b60405180910390f35b3480156103a457600080fd5b506103ad610d0c565b6040516103ba9190613500565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e5919061351b565b610d12565b005b3480156103f857600080fd5b50610413600480360381019061040e91906134b1565b610d72565b6040516104209190613500565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b919061356e565b610e17565b005b34801561045e57600080fd5b50610479600480360381019061047491906134b1565b610eee565b6040516104869190613500565b60405180910390f35b610497610f94565b005b6104b360048036038101906104ae91906134b1565b611050565b005b3480156104c157600080fd5b506104dc60048036038101906104d7919061351b565b611196565b005b3480156104ea57600080fd5b506105056004803603810190610500919061356e565b6111b6565b6040516105129190613659565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906133fc565b611264565b005b34801561055057600080fd5b5061056b6004803603810190610566919061356e565b6112ea565b005b34801561057957600080fd5b50610594600480360381019061058f91906133fc565b6113c1565b6040516105a19190613500565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906137b0565b611432565b005b3480156105df57600080fd5b506105e86114c8565b6040516105f59190613858565b60405180910390f35b34801561060a57600080fd5b506106136114ec565b6040516106209190613297565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906133fc565b6114ff565b60405161065d919061346a565b60405180910390f35b34801561067257600080fd5b5061068d6004803603810190610688919061393b565b6115b0565b005b34801561069b57600080fd5b506106a4611699565b6040516106b191906133a4565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc919061356e565b611727565b6040516106ee9190613500565b60405180910390f35b34801561070357600080fd5b5061070c6117de565b005b34801561071a57600080fd5b50610735600480360381019061073091906133fc565b611866565b005b34801561074357600080fd5b5061075e6004803603810190610759919061356e565b6118ec565b60405161076b9190613500565b60405180910390f35b34801561078057600080fd5b5061078961198f565b604051610796919061346a565b60405180910390f35b3480156107ab57600080fd5b506107b46119b9565b6040516107c191906133a4565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613984565b611a4b565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613a65565b611a61565b005b34801561082857600080fd5b50610831611ac3565b60405161083e91906133a4565b60405180910390f35b34801561085357600080fd5b5061086e600480360381019061086991906133fc565b611b51565b60405161087b91906133a4565b60405180910390f35b34801561089057600080fd5b50610899611bfb565b6040516108a69190613500565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061356e565b611c01565b6040516108e39190613297565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906137b0565b611c21565b005b34801561092157600080fd5b5061093c60048036038101906109379190613ae8565b611cb7565b6040516109499190613297565b60405180910390f35b34801561095e57600080fd5b50610979600480360381019061097491906133fc565b611d4b565b604051610986919061346a565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061356e565b611dee565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b5750610a2a82611f0d565b5b9050919050565b610a3a611fef565b73ffffffffffffffffffffffffffffffffffffffff16610a5861198f565b73ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613b74565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610ada90613bc3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690613bc3565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b6882611ff7565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613c66565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bed826114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613cf8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7c611fef565b73ffffffffffffffffffffffffffffffffffffffff161480610cab5750610caa81610ca5611fef565b611cb7565b5b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613d8a565b60405180910390fd5b610cf48383612063565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d23610d1d611fef565b8261211c565b610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613e1c565b60405180910390fd5b610d6d8383836121fa565b505050565b6000610d7d83611727565b8210610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613eae565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e1f611fef565b73ffffffffffffffffffffffffffffffffffffffff16610e3d61198f565b73ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613b74565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b73ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401610f4b929190613ece565b602060405180830381865afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613f0c565b905092915050565b610f9c611fef565b73ffffffffffffffffffffffffffffffffffffffff16610fba61198f565b73ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613b74565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061104e57600080fd5b565b600061105a610cff565b9050601060009054906101000a900460ff161561107657600080fd5b6000821161108357600080fd5b600f5482111561109257600080fd5b600e5482826110a19190613f68565b11156110ac57600080fd5b6110b461198f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461115a5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111595781600d5461114c9190613fbe565b34101561115857600080fd5b5b5b6000600190505b8281116111905761117d8482846111789190613f68565b612460565b808061118890614018565b915050611161565b50505050565b6111b183838360405180602001604052806000815250611a61565b505050565b606060006111c383611727565b905060008167ffffffffffffffff8111156111e1576111e0613685565b5b60405190808252806020026020018201604052801561120f5781602001602082028036833780820191505090505b50905060005b82811015611259576112278582610d72565b82828151811061123a57611239614060565b5b602002602001018181525050808061125190614018565b915050611215565b508092505050919050565b61126c611fef565b73ffffffffffffffffffffffffffffffffffffffff1661128a61198f565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613b74565b60405180910390fd5b80600d8190555050565b6112f2611fef565b73ffffffffffffffffffffffffffffffffffffffff1661131061198f565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613b74565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006113cb610cff565b821061140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614101565b60405180910390fd5b600882815481106114205761141f614060565b5b90600052602060002001549050919050565b61143a611fef565b73ffffffffffffffffffffffffffffffffffffffff1661145861198f565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613b74565b60405180910390fd5b80600b90805190602001906114c4929190613140565b5050565b7f0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b81565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614193565b60405180910390fd5b80915050919050565b60005b8151811015611695573373ffffffffffffffffffffffffffffffffffffffff166115f68383815181106115e9576115e8614060565b5b6020026020010151611d4b565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390614225565b60405180910390fd5b600e54611657610cff565b1015611682576116813383838151811061167457611673614060565b5b6020026020010151612460565b5b808061168d90614018565b9150506115b3565b5050565b600b80546116a690613bc3565b80601f01602080910402602001604051908101604052809291908181526020018280546116d290613bc3565b801561171f5780601f106116f45761010080835404028352916020019161171f565b820191906000526020600020905b81548152906001019060200180831161170257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e906142b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e6611fef565b73ffffffffffffffffffffffffffffffffffffffff1661180461198f565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613b74565b60405180910390fd5b611864600061247e565b565b61186e611fef565b73ffffffffffffffffffffffffffffffffffffffff1661188c61198f565b73ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613b74565b60405180910390fd5b80600f8190555050565b60007f0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611947919061346a565b602060405180830381865afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119889190613f0c565b9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119c890613bc3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f490613bc3565b8015611a415780601f10611a1657610100808354040283529160200191611a41565b820191906000526020600020905b815481529060010190602001808311611a2457829003601f168201915b5050505050905090565b611a5d611a56611fef565b8383612544565b5050565b611a72611a6c611fef565b8361211c565b611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613e1c565b60405180910390fd5b611abd848484846126b0565b50505050565b600c8054611ad090613bc3565b80601f0160208091040260200160405190810160405280929190818152602001828054611afc90613bc3565b8015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b505050505081565b6060611b5c82611ff7565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614349565b60405180910390fd5b6000611ba561270c565b90506000815111611bc55760405180602001604052806000815250611bf3565b80611bcf8461279e565b600c604051602001611be393929190614439565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611c29611fef565b73ffffffffffffffffffffffffffffffffffffffff16611c4761198f565b73ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613b74565b60405180910390fd5b80600c9080519060200190611cb3929190613140565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611da69190613500565b602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061447f565b9050919050565b611df6611fef565b73ffffffffffffffffffffffffffffffffffffffff16611e1461198f565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed09061451e565b60405180910390fd5b611ee28161247e565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fd857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fe85750611fe7826128fe565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120d6836114ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061212782611ff7565b612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d906145b0565b60405180910390fd5b6000612171836114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121b357506121b28185611cb7565b5b806121f157508373ffffffffffffffffffffffffffffffffffffffff166121d984610b5d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661221a826114ff565b73ffffffffffffffffffffffffffffffffffffffff1614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790614642565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906146d4565b60405180910390fd5b6122ea838383612968565b6122f5600082612063565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234591906146f4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239c9190613f68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245b838383612a7a565b505050565b61247a828260405180602001604052806000815250612a7f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614774565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126a39190613297565b60405180910390a3505050565b6126bb8484846121fa565b6126c784848484612ada565b612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd90614806565b60405180910390fd5b50505050565b6060600b805461271b90613bc3565b80601f016020809104026020016040519081016040528092919081815260200182805461274790613bc3565b80156127945780601f1061276957610100808354040283529160200191612794565b820191906000526020600020905b81548152906001019060200180831161277757829003601f168201915b5050505050905090565b6060600082036127e5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128f9565b600082905060005b6000821461281757808061280090614018565b915050600a826128109190614855565b91506127ed565b60008167ffffffffffffffff81111561283357612832613685565b5b6040519080825280601f01601f1916602001820160405280156128655781602001600182028036833780820191505090505b5090505b600085146128f25760018261287e91906146f4565b9150600a8561288d9190614886565b60306128999190613f68565b60f81b8183815181106128af576128ae614060565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128eb9190614855565b9450612869565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612973838383611f08565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b5576129b081612c61565b6129f4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129f3576129f28382612caa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a3657612a3181612e17565b612a75565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7457612a738282612ee8565b5b5b505050565b505050565b612a898383612f67565b612a966000848484612ada565b612ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acc90614806565b60405180910390fd5b505050565b6000612afb8473ffffffffffffffffffffffffffffffffffffffff16611ee5565b15612c54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b24611fef565b8786866040518563ffffffff1660e01b8152600401612b46949392919061490c565b6020604051808303816000875af1925050508015612b8257506040513d601f19601f82011682018060405250810190612b7f919061496d565b60015b612c04573d8060008114612bb2576040519150601f19603f3d011682016040523d82523d6000602084013e612bb7565b606091505b506000815103612bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf390614806565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c59565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cb784611727565b612cc191906146f4565b9050600060076000848152602001908152602001600020549050818114612da6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e2b91906146f4565b9050600060096000848152602001908152602001600020549050600060088381548110612e5b57612e5a614060565b5b906000526020600020015490508060088381548110612e7d57612e7c614060565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ecc57612ecb61499a565b5b6001900381819060005260206000200160009055905550505050565b6000612ef383611727565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd90614a15565b60405180910390fd5b612fdf81611ff7565b1561301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614a81565b60405180910390fd5b61302b60008383612968565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307b9190613f68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461313c60008383612a7a565b5050565b82805461314c90613bc3565b90600052602060002090601f01602090048101928261316e57600085556131b5565b82601f1061318757805160ff19168380011785556131b5565b828001600101855582156131b5579182015b828111156131b4578251825591602001919060010190613199565b5b5090506131c291906131c6565b5090565b5b808211156131df5760008160009055506001016131c7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61322c816131f7565b811461323757600080fd5b50565b60008135905061324981613223565b92915050565b600060208284031215613265576132646131ed565b5b60006132738482850161323a565b91505092915050565b60008115159050919050565b6132918161327c565b82525050565b60006020820190506132ac6000830184613288565b92915050565b6132bb8161327c565b81146132c657600080fd5b50565b6000813590506132d8816132b2565b92915050565b6000602082840312156132f4576132f36131ed565b5b6000613302848285016132c9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334557808201518184015260208101905061332a565b83811115613354576000848401525b50505050565b6000601f19601f8301169050919050565b60006133768261330b565b6133808185613316565b9350613390818560208601613327565b6133998161335a565b840191505092915050565b600060208201905081810360008301526133be818461336b565b905092915050565b6000819050919050565b6133d9816133c6565b81146133e457600080fd5b50565b6000813590506133f6816133d0565b92915050565b600060208284031215613412576134116131ed565b5b6000613420848285016133e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345482613429565b9050919050565b61346481613449565b82525050565b600060208201905061347f600083018461345b565b92915050565b61348e81613449565b811461349957600080fd5b50565b6000813590506134ab81613485565b92915050565b600080604083850312156134c8576134c76131ed565b5b60006134d68582860161349c565b92505060206134e7858286016133e7565b9150509250929050565b6134fa816133c6565b82525050565b600060208201905061351560008301846134f1565b92915050565b600080600060608486031215613534576135336131ed565b5b60006135428682870161349c565b93505060206135538682870161349c565b9250506040613564868287016133e7565b9150509250925092565b600060208284031215613584576135836131ed565b5b60006135928482850161349c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135d0816133c6565b82525050565b60006135e283836135c7565b60208301905092915050565b6000602082019050919050565b60006136068261359b565b61361081856135a6565b935061361b836135b7565b8060005b8381101561364c57815161363388826135d6565b975061363e836135ee565b92505060018101905061361f565b5085935050505092915050565b6000602082019050818103600083015261367381846135fb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136bd8261335a565b810181811067ffffffffffffffff821117156136dc576136db613685565b5b80604052505050565b60006136ef6131e3565b90506136fb82826136b4565b919050565b600067ffffffffffffffff82111561371b5761371a613685565b5b6137248261335a565b9050602081019050919050565b82818337600083830152505050565b600061375361374e84613700565b6136e5565b90508281526020810184848401111561376f5761376e613680565b5b61377a848285613731565b509392505050565b600082601f8301126137975761379661367b565b5b81356137a7848260208601613740565b91505092915050565b6000602082840312156137c6576137c56131ed565b5b600082013567ffffffffffffffff8111156137e4576137e36131f2565b5b6137f084828501613782565b91505092915050565b6000819050919050565b600061381e61381961381484613429565b6137f9565b613429565b9050919050565b600061383082613803565b9050919050565b600061384282613825565b9050919050565b61385281613837565b82525050565b600060208201905061386d6000830184613849565b92915050565b600067ffffffffffffffff82111561388e5761388d613685565b5b602082029050602081019050919050565b600080fd5b60006138b76138b284613873565b6136e5565b905080838252602082019050602084028301858111156138da576138d961389f565b5b835b8181101561390357806138ef88826133e7565b8452602084019350506020810190506138dc565b5050509392505050565b600082601f8301126139225761392161367b565b5b81356139328482602086016138a4565b91505092915050565b600060208284031215613951576139506131ed565b5b600082013567ffffffffffffffff81111561396f5761396e6131f2565b5b61397b8482850161390d565b91505092915050565b6000806040838503121561399b5761399a6131ed565b5b60006139a98582860161349c565b92505060206139ba858286016132c9565b9150509250929050565b600067ffffffffffffffff8211156139df576139de613685565b5b6139e88261335a565b9050602081019050919050565b6000613a08613a03846139c4565b6136e5565b905082815260208101848484011115613a2457613a23613680565b5b613a2f848285613731565b509392505050565b600082601f830112613a4c57613a4b61367b565b5b8135613a5c8482602086016139f5565b91505092915050565b60008060008060808587031215613a7f57613a7e6131ed565b5b6000613a8d8782880161349c565b9450506020613a9e8782880161349c565b9350506040613aaf878288016133e7565b925050606085013567ffffffffffffffff811115613ad057613acf6131f2565b5b613adc87828801613a37565b91505092959194509250565b60008060408385031215613aff57613afe6131ed565b5b6000613b0d8582860161349c565b9250506020613b1e8582860161349c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5e602083613316565b9150613b6982613b28565b602082019050919050565b60006020820190508181036000830152613b8d81613b51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bdb57607f821691505b602082108103613bee57613bed613b94565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c50602c83613316565b9150613c5b82613bf4565b604082019050919050565b60006020820190508181036000830152613c7f81613c43565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ce2602183613316565b9150613ced82613c86565b604082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d74603883613316565b9150613d7f82613d18565b604082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e06603183613316565b9150613e1182613daa565b604082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e98602b83613316565b9150613ea382613e3c565b604082019050919050565b60006020820190508181036000830152613ec781613e8b565b9050919050565b6000604082019050613ee3600083018561345b565b613ef060208301846134f1565b9392505050565b600081519050613f06816133d0565b92915050565b600060208284031215613f2257613f216131ed565b5b6000613f3084828501613ef7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f73826133c6565b9150613f7e836133c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fb357613fb2613f39565b5b828201905092915050565b6000613fc9826133c6565b9150613fd4836133c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400d5761400c613f39565b5b828202905092915050565b6000614023826133c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361405557614054613f39565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006140eb602c83613316565b91506140f68261408f565b604082019050919050565b6000602082019050818103600083015261411a816140de565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061417d602983613316565b915061418882614121565b604082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f497420697320706f737369626c6520746f20636c61696d206f6e6c7920636f7260008201527f726573706f6e64696e6720746f6b656e73000000000000000000000000000000602082015250565b600061420f603183613316565b915061421a826141b3565b604082019050919050565b6000602082019050818103600083015261423e81614202565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006142a1602a83613316565b91506142ac82614245565b604082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614333602f83613316565b915061433e826142d7565b604082019050919050565b6000602082019050818103600083015261436281614326565b9050919050565b600081905092915050565b600061437f8261330b565b6143898185614369565b9350614399818560208601613327565b80840191505092915050565b60008190508160005260206000209050919050565b600081546143c781613bc3565b6143d18186614369565b945060018216600081146143ec57600181146143fd57614430565b60ff19831686528186019350614430565b614406856143a5565b60005b8381101561442857815481890152600182019150602081019050614409565b838801955050505b50505092915050565b60006144458286614374565b91506144518285614374565b915061445d82846143ba565b9150819050949350505050565b60008151905061447981613485565b92915050565b600060208284031215614495576144946131ed565b5b60006144a38482850161446a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614508602683613316565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061459a602c83613316565b91506145a58261453e565b604082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061462c602583613316565b9150614637826145d0565b604082019050919050565b6000602082019050818103600083015261465b8161461f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146be602483613316565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b60006146ff826133c6565b915061470a836133c6565b92508282101561471d5761471c613f39565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061475e601983613316565b915061476982614728565b602082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147f0603283613316565b91506147fb82614794565b604082019050919050565b6000602082019050818103600083015261481f816147e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614860826133c6565b915061486b836133c6565b92508261487b5761487a614826565b5b828204905092915050565b6000614891826133c6565b915061489c836133c6565b9250826148ac576148ab614826565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006148de826148b7565b6148e881856148c2565b93506148f8818560208601613327565b6149018161335a565b840191505092915050565b6000608082019050614921600083018761345b565b61492e602083018661345b565b61493b60408301856134f1565b818103606083015261494d81846148d3565b905095945050505050565b60008151905061496781613223565b92915050565b600060208284031215614983576149826131ed565b5b600061499184828501614958565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149ff602083613316565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614a6b601c83613316565b9150614a7682614a35565b602082019050919050565b60006020820190508181036000830152614a9a81614a5e565b905091905056fea2646970667358221220b405a9b8cef55326c8a4a7e2341471faa534437b918a56e325027f453a52ef3064736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001242616d62752042696c6c696f6e61697265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5253584c42743977467468535154763255324d426b674856555a39366e6e323866506b3674397531707839442f00000000000000000000
-----Decoded View---------------
Arg [0] : _Pandas (address): 0x1be71D858CA81d183ebf05F4ce26aF887e1e7b6b
Arg [1] : _name (string): Bambu Billionaires
Arg [2] : _symbol (string): BB
Arg [3] : _initBaseURI (string): ipfs://QmRSXLBt9wFthSQTv2U2MBkgHVUZ96nn28fPk6t9u1px9D/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000001be71d858ca81d183ebf05f4ce26af887e1e7b6b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 42616d62752042696c6c696f6e61697265730000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4242000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d5253584c42743977467468535154763255324d426b6748
Arg [10] : 56555a39366e6e323866506b3674397531707839442f00000000000000000000
Deployed Bytecode Sourcemap
45954:3729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39390:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48856:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26209:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27769:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27292:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46159:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40030:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46231:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28519:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39698:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49035:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49398:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49566:114;;;:::i;:::-;;46744:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28929:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47251:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48416:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48935:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40220:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48624:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46047:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46269:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25903:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48034:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46091:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:103;;;;;;;;;;;;;:::i;:::-;;48502:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49269:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26378:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28062:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29185:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46117:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47605:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46195:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46300:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48728:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28288:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49141:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39390:224;39492:4;39531:35;39516:50;;;:11;:50;;;;:90;;;;39570:36;39594:11;39570:23;:36::i;:::-;39516:90;39509:97;;39390:224;;;:::o;48856:73::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48917:6:::1;48908;;:15;;;;;;;;;;;;;;;;;;48856:73:::0;:::o;26209:100::-;26263:13;26296:5;26289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26209:100;:::o;27769:221::-;27845:7;27873:16;27881:7;27873;:16::i;:::-;27865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27958:15;:24;27974:7;27958:24;;;;;;;;;;;;;;;;;;;;;27951:31;;27769:221;;;:::o;27292:411::-;27373:13;27389:23;27404:7;27389:14;:23::i;:::-;27373:39;;27437:5;27431:11;;:2;:11;;;27423:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:5;27515:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27540:37;27557:5;27564:12;:10;:12::i;:::-;27540:16;:37::i;:::-;27515:62;27493:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:21;27683:2;27687:7;27674:8;:21::i;:::-;27362:341;27292:411;;:::o;46159:31::-;;;;:::o;40030:113::-;40091:7;40118:10;:17;;;;40111:24;;40030:113;:::o;46231:33::-;;;;:::o;28519:339::-;28714:41;28733:12;:10;:12::i;:::-;28747:7;28714:18;:41::i;:::-;28706:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28822:28;28832:4;28838:2;28842:7;28822:9;:28::i;:::-;28519:339;;;:::o;39698:256::-;39795:7;39831:23;39848:5;39831:16;:23::i;:::-;39823:5;:31;39815:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39920:12;:19;39933:5;39920:19;;;;;;;;;;;;;;;:26;39940:5;39920:26;;;;;;;;;;;;39913:33;;39698:256;;;;:::o;49035:100::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49124:5:::1;49103:11;:18;49115:5;49103:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49035:100:::0;:::o;49398:162::-;49485:7;49512:6;:26;;;49539:5;49546;49512:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49505:47;;49398:162;;;;:::o;49566:114::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49634:10:::1;49626:24;;:47;49651:21;49626:47;;;;;;;;;;;;;;;;;;;;;;;49618:56;;;::::0;::::1;;49566:114::o:0;46744:501::-;46814:14;46831:13;:11;:13::i;:::-;46814:30;;46860:6;;;;;;;;;;;46859:7;46851:16;;;;;;46896:1;46882:11;:15;46874:24;;;;;;46928:13;;46913:11;:28;;46905:37;;;;;;46981:9;;46966:11;46957:6;:20;;;;:::i;:::-;:33;;46949:42;;;;;;47018:7;:5;:7::i;:::-;47004:21;;:10;:21;;;47000:146;;47068:4;47041:31;;:11;:23;47053:10;47041:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;47038:101;;47115:11;47108:4;;:18;;;;:::i;:::-;47095:9;:31;;47087:40;;;;;;47038:101;47000:146;47159:9;47171:1;47159:13;;47154:86;47179:11;47174:1;:16;47154:86;;47206:26;47216:3;47230:1;47221:6;:10;;;;:::i;:::-;47206:9;:26::i;:::-;47192:3;;;;;:::i;:::-;;;;47154:86;;;;46807:438;46744:501;;:::o;28929:185::-;29067:39;29084:4;29090:2;29094:7;29067:39;;;;;;;;;;;;:16;:39::i;:::-;28929:185;;;:::o;47251:348::-;47326:16;47354:23;47380:17;47390:6;47380:9;:17::i;:::-;47354:43;;47404:25;47446:15;47432:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47404:58;;47474:9;47469:103;47489:15;47485:1;:19;47469:103;;;47534:30;47554:6;47562:1;47534:19;:30::i;:::-;47520:8;47529:1;47520:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47506:3;;;;;:::i;:::-;;;;47469:103;;;;47585:8;47578:15;;;;47251:348;;;:::o;48416:80::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48482:8:::1;48475:4;:15;;;;48416:80:::0;:::o;48935:93::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49018:4:::1;48997:11;:18;49009:5;48997:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48935:93:::0;:::o;40220:233::-;40295:7;40331:30;:28;:30::i;:::-;40323:5;:38;40315:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40428:10;40439:5;40428:17;;;;;;;;:::i;:::-;;;;;;;;;;40421:24;;40220:233;;;:::o;48624:98::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48705:11:::1;48695:7;:21;;;;;;;;;;;;:::i;:::-;;48624:98:::0;:::o;46047:39::-;;;:::o;46269:26::-;;;;;;;;;;;;;:::o;25903:239::-;25975:7;25995:13;26011:7;:16;26019:7;26011:16;;;;;;;;;;;;;;;;;;;;;25995:32;;26063:1;26046:19;;:5;:19;;;26038:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26129:5;26122:12;;;25903:239;;;:::o;48034:360::-;48101:6;48096:291;48117:9;:16;48113:1;:20;48096:291;;;48195:10;48163:42;;:28;48178:9;48188:1;48178:12;;;;;;;;:::i;:::-;;;;;;;;48163:14;:28::i;:::-;:42;;;48155:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;48295:9;;48279:13;:11;:13::i;:::-;:25;48275:101;;;48325:35;48335:10;48347:9;48357:1;48347:12;;;;;;;;:::i;:::-;;;;;;;;48325:9;:35::i;:::-;48275:101;48135:3;;;;;:::i;:::-;;;;48096:291;;;;48034:360;:::o;46091:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25633:208::-;25705:7;25750:1;25733:19;;:5;:19;;;25725:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25817:9;:16;25827:5;25817:16;;;;;;;;;;;;;;;;25810:23;;25633:208;;;:::o;4767:103::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;48502:116::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48595:17:::1;48579:13;:33;;;;48502:116:::0;:::o;49269:121::-;49331:7;49359:6;:16;;;49376:5;49359:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49352:30;;49269:121;;;:::o;4116:87::-;4162:7;4189:6;;;;;;;;;;;4182:13;;4116:87;:::o;26378:104::-;26434:13;26467:7;26460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26378:104;:::o;28062:155::-;28157:52;28176:12;:10;:12::i;:::-;28190:8;28200;28157:18;:52::i;:::-;28062:155;;:::o;29185:328::-;29360:41;29379:12;:10;:12::i;:::-;29393:7;29360:18;:41::i;:::-;29352:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29466:39;29480:4;29486:2;29490:7;29499:5;29466:13;:39::i;:::-;29185:328;;;;:::o;46117:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47605:423::-;47703:13;47744:16;47752:7;47744;:16::i;:::-;47728:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47834:28;47865:10;:8;:10::i;:::-;47834:41;;47920:1;47895:14;47889:28;:32;:133;;;;;;;;;;;;;;;;;47957:14;47973:18;:7;:16;:18::i;:::-;47993:13;47940:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47889:133;47882:140;;;47605:423;;;:::o;46195:31::-;;;;:::o;46300:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48728:122::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48827:17:::1;48811:13;:33;;;;;;;;;;;;:::i;:::-;;48728:122:::0;:::o;28288:164::-;28385:4;28409:18;:25;28428:5;28409:25;;;;;;;;;;;;;;;:35;28435:8;28409:35;;;;;;;;;;;;;;;;;;;;;;;;;28402:42;;28288:164;;;;:::o;49141:120::-;49203:7;49230:6;:14;;;49245:7;49230:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49223:30;;49141:120;;;:::o;5025:201::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5134:1:::1;5114:22;;:8;:22;;::::0;5106:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;6817:326::-;6877:4;7134:1;7112:7;:19;;;:23;7105:30;;6817:326;;;:::o;37736:126::-;;;;:::o;25264:305::-;25366:4;25418:25;25403:40;;;:11;:40;;;;:105;;;;25475:33;25460:48;;;:11;:48;;;;25403:105;:158;;;;25525:36;25549:11;25525:23;:36::i;:::-;25403:158;25383:178;;25264:305;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;31023:127::-;31088:4;31140:1;31112:30;;:7;:16;31120:7;31112:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31105:37;;31023:127;;;:::o;35169:174::-;35271:2;35244:15;:24;35260:7;35244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35327:7;35323:2;35289:46;;35298:23;35313:7;35298:14;:23::i;:::-;35289:46;;;;;;;;;;;;35169:174;;:::o;31317:348::-;31410:4;31435:16;31443:7;31435;:16::i;:::-;31427:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31511:13;31527:23;31542:7;31527:14;:23::i;:::-;31511:39;;31580:5;31569:16;;:7;:16;;;:52;;;;31589:32;31606:5;31613:7;31589:16;:32::i;:::-;31569:52;:87;;;;31649:7;31625:31;;:20;31637:7;31625:11;:20::i;:::-;:31;;;31569:87;31561:96;;;31317:348;;;;:::o;34426:625::-;34585:4;34558:31;;:23;34573:7;34558:14;:23::i;:::-;:31;;;34550:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34664:1;34650:16;;:2;:16;;;34642:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34720:39;34741:4;34747:2;34751:7;34720:20;:39::i;:::-;34824:29;34841:1;34845:7;34824:8;:29::i;:::-;34885:1;34866:9;:15;34876:4;34866:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34914:1;34897:9;:13;34907:2;34897:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34945:2;34926:7;:16;34934:7;34926:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34984:7;34980:2;34965:27;;34974:4;34965:27;;;;;;;;;;;;35005:38;35025:4;35031:2;35035:7;35005:19;:38::i;:::-;34426:625;;;:::o;32007:110::-;32083:26;32093:2;32097:7;32083:26;;;;;;;;;;;;:9;:26::i;:::-;32007:110;;:::o;5386:191::-;5460:16;5479:6;;;;;;;;;;;5460:25;;5505:8;5496:6;;:17;;;;;;;;;;;;;;;;;;5560:8;5529:40;;5550:8;5529:40;;;;;;;;;;;;5449:128;5386:191;:::o;35485:315::-;35640:8;35631:17;;:5;:17;;;35623:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35727:8;35689:18;:25;35708:5;35689:25;;;;;;;;;;;;;;;:35;35715:8;35689:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35773:8;35751:41;;35766:5;35751:41;;;35783:8;35751:41;;;;;;:::i;:::-;;;;;;;;35485:315;;;:::o;30395:::-;30552:28;30562:4;30568:2;30572:7;30552:9;:28::i;:::-;30599:48;30622:4;30628:2;30632:7;30641:5;30599:22;:48::i;:::-;30591:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30395:315;;;;:::o;46623:102::-;46683:13;46712:7;46705:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46623:102;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;16923:157::-;17008:4;17047:25;17032:40;;;:11;:40;;;;17025:47;;16923:157;;;:::o;41066:589::-;41210:45;41237:4;41243:2;41247:7;41210:26;:45::i;:::-;41288:1;41272:18;;:4;:18;;;41268:187;;41307:40;41339:7;41307:31;:40::i;:::-;41268:187;;;41377:2;41369:10;;:4;:10;;;41365:90;;41396:47;41429:4;41435:7;41396:32;:47::i;:::-;41365:90;41268:187;41483:1;41469:16;;:2;:16;;;41465:183;;41502:45;41539:7;41502:36;:45::i;:::-;41465:183;;;41575:4;41569:10;;:2;:10;;;41565:83;;41596:40;41624:2;41628:7;41596:27;:40::i;:::-;41565:83;41465:183;41066:589;;;:::o;38247:125::-;;;;:::o;32344:321::-;32474:18;32480:2;32484:7;32474:5;:18::i;:::-;32525:54;32556:1;32560:2;32564:7;32573:5;32525:22;:54::i;:::-;32503:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32344:321;;;:::o;36365:799::-;36520:4;36541:15;:2;:13;;;:15::i;:::-;36537:620;;;36593:2;36577:36;;;36614:12;:10;:12::i;:::-;36628:4;36634:7;36643:5;36577:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36573:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36836:1;36819:6;:13;:18;36815:272;;36862:60;;;;;;;;;;:::i;:::-;;;;;;;;36815:272;37037:6;37031:13;37022:6;37018:2;37014:15;37007:38;36573:529;36710:41;;;36700:51;;;:6;:51;;;;36693:58;;;;;36537:620;37141:4;37134:11;;36365:799;;;;;;;:::o;42378:164::-;42482:10;:17;;;;42455:15;:24;42471:7;42455:24;;;;;;;;;;;:44;;;;42510:10;42526:7;42510:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42378:164;:::o;43169:988::-;43435:22;43485:1;43460:22;43477:4;43460:16;:22::i;:::-;:26;;;;:::i;:::-;43435:51;;43497:18;43518:17;:26;43536:7;43518:26;;;;;;;;;;;;43497:47;;43665:14;43651:10;:28;43647:328;;43696:19;43718:12;:18;43731:4;43718:18;;;;;;;;;;;;;;;:34;43737:14;43718:34;;;;;;;;;;;;43696:56;;43802:11;43769:12;:18;43782:4;43769:18;;;;;;;;;;;;;;;:30;43788:10;43769:30;;;;;;;;;;;:44;;;;43919:10;43886:17;:30;43904:11;43886:30;;;;;;;;;;;:43;;;;43681:294;43647:328;44071:17;:26;44089:7;44071:26;;;;;;;;;;;44064:33;;;44115:12;:18;44128:4;44115:18;;;;;;;;;;;;;;;:34;44134:14;44115:34;;;;;;;;;;;44108:41;;;43250:907;;43169:988;;:::o;44452:1079::-;44705:22;44750:1;44730:10;:17;;;;:21;;;;:::i;:::-;44705:46;;44762:18;44783:15;:24;44799:7;44783:24;;;;;;;;;;;;44762:45;;45134:19;45156:10;45167:14;45156:26;;;;;;;;:::i;:::-;;;;;;;;;;45134:48;;45220:11;45195:10;45206;45195:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45331:10;45300:15;:28;45316:11;45300:28;;;;;;;;;;;:41;;;;45472:15;:24;45488:7;45472:24;;;;;;;;;;;45465:31;;;45507:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44523:1008;;;44452:1079;:::o;41956:221::-;42041:14;42058:20;42075:2;42058:16;:20::i;:::-;42041:37;;42116:7;42089:12;:16;42102:2;42089:16;;;;;;;;;;;;;;;:24;42106:6;42089:24;;;;;;;;;;;:34;;;;42163:6;42134:17;:26;42152:7;42134:26;;;;;;;;;;;:35;;;;42030:147;41956:221;;:::o;33001:439::-;33095:1;33081:16;;:2;:16;;;33073:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33154:16;33162:7;33154;:16::i;:::-;33153:17;33145:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33216:45;33245:1;33249:2;33253:7;33216:20;:45::i;:::-;33291:1;33274:9;:13;33284:2;33274:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33322:2;33303:7;:16;33311:7;33303:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33367:7;33363:2;33342:33;;33359:1;33342:33;;;;;;;;;;;;33388:44;33416:1;33420:2;33424:7;33388:19;:44::i;:::-;33001:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:60::-;11502:3;11523:5;11516:12;;11474:60;;;:::o;11540:142::-;11590:9;11623:53;11641:34;11650:24;11668:5;11650:24;:::i;:::-;11641:34;:::i;:::-;11623:53;:::i;:::-;11610:66;;11540:142;;;:::o;11688:126::-;11738:9;11771:37;11802:5;11771:37;:::i;:::-;11758:50;;11688:126;;;:::o;11820:150::-;11894:9;11927:37;11958:5;11927:37;:::i;:::-;11914:50;;11820:150;;;:::o;11976:179::-;12087:61;12142:5;12087:61;:::i;:::-;12082:3;12075:74;11976:179;;:::o;12161:270::-;12278:4;12316:2;12305:9;12301:18;12293:26;;12329:95;12421:1;12410:9;12406:17;12397:6;12329:95;:::i;:::-;12161:270;;;;:::o;12437:311::-;12514:4;12604:18;12596:6;12593:30;12590:56;;;12626:18;;:::i;:::-;12590:56;12676:4;12668:6;12664:17;12656:25;;12736:4;12730;12726:15;12718:23;;12437:311;;;:::o;12754:117::-;12863:1;12860;12853:12;12894:710;12990:5;13015:81;13031:64;13088:6;13031:64;:::i;:::-;13015:81;:::i;:::-;13006:90;;13116:5;13145:6;13138:5;13131:21;13179:4;13172:5;13168:16;13161:23;;13232:4;13224:6;13220:17;13212:6;13208:30;13261:3;13253:6;13250:15;13247:122;;;13280:79;;:::i;:::-;13247:122;13395:6;13378:220;13412:6;13407:3;13404:15;13378:220;;;13487:3;13516:37;13549:3;13537:10;13516:37;:::i;:::-;13511:3;13504:50;13583:4;13578:3;13574:14;13567:21;;13454:144;13438:4;13433:3;13429:14;13422:21;;13378:220;;;13382:21;12996:608;;12894:710;;;;;:::o;13627:370::-;13698:5;13747:3;13740:4;13732:6;13728:17;13724:27;13714:122;;13755:79;;:::i;:::-;13714:122;13872:6;13859:20;13897:94;13987:3;13979:6;13972:4;13964:6;13960:17;13897:94;:::i;:::-;13888:103;;13704:293;13627:370;;;;:::o;14003:539::-;14087:6;14136:2;14124:9;14115:7;14111:23;14107:32;14104:119;;;14142:79;;:::i;:::-;14104:119;14290:1;14279:9;14275:17;14262:31;14320:18;14312:6;14309:30;14306:117;;;14342:79;;:::i;:::-;14306:117;14447:78;14517:7;14508:6;14497:9;14493:22;14447:78;:::i;:::-;14437:88;;14233:302;14003:539;;;;:::o;14548:468::-;14613:6;14621;14670:2;14658:9;14649:7;14645:23;14641:32;14638:119;;;14676:79;;:::i;:::-;14638:119;14796:1;14821:53;14866:7;14857:6;14846:9;14842:22;14821:53;:::i;:::-;14811:63;;14767:117;14923:2;14949:50;14991:7;14982:6;14971:9;14967:22;14949:50;:::i;:::-;14939:60;;14894:115;14548:468;;;;;:::o;15022:307::-;15083:4;15173:18;15165:6;15162:30;15159:56;;;15195:18;;:::i;:::-;15159:56;15233:29;15255:6;15233:29;:::i;:::-;15225:37;;15317:4;15311;15307:15;15299:23;;15022:307;;;:::o;15335:410::-;15412:5;15437:65;15453:48;15494:6;15453:48;:::i;:::-;15437:65;:::i;:::-;15428:74;;15525:6;15518:5;15511:21;15563:4;15556:5;15552:16;15601:3;15592:6;15587:3;15583:16;15580:25;15577:112;;;15608:79;;:::i;:::-;15577:112;15698:41;15732:6;15727:3;15722;15698:41;:::i;:::-;15418:327;15335:410;;;;;:::o;15764:338::-;15819:5;15868:3;15861:4;15853:6;15849:17;15845:27;15835:122;;15876:79;;:::i;:::-;15835:122;15993:6;15980:20;16018:78;16092:3;16084:6;16077:4;16069:6;16065:17;16018:78;:::i;:::-;16009:87;;15825:277;15764:338;;;;:::o;16108:943::-;16203:6;16211;16219;16227;16276:3;16264:9;16255:7;16251:23;16247:33;16244:120;;;16283:79;;:::i;:::-;16244:120;16403:1;16428:53;16473:7;16464:6;16453:9;16449:22;16428:53;:::i;:::-;16418:63;;16374:117;16530:2;16556:53;16601:7;16592:6;16581:9;16577:22;16556:53;:::i;:::-;16546:63;;16501:118;16658:2;16684:53;16729:7;16720:6;16709:9;16705:22;16684:53;:::i;:::-;16674:63;;16629:118;16814:2;16803:9;16799:18;16786:32;16845:18;16837:6;16834:30;16831:117;;;16867:79;;:::i;:::-;16831:117;16972:62;17026:7;17017:6;17006:9;17002:22;16972:62;:::i;:::-;16962:72;;16757:287;16108:943;;;;;;;:::o;17057:474::-;17125:6;17133;17182:2;17170:9;17161:7;17157:23;17153:32;17150:119;;;17188:79;;:::i;:::-;17150:119;17308:1;17333:53;17378:7;17369:6;17358:9;17354:22;17333:53;:::i;:::-;17323:63;;17279:117;17435:2;17461:53;17506:7;17497:6;17486:9;17482:22;17461:53;:::i;:::-;17451:63;;17406:118;17057:474;;;;;:::o;17537:182::-;17677:34;17673:1;17665:6;17661:14;17654:58;17537:182;:::o;17725:366::-;17867:3;17888:67;17952:2;17947:3;17888:67;:::i;:::-;17881:74;;17964:93;18053:3;17964:93;:::i;:::-;18082:2;18077:3;18073:12;18066:19;;17725:366;;;:::o;18097:419::-;18263:4;18301:2;18290:9;18286:18;18278:26;;18350:9;18344:4;18340:20;18336:1;18325:9;18321:17;18314:47;18378:131;18504:4;18378:131;:::i;:::-;18370:139;;18097:419;;;:::o;18522:180::-;18570:77;18567:1;18560:88;18667:4;18664:1;18657:15;18691:4;18688:1;18681:15;18708:320;18752:6;18789:1;18783:4;18779:12;18769:22;;18836:1;18830:4;18826:12;18857:18;18847:81;;18913:4;18905:6;18901:17;18891:27;;18847:81;18975:2;18967:6;18964:14;18944:18;18941:38;18938:84;;18994:18;;:::i;:::-;18938:84;18759:269;18708:320;;;:::o;19034:231::-;19174:34;19170:1;19162:6;19158:14;19151:58;19243:14;19238:2;19230:6;19226:15;19219:39;19034:231;:::o;19271:366::-;19413:3;19434:67;19498:2;19493:3;19434:67;:::i;:::-;19427:74;;19510:93;19599:3;19510:93;:::i;:::-;19628:2;19623:3;19619:12;19612:19;;19271:366;;;:::o;19643:419::-;19809:4;19847:2;19836:9;19832:18;19824:26;;19896:9;19890:4;19886:20;19882:1;19871:9;19867:17;19860:47;19924:131;20050:4;19924:131;:::i;:::-;19916:139;;19643:419;;;:::o;20068:220::-;20208:34;20204:1;20196:6;20192:14;20185:58;20277:3;20272:2;20264:6;20260:15;20253:28;20068:220;:::o;20294:366::-;20436:3;20457:67;20521:2;20516:3;20457:67;:::i;:::-;20450:74;;20533:93;20622:3;20533:93;:::i;:::-;20651:2;20646:3;20642:12;20635:19;;20294:366;;;:::o;20666:419::-;20832:4;20870:2;20859:9;20855:18;20847:26;;20919:9;20913:4;20909:20;20905:1;20894:9;20890:17;20883:47;20947:131;21073:4;20947:131;:::i;:::-;20939:139;;20666:419;;;:::o;21091:243::-;21231:34;21227:1;21219:6;21215:14;21208:58;21300:26;21295:2;21287:6;21283:15;21276:51;21091:243;:::o;21340:366::-;21482:3;21503:67;21567:2;21562:3;21503:67;:::i;:::-;21496:74;;21579:93;21668:3;21579:93;:::i;:::-;21697:2;21692:3;21688:12;21681:19;;21340:366;;;:::o;21712:419::-;21878:4;21916:2;21905:9;21901:18;21893:26;;21965:9;21959:4;21955:20;21951:1;21940:9;21936:17;21929:47;21993:131;22119:4;21993:131;:::i;:::-;21985:139;;21712:419;;;:::o;22137:236::-;22277:34;22273:1;22265:6;22261:14;22254:58;22346:19;22341:2;22333:6;22329:15;22322:44;22137:236;:::o;22379:366::-;22521:3;22542:67;22606:2;22601:3;22542:67;:::i;:::-;22535:74;;22618:93;22707:3;22618:93;:::i;:::-;22736:2;22731:3;22727:12;22720:19;;22379:366;;;:::o;22751:419::-;22917:4;22955:2;22944:9;22940:18;22932:26;;23004:9;22998:4;22994:20;22990:1;22979:9;22975:17;22968:47;23032:131;23158:4;23032:131;:::i;:::-;23024:139;;22751:419;;;:::o;23176:230::-;23316:34;23312:1;23304:6;23300:14;23293:58;23385:13;23380:2;23372:6;23368:15;23361:38;23176:230;:::o;23412:366::-;23554:3;23575:67;23639:2;23634:3;23575:67;:::i;:::-;23568:74;;23651:93;23740:3;23651:93;:::i;:::-;23769:2;23764:3;23760:12;23753:19;;23412:366;;;:::o;23784:419::-;23950:4;23988:2;23977:9;23973:18;23965:26;;24037:9;24031:4;24027:20;24023:1;24012:9;24008:17;24001:47;24065:131;24191:4;24065:131;:::i;:::-;24057:139;;23784:419;;;:::o;24209:332::-;24330:4;24368:2;24357:9;24353:18;24345:26;;24381:71;24449:1;24438:9;24434:17;24425:6;24381:71;:::i;:::-;24462:72;24530:2;24519:9;24515:18;24506:6;24462:72;:::i;:::-;24209:332;;;;;:::o;24547:143::-;24604:5;24635:6;24629:13;24620:22;;24651:33;24678:5;24651:33;:::i;:::-;24547:143;;;;:::o;24696:351::-;24766:6;24815:2;24803:9;24794:7;24790:23;24786:32;24783:119;;;24821:79;;:::i;:::-;24783:119;24941:1;24966:64;25022:7;25013:6;25002:9;24998:22;24966:64;:::i;:::-;24956:74;;24912:128;24696:351;;;;:::o;25053:180::-;25101:77;25098:1;25091:88;25198:4;25195:1;25188:15;25222:4;25219:1;25212:15;25239:305;25279:3;25298:20;25316:1;25298:20;:::i;:::-;25293:25;;25332:20;25350:1;25332:20;:::i;:::-;25327:25;;25486:1;25418:66;25414:74;25411:1;25408:81;25405:107;;;25492:18;;:::i;:::-;25405:107;25536:1;25533;25529:9;25522:16;;25239:305;;;;:::o;25550:348::-;25590:7;25613:20;25631:1;25613:20;:::i;:::-;25608:25;;25647:20;25665:1;25647:20;:::i;:::-;25642:25;;25835:1;25767:66;25763:74;25760:1;25757:81;25752:1;25745:9;25738:17;25734:105;25731:131;;;25842:18;;:::i;:::-;25731:131;25890:1;25887;25883:9;25872:20;;25550:348;;;;:::o;25904:233::-;25943:3;25966:24;25984:5;25966:24;:::i;:::-;25957:33;;26012:66;26005:5;26002:77;25999:103;;26082:18;;:::i;:::-;25999:103;26129:1;26122:5;26118:13;26111:20;;25904:233;;;:::o;26143:180::-;26191:77;26188:1;26181:88;26288:4;26285:1;26278:15;26312:4;26309:1;26302:15;26329:231;26469:34;26465:1;26457:6;26453:14;26446:58;26538:14;26533:2;26525:6;26521:15;26514:39;26329:231;:::o;26566:366::-;26708:3;26729:67;26793:2;26788:3;26729:67;:::i;:::-;26722:74;;26805:93;26894:3;26805:93;:::i;:::-;26923:2;26918:3;26914:12;26907:19;;26566:366;;;:::o;26938:419::-;27104:4;27142:2;27131:9;27127:18;27119:26;;27191:9;27185:4;27181:20;27177:1;27166:9;27162:17;27155:47;27219:131;27345:4;27219:131;:::i;:::-;27211:139;;26938:419;;;:::o;27363:228::-;27503:34;27499:1;27491:6;27487:14;27480:58;27572:11;27567:2;27559:6;27555:15;27548:36;27363:228;:::o;27597:366::-;27739:3;27760:67;27824:2;27819:3;27760:67;:::i;:::-;27753:74;;27836:93;27925:3;27836:93;:::i;:::-;27954:2;27949:3;27945:12;27938:19;;27597:366;;;:::o;27969:419::-;28135:4;28173:2;28162:9;28158:18;28150:26;;28222:9;28216:4;28212:20;28208:1;28197:9;28193:17;28186:47;28250:131;28376:4;28250:131;:::i;:::-;28242:139;;27969:419;;;:::o;28394:236::-;28534:34;28530:1;28522:6;28518:14;28511:58;28603:19;28598:2;28590:6;28586:15;28579:44;28394:236;:::o;28636:366::-;28778:3;28799:67;28863:2;28858:3;28799:67;:::i;:::-;28792:74;;28875:93;28964:3;28875:93;:::i;:::-;28993:2;28988:3;28984:12;28977:19;;28636:366;;;:::o;29008:419::-;29174:4;29212:2;29201:9;29197:18;29189:26;;29261:9;29255:4;29251:20;29247:1;29236:9;29232:17;29225:47;29289:131;29415:4;29289:131;:::i;:::-;29281:139;;29008:419;;;:::o;29433:229::-;29573:34;29569:1;29561:6;29557:14;29550:58;29642:12;29637:2;29629:6;29625:15;29618:37;29433:229;:::o;29668:366::-;29810:3;29831:67;29895:2;29890:3;29831:67;:::i;:::-;29824:74;;29907:93;29996:3;29907:93;:::i;:::-;30025:2;30020:3;30016:12;30009:19;;29668:366;;;:::o;30040:419::-;30206:4;30244:2;30233:9;30229:18;30221:26;;30293:9;30287:4;30283:20;30279:1;30268:9;30264:17;30257:47;30321:131;30447:4;30321:131;:::i;:::-;30313:139;;30040:419;;;:::o;30465:234::-;30605:34;30601:1;30593:6;30589:14;30582:58;30674:17;30669:2;30661:6;30657:15;30650:42;30465:234;:::o;30705:366::-;30847:3;30868:67;30932:2;30927:3;30868:67;:::i;:::-;30861:74;;30944:93;31033:3;30944:93;:::i;:::-;31062:2;31057:3;31053:12;31046:19;;30705:366;;;:::o;31077:419::-;31243:4;31281:2;31270:9;31266:18;31258:26;;31330:9;31324:4;31320:20;31316:1;31305:9;31301:17;31294:47;31358:131;31484:4;31358:131;:::i;:::-;31350:139;;31077:419;;;:::o;31502:148::-;31604:11;31641:3;31626:18;;31502:148;;;;:::o;31656:377::-;31762:3;31790:39;31823:5;31790:39;:::i;:::-;31845:89;31927:6;31922:3;31845:89;:::i;:::-;31838:96;;31943:52;31988:6;31983:3;31976:4;31969:5;31965:16;31943:52;:::i;:::-;32020:6;32015:3;32011:16;32004:23;;31766:267;31656:377;;;;:::o;32039:141::-;32088:4;32111:3;32103:11;;32134:3;32131:1;32124:14;32168:4;32165:1;32155:18;32147:26;;32039:141;;;:::o;32210:845::-;32313:3;32350:5;32344:12;32379:36;32405:9;32379:36;:::i;:::-;32431:89;32513:6;32508:3;32431:89;:::i;:::-;32424:96;;32551:1;32540:9;32536:17;32567:1;32562:137;;;;32713:1;32708:341;;;;32529:520;;32562:137;32646:4;32642:9;32631;32627:25;32622:3;32615:38;32682:6;32677:3;32673:16;32666:23;;32562:137;;32708:341;32775:38;32807:5;32775:38;:::i;:::-;32835:1;32849:154;32863:6;32860:1;32857:13;32849:154;;;32937:7;32931:14;32927:1;32922:3;32918:11;32911:35;32987:1;32978:7;32974:15;32963:26;;32885:4;32882:1;32878:12;32873:17;;32849:154;;;33032:6;33027:3;33023:16;33016:23;;32715:334;;32529:520;;32317:738;;32210:845;;;;:::o;33061:589::-;33286:3;33308:95;33399:3;33390:6;33308:95;:::i;:::-;33301:102;;33420:95;33511:3;33502:6;33420:95;:::i;:::-;33413:102;;33532:92;33620:3;33611:6;33532:92;:::i;:::-;33525:99;;33641:3;33634:10;;33061:589;;;;;;:::o;33656:143::-;33713:5;33744:6;33738:13;33729:22;;33760:33;33787:5;33760:33;:::i;:::-;33656:143;;;;:::o;33805:351::-;33875:6;33924:2;33912:9;33903:7;33899:23;33895:32;33892:119;;;33930:79;;:::i;:::-;33892:119;34050:1;34075:64;34131:7;34122:6;34111:9;34107:22;34075:64;:::i;:::-;34065:74;;34021:128;33805:351;;;;:::o;34162:225::-;34302:34;34298:1;34290:6;34286:14;34279:58;34371:8;34366:2;34358:6;34354:15;34347:33;34162:225;:::o;34393:366::-;34535:3;34556:67;34620:2;34615:3;34556:67;:::i;:::-;34549:74;;34632:93;34721:3;34632:93;:::i;:::-;34750:2;34745:3;34741:12;34734:19;;34393:366;;;:::o;34765:419::-;34931:4;34969:2;34958:9;34954:18;34946:26;;35018:9;35012:4;35008:20;35004:1;34993:9;34989:17;34982:47;35046:131;35172:4;35046:131;:::i;:::-;35038:139;;34765:419;;;:::o;35190:231::-;35330:34;35326:1;35318:6;35314:14;35307:58;35399:14;35394:2;35386:6;35382:15;35375:39;35190:231;:::o;35427:366::-;35569:3;35590:67;35654:2;35649:3;35590:67;:::i;:::-;35583:74;;35666:93;35755:3;35666:93;:::i;:::-;35784:2;35779:3;35775:12;35768:19;;35427:366;;;:::o;35799:419::-;35965:4;36003:2;35992:9;35988:18;35980:26;;36052:9;36046:4;36042:20;36038:1;36027:9;36023:17;36016:47;36080:131;36206:4;36080:131;:::i;:::-;36072:139;;35799:419;;;:::o;36224:224::-;36364:34;36360:1;36352:6;36348:14;36341:58;36433:7;36428:2;36420:6;36416:15;36409:32;36224:224;:::o;36454:366::-;36596:3;36617:67;36681:2;36676:3;36617:67;:::i;:::-;36610:74;;36693:93;36782:3;36693:93;:::i;:::-;36811:2;36806:3;36802:12;36795:19;;36454:366;;;:::o;36826:419::-;36992:4;37030:2;37019:9;37015:18;37007:26;;37079:9;37073:4;37069:20;37065:1;37054:9;37050:17;37043:47;37107:131;37233:4;37107:131;:::i;:::-;37099:139;;36826:419;;;:::o;37251:223::-;37391:34;37387:1;37379:6;37375:14;37368:58;37460:6;37455:2;37447:6;37443:15;37436:31;37251:223;:::o;37480:366::-;37622:3;37643:67;37707:2;37702:3;37643:67;:::i;:::-;37636:74;;37719:93;37808:3;37719:93;:::i;:::-;37837:2;37832:3;37828:12;37821:19;;37480:366;;;:::o;37852:419::-;38018:4;38056:2;38045:9;38041:18;38033:26;;38105:9;38099:4;38095:20;38091:1;38080:9;38076:17;38069:47;38133:131;38259:4;38133:131;:::i;:::-;38125:139;;37852:419;;;:::o;38277:191::-;38317:4;38337:20;38355:1;38337:20;:::i;:::-;38332:25;;38371:20;38389:1;38371:20;:::i;:::-;38366:25;;38410:1;38407;38404:8;38401:34;;;38415:18;;:::i;:::-;38401:34;38460:1;38457;38453:9;38445:17;;38277:191;;;;:::o;38474:175::-;38614:27;38610:1;38602:6;38598:14;38591:51;38474:175;:::o;38655:366::-;38797:3;38818:67;38882:2;38877:3;38818:67;:::i;:::-;38811:74;;38894:93;38983:3;38894:93;:::i;:::-;39012:2;39007:3;39003:12;38996:19;;38655:366;;;:::o;39027:419::-;39193:4;39231:2;39220:9;39216:18;39208:26;;39280:9;39274:4;39270:20;39266:1;39255:9;39251:17;39244:47;39308:131;39434:4;39308:131;:::i;:::-;39300:139;;39027:419;;;:::o;39452:237::-;39592:34;39588:1;39580:6;39576:14;39569:58;39661:20;39656:2;39648:6;39644:15;39637:45;39452:237;:::o;39695:366::-;39837:3;39858:67;39922:2;39917:3;39858:67;:::i;:::-;39851:74;;39934:93;40023:3;39934:93;:::i;:::-;40052:2;40047:3;40043:12;40036:19;;39695:366;;;:::o;40067:419::-;40233:4;40271:2;40260:9;40256:18;40248:26;;40320:9;40314:4;40310:20;40306:1;40295:9;40291:17;40284:47;40348:131;40474:4;40348:131;:::i;:::-;40340:139;;40067:419;;;:::o;40492:180::-;40540:77;40537:1;40530:88;40637:4;40634:1;40627:15;40661:4;40658:1;40651:15;40678:185;40718:1;40735:20;40753:1;40735:20;:::i;:::-;40730:25;;40769:20;40787:1;40769:20;:::i;:::-;40764:25;;40808:1;40798:35;;40813:18;;:::i;:::-;40798:35;40855:1;40852;40848:9;40843:14;;40678:185;;;;:::o;40869:176::-;40901:1;40918:20;40936:1;40918:20;:::i;:::-;40913:25;;40952:20;40970:1;40952:20;:::i;:::-;40947:25;;40991:1;40981:35;;40996:18;;:::i;:::-;40981:35;41037:1;41034;41030:9;41025:14;;40869:176;;;;:::o;41051:98::-;41102:6;41136:5;41130:12;41120:22;;41051:98;;;:::o;41155:168::-;41238:11;41272:6;41267:3;41260:19;41312:4;41307:3;41303:14;41288:29;;41155:168;;;;:::o;41329:360::-;41415:3;41443:38;41475:5;41443:38;:::i;:::-;41497:70;41560:6;41555:3;41497:70;:::i;:::-;41490:77;;41576:52;41621:6;41616:3;41609:4;41602:5;41598:16;41576:52;:::i;:::-;41653:29;41675:6;41653:29;:::i;:::-;41648:3;41644:39;41637:46;;41419:270;41329:360;;;;:::o;41695:640::-;41890:4;41928:3;41917:9;41913:19;41905:27;;41942:71;42010:1;41999:9;41995:17;41986:6;41942:71;:::i;:::-;42023:72;42091:2;42080:9;42076:18;42067:6;42023:72;:::i;:::-;42105;42173:2;42162:9;42158:18;42149:6;42105:72;:::i;:::-;42224:9;42218:4;42214:20;42209:2;42198:9;42194:18;42187:48;42252:76;42323:4;42314:6;42252:76;:::i;:::-;42244:84;;41695:640;;;;;;;:::o;42341:141::-;42397:5;42428:6;42422:13;42413:22;;42444:32;42470:5;42444:32;:::i;:::-;42341:141;;;;:::o;42488:349::-;42557:6;42606:2;42594:9;42585:7;42581:23;42577:32;42574:119;;;42612:79;;:::i;:::-;42574:119;42732:1;42757:63;42812:7;42803:6;42792:9;42788:22;42757:63;:::i;:::-;42747:73;;42703:127;42488:349;;;;:::o;42843:180::-;42891:77;42888:1;42881:88;42988:4;42985:1;42978:15;43012:4;43009:1;43002:15;43029:182;43169:34;43165:1;43157:6;43153:14;43146:58;43029:182;:::o;43217:366::-;43359:3;43380:67;43444:2;43439:3;43380:67;:::i;:::-;43373:74;;43456:93;43545:3;43456:93;:::i;:::-;43574:2;43569:3;43565:12;43558:19;;43217:366;;;:::o;43589:419::-;43755:4;43793:2;43782:9;43778:18;43770:26;;43842:9;43836:4;43832:20;43828:1;43817:9;43813:17;43806:47;43870:131;43996:4;43870:131;:::i;:::-;43862:139;;43589:419;;;:::o;44014:178::-;44154:30;44150:1;44142:6;44138:14;44131:54;44014:178;:::o;44198:366::-;44340:3;44361:67;44425:2;44420:3;44361:67;:::i;:::-;44354:74;;44437:93;44526:3;44437:93;:::i;:::-;44555:2;44550:3;44546:12;44539:19;;44198:366;;;:::o;44570:419::-;44736:4;44774:2;44763:9;44759:18;44751:26;;44823:9;44817:4;44813:20;44809:1;44798:9;44794:17;44787:47;44851:131;44977:4;44851:131;:::i;:::-;44843:139;;44570:419;;;:::o
Swarm Source
ipfs://b405a9b8cef55326c8a4a7e2341471faa534437b918a56e325027f453a52ef30
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.