ERC-721
Overview
Max Total Supply
3,080 ABLOOTS
Holders
611
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 ABLOOTSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
artBloots
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-11 */ // File: node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: node_modules\@openzeppelin\contracts\token\ERC721\IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: node_modules\@openzeppelin\contracts\token\ERC721\IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\utils\Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\token\ERC721\ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} } // File: node_modules\@openzeppelin\contracts\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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin\contracts\token\ERC721\extensions\ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin\contracts\access\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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\SmartContract.sol pragma solidity ^0.8.0; interface BlootInterface { 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 artBloots is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.01 ether; uint256 public maxSupply = 7000; uint256 public maxMintAmount = 10; uint256 public maxBlootSupply = 4000; uint256 public maxPublicSupply = 3000; bool public paused = true; mapping(address => bool) public whitelisted; //Allow Bloot holders to mint for free address public blootAddress = 0x4F8730E0b32B04beaa5757e5aea3aeF970E5B613; BlootInterface blootContract = BlootInterface(blootAddress); uint public blootOwnersSupplyMinted = 0; uint public publicSupplyMinted = 0; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); _safeMint(msg.sender, 1); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function blootFreeClaim(uint256 _mintAmount) public { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(blootOwnersSupplyMinted + _mintAmount <= maxBlootSupply, "No more Bloot owner claims"); require(supply + _mintAmount <= maxSupply); require(blootContract.balanceOf(msg.sender) > 0, "Must own a bloot to claim from this method"); blootOwnersSupplyMinted = blootOwnersSupplyMinted + _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function publicMint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(publicSupplyMinted + _mintAmount <= maxPublicSupply, "No more public supply left"); publicSupplyMinted = publicSupplyMinted + _mintAmount; require(msg.value >= cost * _mintAmount); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, 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)) : ""; } //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 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":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blootAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"blootFreeClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blootOwnersSupplyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxBlootSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSupplyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000dfe565b50662386f26fc10000600d55611b58600e55600a600f55610fa0601055610bb86011556001601260006101000a81548160ff021916908315150217905550734f8730e0b32b04beaa5757e5aea3aef970e5b613601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060165560006017553480156200015e57600080fd5b5060405162005f5638038062005f56833981810160405281019062000184919062000f63565b828281600090805190602001906200019e92919062000dfe565b508060019080519060200190620001b792919062000dfe565b505050620001da620001ce6200020760201b60201c565b6200020f60201b60201c565b620001eb81620002d560201b60201c565b620001fe3360016200038060201b60201c565b50505062001629565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002e56200020760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200030b620003a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035b9062001206565b60405180910390fd5b80600b90805190602001906200037c92919062000dfe565b5050565b620003a2828260405180602001604052806000815250620003d060201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003e283836200043e60201b60201c565b620003f760008484846200062460201b60201c565b62000439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000430906200117e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a890620011e4565b60405180910390fd5b620004c281620007de60201b60201c565b1562000505576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fc90620011a0565b60405180910390fd5b62000519600083836200084a60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200056b9190620012b4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006528473ffffffffffffffffffffffffffffffffffffffff166200099160201b62001fc61760201c565b15620007d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006846200020760201b60201c565b8786866040518563ffffffff1660e01b8152600401620006a894939291906200112a565b602060405180830381600087803b158015620006c357600080fd5b505af1925050508015620006f757506040513d601f19601f82011682018060405250810190620006f4919062000f37565b60015b62000780573d80600081146200072a576040519150601f19603f3d011682016040523d82523d6000602084013e6200072f565b606091505b5060008151141562000778576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076f906200117e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007d6565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000862838383620009a460201b62001fd91760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008af57620008a981620009a960201b60201c565b620008f7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008f657620008f58382620009f260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000944576200093e8162000b6f60201b60201c565b6200098c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200098b576200098a828262000cb760201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a0c8462000d4360201b620015cb1760201c565b62000a18919062001311565b905060006007600084815260200190815260200160002054905081811462000afe576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b85919062001311565b905060006009600084815260200190815260200160002054905060006008838154811062000bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000c25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000ccf8362000d4360201b620015cb1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000db7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dae90620011c2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e0c90620013ec565b90600052602060002090601f01602090048101928262000e30576000855562000e7c565b82601f1062000e4b57805160ff191683800117855562000e7c565b8280016001018555821562000e7c579182015b8281111562000e7b57825182559160200191906001019062000e5e565b5b50905062000e8b919062000e8f565b5090565b5b8082111562000eaa57600081600090555060010162000e90565b5090565b600062000ec562000ebf8462001251565b62001228565b90508281526020810184848401111562000ede57600080fd5b62000eeb848285620013b6565b509392505050565b60008151905062000f04816200160f565b92915050565b600082601f83011262000f1c57600080fd5b815162000f2e84826020860162000eae565b91505092915050565b60006020828403121562000f4a57600080fd5b600062000f5a8482850162000ef3565b91505092915050565b60008060006060848603121562000f7957600080fd5b600084015167ffffffffffffffff81111562000f9457600080fd5b62000fa28682870162000f0a565b935050602084015167ffffffffffffffff81111562000fc057600080fd5b62000fce8682870162000f0a565b925050604084015167ffffffffffffffff81111562000fec57600080fd5b62000ffa8682870162000f0a565b9150509250925092565b6200100f816200134c565b82525050565b6000620010228262001287565b6200102e818562001292565b935062001040818560208601620013b6565b6200104b81620014e5565b840191505092915050565b600062001065603283620012a3565b91506200107282620014f6565b604082019050919050565b60006200108c601c83620012a3565b9150620010998262001545565b602082019050919050565b6000620010b3602a83620012a3565b9150620010c0826200156e565b604082019050919050565b6000620010da602083620012a3565b9150620010e782620015bd565b602082019050919050565b600062001101602083620012a3565b91506200110e82620015e6565b602082019050919050565b6200112481620013ac565b82525050565b600060808201905062001141600083018762001004565b62001150602083018662001004565b6200115f604083018562001119565b818103606083015262001173818462001015565b905095945050505050565b60006020820190508181036000830152620011998162001056565b9050919050565b60006020820190508181036000830152620011bb816200107d565b9050919050565b60006020820190508181036000830152620011dd81620010a4565b9050919050565b60006020820190508181036000830152620011ff81620010cb565b9050919050565b600060208201905081810360008301526200122181620010f2565b9050919050565b60006200123462001247565b905062001242828262001422565b919050565b6000604051905090565b600067ffffffffffffffff8211156200126f576200126e620014b6565b5b6200127a82620014e5565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012c182620013ac565b9150620012ce83620013ac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001306576200130562001458565b5b828201905092915050565b60006200131e82620013ac565b91506200132b83620013ac565b92508282101562001341576200134062001458565b5b828203905092915050565b600062001359826200138c565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013d6578082015181840152602081019050620013b9565b83811115620013e6576000848401525b50505050565b600060028204905060018216806200140557607f821691505b602082108114156200141c576200141b62001487565b5b50919050565b6200142d82620014e5565b810181811067ffffffffffffffff821117156200144f576200144e620014b6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200161a8162001360565b81146200162657600080fd5b50565b61491d80620016396000396000f3fe6080604052600436106102515760003560e01c80635c975abb11610139578063a22cb465116100b6578063d5abeb011161007a578063d5abeb0114610896578063d936547e146108c1578063da3ef23f146108fe578063e985e9c514610927578063f2fde38b14610964578063f3db682b1461098d57610251565b8063a22cb465146107b3578063aa6d10c5146107dc578063b88d4fde14610805578063c66828621461082e578063c87b56dd1461085957610251565b8063715018a6116100fd578063715018a6146106f25780637f00c7a61461070957806388f627f7146107325780638da5cb5b1461075d57806395d89b411461078857610251565b80635c975abb146105f75780636352211e1461062257806369f399d21461065f5780636c0360eb1461068a57806370a08231146106b557610251565b806326a74d8e116101d257806342842e0e1161019657806342842e0e146104d9578063438b63001461050257806344a0d68a1461053f5780634a4c560d146105685780634f6ccce71461059157806355f804b3146105ce57610251565b806326a74d8e146104225780632db115441461044d5780632f745c591461046957806330cc7ae0146104a65780633ccfd60b146104cf57610251565b806313faede61161021957806313faede61461034d57806318160ddd14610378578063239c70ae146103a357806323b872dd146103ce5780632409f0da146103f757610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061351d565b6109b8565b60405161028a9190613b6f565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906134f4565b610a32565b005b3480156102c857600080fd5b506102d1610acb565b6040516102de9190613b8a565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906135b0565b610b5d565b60405161031b9190613ae6565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906134b8565b610be2565b005b34801561035957600080fd5b50610362610cfa565b60405161036f9190613e4c565b60405180910390f35b34801561038457600080fd5b5061038d610d00565b60405161039a9190613e4c565b60405180910390f35b3480156103af57600080fd5b506103b8610d0d565b6040516103c59190613e4c565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906133b2565b610d13565b005b34801561040357600080fd5b5061040c610d73565b6040516104199190613e4c565b60405180910390f35b34801561042e57600080fd5b50610437610d79565b6040516104449190613e4c565b60405180910390f35b610467600480360381019061046291906135b0565b610d7f565b005b34801561047557600080fd5b50610490600480360381019061048b91906134b8565b610e96565b60405161049d9190613e4c565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c8919061334d565b610f3b565b005b6104d7611012565b005b3480156104e557600080fd5b5061050060048036038101906104fb91906133b2565b6110ce565b005b34801561050e57600080fd5b506105296004803603810190610524919061334d565b6110ee565b6040516105369190613b4d565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906135b0565b6111e8565b005b34801561057457600080fd5b5061058f600480360381019061058a919061334d565b61126e565b005b34801561059d57600080fd5b506105b860048036038101906105b391906135b0565b611345565b6040516105c59190613e4c565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061356f565b6113dc565b005b34801561060357600080fd5b5061060c611472565b6040516106199190613b6f565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906135b0565b611485565b6040516106569190613ae6565b60405180910390f35b34801561066b57600080fd5b50610674611537565b6040516106819190613e4c565b60405180910390f35b34801561069657600080fd5b5061069f61153d565b6040516106ac9190613b8a565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d7919061334d565b6115cb565b6040516106e99190613e4c565b60405180910390f35b3480156106fe57600080fd5b50610707611683565b005b34801561071557600080fd5b50610730600480360381019061072b91906135b0565b61170b565b005b34801561073e57600080fd5b50610747611791565b6040516107549190613e4c565b60405180910390f35b34801561076957600080fd5b50610772611797565b60405161077f9190613ae6565b60405180910390f35b34801561079457600080fd5b5061079d6117c1565b6040516107aa9190613b8a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061347c565b611853565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906135b0565b6119d4565b005b34801561081157600080fd5b5061082c60048036038101906108279190613401565b611bbe565b005b34801561083a57600080fd5b50610843611c20565b6040516108509190613b8a565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b91906135b0565b611cae565b60405161088d9190613b8a565b60405180910390f35b3480156108a257600080fd5b506108ab611d58565b6040516108b89190613e4c565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e3919061334d565b611d5e565b6040516108f59190613b6f565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061356f565b611d7e565b005b34801561093357600080fd5b5061094e60048036038101906109499190613376565b611e14565b60405161095b9190613b6f565b60405180910390f35b34801561097057600080fd5b5061098b6004803603810190610986919061334d565b611ea8565b005b34801561099957600080fd5b506109a2611fa0565b6040516109af9190613ae6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b5750610a2a82611fde565b5b9050919050565b610a3a6120c0565b73ffffffffffffffffffffffffffffffffffffffff16610a58611797565b73ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613d4c565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610ada9061414a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b069061414a565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b68826120c8565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613d2c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bed82611485565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613dac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7d6120c0565b73ffffffffffffffffffffffffffffffffffffffff161480610cac5750610cab81610ca66120c0565b611e14565b5b610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613cac565b60405180910390fd5b610cf58383612134565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d24610d1e6120c0565b826121ed565b610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613dcc565b60405180910390fd5b610d6e8383836122cb565b505050565b60165481565b60115481565b6000610d89610d00565b9050601260009054906101000a900460ff1615610da557600080fd5b60008211610db257600080fd5b600f54821115610dc157600080fd5b600e548282610dd09190613f7f565b1115610ddb57600080fd5b60115482601754610dec9190613f7f565b1115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613e2c565b60405180910390fd5b81601754610e3b9190613f7f565b60178190555081600d54610e4f9190614006565b341015610e5b57600080fd5b6000600190505b828111610e9157610e7e338284610e799190613f7f565b612527565b8080610e89906141ad565b915050610e62565b505050565b6000610ea1836115cb565b8210610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990613bac565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f436120c0565b73ffffffffffffffffffffffffffffffffffffffff16610f61611797565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613d4c565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61101a6120c0565b73ffffffffffffffffffffffffffffffffffffffff16611038611797565b73ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613d4c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110cc57600080fd5b565b6110e983838360405180602001604052806000815250611bbe565b505050565b606060006110fb836115cb565b905060008167ffffffffffffffff81111561113f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561116d5781602001602082028036833780820191505090505b50905060005b828110156111dd576111858582610e96565b8282815181106111be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806111d5906141ad565b915050611173565b508092505050919050565b6111f06120c0565b73ffffffffffffffffffffffffffffffffffffffff1661120e611797565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613d4c565b60405180910390fd5b80600d8190555050565b6112766120c0565b73ffffffffffffffffffffffffffffffffffffffff16611294611797565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613d4c565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061134f610d00565b8210611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613dec565b60405180910390fd5b600882815481106113ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113e46120c0565b73ffffffffffffffffffffffffffffffffffffffff16611402611797565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90613d4c565b60405180910390fd5b80600b908051906020019061146e92919061315c565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613cec565b60405180910390fd5b80915050919050565b60105481565b600b805461154a9061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546115769061414a565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390613ccc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168b6120c0565b73ffffffffffffffffffffffffffffffffffffffff166116a9611797565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613d4c565b60405180910390fd5b6117096000612545565b565b6117136120c0565b73ffffffffffffffffffffffffffffffffffffffff16611731611797565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613d4c565b60405180910390fd5b80600f8190555050565b60175481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117d09061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546117fc9061414a565b80156118495780601f1061181e57610100808354040283529160200191611849565b820191906000526020600020905b81548152906001019060200180831161182c57829003601f168201915b5050505050905090565b61185b6120c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613c6c565b60405180910390fd5b80600560006118d66120c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119836120c0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c89190613b6f565b60405180910390a35050565b60006119de610d00565b9050601260009054906101000a900460ff16156119fa57600080fd5b60008211611a0757600080fd5b600f54821115611a1657600080fd5b60105482601654611a279190613f7f565b1115611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613c2c565b60405180910390fd5b600e548282611a779190613f7f565b1115611a8257600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611adf9190613ae6565b60206040518083038186803b158015611af757600080fd5b505afa158015611b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2f91906135d9565b11611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690613e0c565b60405180910390fd5b81601654611b7d9190613f7f565b6016819055506000600190505b828111611bb957611ba6338284611ba19190613f7f565b612527565b8080611bb1906141ad565b915050611b8a565b505050565b611bcf611bc96120c0565b836121ed565b611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613dcc565b60405180910390fd5b611c1a8484848461260b565b50505050565b600c8054611c2d9061414a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c599061414a565b8015611ca65780601f10611c7b57610100808354040283529160200191611ca6565b820191906000526020600020905b815481529060010190602001808311611c8957829003601f168201915b505050505081565b6060611cb9826120c8565b611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90613d8c565b60405180910390fd5b6000611d02612667565b90506000815111611d225760405180602001604052806000815250611d50565b80611d2c846126f9565b600c604051602001611d4093929190613ab5565b6040516020818303038152906040525b915050919050565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611d866120c0565b73ffffffffffffffffffffffffffffffffffffffff16611da4611797565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613d4c565b60405180910390fd5b80600c9080519060200190611e1092919061315c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611eb06120c0565b73ffffffffffffffffffffffffffffffffffffffff16611ece611797565b73ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b90613d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90613bec565b60405180910390fd5b611f9d81612545565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b957506120b8826128a6565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a783611485565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121f8826120c8565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613c8c565b60405180910390fd5b600061224283611485565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b157508373ffffffffffffffffffffffffffffffffffffffff1661229984610b5d565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c257506122c18185611e14565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122eb82611485565b73ffffffffffffffffffffffffffffffffffffffff1614612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613d6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a890613c4c565b60405180910390fd5b6123bc838383612910565b6123c7600082612134565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124179190614060565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246e9190613f7f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612541828260405180602001604052806000815250612a24565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126168484846122cb565b61262284848484612a7f565b612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890613bcc565b60405180910390fd5b50505050565b6060600b80546126769061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546126a29061414a565b80156126ef5780601f106126c4576101008083540402835291602001916126ef565b820191906000526020600020905b8154815290600101906020018083116126d257829003601f168201915b5050505050905090565b60606000821415612741576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128a1565b600082905060005b6000821461277357808061275c906141ad565b915050600a8261276c9190613fd5565b9150612749565b60008167ffffffffffffffff8111156127b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127e75781602001600182028036833780820191505090505b5090505b6000851461289a576001826128009190614060565b9150600a8561280f91906141f6565b603061281b9190613f7f565b60f81b818381518110612857577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128939190613fd5565b94506127eb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61291b838383611fd9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561295e5761295981612c16565b61299d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461299c5761299b8382612c5f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e0576129db81612dcc565b612a1f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a1e57612a1d8282612f0f565b5b5b505050565b612a2e8383612f8e565b612a3b6000848484612a7f565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190613bcc565b60405180910390fd5b505050565b6000612aa08473ffffffffffffffffffffffffffffffffffffffff16611fc6565b15612c09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ac96120c0565b8786866040518563ffffffff1660e01b8152600401612aeb9493929190613b01565b602060405180830381600087803b158015612b0557600080fd5b505af1925050508015612b3657506040513d601f19601f82011682018060405250810190612b339190613546565b60015b612bb9573d8060008114612b66576040519150601f19603f3d011682016040523d82523d6000602084013e612b6b565b606091505b50600081511415612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890613bcc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c0e565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c6c846115cb565b612c769190614060565b9050600060076000848152602001908152602001600020549050818114612d5b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612de09190614060565b9050600060096000848152602001908152602001600020549050600060088381548110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612e7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f1a836115cb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590613d0c565b60405180910390fd5b613007816120c8565b15613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90613c0c565b60405180910390fd5b61305360008383612910565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a39190613f7f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546131689061414a565b90600052602060002090601f01602090048101928261318a57600085556131d1565b82601f106131a357805160ff19168380011785556131d1565b828001600101855582156131d1579182015b828111156131d05782518255916020019190600101906131b5565b5b5090506131de91906131e2565b5090565b5b808211156131fb5760008160009055506001016131e3565b5090565b600061321261320d84613e8c565b613e67565b90508281526020810184848401111561322a57600080fd5b613235848285614108565b509392505050565b600061325061324b84613ebd565b613e67565b90508281526020810184848401111561326857600080fd5b613273848285614108565b509392505050565b60008135905061328a8161488b565b92915050565b60008135905061329f816148a2565b92915050565b6000813590506132b4816148b9565b92915050565b6000815190506132c9816148b9565b92915050565b600082601f8301126132e057600080fd5b81356132f08482602086016131ff565b91505092915050565b600082601f83011261330a57600080fd5b813561331a84826020860161323d565b91505092915050565b600081359050613332816148d0565b92915050565b600081519050613347816148d0565b92915050565b60006020828403121561335f57600080fd5b600061336d8482850161327b565b91505092915050565b6000806040838503121561338957600080fd5b60006133978582860161327b565b92505060206133a88582860161327b565b9150509250929050565b6000806000606084860312156133c757600080fd5b60006133d58682870161327b565b93505060206133e68682870161327b565b92505060406133f786828701613323565b9150509250925092565b6000806000806080858703121561341757600080fd5b60006134258782880161327b565b94505060206134368782880161327b565b935050604061344787828801613323565b925050606085013567ffffffffffffffff81111561346457600080fd5b613470878288016132cf565b91505092959194509250565b6000806040838503121561348f57600080fd5b600061349d8582860161327b565b92505060206134ae85828601613290565b9150509250929050565b600080604083850312156134cb57600080fd5b60006134d98582860161327b565b92505060206134ea85828601613323565b9150509250929050565b60006020828403121561350657600080fd5b600061351484828501613290565b91505092915050565b60006020828403121561352f57600080fd5b600061353d848285016132a5565b91505092915050565b60006020828403121561355857600080fd5b6000613566848285016132ba565b91505092915050565b60006020828403121561358157600080fd5b600082013567ffffffffffffffff81111561359b57600080fd5b6135a7848285016132f9565b91505092915050565b6000602082840312156135c257600080fd5b60006135d084828501613323565b91505092915050565b6000602082840312156135eb57600080fd5b60006135f984828501613338565b91505092915050565b600061360e8383613a97565b60208301905092915050565b61362381614094565b82525050565b600061363482613f13565b61363e8185613f41565b935061364983613eee565b8060005b8381101561367a5781516136618882613602565b975061366c83613f34565b92505060018101905061364d565b5085935050505092915050565b613690816140a6565b82525050565b60006136a182613f1e565b6136ab8185613f52565b93506136bb818560208601614117565b6136c4816142e3565b840191505092915050565b60006136da82613f29565b6136e48185613f63565b93506136f4818560208601614117565b6136fd816142e3565b840191505092915050565b600061371382613f29565b61371d8185613f74565b935061372d818560208601614117565b80840191505092915050565b600081546137468161414a565b6137508186613f74565b9450600182166000811461376b576001811461377c576137af565b60ff198316865281860193506137af565b61378585613efe565b60005b838110156137a757815481890152600182019150602081019050613788565b838801955050505b50505092915050565b60006137c5602b83613f63565b91506137d0826142f4565b604082019050919050565b60006137e8603283613f63565b91506137f382614343565b604082019050919050565b600061380b602683613f63565b915061381682614392565b604082019050919050565b600061382e601c83613f63565b9150613839826143e1565b602082019050919050565b6000613851601a83613f63565b915061385c8261440a565b602082019050919050565b6000613874602483613f63565b915061387f82614433565b604082019050919050565b6000613897601983613f63565b91506138a282614482565b602082019050919050565b60006138ba602c83613f63565b91506138c5826144ab565b604082019050919050565b60006138dd603883613f63565b91506138e8826144fa565b604082019050919050565b6000613900602a83613f63565b915061390b82614549565b604082019050919050565b6000613923602983613f63565b915061392e82614598565b604082019050919050565b6000613946602083613f63565b9150613951826145e7565b602082019050919050565b6000613969602c83613f63565b915061397482614610565b604082019050919050565b600061398c602083613f63565b91506139978261465f565b602082019050919050565b60006139af602983613f63565b91506139ba82614688565b604082019050919050565b60006139d2602f83613f63565b91506139dd826146d7565b604082019050919050565b60006139f5602183613f63565b9150613a0082614726565b604082019050919050565b6000613a18603183613f63565b9150613a2382614775565b604082019050919050565b6000613a3b602c83613f63565b9150613a46826147c4565b604082019050919050565b6000613a5e602a83613f63565b9150613a6982614813565b604082019050919050565b6000613a81601a83613f63565b9150613a8c82614862565b602082019050919050565b613aa0816140fe565b82525050565b613aaf816140fe565b82525050565b6000613ac18286613708565b9150613acd8285613708565b9150613ad98284613739565b9150819050949350505050565b6000602082019050613afb600083018461361a565b92915050565b6000608082019050613b16600083018761361a565b613b23602083018661361a565b613b306040830185613aa6565b8181036060830152613b428184613696565b905095945050505050565b60006020820190508181036000830152613b678184613629565b905092915050565b6000602082019050613b846000830184613687565b92915050565b60006020820190508181036000830152613ba481846136cf565b905092915050565b60006020820190508181036000830152613bc5816137b8565b9050919050565b60006020820190508181036000830152613be5816137db565b9050919050565b60006020820190508181036000830152613c05816137fe565b9050919050565b60006020820190508181036000830152613c2581613821565b9050919050565b60006020820190508181036000830152613c4581613844565b9050919050565b60006020820190508181036000830152613c6581613867565b9050919050565b60006020820190508181036000830152613c858161388a565b9050919050565b60006020820190508181036000830152613ca5816138ad565b9050919050565b60006020820190508181036000830152613cc5816138d0565b9050919050565b60006020820190508181036000830152613ce5816138f3565b9050919050565b60006020820190508181036000830152613d0581613916565b9050919050565b60006020820190508181036000830152613d2581613939565b9050919050565b60006020820190508181036000830152613d458161395c565b9050919050565b60006020820190508181036000830152613d658161397f565b9050919050565b60006020820190508181036000830152613d85816139a2565b9050919050565b60006020820190508181036000830152613da5816139c5565b9050919050565b60006020820190508181036000830152613dc5816139e8565b9050919050565b60006020820190508181036000830152613de581613a0b565b9050919050565b60006020820190508181036000830152613e0581613a2e565b9050919050565b60006020820190508181036000830152613e2581613a51565b9050919050565b60006020820190508181036000830152613e4581613a74565b9050919050565b6000602082019050613e616000830184613aa6565b92915050565b6000613e71613e82565b9050613e7d828261417c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ea757613ea66142b4565b5b613eb0826142e3565b9050602081019050919050565b600067ffffffffffffffff821115613ed857613ed76142b4565b5b613ee1826142e3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f8a826140fe565b9150613f95836140fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fca57613fc9614227565b5b828201905092915050565b6000613fe0826140fe565b9150613feb836140fe565b925082613ffb57613ffa614256565b5b828204905092915050565b6000614011826140fe565b915061401c836140fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405557614054614227565b5b828202905092915050565b600061406b826140fe565b9150614076836140fe565b92508282101561408957614088614227565b5b828203905092915050565b600061409f826140de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561413557808201518184015260208101905061411a565b83811115614144576000848401525b50505050565b6000600282049050600182168061416257607f821691505b6020821081141561417657614175614285565b5b50919050565b614185826142e3565b810181811067ffffffffffffffff821117156141a4576141a36142b4565b5b80604052505050565b60006141b8826140fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141eb576141ea614227565b5b600182019050919050565b6000614201826140fe565b915061420c836140fe565b92508261421c5761421b614256565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f206d6f726520426c6f6f74206f776e657220636c61696d73000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d757374206f776e206120626c6f6f7420746f20636c61696d2066726f6d207460008201527f686973206d6574686f6400000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265207075626c696320737570706c79206c656674000000000000600082015250565b61489481614094565b811461489f57600080fd5b50565b6148ab816140a6565b81146148b657600080fd5b50565b6148c2816140b2565b81146148cd57600080fd5b50565b6148d9816140fe565b81146148e457600080fd5b5056fea2646970667358221220375ae7d0f4494613d805ade5adb64f3b1a1a155b984513ffd816e511686c6f4564736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009617274426c6f6f74730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000741424c4f4f545300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f617274626c6f6f74732e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f00000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80635c975abb11610139578063a22cb465116100b6578063d5abeb011161007a578063d5abeb0114610896578063d936547e146108c1578063da3ef23f146108fe578063e985e9c514610927578063f2fde38b14610964578063f3db682b1461098d57610251565b8063a22cb465146107b3578063aa6d10c5146107dc578063b88d4fde14610805578063c66828621461082e578063c87b56dd1461085957610251565b8063715018a6116100fd578063715018a6146106f25780637f00c7a61461070957806388f627f7146107325780638da5cb5b1461075d57806395d89b411461078857610251565b80635c975abb146105f75780636352211e1461062257806369f399d21461065f5780636c0360eb1461068a57806370a08231146106b557610251565b806326a74d8e116101d257806342842e0e1161019657806342842e0e146104d9578063438b63001461050257806344a0d68a1461053f5780634a4c560d146105685780634f6ccce71461059157806355f804b3146105ce57610251565b806326a74d8e146104225780632db115441461044d5780632f745c591461046957806330cc7ae0146104a65780633ccfd60b146104cf57610251565b806313faede61161021957806313faede61461034d57806318160ddd14610378578063239c70ae146103a357806323b872dd146103ce5780632409f0da146103f757610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061351d565b6109b8565b60405161028a9190613b6f565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906134f4565b610a32565b005b3480156102c857600080fd5b506102d1610acb565b6040516102de9190613b8a565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906135b0565b610b5d565b60405161031b9190613ae6565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906134b8565b610be2565b005b34801561035957600080fd5b50610362610cfa565b60405161036f9190613e4c565b60405180910390f35b34801561038457600080fd5b5061038d610d00565b60405161039a9190613e4c565b60405180910390f35b3480156103af57600080fd5b506103b8610d0d565b6040516103c59190613e4c565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906133b2565b610d13565b005b34801561040357600080fd5b5061040c610d73565b6040516104199190613e4c565b60405180910390f35b34801561042e57600080fd5b50610437610d79565b6040516104449190613e4c565b60405180910390f35b610467600480360381019061046291906135b0565b610d7f565b005b34801561047557600080fd5b50610490600480360381019061048b91906134b8565b610e96565b60405161049d9190613e4c565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c8919061334d565b610f3b565b005b6104d7611012565b005b3480156104e557600080fd5b5061050060048036038101906104fb91906133b2565b6110ce565b005b34801561050e57600080fd5b506105296004803603810190610524919061334d565b6110ee565b6040516105369190613b4d565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906135b0565b6111e8565b005b34801561057457600080fd5b5061058f600480360381019061058a919061334d565b61126e565b005b34801561059d57600080fd5b506105b860048036038101906105b391906135b0565b611345565b6040516105c59190613e4c565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061356f565b6113dc565b005b34801561060357600080fd5b5061060c611472565b6040516106199190613b6f565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906135b0565b611485565b6040516106569190613ae6565b60405180910390f35b34801561066b57600080fd5b50610674611537565b6040516106819190613e4c565b60405180910390f35b34801561069657600080fd5b5061069f61153d565b6040516106ac9190613b8a565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d7919061334d565b6115cb565b6040516106e99190613e4c565b60405180910390f35b3480156106fe57600080fd5b50610707611683565b005b34801561071557600080fd5b50610730600480360381019061072b91906135b0565b61170b565b005b34801561073e57600080fd5b50610747611791565b6040516107549190613e4c565b60405180910390f35b34801561076957600080fd5b50610772611797565b60405161077f9190613ae6565b60405180910390f35b34801561079457600080fd5b5061079d6117c1565b6040516107aa9190613b8a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061347c565b611853565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906135b0565b6119d4565b005b34801561081157600080fd5b5061082c60048036038101906108279190613401565b611bbe565b005b34801561083a57600080fd5b50610843611c20565b6040516108509190613b8a565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b91906135b0565b611cae565b60405161088d9190613b8a565b60405180910390f35b3480156108a257600080fd5b506108ab611d58565b6040516108b89190613e4c565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e3919061334d565b611d5e565b6040516108f59190613b6f565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061356f565b611d7e565b005b34801561093357600080fd5b5061094e60048036038101906109499190613376565b611e14565b60405161095b9190613b6f565b60405180910390f35b34801561097057600080fd5b5061098b6004803603810190610986919061334d565b611ea8565b005b34801561099957600080fd5b506109a2611fa0565b6040516109af9190613ae6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b5750610a2a82611fde565b5b9050919050565b610a3a6120c0565b73ffffffffffffffffffffffffffffffffffffffff16610a58611797565b73ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613d4c565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610ada9061414a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b069061414a565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b68826120c8565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613d2c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bed82611485565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613dac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7d6120c0565b73ffffffffffffffffffffffffffffffffffffffff161480610cac5750610cab81610ca66120c0565b611e14565b5b610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613cac565b60405180910390fd5b610cf58383612134565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d24610d1e6120c0565b826121ed565b610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613dcc565b60405180910390fd5b610d6e8383836122cb565b505050565b60165481565b60115481565b6000610d89610d00565b9050601260009054906101000a900460ff1615610da557600080fd5b60008211610db257600080fd5b600f54821115610dc157600080fd5b600e548282610dd09190613f7f565b1115610ddb57600080fd5b60115482601754610dec9190613f7f565b1115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613e2c565b60405180910390fd5b81601754610e3b9190613f7f565b60178190555081600d54610e4f9190614006565b341015610e5b57600080fd5b6000600190505b828111610e9157610e7e338284610e799190613f7f565b612527565b8080610e89906141ad565b915050610e62565b505050565b6000610ea1836115cb565b8210610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990613bac565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f436120c0565b73ffffffffffffffffffffffffffffffffffffffff16610f61611797565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613d4c565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61101a6120c0565b73ffffffffffffffffffffffffffffffffffffffff16611038611797565b73ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613d4c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110cc57600080fd5b565b6110e983838360405180602001604052806000815250611bbe565b505050565b606060006110fb836115cb565b905060008167ffffffffffffffff81111561113f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561116d5781602001602082028036833780820191505090505b50905060005b828110156111dd576111858582610e96565b8282815181106111be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806111d5906141ad565b915050611173565b508092505050919050565b6111f06120c0565b73ffffffffffffffffffffffffffffffffffffffff1661120e611797565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613d4c565b60405180910390fd5b80600d8190555050565b6112766120c0565b73ffffffffffffffffffffffffffffffffffffffff16611294611797565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613d4c565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061134f610d00565b8210611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613dec565b60405180910390fd5b600882815481106113ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113e46120c0565b73ffffffffffffffffffffffffffffffffffffffff16611402611797565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90613d4c565b60405180910390fd5b80600b908051906020019061146e92919061315c565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613cec565b60405180910390fd5b80915050919050565b60105481565b600b805461154a9061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546115769061414a565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390613ccc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168b6120c0565b73ffffffffffffffffffffffffffffffffffffffff166116a9611797565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613d4c565b60405180910390fd5b6117096000612545565b565b6117136120c0565b73ffffffffffffffffffffffffffffffffffffffff16611731611797565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613d4c565b60405180910390fd5b80600f8190555050565b60175481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117d09061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546117fc9061414a565b80156118495780601f1061181e57610100808354040283529160200191611849565b820191906000526020600020905b81548152906001019060200180831161182c57829003601f168201915b5050505050905090565b61185b6120c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613c6c565b60405180910390fd5b80600560006118d66120c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119836120c0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c89190613b6f565b60405180910390a35050565b60006119de610d00565b9050601260009054906101000a900460ff16156119fa57600080fd5b60008211611a0757600080fd5b600f54821115611a1657600080fd5b60105482601654611a279190613f7f565b1115611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613c2c565b60405180910390fd5b600e548282611a779190613f7f565b1115611a8257600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611adf9190613ae6565b60206040518083038186803b158015611af757600080fd5b505afa158015611b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2f91906135d9565b11611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690613e0c565b60405180910390fd5b81601654611b7d9190613f7f565b6016819055506000600190505b828111611bb957611ba6338284611ba19190613f7f565b612527565b8080611bb1906141ad565b915050611b8a565b505050565b611bcf611bc96120c0565b836121ed565b611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613dcc565b60405180910390fd5b611c1a8484848461260b565b50505050565b600c8054611c2d9061414a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c599061414a565b8015611ca65780601f10611c7b57610100808354040283529160200191611ca6565b820191906000526020600020905b815481529060010190602001808311611c8957829003601f168201915b505050505081565b6060611cb9826120c8565b611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90613d8c565b60405180910390fd5b6000611d02612667565b90506000815111611d225760405180602001604052806000815250611d50565b80611d2c846126f9565b600c604051602001611d4093929190613ab5565b6040516020818303038152906040525b915050919050565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611d866120c0565b73ffffffffffffffffffffffffffffffffffffffff16611da4611797565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613d4c565b60405180910390fd5b80600c9080519060200190611e1092919061315c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611eb06120c0565b73ffffffffffffffffffffffffffffffffffffffff16611ece611797565b73ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b90613d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90613bec565b60405180910390fd5b611f9d81612545565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b957506120b8826128a6565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a783611485565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121f8826120c8565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613c8c565b60405180910390fd5b600061224283611485565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b157508373ffffffffffffffffffffffffffffffffffffffff1661229984610b5d565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c257506122c18185611e14565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122eb82611485565b73ffffffffffffffffffffffffffffffffffffffff1614612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613d6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a890613c4c565b60405180910390fd5b6123bc838383612910565b6123c7600082612134565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124179190614060565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246e9190613f7f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612541828260405180602001604052806000815250612a24565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126168484846122cb565b61262284848484612a7f565b612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890613bcc565b60405180910390fd5b50505050565b6060600b80546126769061414a565b80601f01602080910402602001604051908101604052809291908181526020018280546126a29061414a565b80156126ef5780601f106126c4576101008083540402835291602001916126ef565b820191906000526020600020905b8154815290600101906020018083116126d257829003601f168201915b5050505050905090565b60606000821415612741576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128a1565b600082905060005b6000821461277357808061275c906141ad565b915050600a8261276c9190613fd5565b9150612749565b60008167ffffffffffffffff8111156127b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127e75781602001600182028036833780820191505090505b5090505b6000851461289a576001826128009190614060565b9150600a8561280f91906141f6565b603061281b9190613f7f565b60f81b818381518110612857577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128939190613fd5565b94506127eb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61291b838383611fd9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561295e5761295981612c16565b61299d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461299c5761299b8382612c5f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e0576129db81612dcc565b612a1f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a1e57612a1d8282612f0f565b5b5b505050565b612a2e8383612f8e565b612a3b6000848484612a7f565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190613bcc565b60405180910390fd5b505050565b6000612aa08473ffffffffffffffffffffffffffffffffffffffff16611fc6565b15612c09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ac96120c0565b8786866040518563ffffffff1660e01b8152600401612aeb9493929190613b01565b602060405180830381600087803b158015612b0557600080fd5b505af1925050508015612b3657506040513d601f19601f82011682018060405250810190612b339190613546565b60015b612bb9573d8060008114612b66576040519150601f19603f3d011682016040523d82523d6000602084013e612b6b565b606091505b50600081511415612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890613bcc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c0e565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c6c846115cb565b612c769190614060565b9050600060076000848152602001908152602001600020549050818114612d5b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612de09190614060565b9050600060096000848152602001908152602001600020549050600060088381548110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612e7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f1a836115cb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590613d0c565b60405180910390fd5b613007816120c8565b15613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90613c0c565b60405180910390fd5b61305360008383612910565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a39190613f7f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546131689061414a565b90600052602060002090601f01602090048101928261318a57600085556131d1565b82601f106131a357805160ff19168380011785556131d1565b828001600101855582156131d1579182015b828111156131d05782518255916020019190600101906131b5565b5b5090506131de91906131e2565b5090565b5b808211156131fb5760008160009055506001016131e3565b5090565b600061321261320d84613e8c565b613e67565b90508281526020810184848401111561322a57600080fd5b613235848285614108565b509392505050565b600061325061324b84613ebd565b613e67565b90508281526020810184848401111561326857600080fd5b613273848285614108565b509392505050565b60008135905061328a8161488b565b92915050565b60008135905061329f816148a2565b92915050565b6000813590506132b4816148b9565b92915050565b6000815190506132c9816148b9565b92915050565b600082601f8301126132e057600080fd5b81356132f08482602086016131ff565b91505092915050565b600082601f83011261330a57600080fd5b813561331a84826020860161323d565b91505092915050565b600081359050613332816148d0565b92915050565b600081519050613347816148d0565b92915050565b60006020828403121561335f57600080fd5b600061336d8482850161327b565b91505092915050565b6000806040838503121561338957600080fd5b60006133978582860161327b565b92505060206133a88582860161327b565b9150509250929050565b6000806000606084860312156133c757600080fd5b60006133d58682870161327b565b93505060206133e68682870161327b565b92505060406133f786828701613323565b9150509250925092565b6000806000806080858703121561341757600080fd5b60006134258782880161327b565b94505060206134368782880161327b565b935050604061344787828801613323565b925050606085013567ffffffffffffffff81111561346457600080fd5b613470878288016132cf565b91505092959194509250565b6000806040838503121561348f57600080fd5b600061349d8582860161327b565b92505060206134ae85828601613290565b9150509250929050565b600080604083850312156134cb57600080fd5b60006134d98582860161327b565b92505060206134ea85828601613323565b9150509250929050565b60006020828403121561350657600080fd5b600061351484828501613290565b91505092915050565b60006020828403121561352f57600080fd5b600061353d848285016132a5565b91505092915050565b60006020828403121561355857600080fd5b6000613566848285016132ba565b91505092915050565b60006020828403121561358157600080fd5b600082013567ffffffffffffffff81111561359b57600080fd5b6135a7848285016132f9565b91505092915050565b6000602082840312156135c257600080fd5b60006135d084828501613323565b91505092915050565b6000602082840312156135eb57600080fd5b60006135f984828501613338565b91505092915050565b600061360e8383613a97565b60208301905092915050565b61362381614094565b82525050565b600061363482613f13565b61363e8185613f41565b935061364983613eee565b8060005b8381101561367a5781516136618882613602565b975061366c83613f34565b92505060018101905061364d565b5085935050505092915050565b613690816140a6565b82525050565b60006136a182613f1e565b6136ab8185613f52565b93506136bb818560208601614117565b6136c4816142e3565b840191505092915050565b60006136da82613f29565b6136e48185613f63565b93506136f4818560208601614117565b6136fd816142e3565b840191505092915050565b600061371382613f29565b61371d8185613f74565b935061372d818560208601614117565b80840191505092915050565b600081546137468161414a565b6137508186613f74565b9450600182166000811461376b576001811461377c576137af565b60ff198316865281860193506137af565b61378585613efe565b60005b838110156137a757815481890152600182019150602081019050613788565b838801955050505b50505092915050565b60006137c5602b83613f63565b91506137d0826142f4565b604082019050919050565b60006137e8603283613f63565b91506137f382614343565b604082019050919050565b600061380b602683613f63565b915061381682614392565b604082019050919050565b600061382e601c83613f63565b9150613839826143e1565b602082019050919050565b6000613851601a83613f63565b915061385c8261440a565b602082019050919050565b6000613874602483613f63565b915061387f82614433565b604082019050919050565b6000613897601983613f63565b91506138a282614482565b602082019050919050565b60006138ba602c83613f63565b91506138c5826144ab565b604082019050919050565b60006138dd603883613f63565b91506138e8826144fa565b604082019050919050565b6000613900602a83613f63565b915061390b82614549565b604082019050919050565b6000613923602983613f63565b915061392e82614598565b604082019050919050565b6000613946602083613f63565b9150613951826145e7565b602082019050919050565b6000613969602c83613f63565b915061397482614610565b604082019050919050565b600061398c602083613f63565b91506139978261465f565b602082019050919050565b60006139af602983613f63565b91506139ba82614688565b604082019050919050565b60006139d2602f83613f63565b91506139dd826146d7565b604082019050919050565b60006139f5602183613f63565b9150613a0082614726565b604082019050919050565b6000613a18603183613f63565b9150613a2382614775565b604082019050919050565b6000613a3b602c83613f63565b9150613a46826147c4565b604082019050919050565b6000613a5e602a83613f63565b9150613a6982614813565b604082019050919050565b6000613a81601a83613f63565b9150613a8c82614862565b602082019050919050565b613aa0816140fe565b82525050565b613aaf816140fe565b82525050565b6000613ac18286613708565b9150613acd8285613708565b9150613ad98284613739565b9150819050949350505050565b6000602082019050613afb600083018461361a565b92915050565b6000608082019050613b16600083018761361a565b613b23602083018661361a565b613b306040830185613aa6565b8181036060830152613b428184613696565b905095945050505050565b60006020820190508181036000830152613b678184613629565b905092915050565b6000602082019050613b846000830184613687565b92915050565b60006020820190508181036000830152613ba481846136cf565b905092915050565b60006020820190508181036000830152613bc5816137b8565b9050919050565b60006020820190508181036000830152613be5816137db565b9050919050565b60006020820190508181036000830152613c05816137fe565b9050919050565b60006020820190508181036000830152613c2581613821565b9050919050565b60006020820190508181036000830152613c4581613844565b9050919050565b60006020820190508181036000830152613c6581613867565b9050919050565b60006020820190508181036000830152613c858161388a565b9050919050565b60006020820190508181036000830152613ca5816138ad565b9050919050565b60006020820190508181036000830152613cc5816138d0565b9050919050565b60006020820190508181036000830152613ce5816138f3565b9050919050565b60006020820190508181036000830152613d0581613916565b9050919050565b60006020820190508181036000830152613d2581613939565b9050919050565b60006020820190508181036000830152613d458161395c565b9050919050565b60006020820190508181036000830152613d658161397f565b9050919050565b60006020820190508181036000830152613d85816139a2565b9050919050565b60006020820190508181036000830152613da5816139c5565b9050919050565b60006020820190508181036000830152613dc5816139e8565b9050919050565b60006020820190508181036000830152613de581613a0b565b9050919050565b60006020820190508181036000830152613e0581613a2e565b9050919050565b60006020820190508181036000830152613e2581613a51565b9050919050565b60006020820190508181036000830152613e4581613a74565b9050919050565b6000602082019050613e616000830184613aa6565b92915050565b6000613e71613e82565b9050613e7d828261417c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ea757613ea66142b4565b5b613eb0826142e3565b9050602081019050919050565b600067ffffffffffffffff821115613ed857613ed76142b4565b5b613ee1826142e3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f8a826140fe565b9150613f95836140fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fca57613fc9614227565b5b828201905092915050565b6000613fe0826140fe565b9150613feb836140fe565b925082613ffb57613ffa614256565b5b828204905092915050565b6000614011826140fe565b915061401c836140fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405557614054614227565b5b828202905092915050565b600061406b826140fe565b9150614076836140fe565b92508282101561408957614088614227565b5b828203905092915050565b600061409f826140de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561413557808201518184015260208101905061411a565b83811115614144576000848401525b50505050565b6000600282049050600182168061416257607f821691505b6020821081141561417657614175614285565b5b50919050565b614185826142e3565b810181811067ffffffffffffffff821117156141a4576141a36142b4565b5b80604052505050565b60006141b8826140fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141eb576141ea614227565b5b600182019050919050565b6000614201826140fe565b915061420c836140fe565b92508261421c5761421b614256565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f206d6f726520426c6f6f74206f776e657220636c61696d73000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d757374206f776e206120626c6f6f7420746f20636c61696d2066726f6d207460008201527f686973206d6574686f6400000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265207075626c696320737570706c79206c656674000000000000600082015250565b61489481614094565b811461489f57600080fd5b50565b6148ab816140a6565b81146148b657600080fd5b50565b6148c2816140b2565b81146148cd57600080fd5b50565b6148d9816140fe565b81146148e457600080fd5b5056fea2646970667358221220375ae7d0f4494613d805ade5adb64f3b1a1a155b984513ffd816e511686c6f4564736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009617274426c6f6f74730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000741424c4f4f545300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f617274626c6f6f74732e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f00000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): artBloots
Arg [1] : _symbol (string): ABLOOTS
Arg [2] : _initBaseURI (string): https://artbloots.s3.us-east-2.amazonaws.com/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 617274426c6f6f74730000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 41424c4f4f545300000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [8] : 68747470733a2f2f617274626c6f6f74732e73332e75732d656173742d322e61
Arg [9] : 6d617a6f6e6177732e636f6d2f00000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43670:3876:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34850:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47144:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21738:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23297:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22820:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43823:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35490:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43896:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44286:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43975:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45344:551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35158:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47323:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47429:114;;;:::i;:::-;;24597:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45901:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46700:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47223:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35680:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46912:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44017:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21432:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43934:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43755:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21162:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42647:94;;;;;;;;;;;;;:::i;:::-;;46788:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44330:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41996:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21907:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23590:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44717:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24853:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43781:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46255:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43860:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44047:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47016:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23956:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42896:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44145:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34850:224;34952:4;34991:35;34976:50;;;:11;:50;;;;:90;;;;35030:36;35054:11;35030:23;:36::i;:::-;34976:90;34969:97;;34850:224;;;:::o;47144:73::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47205:6:::1;47196;;:15;;;;;;;;;;;;;;;;;;47144:73:::0;:::o;21738:100::-;21792:13;21825:5;21818:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21738:100;:::o;23297:221::-;23373:7;23401:16;23409:7;23401;:16::i;:::-;23393:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:15;:24;23502:7;23486:24;;;;;;;;;;;;;;;;;;;;;23479:31;;23297:221;;;:::o;22820:411::-;22901:13;22917:23;22932:7;22917:14;:23::i;:::-;22901:39;;22965:5;22959:11;;:2;:11;;;;22951:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:5;23043:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23068:37;23085:5;23092:12;:10;:12::i;:::-;23068:16;:37::i;:::-;23043:62;23021:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23202:21;23211:2;23215:7;23202:8;:21::i;:::-;22820:411;;;:::o;43823:32::-;;;;:::o;35490:113::-;35551:7;35578:10;:17;;;;35571:24;;35490:113;:::o;43896:33::-;;;;:::o;24187:339::-;24382:41;24401:12;:10;:12::i;:::-;24415:7;24382:18;:41::i;:::-;24374:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24490:28;24500:4;24506:2;24510:7;24490:9;:28::i;:::-;24187:339;;;:::o;44286:39::-;;;;:::o;43975:37::-;;;;:::o;45344:551::-;45407:14;45424:13;:11;:13::i;:::-;45407:30;;45453:6;;;;;;;;;;;45452:7;45444:16;;;;;;45489:1;45475:11;:15;45467:24;;;;;;45521:13;;45506:11;:28;;45498:37;;;;;;45574:9;;45559:11;45550:6;:20;;;;:::i;:::-;:33;;45542:42;;;;;;45635:15;;45620:11;45599:18;;:32;;;;:::i;:::-;:51;;45591:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45730:11;45709:18;;:32;;;;:::i;:::-;45688:18;:53;;;;45776:11;45769:4;;:18;;;;:::i;:::-;45756:9;:31;;45748:40;;;;;;45802:9;45814:1;45802:13;;45797:93;45822:11;45817:1;:16;45797:93;;45849:33;45859:10;45880:1;45871:6;:10;;;;:::i;:::-;45849:9;:33::i;:::-;45835:3;;;;;:::i;:::-;;;;45797:93;;;;45344:551;;:::o;35158:256::-;35255:7;35291:23;35308:5;35291:16;:23::i;:::-;35283:5;:31;35275:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35380:12;:19;35393:5;35380:19;;;;;;;;;;;;;;;:26;35400:5;35380:26;;;;;;;;;;;;35373:33;;35158:256;;;;:::o;47323:100::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47412:5:::1;47391:11;:18;47403:5;47391:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47323:100:::0;:::o;47429:114::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47497:10:::1;47489:24;;:47;47514:21;47489:47;;;;;;;;;;;;;;;;;;;;;;;47481:56;;;::::0;::::1;;47429:114::o:0;24597:185::-;24735:39;24752:4;24758:2;24762:7;24735:39;;;;;;;;;;;;:16;:39::i;:::-;24597:185;;;:::o;45901:348::-;45976:16;46004:23;46030:17;46040:6;46030:9;:17::i;:::-;46004:43;;46054:25;46096:15;46082:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46054:58;;46124:9;46119:103;46139:15;46135:1;:19;46119:103;;;46184:30;46204:6;46212:1;46184:19;:30::i;:::-;46170:8;46179:1;46170:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;46156:3;;;;;:::i;:::-;;;;46119:103;;;;46235:8;46228:15;;;;45901:348;;;:::o;46700:82::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46768:8:::1;46761:4;:15;;;;46700:82:::0;:::o;47223:93::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47306:4:::1;47285:11;:18;47297:5;47285:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;47223:93:::0;:::o;35680:233::-;35755:7;35791:30;:28;:30::i;:::-;35783:5;:38;35775:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35888:10;35899:5;35888:17;;;;;;;;;;;;;;;;;;;;;;;;35881:24;;35680:233;;;:::o;46912:98::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46993:11:::1;46983:7;:21;;;;;;;;;;;;:::i;:::-;;46912:98:::0;:::o;44017:25::-;;;;;;;;;;;;;:::o;21432:239::-;21504:7;21524:13;21540:7;:16;21548:7;21540:16;;;;;;;;;;;;;;;;;;;;;21524:32;;21592:1;21575:19;;:5;:19;;;;21567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21658:5;21651:12;;;21432:239;;;:::o;43934:36::-;;;;:::o;43755:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21162:208::-;21234:7;21279:1;21262:19;;:5;:19;;;;21254:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21346:9;:16;21356:5;21346:16;;;;;;;;;;;;;;;;21339:23;;21162:208;;;:::o;42647:94::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42712:21:::1;42730:1;42712:9;:21::i;:::-;42647:94::o:0;46788:118::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46883:17:::1;46867:13;:33;;;;46788:118:::0;:::o;44330:34::-;;;;:::o;41996:87::-;42042:7;42069:6;;;;;;;;;;;42062:13;;41996:87;:::o;21907:104::-;21963:13;21996:7;21989:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21907:104;:::o;23590:295::-;23705:12;:10;:12::i;:::-;23693:24;;:8;:24;;;;23685:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23805:8;23760:18;:32;23779:12;:10;:12::i;:::-;23760:32;;;;;;;;;;;;;;;:42;23793:8;23760:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23858:8;23829:48;;23844:12;:10;:12::i;:::-;23829:48;;;23868:8;23829:48;;;;;;:::i;:::-;;;;;;;;23590:295;;:::o;44717:619::-;44776:14;44793:13;:11;:13::i;:::-;44776:30;;44822:6;;;;;;;;;;;44821:7;44813:16;;;;;;44858:1;44844:11;:15;44836:24;;;;;;44890:13;;44875:11;:28;;44867:37;;;;;;44960:14;;44945:11;44919:23;;:37;;;;:::i;:::-;:55;;44911:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45044:9;;45029:11;45020:6;:20;;;;:::i;:::-;:33;;45012:42;;;;;;45107:1;45069:13;;;;;;;;;;;:23;;;45093:10;45069:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;45061:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45214:11;45188:23;;:37;;;;:::i;:::-;45162:23;:63;;;;45243:9;45255:1;45243:13;;45238:93;45263:11;45258:1;:16;45238:93;;45290:33;45300:10;45321:1;45312:6;:10;;;;:::i;:::-;45290:9;:33::i;:::-;45276:3;;;;;:::i;:::-;;;;45238:93;;;;44717:619;;:::o;24853:328::-;25028:41;25047:12;:10;:12::i;:::-;25061:7;25028:18;:41::i;:::-;25020:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25134:39;25148:4;25154:2;25158:7;25167:5;25134:13;:39::i;:::-;24853:328;;;;:::o;43781:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46255:423::-;46353:13;46394:16;46402:7;46394;:16::i;:::-;46378:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46484:28;46515:10;:8;:10::i;:::-;46484:41;;46570:1;46545:14;46539:28;:32;:133;;;;;;;;;;;;;;;;;46607:14;46623:18;:7;:16;:18::i;:::-;46643:13;46590:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46539:133;46532:140;;;46255:423;;;:::o;43860:31::-;;;;:::o;44047:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;47016:122::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47115:17:::1;47099:13;:33;;;;;;;;;;;;:::i;:::-;;47016:122:::0;:::o;23956:164::-;24053:4;24077:18;:25;24096:5;24077:25;;;;;;;;;;;;;;;:35;24103:8;24077:35;;;;;;;;;;;;;;;;;;;;;;;;;24070:42;;23956:164;;;;:::o;42896:192::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43005:1:::1;42985:22;;:8;:22;;;;42977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43061:19;43071:8;43061:9;:19::i;:::-;42896:192:::0;:::o;44145:72::-;;;;;;;;;;;;;:::o;8207:387::-;8267:4;8475:12;8542:7;8530:20;8522:28;;8585:1;8578:4;:8;8571:15;;;8207:387;;;:::o;32783:126::-;;;;:::o;20793:305::-;20895:4;20947:25;20932:40;;;:11;:40;;;;:105;;;;21004:33;20989:48;;;:11;:48;;;;20932:105;:158;;;;21054:36;21078:11;21054:23;:36::i;:::-;20932:158;20912:178;;20793:305;;;:::o;16176:98::-;16229:7;16256:10;16249:17;;16176:98;:::o;26691:127::-;26756:4;26808:1;26780:30;;:7;:16;26788:7;26780:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26773:37;;26691:127;;;:::o;30673:174::-;30775:2;30748:15;:24;30764:7;30748:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30831:7;30827:2;30793:46;;30802:23;30817:7;30802:14;:23::i;:::-;30793:46;;;;;;;;;;;;30673:174;;:::o;26985:348::-;27078:4;27103:16;27111:7;27103;:16::i;:::-;27095:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27179:13;27195:23;27210:7;27195:14;:23::i;:::-;27179:39;;27248:5;27237:16;;:7;:16;;;:51;;;;27281:7;27257:31;;:20;27269:7;27257:11;:20::i;:::-;:31;;;27237:51;:87;;;;27292:32;27309:5;27316:7;27292:16;:32::i;:::-;27237:87;27229:96;;;26985:348;;;;:::o;29977:578::-;30136:4;30109:31;;:23;30124:7;30109:14;:23::i;:::-;:31;;;30101:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30219:1;30205:16;;:2;:16;;;;30197:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30275:39;30296:4;30302:2;30306:7;30275:20;:39::i;:::-;30379:29;30396:1;30400:7;30379:8;:29::i;:::-;30440:1;30421:9;:15;30431:4;30421:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30469:1;30452:9;:13;30462:2;30452:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30500:2;30481:7;:16;30489:7;30481:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30539:7;30535:2;30520:27;;30529:4;30520:27;;;;;;;;;;;;29977:578;;;:::o;27675:110::-;27751:26;27761:2;27765:7;27751:26;;;;;;;;;;;;:9;:26::i;:::-;27675:110;;:::o;43096:173::-;43152:16;43171:6;;;;;;;;;;;43152:25;;43197:8;43188:6;;:17;;;;;;;;;;;;;;;;;;43252:8;43221:40;;43242:8;43221:40;;;;;;;;;;;;43096:173;;:::o;26063:315::-;26220:28;26230:4;26236:2;26240:7;26220:9;:28::i;:::-;26267:48;26290:4;26296:2;26300:7;26309:5;26267:22;:48::i;:::-;26259:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26063:315;;;;:::o;44592:102::-;44652:13;44681:7;44674:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44592:102;:::o;16714:723::-;16770:13;17000:1;16991:5;:10;16987:53;;;17018:10;;;;;;;;;;;;;;;;;;;;;16987:53;17050:12;17065:5;17050:20;;17081:14;17106:78;17121:1;17113:4;:9;17106:78;;17139:8;;;;;:::i;:::-;;;;17170:2;17162:10;;;;;:::i;:::-;;;17106:78;;;17194:19;17226:6;17216:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17194:39;;17244:154;17260:1;17251:5;:10;17244:154;;17288:1;17278:11;;;;;:::i;:::-;;;17355:2;17347:5;:10;;;;:::i;:::-;17334:2;:24;;;;:::i;:::-;17321:39;;17304:6;17311;17304:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17384:2;17375:11;;;;;:::i;:::-;;;17244:154;;;17422:6;17408:21;;;;;16714:723;;;;:::o;19284:157::-;19369:4;19408:25;19393:40;;;:11;:40;;;;19386:47;;19284:157;;;:::o;36526:589::-;36670:45;36697:4;36703:2;36707:7;36670:26;:45::i;:::-;36748:1;36732:18;;:4;:18;;;36728:187;;;36767:40;36799:7;36767:31;:40::i;:::-;36728:187;;;36837:2;36829:10;;:4;:10;;;36825:90;;36856:47;36889:4;36895:7;36856:32;:47::i;:::-;36825:90;36728:187;36943:1;36929:16;;:2;:16;;;36925:183;;;36962:45;36999:7;36962:36;:45::i;:::-;36925:183;;;37035:4;37029:10;;:2;:10;;;37025:83;;37056:40;37084:2;37088:7;37056:27;:40::i;:::-;37025:83;36925:183;36526:589;;;:::o;28012:321::-;28142:18;28148:2;28152:7;28142:5;:18::i;:::-;28193:54;28224:1;28228:2;28232:7;28241:5;28193:22;:54::i;:::-;28171:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28012:321;;;:::o;31412:799::-;31567:4;31588:15;:2;:13;;;:15::i;:::-;31584:620;;;31640:2;31624:36;;;31661:12;:10;:12::i;:::-;31675:4;31681:7;31690:5;31624:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31620:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31883:1;31866:6;:13;:18;31862:272;;;31909:60;;;;;;;;;;:::i;:::-;;;;;;;;31862:272;32084:6;32078:13;32069:6;32065:2;32061:15;32054:38;31620:529;31757:41;;;31747:51;;;:6;:51;;;;31740:58;;;;;31584:620;32188:4;32181:11;;31412:799;;;;;;;:::o;37838:164::-;37942:10;:17;;;;37915:15;:24;37931:7;37915:24;;;;;;;;;;;:44;;;;37970:10;37986:7;37970:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37838:164;:::o;38629:988::-;38895:22;38945:1;38920:22;38937:4;38920:16;:22::i;:::-;:26;;;;:::i;:::-;38895:51;;38957:18;38978:17;:26;38996:7;38978:26;;;;;;;;;;;;38957:47;;39125:14;39111:10;:28;39107:328;;39156:19;39178:12;:18;39191:4;39178:18;;;;;;;;;;;;;;;:34;39197:14;39178:34;;;;;;;;;;;;39156:56;;39262:11;39229:12;:18;39242:4;39229:18;;;;;;;;;;;;;;;:30;39248:10;39229:30;;;;;;;;;;;:44;;;;39379:10;39346:17;:30;39364:11;39346:30;;;;;;;;;;;:43;;;;39107:328;;39531:17;:26;39549:7;39531:26;;;;;;;;;;;39524:33;;;39575:12;:18;39588:4;39575:18;;;;;;;;;;;;;;;:34;39594:14;39575:34;;;;;;;;;;;39568:41;;;38629:988;;;;:::o;39912:1079::-;40165:22;40210:1;40190:10;:17;;;;:21;;;;:::i;:::-;40165:46;;40222:18;40243:15;:24;40259:7;40243:24;;;;;;;;;;;;40222:45;;40594:19;40616:10;40627:14;40616:26;;;;;;;;;;;;;;;;;;;;;;;;40594:48;;40680:11;40655:10;40666;40655:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40791:10;40760:15;:28;40776:11;40760:28;;;;;;;;;;;:41;;;;40932:15;:24;40948:7;40932:24;;;;;;;;;;;40925:31;;;40967:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39912:1079;;;;:::o;37416:221::-;37501:14;37518:20;37535:2;37518:16;:20::i;:::-;37501:37;;37576:7;37549:12;:16;37562:2;37549:16;;;;;;;;;;;;;;;:24;37566:6;37549:24;;;;;;;;;;;:34;;;;37623:6;37594:17;:26;37612:7;37594:26;;;;;;;;;;;:35;;;;37416:221;;;:::o;28669:382::-;28763:1;28749:16;;:2;:16;;;;28741:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28822:16;28830:7;28822;:16::i;:::-;28821:17;28813:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28884:45;28913:1;28917:2;28921:7;28884:20;:45::i;:::-;28959:1;28942:9;:13;28952:2;28942:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28990:2;28971:7;:16;28979:7;28971:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29035:7;29031:2;29010:33;;29027:1;29010:33;;;;;;;;;;;;28669:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:143::-;2066:5;2097:6;2091:13;2082:22;;2113:33;2140:5;2113:33;:::i;:::-;2072:80;;;;:::o;2158:262::-;2217:6;2266:2;2254:9;2245:7;2241:23;2237:32;2234:2;;;2282:1;2279;2272:12;2234:2;2325:1;2350:53;2395:7;2386:6;2375:9;2371:22;2350:53;:::i;:::-;2340:63;;2296:117;2224:196;;;;:::o;2426:407::-;2494:6;2502;2551:2;2539:9;2530:7;2526:23;2522:32;2519:2;;;2567:1;2564;2557:12;2519:2;2610:1;2635:53;2680:7;2671:6;2660:9;2656:22;2635:53;:::i;:::-;2625:63;;2581:117;2737:2;2763:53;2808:7;2799:6;2788:9;2784:22;2763:53;:::i;:::-;2753:63;;2708:118;2509:324;;;;;:::o;2839:552::-;2916:6;2924;2932;2981:2;2969:9;2960:7;2956:23;2952:32;2949:2;;;2997:1;2994;2987:12;2949:2;3040:1;3065:53;3110:7;3101:6;3090:9;3086:22;3065:53;:::i;:::-;3055:63;;3011:117;3167:2;3193:53;3238:7;3229:6;3218:9;3214:22;3193:53;:::i;:::-;3183:63;;3138:118;3295:2;3321:53;3366:7;3357:6;3346:9;3342:22;3321:53;:::i;:::-;3311:63;;3266:118;2939:452;;;;;:::o;3397:809::-;3492:6;3500;3508;3516;3565:3;3553:9;3544:7;3540:23;3536:33;3533:2;;;3582:1;3579;3572:12;3533:2;3625:1;3650:53;3695:7;3686:6;3675:9;3671:22;3650:53;:::i;:::-;3640:63;;3596:117;3752:2;3778:53;3823:7;3814:6;3803:9;3799:22;3778:53;:::i;:::-;3768:63;;3723:118;3880:2;3906:53;3951:7;3942:6;3931:9;3927:22;3906:53;:::i;:::-;3896:63;;3851:118;4036:2;4025:9;4021:18;4008:32;4067:18;4059:6;4056:30;4053:2;;;4099:1;4096;4089:12;4053:2;4127:62;4181:7;4172:6;4161:9;4157:22;4127:62;:::i;:::-;4117:72;;3979:220;3523:683;;;;;;;:::o;4212:401::-;4277:6;4285;4334:2;4322:9;4313:7;4309:23;4305:32;4302:2;;;4350:1;4347;4340:12;4302:2;4393:1;4418:53;4463:7;4454:6;4443:9;4439:22;4418:53;:::i;:::-;4408:63;;4364:117;4520:2;4546:50;4588:7;4579:6;4568:9;4564:22;4546:50;:::i;:::-;4536:60;;4491:115;4292:321;;;;;:::o;4619:407::-;4687:6;4695;4744:2;4732:9;4723:7;4719:23;4715:32;4712:2;;;4760:1;4757;4750:12;4712:2;4803:1;4828:53;4873:7;4864:6;4853:9;4849:22;4828:53;:::i;:::-;4818:63;;4774:117;4930:2;4956:53;5001:7;4992:6;4981:9;4977:22;4956:53;:::i;:::-;4946:63;;4901:118;4702:324;;;;;:::o;5032:256::-;5088:6;5137:2;5125:9;5116:7;5112:23;5108:32;5105:2;;;5153:1;5150;5143:12;5105:2;5196:1;5221:50;5263:7;5254:6;5243:9;5239:22;5221:50;:::i;:::-;5211:60;;5167:114;5095:193;;;;:::o;5294:260::-;5352:6;5401:2;5389:9;5380:7;5376:23;5372:32;5369:2;;;5417:1;5414;5407:12;5369:2;5460:1;5485:52;5529:7;5520:6;5509:9;5505:22;5485:52;:::i;:::-;5475:62;;5431:116;5359:195;;;;:::o;5560:282::-;5629:6;5678:2;5666:9;5657:7;5653:23;5649:32;5646:2;;;5694:1;5691;5684:12;5646:2;5737:1;5762:63;5817:7;5808:6;5797:9;5793:22;5762:63;:::i;:::-;5752:73;;5708:127;5636:206;;;;:::o;5848:375::-;5917:6;5966:2;5954:9;5945:7;5941:23;5937:32;5934:2;;;5982:1;5979;5972:12;5934:2;6053:1;6042:9;6038:17;6025:31;6083:18;6075:6;6072:30;6069:2;;;6115:1;6112;6105:12;6069:2;6143:63;6198:7;6189:6;6178:9;6174:22;6143:63;:::i;:::-;6133:73;;5996:220;5924:299;;;;:::o;6229:262::-;6288:6;6337:2;6325:9;6316:7;6312:23;6308:32;6305:2;;;6353:1;6350;6343:12;6305:2;6396:1;6421:53;6466:7;6457:6;6446:9;6442:22;6421:53;:::i;:::-;6411:63;;6367:117;6295:196;;;;:::o;6497:284::-;6567:6;6616:2;6604:9;6595:7;6591:23;6587:32;6584:2;;;6632:1;6629;6622:12;6584:2;6675:1;6700:64;6756:7;6747:6;6736:9;6732:22;6700:64;:::i;:::-;6690:74;;6646:128;6574:207;;;;:::o;6787:179::-;6856:10;6877:46;6919:3;6911:6;6877:46;:::i;:::-;6955:4;6950:3;6946:14;6932:28;;6867:99;;;;:::o;6972:118::-;7059:24;7077:5;7059:24;:::i;:::-;7054:3;7047:37;7037:53;;:::o;7126:732::-;7245:3;7274:54;7322:5;7274:54;:::i;:::-;7344:86;7423:6;7418:3;7344:86;:::i;:::-;7337:93;;7454:56;7504:5;7454:56;:::i;:::-;7533:7;7564:1;7549:284;7574:6;7571:1;7568:13;7549:284;;;7650:6;7644:13;7677:63;7736:3;7721:13;7677:63;:::i;:::-;7670:70;;7763:60;7816:6;7763:60;:::i;:::-;7753:70;;7609:224;7596:1;7593;7589:9;7584:14;;7549:284;;;7553:14;7849:3;7842:10;;7250:608;;;;;;;:::o;7864:109::-;7945:21;7960:5;7945:21;:::i;:::-;7940:3;7933:34;7923:50;;:::o;7979:360::-;8065:3;8093:38;8125:5;8093:38;:::i;:::-;8147:70;8210:6;8205:3;8147:70;:::i;:::-;8140:77;;8226:52;8271:6;8266:3;8259:4;8252:5;8248:16;8226:52;:::i;:::-;8303:29;8325:6;8303:29;:::i;:::-;8298:3;8294:39;8287:46;;8069:270;;;;;:::o;8345:364::-;8433:3;8461:39;8494:5;8461:39;:::i;:::-;8516:71;8580:6;8575:3;8516:71;:::i;:::-;8509:78;;8596:52;8641:6;8636:3;8629:4;8622:5;8618:16;8596:52;:::i;:::-;8673:29;8695:6;8673:29;:::i;:::-;8668:3;8664:39;8657:46;;8437:272;;;;;:::o;8715:377::-;8821:3;8849:39;8882:5;8849:39;:::i;:::-;8904:89;8986:6;8981:3;8904:89;:::i;:::-;8897:96;;9002:52;9047:6;9042:3;9035:4;9028:5;9024:16;9002:52;:::i;:::-;9079:6;9074:3;9070:16;9063:23;;8825:267;;;;;:::o;9122:845::-;9225:3;9262:5;9256:12;9291:36;9317:9;9291:36;:::i;:::-;9343:89;9425:6;9420:3;9343:89;:::i;:::-;9336:96;;9463:1;9452:9;9448:17;9479:1;9474:137;;;;9625:1;9620:341;;;;9441:520;;9474:137;9558:4;9554:9;9543;9539:25;9534:3;9527:38;9594:6;9589:3;9585:16;9578:23;;9474:137;;9620:341;9687:38;9719:5;9687:38;:::i;:::-;9747:1;9761:154;9775:6;9772:1;9769:13;9761:154;;;9849:7;9843:14;9839:1;9834:3;9830:11;9823:35;9899:1;9890:7;9886:15;9875:26;;9797:4;9794:1;9790:12;9785:17;;9761:154;;;9944:6;9939:3;9935:16;9928:23;;9627:334;;9441:520;;9229:738;;;;;;:::o;9973:366::-;10115:3;10136:67;10200:2;10195:3;10136:67;:::i;:::-;10129:74;;10212:93;10301:3;10212:93;:::i;:::-;10330:2;10325:3;10321:12;10314:19;;10119:220;;;:::o;10345:366::-;10487:3;10508:67;10572:2;10567:3;10508:67;:::i;:::-;10501:74;;10584:93;10673:3;10584:93;:::i;:::-;10702:2;10697:3;10693:12;10686:19;;10491:220;;;:::o;10717:366::-;10859:3;10880:67;10944:2;10939:3;10880:67;:::i;:::-;10873:74;;10956:93;11045:3;10956:93;:::i;:::-;11074:2;11069:3;11065:12;11058:19;;10863:220;;;:::o;11089:366::-;11231:3;11252:67;11316:2;11311:3;11252:67;:::i;:::-;11245:74;;11328:93;11417:3;11328:93;:::i;:::-;11446:2;11441:3;11437:12;11430:19;;11235:220;;;:::o;11461:366::-;11603:3;11624:67;11688:2;11683:3;11624:67;:::i;:::-;11617:74;;11700:93;11789:3;11700:93;:::i;:::-;11818:2;11813:3;11809:12;11802:19;;11607:220;;;:::o;11833:366::-;11975:3;11996:67;12060:2;12055:3;11996:67;:::i;:::-;11989:74;;12072:93;12161:3;12072:93;:::i;:::-;12190:2;12185:3;12181:12;12174:19;;11979:220;;;:::o;12205:366::-;12347:3;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12444:93;12533:3;12444:93;:::i;:::-;12562:2;12557:3;12553:12;12546:19;;12351:220;;;:::o;12577:366::-;12719:3;12740:67;12804:2;12799:3;12740:67;:::i;:::-;12733:74;;12816:93;12905:3;12816:93;:::i;:::-;12934:2;12929:3;12925:12;12918:19;;12723:220;;;:::o;12949:366::-;13091:3;13112:67;13176:2;13171:3;13112:67;:::i;:::-;13105:74;;13188:93;13277:3;13188:93;:::i;:::-;13306:2;13301:3;13297:12;13290:19;;13095:220;;;:::o;13321:366::-;13463:3;13484:67;13548:2;13543:3;13484:67;:::i;:::-;13477:74;;13560:93;13649:3;13560:93;:::i;:::-;13678:2;13673:3;13669:12;13662:19;;13467:220;;;:::o;13693:366::-;13835:3;13856:67;13920:2;13915:3;13856:67;:::i;:::-;13849:74;;13932:93;14021:3;13932:93;:::i;:::-;14050:2;14045:3;14041:12;14034:19;;13839:220;;;:::o;14065:366::-;14207:3;14228:67;14292:2;14287:3;14228:67;:::i;:::-;14221:74;;14304:93;14393:3;14304:93;:::i;:::-;14422:2;14417:3;14413:12;14406:19;;14211:220;;;:::o;14437:366::-;14579:3;14600:67;14664:2;14659:3;14600:67;:::i;:::-;14593:74;;14676:93;14765:3;14676:93;:::i;:::-;14794:2;14789:3;14785:12;14778:19;;14583:220;;;:::o;14809:366::-;14951:3;14972:67;15036:2;15031:3;14972:67;:::i;:::-;14965:74;;15048:93;15137:3;15048:93;:::i;:::-;15166:2;15161:3;15157:12;15150:19;;14955:220;;;:::o;15181:366::-;15323:3;15344:67;15408:2;15403:3;15344:67;:::i;:::-;15337:74;;15420:93;15509:3;15420:93;:::i;:::-;15538:2;15533:3;15529:12;15522:19;;15327:220;;;:::o;15553:366::-;15695:3;15716:67;15780:2;15775:3;15716:67;:::i;:::-;15709:74;;15792:93;15881:3;15792:93;:::i;:::-;15910:2;15905:3;15901:12;15894:19;;15699:220;;;:::o;15925:366::-;16067:3;16088:67;16152:2;16147:3;16088:67;:::i;:::-;16081:74;;16164:93;16253:3;16164:93;:::i;:::-;16282:2;16277:3;16273:12;16266:19;;16071:220;;;:::o;16297:366::-;16439:3;16460:67;16524:2;16519:3;16460:67;:::i;:::-;16453:74;;16536:93;16625:3;16536:93;:::i;:::-;16654:2;16649:3;16645:12;16638:19;;16443:220;;;:::o;16669:366::-;16811:3;16832:67;16896:2;16891:3;16832:67;:::i;:::-;16825:74;;16908:93;16997:3;16908:93;:::i;:::-;17026:2;17021:3;17017:12;17010:19;;16815:220;;;:::o;17041:366::-;17183:3;17204:67;17268:2;17263:3;17204:67;:::i;:::-;17197:74;;17280:93;17369:3;17280:93;:::i;:::-;17398:2;17393:3;17389:12;17382:19;;17187:220;;;:::o;17413:366::-;17555:3;17576:67;17640:2;17635:3;17576:67;:::i;:::-;17569:74;;17652:93;17741:3;17652:93;:::i;:::-;17770:2;17765:3;17761:12;17754:19;;17559:220;;;:::o;17785:108::-;17862:24;17880:5;17862:24;:::i;:::-;17857:3;17850:37;17840:53;;:::o;17899:118::-;17986:24;18004:5;17986:24;:::i;:::-;17981:3;17974:37;17964:53;;:::o;18023:589::-;18248:3;18270:95;18361:3;18352:6;18270:95;:::i;:::-;18263:102;;18382:95;18473:3;18464:6;18382:95;:::i;:::-;18375:102;;18494:92;18582:3;18573:6;18494:92;:::i;:::-;18487:99;;18603:3;18596:10;;18252:360;;;;;;:::o;18618:222::-;18711:4;18749:2;18738:9;18734:18;18726:26;;18762:71;18830:1;18819:9;18815:17;18806:6;18762:71;:::i;:::-;18716:124;;;;:::o;18846:640::-;19041:4;19079:3;19068:9;19064:19;19056:27;;19093:71;19161:1;19150:9;19146:17;19137:6;19093:71;:::i;:::-;19174:72;19242:2;19231:9;19227:18;19218:6;19174:72;:::i;:::-;19256;19324:2;19313:9;19309:18;19300:6;19256:72;:::i;:::-;19375:9;19369:4;19365:20;19360:2;19349:9;19345:18;19338:48;19403:76;19474:4;19465:6;19403:76;:::i;:::-;19395:84;;19046:440;;;;;;;:::o;19492:373::-;19635:4;19673:2;19662:9;19658:18;19650:26;;19722:9;19716:4;19712:20;19708:1;19697:9;19693:17;19686:47;19750:108;19853:4;19844:6;19750:108;:::i;:::-;19742:116;;19640:225;;;;:::o;19871:210::-;19958:4;19996:2;19985:9;19981:18;19973:26;;20009:65;20071:1;20060:9;20056:17;20047:6;20009:65;:::i;:::-;19963:118;;;;:::o;20087:313::-;20200:4;20238:2;20227:9;20223:18;20215:26;;20287:9;20281:4;20277:20;20273:1;20262:9;20258:17;20251:47;20315:78;20388:4;20379:6;20315:78;:::i;:::-;20307:86;;20205:195;;;;:::o;20406:419::-;20572:4;20610:2;20599:9;20595:18;20587:26;;20659:9;20653:4;20649:20;20645:1;20634:9;20630:17;20623:47;20687:131;20813:4;20687:131;:::i;:::-;20679:139;;20577:248;;;:::o;20831:419::-;20997:4;21035:2;21024:9;21020:18;21012:26;;21084:9;21078:4;21074:20;21070:1;21059:9;21055:17;21048:47;21112:131;21238:4;21112:131;:::i;:::-;21104:139;;21002:248;;;:::o;21256:419::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:131;21663:4;21537:131;:::i;:::-;21529:139;;21427:248;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21852:248;;;:::o;22106:419::-;22272:4;22310:2;22299:9;22295:18;22287:26;;22359:9;22353:4;22349:20;22345:1;22334:9;22330:17;22323:47;22387:131;22513:4;22387:131;:::i;:::-;22379:139;;22277:248;;;:::o;22531:419::-;22697:4;22735:2;22724:9;22720:18;22712:26;;22784:9;22778:4;22774:20;22770:1;22759:9;22755:17;22748:47;22812:131;22938:4;22812:131;:::i;:::-;22804:139;;22702:248;;;:::o;22956:419::-;23122:4;23160:2;23149:9;23145:18;23137:26;;23209:9;23203:4;23199:20;23195:1;23184:9;23180:17;23173:47;23237:131;23363:4;23237:131;:::i;:::-;23229:139;;23127:248;;;:::o;23381:419::-;23547:4;23585:2;23574:9;23570:18;23562:26;;23634:9;23628:4;23624:20;23620:1;23609:9;23605:17;23598:47;23662:131;23788:4;23662:131;:::i;:::-;23654:139;;23552:248;;;:::o;23806:419::-;23972:4;24010:2;23999:9;23995:18;23987:26;;24059:9;24053:4;24049:20;24045:1;24034:9;24030:17;24023:47;24087:131;24213:4;24087:131;:::i;:::-;24079:139;;23977:248;;;:::o;24231:419::-;24397:4;24435:2;24424:9;24420:18;24412:26;;24484:9;24478:4;24474:20;24470:1;24459:9;24455:17;24448:47;24512:131;24638:4;24512:131;:::i;:::-;24504:139;;24402:248;;;:::o;24656:419::-;24822:4;24860:2;24849:9;24845:18;24837:26;;24909:9;24903:4;24899:20;24895:1;24884:9;24880:17;24873:47;24937:131;25063:4;24937:131;:::i;:::-;24929:139;;24827:248;;;:::o;25081:419::-;25247:4;25285:2;25274:9;25270:18;25262:26;;25334:9;25328:4;25324:20;25320:1;25309:9;25305:17;25298:47;25362:131;25488:4;25362:131;:::i;:::-;25354:139;;25252:248;;;:::o;25506:419::-;25672:4;25710:2;25699:9;25695:18;25687:26;;25759:9;25753:4;25749:20;25745:1;25734:9;25730:17;25723:47;25787:131;25913:4;25787:131;:::i;:::-;25779:139;;25677:248;;;:::o;25931:419::-;26097:4;26135:2;26124:9;26120:18;26112:26;;26184:9;26178:4;26174:20;26170:1;26159:9;26155:17;26148:47;26212:131;26338:4;26212:131;:::i;:::-;26204:139;;26102:248;;;:::o;26356:419::-;26522:4;26560:2;26549:9;26545:18;26537:26;;26609:9;26603:4;26599:20;26595:1;26584:9;26580:17;26573:47;26637:131;26763:4;26637:131;:::i;:::-;26629:139;;26527:248;;;:::o;26781:419::-;26947:4;26985:2;26974:9;26970:18;26962:26;;27034:9;27028:4;27024:20;27020:1;27009:9;27005:17;26998:47;27062:131;27188:4;27062:131;:::i;:::-;27054:139;;26952:248;;;:::o;27206:419::-;27372:4;27410:2;27399:9;27395:18;27387:26;;27459:9;27453:4;27449:20;27445:1;27434:9;27430:17;27423:47;27487:131;27613:4;27487:131;:::i;:::-;27479:139;;27377:248;;;:::o;27631:419::-;27797:4;27835:2;27824:9;27820:18;27812:26;;27884:9;27878:4;27874:20;27870:1;27859:9;27855:17;27848:47;27912:131;28038:4;27912:131;:::i;:::-;27904:139;;27802:248;;;:::o;28056:419::-;28222:4;28260:2;28249:9;28245:18;28237:26;;28309:9;28303:4;28299:20;28295:1;28284:9;28280:17;28273:47;28337:131;28463:4;28337:131;:::i;:::-;28329:139;;28227:248;;;:::o;28481:419::-;28647:4;28685:2;28674:9;28670:18;28662:26;;28734:9;28728:4;28724:20;28720:1;28709:9;28705:17;28698:47;28762:131;28888:4;28762:131;:::i;:::-;28754:139;;28652:248;;;:::o;28906:419::-;29072:4;29110:2;29099:9;29095:18;29087:26;;29159:9;29153:4;29149:20;29145:1;29134:9;29130:17;29123:47;29187:131;29313:4;29187:131;:::i;:::-;29179:139;;29077:248;;;:::o;29331:222::-;29424:4;29462:2;29451:9;29447:18;29439:26;;29475:71;29543:1;29532:9;29528:17;29519:6;29475:71;:::i;:::-;29429:124;;;;:::o;29559:129::-;29593:6;29620:20;;:::i;:::-;29610:30;;29649:33;29677:4;29669:6;29649:33;:::i;:::-;29600:88;;;:::o;29694:75::-;29727:6;29760:2;29754:9;29744:19;;29734:35;:::o;29775:307::-;29836:4;29926:18;29918:6;29915:30;29912:2;;;29948:18;;:::i;:::-;29912:2;29986:29;30008:6;29986:29;:::i;:::-;29978:37;;30070:4;30064;30060:15;30052:23;;29841:241;;;:::o;30088:308::-;30150:4;30240:18;30232:6;30229:30;30226:2;;;30262:18;;:::i;:::-;30226:2;30300:29;30322:6;30300:29;:::i;:::-;30292:37;;30384:4;30378;30374:15;30366:23;;30155:241;;;:::o;30402:132::-;30469:4;30492:3;30484:11;;30522:4;30517:3;30513:14;30505:22;;30474:60;;;:::o;30540:141::-;30589:4;30612:3;30604:11;;30635:3;30632:1;30625:14;30669:4;30666:1;30656:18;30648:26;;30594:87;;;:::o;30687:114::-;30754:6;30788:5;30782:12;30772:22;;30761:40;;;:::o;30807:98::-;30858:6;30892:5;30886:12;30876:22;;30865:40;;;:::o;30911:99::-;30963:6;30997:5;30991:12;30981:22;;30970:40;;;:::o;31016:113::-;31086:4;31118;31113:3;31109:14;31101:22;;31091:38;;;:::o;31135:184::-;31234:11;31268:6;31263:3;31256:19;31308:4;31303:3;31299:14;31284:29;;31246:73;;;;:::o;31325:168::-;31408:11;31442:6;31437:3;31430:19;31482:4;31477:3;31473:14;31458:29;;31420:73;;;;:::o;31499:169::-;31583:11;31617:6;31612:3;31605:19;31657:4;31652:3;31648:14;31633:29;;31595:73;;;;:::o;31674:148::-;31776:11;31813:3;31798:18;;31788:34;;;;:::o;31828:305::-;31868:3;31887:20;31905:1;31887:20;:::i;:::-;31882:25;;31921:20;31939:1;31921:20;:::i;:::-;31916:25;;32075:1;32007:66;32003:74;32000:1;31997:81;31994:2;;;32081:18;;:::i;:::-;31994:2;32125:1;32122;32118:9;32111:16;;31872:261;;;;:::o;32139:185::-;32179:1;32196:20;32214:1;32196:20;:::i;:::-;32191:25;;32230:20;32248:1;32230:20;:::i;:::-;32225:25;;32269:1;32259:2;;32274:18;;:::i;:::-;32259:2;32316:1;32313;32309:9;32304:14;;32181:143;;;;:::o;32330:348::-;32370:7;32393:20;32411:1;32393:20;:::i;:::-;32388:25;;32427:20;32445:1;32427:20;:::i;:::-;32422:25;;32615:1;32547:66;32543:74;32540:1;32537:81;32532:1;32525:9;32518:17;32514:105;32511:2;;;32622:18;;:::i;:::-;32511:2;32670:1;32667;32663:9;32652:20;;32378:300;;;;:::o;32684:191::-;32724:4;32744:20;32762:1;32744:20;:::i;:::-;32739:25;;32778:20;32796:1;32778:20;:::i;:::-;32773:25;;32817:1;32814;32811:8;32808:2;;;32822:18;;:::i;:::-;32808:2;32867:1;32864;32860:9;32852:17;;32729:146;;;;:::o;32881:96::-;32918:7;32947:24;32965:5;32947:24;:::i;:::-;32936:35;;32926:51;;;:::o;32983:90::-;33017:7;33060:5;33053:13;33046:21;33035:32;;33025:48;;;:::o;33079:149::-;33115:7;33155:66;33148:5;33144:78;33133:89;;33123:105;;;:::o;33234:126::-;33271:7;33311:42;33304:5;33300:54;33289:65;;33279:81;;;:::o;33366:77::-;33403:7;33432:5;33421:16;;33411:32;;;:::o;33449:154::-;33533:6;33528:3;33523;33510:30;33595:1;33586:6;33581:3;33577:16;33570:27;33500:103;;;:::o;33609:307::-;33677:1;33687:113;33701:6;33698:1;33695:13;33687:113;;;33786:1;33781:3;33777:11;33771:18;33767:1;33762:3;33758:11;33751:39;33723:2;33720:1;33716:10;33711:15;;33687:113;;;33818:6;33815:1;33812:13;33809:2;;;33898:1;33889:6;33884:3;33880:16;33873:27;33809:2;33658:258;;;;:::o;33922:320::-;33966:6;34003:1;33997:4;33993:12;33983:22;;34050:1;34044:4;34040:12;34071:18;34061:2;;34127:4;34119:6;34115:17;34105:27;;34061:2;34189;34181:6;34178:14;34158:18;34155:38;34152:2;;;34208:18;;:::i;:::-;34152:2;33973:269;;;;:::o;34248:281::-;34331:27;34353:4;34331:27;:::i;:::-;34323:6;34319:40;34461:6;34449:10;34446:22;34425:18;34413:10;34410:34;34407:62;34404:2;;;34472:18;;:::i;:::-;34404:2;34512:10;34508:2;34501:22;34291:238;;;:::o;34535:233::-;34574:3;34597:24;34615:5;34597:24;:::i;:::-;34588:33;;34643:66;34636:5;34633:77;34630:2;;;34713:18;;:::i;:::-;34630:2;34760:1;34753:5;34749:13;34742:20;;34578:190;;;:::o;34774:176::-;34806:1;34823:20;34841:1;34823:20;:::i;:::-;34818:25;;34857:20;34875:1;34857:20;:::i;:::-;34852:25;;34896:1;34886:2;;34901:18;;:::i;:::-;34886:2;34942:1;34939;34935:9;34930:14;;34808:142;;;;:::o;34956:180::-;35004:77;35001:1;34994:88;35101:4;35098:1;35091:15;35125:4;35122:1;35115:15;35142:180;35190:77;35187:1;35180:88;35287:4;35284:1;35277:15;35311:4;35308:1;35301:15;35328:180;35376:77;35373:1;35366:88;35473:4;35470:1;35463:15;35497:4;35494:1;35487:15;35514:180;35562:77;35559:1;35552:88;35659:4;35656:1;35649:15;35683:4;35680:1;35673:15;35700:102;35741:6;35792:2;35788:7;35783:2;35776:5;35772:14;35768:28;35758:38;;35748:54;;;:::o;35808:230::-;35948:34;35944:1;35936:6;35932:14;35925:58;36017:13;36012:2;36004:6;36000:15;35993:38;35914:124;:::o;36044:237::-;36184:34;36180:1;36172:6;36168:14;36161:58;36253:20;36248:2;36240:6;36236:15;36229:45;36150:131;:::o;36287:225::-;36427:34;36423:1;36415:6;36411:14;36404:58;36496:8;36491:2;36483:6;36479:15;36472:33;36393:119;:::o;36518:178::-;36658:30;36654:1;36646:6;36642:14;36635:54;36624:72;:::o;36702:176::-;36842:28;36838:1;36830:6;36826:14;36819:52;36808:70;:::o;36884:223::-;37024:34;37020:1;37012:6;37008:14;37001:58;37093:6;37088:2;37080:6;37076:15;37069:31;36990:117;:::o;37113:175::-;37253:27;37249:1;37241:6;37237:14;37230:51;37219:69;:::o;37294:231::-;37434:34;37430:1;37422:6;37418:14;37411:58;37503:14;37498:2;37490:6;37486:15;37479:39;37400:125;:::o;37531:243::-;37671:34;37667:1;37659:6;37655:14;37648:58;37740:26;37735:2;37727:6;37723:15;37716:51;37637:137;:::o;37780:229::-;37920:34;37916:1;37908:6;37904:14;37897:58;37989:12;37984:2;37976:6;37972:15;37965:37;37886:123;:::o;38015:228::-;38155:34;38151:1;38143:6;38139:14;38132:58;38224:11;38219:2;38211:6;38207:15;38200:36;38121:122;:::o;38249:182::-;38389:34;38385:1;38377:6;38373:14;38366:58;38355:76;:::o;38437:231::-;38577:34;38573:1;38565:6;38561:14;38554:58;38646:14;38641:2;38633:6;38629:15;38622:39;38543:125;:::o;38674:182::-;38814:34;38810:1;38802:6;38798:14;38791:58;38780:76;:::o;38862:228::-;39002:34;38998:1;38990:6;38986:14;38979:58;39071:11;39066:2;39058:6;39054:15;39047:36;38968:122;:::o;39096:234::-;39236:34;39232:1;39224:6;39220:14;39213:58;39305:17;39300:2;39292:6;39288:15;39281:42;39202:128;:::o;39336:220::-;39476:34;39472:1;39464:6;39460:14;39453:58;39545:3;39540:2;39532:6;39528:15;39521:28;39442:114;:::o;39562:236::-;39702:34;39698:1;39690:6;39686:14;39679:58;39771:19;39766:2;39758:6;39754:15;39747:44;39668:130;:::o;39804:231::-;39944:34;39940:1;39932:6;39928:14;39921:58;40013:14;40008:2;40000:6;39996:15;39989:39;39910:125;:::o;40041:229::-;40181:34;40177:1;40169:6;40165:14;40158:58;40250:12;40245:2;40237:6;40233:15;40226:37;40147:123;:::o;40276:176::-;40416:28;40412:1;40404:6;40400:14;40393:52;40382:70;:::o;40458:122::-;40531:24;40549:5;40531:24;:::i;:::-;40524:5;40521:35;40511:2;;40570:1;40567;40560:12;40511:2;40501:79;:::o;40586:116::-;40656:21;40671:5;40656:21;:::i;:::-;40649:5;40646:32;40636:2;;40692:1;40689;40682:12;40636:2;40626:76;:::o;40708:120::-;40780:23;40797:5;40780:23;:::i;:::-;40773:5;40770:34;40760:2;;40818:1;40815;40808:12;40760:2;40750:78;:::o;40834:122::-;40907:24;40925:5;40907:24;:::i;:::-;40900:5;40897:35;40887:2;;40946:1;40943;40936:12;40887:2;40877:79;:::o
Swarm Source
ipfs://375ae7d0f4494613d805ade5adb64f3b1a1a155b984513ffd816e511686c6f45
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.