ERC-721
Overview
Max Total Supply
2,664 Door
Holders
1,018
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 DoorLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PixelDoors
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-02 */ // File: @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: @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: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/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: @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: @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: @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: @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: contracts/PixelDoors.sol // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; contract PixelDoors is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 1; uint256 public nftPerAddressLimit = 2; bool public paused = false; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); mint(1); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); if (supply >= 1000) { //When 1000 have been minted alter price and nft per address limit and nft max amount mint cost = 0.01 ether; maxMintAmount = 20; nftPerAddressLimit = 100; } if (supply >= 5000) cost = 0.02 ether; if (supply >= 8000) cost = 0.03 ether; require(_mintAmount > 0, "Need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "Max NFT limit exceeded"); if (msg.sender != owner()) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded"); require(msg.value >= cost * _mintAmount, "Insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _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 setNftPerAddressLimit(uint256 _limit) public onlyOwner() { nftPerAddressLimit = _limit; } 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 withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","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":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062001047565b506000600d55612710600e556001600f5560026010556000601160006101000a81548160ff0219169083151502179055503480156200008f57600080fd5b506040516200645a3803806200645a8339818101604052810190620000b59190620011be565b82828160009080519060200190620000cf92919062001047565b508060019080519060200190620000e892919062001047565b5050506200010b620000ff6200013760201b60201c565b6200013f60201b60201c565b6200011c816200020560201b60201c565b6200012e6001620002b060201b60201c565b50505062001c8f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002156200013760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023b6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028b90620015c9565b60405180910390fd5b80600b9080519060200190620002ac92919062001047565b5050565b601160009054906101000a900460ff161562000303576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fa90620015eb565b60405180910390fd5b6000620003156200065260201b60201c565b90506103e881106200034057662386f26fc10000600d819055506014600f8190555060646010819055505b6113888110620003595766470de4df820000600d819055505b611f4081106200037257666a94d74f430000600d819055505b60008211620003b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003af906200162f565b60405180910390fd5b600f5482111562000400576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f7906200151f565b60405180910390fd5b600e548282620004119190620016dd565b111562000455576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044c9062001585565b60405180910390fd5b620004656200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000588576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548382620004ed9190620016dd565b111562000531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000528906200160d565b60405180910390fd5b82600d546200054191906200173a565b34101562000586576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057d9062001541565b60405180910390fd5b505b6000600190505b8281116200062357601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620005e990620018e2565b91905055506200060d338284620006019190620016dd565b6200065f60201b60201c565b80806200061a90620018e2565b9150506200058f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620006818282604051806020016040528060008152506200068560201b60201c565b5050565b620006978383620006f360201b60201c565b620006ac6000848484620008d960201b60201c565b620006ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e590620014db565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075d90620015a7565b60405180910390fd5b620007778162000a9360201b60201c565b15620007ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b190620014fd565b60405180910390fd5b620007ce6000838362000aff60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008209190620016dd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620009078473ffffffffffffffffffffffffffffffffffffffff1662000c4660201b62001d201760201c565b1562000a86578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009396200013760201b60201c565b8786866040518563ffffffff1660e01b81526004016200095d949392919062001487565b602060405180830381600087803b1580156200097857600080fd5b505af1925050508015620009ac57506040513d601f19601f82011682018060405250810190620009a991906200118c565b60015b62000a35573d8060008114620009df576040519150601f19603f3d011682016040523d82523d6000602084013e620009e4565b606091505b5060008151141562000a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2490620014db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a8b565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000b1783838362000c5960201b62001d331760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000b645762000b5e8162000c5e60201b60201c565b62000bac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000bab5762000baa838262000ca760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bf95762000bf38162000e2460201b60201c565b62000c41565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c405762000c3f828262000f0060201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000cc18462000f8c60201b620011931760201c565b62000ccd91906200179b565b905060006007600084815260200190815260200160002054905081811462000db3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e3a91906200179b565b905060006009600084815260200190815260200160002054905060006008838154811062000e6d5762000e6c620019bd565b5b90600052602060002001549050806008838154811062000e925762000e91620019bd565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ee45762000ee36200198e565b5b6001900381819060005260206000200160009055905550505050565b600062000f188362000f8c60201b620011931760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ff79062001563565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620010559062001876565b90600052602060002090601f016020900481019282620010795760008555620010c5565b82601f106200109457805160ff1916838001178555620010c5565b82800160010185558215620010c5579182015b82811115620010c4578251825591602001919060010190620010a7565b5b509050620010d49190620010d8565b5090565b5b80821115620010f3576000816000905550600101620010d9565b5090565b60006200110e62001108846200167a565b62001651565b9050828152602081018484840111156200112d576200112c62001a20565b5b6200113a84828562001840565b509392505050565b600081519050620011538162001c75565b92915050565b600082601f83011262001171576200117062001a1b565b5b815162001183848260208601620010f7565b91505092915050565b600060208284031215620011a557620011a462001a2a565b5b6000620011b58482850162001142565b91505092915050565b600080600060608486031215620011da57620011d962001a2a565b5b600084015167ffffffffffffffff811115620011fb57620011fa62001a25565b5b620012098682870162001159565b935050602084015167ffffffffffffffff8111156200122d576200122c62001a25565b5b6200123b8682870162001159565b925050604084015167ffffffffffffffff8111156200125f576200125e62001a25565b5b6200126d8682870162001159565b9150509250925092565b6200128281620017d6565b82525050565b60006200129582620016b0565b620012a18185620016bb565b9350620012b381856020860162001840565b620012be8162001a2f565b840191505092915050565b6000620012d8603283620016cc565b9150620012e58262001a40565b604082019050919050565b6000620012ff601c83620016cc565b91506200130c8262001a8f565b602082019050919050565b600062001326602483620016cc565b9150620013338262001ab8565b604082019050919050565b60006200134d601283620016cc565b91506200135a8262001b07565b602082019050919050565b600062001374602a83620016cc565b9150620013818262001b30565b604082019050919050565b60006200139b601683620016cc565b9150620013a88262001b7f565b602082019050919050565b6000620013c2602083620016cc565b9150620013cf8262001ba8565b602082019050919050565b6000620013e9602083620016cc565b9150620013f68262001bd1565b602082019050919050565b600062001410601683620016cc565b91506200141d8262001bfa565b602082019050919050565b600062001437601c83620016cc565b9150620014448262001c23565b602082019050919050565b60006200145e601b83620016cc565b91506200146b8262001c4c565b602082019050919050565b620014818162001836565b82525050565b60006080820190506200149e600083018762001277565b620014ad602083018662001277565b620014bc604083018562001476565b8181036060830152620014d0818462001288565b905095945050505050565b60006020820190508181036000830152620014f681620012c9565b9050919050565b600060208201905081810360008301526200151881620012f0565b9050919050565b600060208201905081810360008301526200153a8162001317565b9050919050565b600060208201905081810360008301526200155c816200133e565b9050919050565b600060208201905081810360008301526200157e8162001365565b9050919050565b60006020820190508181036000830152620015a0816200138c565b9050919050565b60006020820190508181036000830152620015c281620013b3565b9050919050565b60006020820190508181036000830152620015e481620013da565b9050919050565b60006020820190508181036000830152620016068162001401565b9050919050565b60006020820190508181036000830152620016288162001428565b9050919050565b600060208201905081810360008301526200164a816200144f565b9050919050565b60006200165d62001670565b90506200166b8282620018ac565b919050565b6000604051905090565b600067ffffffffffffffff821115620016985762001697620019ec565b5b620016a38262001a2f565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620016ea8262001836565b9150620016f78362001836565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200172f576200172e62001930565b5b828201905092915050565b6000620017478262001836565b9150620017548362001836565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001790576200178f62001930565b5b828202905092915050565b6000620017a88262001836565b9150620017b58362001836565b925082821015620017cb57620017ca62001930565b5b828203905092915050565b6000620017e38262001816565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200186057808201518184015260208101905062001843565b8381111562001870576000848401525b50505050565b600060028204905060018216806200188f57607f821691505b60208210811415620018a657620018a56200195f565b5b50919050565b620018b78262001a2f565b810181811067ffffffffffffffff82111715620018d957620018d8620019ec565b5b80604052505050565b6000620018ef8262001836565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001925576200192462001930565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b62001c8081620017ea565b811462001c8c57600080fd5b50565b6147bb8062001c9f6000396000f3fe60806040526004361061020f5760003560e01c80636352211e11610118578063b88d4fde116100a0578063d0eb26b01161006f578063d0eb26b014610795578063d5abeb01146107be578063da3ef23f146107e9578063e985e9c514610812578063f2fde38b1461084f5761020f565b8063b88d4fde146106d9578063ba7d2c7614610702578063c66828621461072d578063c87b56dd146107585761020f565b80637f00c7a6116100e75780637f00c7a6146106155780638da5cb5b1461063e57806395d89b4114610669578063a0712d6814610694578063a22cb465146106b05761020f565b80636352211e146105595780636c0360eb1461059657806370a08231146105c1578063715018a6146105fe5761020f565b806323b872dd1161019b578063438b63001161016a578063438b63001461046257806344a0d68a1461049f5780634f6ccce7146104c857806355f804b3146105055780635c975abb1461052e5761020f565b806323b872dd146103c95780632f745c59146103f25780633ccfd60b1461042f57806342842e0e146104395761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd1461033657806318cae26914610361578063239c70ae1461039e5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131d4565b610878565b60405161024891906138b2565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131a7565b6108f2565b005b34801561028657600080fd5b5061028f61098b565b60405161029c91906138cd565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190613277565b610a1d565b6040516102d99190613829565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613167565b610aa2565b005b34801561031757600080fd5b50610320610bba565b60405161032d9190613bef565b60405180910390f35b34801561034257600080fd5b5061034b610bc0565b6040516103589190613bef565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190612fe4565b610bcd565b6040516103959190613bef565b60405180910390f35b3480156103aa57600080fd5b506103b3610be5565b6040516103c09190613bef565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190613051565b610beb565b005b3480156103fe57600080fd5b5061041960048036038101906104149190613167565b610c4b565b6040516104269190613bef565b60405180910390f35b610437610cf0565b005b34801561044557600080fd5b50610460600480360381019061045b9190613051565b610de5565b005b34801561046e57600080fd5b5061048960048036038101906104849190612fe4565b610e05565b6040516104969190613890565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613277565b610eb3565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613277565b610f39565b6040516104fc9190613bef565b60405180910390f35b34801561051157600080fd5b5061052c6004803603810190610527919061322e565b610faa565b005b34801561053a57600080fd5b50610543611040565b60405161055091906138b2565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190613277565b611053565b60405161058d9190613829565b60405180910390f35b3480156105a257600080fd5b506105ab611105565b6040516105b891906138cd565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190612fe4565b611193565b6040516105f59190613bef565b60405180910390f35b34801561060a57600080fd5b5061061361124b565b005b34801561062157600080fd5b5061063c60048036038101906106379190613277565b6112d3565b005b34801561064a57600080fd5b50610653611359565b6040516106609190613829565b60405180910390f35b34801561067557600080fd5b5061067e611383565b60405161068b91906138cd565b60405180910390f35b6106ae60048036038101906106a99190613277565b611415565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613127565b611751565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906130a4565b6118d2565b005b34801561070e57600080fd5b50610717611934565b6040516107249190613bef565b60405180910390f35b34801561073957600080fd5b5061074261193a565b60405161074f91906138cd565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190613277565b6119c8565b60405161078c91906138cd565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613277565b611a72565b005b3480156107ca57600080fd5b506107d3611af8565b6040516107e09190613bef565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061322e565b611afe565b005b34801561081e57600080fd5b5061083960048036038101906108349190613011565b611b94565b60405161084691906138b2565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190612fe4565b611c28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108eb57506108ea82611d38565b5b9050919050565b6108fa611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610918611359565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590613acf565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60606000805461099a90613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690613ef8565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2882611e22565b610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613aaf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aad82611053565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590613b6f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3d611e1a565b73ffffffffffffffffffffffffffffffffffffffff161480610b6c5750610b6b81610b66611e1a565b611b94565b5b610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290613a0f565b60405180910390fd5b610bb58383611e8e565b505050565b600d5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b600f5481565b610bfc610bf6611e1a565b82611f47565b610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290613b8f565b60405180910390fd5b610c46838383612025565b505050565b6000610c5683611193565b8210610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906138ef565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf8611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610d16611359565b73ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613acf565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d9290613814565b60006040518083038185875af1925050503d8060008114610dcf576040519150601f19603f3d011682016040523d82523d6000602084013e610dd4565b606091505b5050905080610de257600080fd5b50565b610e00838383604051806020016040528060008152506118d2565b505050565b60606000610e1283611193565b905060008167ffffffffffffffff811115610e3057610e2f6140c0565b5b604051908082528060200260200182016040528015610e5e5781602001602082028036833780820191505090505b50905060005b82811015610ea857610e768582610c4b565b828281518110610e8957610e88614091565b5b6020026020010181815250508080610ea090613f5b565b915050610e64565b508092505050919050565b610ebb611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611359565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613acf565b60405180910390fd5b80600d8190555050565b6000610f43610bc0565b8210610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613baf565b60405180910390fd5b60088281548110610f9857610f97614091565b5b90600052602060002001549050919050565b610fb2611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610fd0611359565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613acf565b60405180910390fd5b80600b908051906020019061103c929190612df8565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390613a4f565b60405180910390fd5b80915050919050565b600b805461111290613ef8565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90613ef8565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90613a2f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611253611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611271611359565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613acf565b60405180910390fd5b6112d16000612281565b565b6112db611e1a565b73ffffffffffffffffffffffffffffffffffffffff166112f9611359565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690613acf565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461139290613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546113be90613ef8565b801561140b5780601f106113e05761010080835404028352916020019161140b565b820191906000526020600020905b8154815290600101906020018083116113ee57829003601f168201915b5050505050905090565b601160009054906101000a900460ff1615611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613aef565b60405180910390fd5b600061146f610bc0565b90506103e8811061149957662386f26fc10000600d819055506014600f8190555060646010819055505b61138881106114b15766470de4df820000600d819055505b611f4081106114c957666a94d74f430000600d819055505b6000821161150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390613bcf565b60405180910390fd5b600f54821115611551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611548906139cf565b60405180910390fd5b600e5482826115609190613d2d565b11156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613a6f565b60405180910390fd5b6115a9611359565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c1576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601054838261162e9190613d2d565b111561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613b4f565b60405180910390fd5b82600d5461167d9190613db4565b3410156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906139ef565b60405180910390fd5b505b6000600190505b82811161174c57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061171f90613f5b565b91905055506117393382846117349190613d2d565b612347565b808061174490613f5b565b9150506116c8565b505050565b611759611e1a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be9061398f565b60405180910390fd5b80600560006117d4611e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611881611e1a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c691906138b2565b60405180910390a35050565b6118e36118dd611e1a565b83611f47565b611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990613b8f565b60405180910390fd5b61192e84848484612365565b50505050565b60105481565b600c805461194790613ef8565b80601f016020809104026020016040519081016040528092919081815260200182805461197390613ef8565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b60606119d382611e22565b611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613b2f565b60405180910390fd5b6000611a1c6123c1565b90506000815111611a3c5760405180602001604052806000815250611a6a565b80611a4684612453565b600c604051602001611a5a939291906137e3565b6040516020818303038152906040525b915050919050565b611a7a611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611a98611359565b73ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613acf565b60405180910390fd5b8060108190555050565b600e5481565b611b06611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611b24611359565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613acf565b60405180910390fd5b80600c9080519060200190611b90929190612df8565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c30611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611c4e611359565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b9061392f565b60405180910390fd5b611d1d81612281565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e0357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e135750611e12826125b4565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f0183611053565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f5282611e22565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f88906139af565b60405180910390fd5b6000611f9c83611053565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200b57508373ffffffffffffffffffffffffffffffffffffffff16611ff384610a1d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061201c575061201b8185611b94565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661204582611053565b73ffffffffffffffffffffffffffffffffffffffff161461209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613b0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121029061396f565b60405180910390fd5b61211683838361261e565b612121600082611e8e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121719190613e0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c89190613d2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612361828260405180602001604052806000815250612732565b5050565b612370848484612025565b61237c8484848461278d565b6123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061390f565b60405180910390fd5b50505050565b6060600b80546123d090613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546123fc90613ef8565b80156124495780601f1061241e57610100808354040283529160200191612449565b820191906000526020600020905b81548152906001019060200180831161242c57829003601f168201915b5050505050905090565b6060600082141561249b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125af565b600082905060005b600082146124cd5780806124b690613f5b565b915050600a826124c69190613d83565b91506124a3565b60008167ffffffffffffffff8111156124e9576124e86140c0565b5b6040519080825280601f01601f19166020018201604052801561251b5781602001600182028036833780820191505090505b5090505b600085146125a8576001826125349190613e0e565b9150600a856125439190613fa4565b603061254f9190613d2d565b60f81b81838151811061256557612564614091565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a19190613d83565b945061251f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612629838383611d33565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561266c5761266781612924565b6126ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126aa576126a9838261296d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576126e981612ada565b61272d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461272c5761272b8282612bab565b5b5b505050565b61273c8383612c2a565b612749600084848461278d565b612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f9061390f565b60405180910390fd5b505050565b60006127ae8473ffffffffffffffffffffffffffffffffffffffff16611d20565b15612917578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127d7611e1a565b8786866040518563ffffffff1660e01b81526004016127f99493929190613844565b602060405180830381600087803b15801561281357600080fd5b505af192505050801561284457506040513d601f19601f820116820180604052508101906128419190613201565b60015b6128c7573d8060008114612874576040519150601f19603f3d011682016040523d82523d6000602084013e612879565b606091505b506000815114156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b69061390f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291c565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297a84611193565b6129849190613e0e565b9050600060076000848152602001908152602001600020549050818114612a69576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aee9190613e0e565b9050600060096000848152602001908152602001600020549050600060088381548110612b1e57612b1d614091565b5b906000526020600020015490508060088381548110612b4057612b3f614091565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b8f57612b8e614062565b5b6001900381819060005260206000200160009055905550505050565b6000612bb683611193565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190613a8f565b60405180910390fd5b612ca381611e22565b15612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061394f565b60405180910390fd5b612cef6000838361261e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3f9190613d2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e0490613ef8565b90600052602060002090601f016020900481019282612e265760008555612e6d565b82601f10612e3f57805160ff1916838001178555612e6d565b82800160010185558215612e6d579182015b82811115612e6c578251825591602001919060010190612e51565b5b509050612e7a9190612e7e565b5090565b5b80821115612e97576000816000905550600101612e7f565b5090565b6000612eae612ea984613c2f565b613c0a565b905082815260208101848484011115612eca57612ec96140f4565b5b612ed5848285613eb6565b509392505050565b6000612ef0612eeb84613c60565b613c0a565b905082815260208101848484011115612f0c57612f0b6140f4565b5b612f17848285613eb6565b509392505050565b600081359050612f2e81614729565b92915050565b600081359050612f4381614740565b92915050565b600081359050612f5881614757565b92915050565b600081519050612f6d81614757565b92915050565b600082601f830112612f8857612f876140ef565b5b8135612f98848260208601612e9b565b91505092915050565b600082601f830112612fb657612fb56140ef565b5b8135612fc6848260208601612edd565b91505092915050565b600081359050612fde8161476e565b92915050565b600060208284031215612ffa57612ff96140fe565b5b600061300884828501612f1f565b91505092915050565b60008060408385031215613028576130276140fe565b5b600061303685828601612f1f565b925050602061304785828601612f1f565b9150509250929050565b60008060006060848603121561306a576130696140fe565b5b600061307886828701612f1f565b935050602061308986828701612f1f565b925050604061309a86828701612fcf565b9150509250925092565b600080600080608085870312156130be576130bd6140fe565b5b60006130cc87828801612f1f565b94505060206130dd87828801612f1f565b93505060406130ee87828801612fcf565b925050606085013567ffffffffffffffff81111561310f5761310e6140f9565b5b61311b87828801612f73565b91505092959194509250565b6000806040838503121561313e5761313d6140fe565b5b600061314c85828601612f1f565b925050602061315d85828601612f34565b9150509250929050565b6000806040838503121561317e5761317d6140fe565b5b600061318c85828601612f1f565b925050602061319d85828601612fcf565b9150509250929050565b6000602082840312156131bd576131bc6140fe565b5b60006131cb84828501612f34565b91505092915050565b6000602082840312156131ea576131e96140fe565b5b60006131f884828501612f49565b91505092915050565b600060208284031215613217576132166140fe565b5b600061322584828501612f5e565b91505092915050565b600060208284031215613244576132436140fe565b5b600082013567ffffffffffffffff811115613262576132616140f9565b5b61326e84828501612fa1565b91505092915050565b60006020828403121561328d5761328c6140fe565b5b600061329b84828501612fcf565b91505092915050565b60006132b083836137c5565b60208301905092915050565b6132c581613e42565b82525050565b60006132d682613cb6565b6132e08185613ce4565b93506132eb83613c91565b8060005b8381101561331c57815161330388826132a4565b975061330e83613cd7565b9250506001810190506132ef565b5085935050505092915050565b61333281613e54565b82525050565b600061334382613cc1565b61334d8185613cf5565b935061335d818560208601613ec5565b61336681614103565b840191505092915050565b600061337c82613ccc565b6133868185613d11565b9350613396818560208601613ec5565b61339f81614103565b840191505092915050565b60006133b582613ccc565b6133bf8185613d22565b93506133cf818560208601613ec5565b80840191505092915050565b600081546133e881613ef8565b6133f28186613d22565b9450600182166000811461340d576001811461341e57613451565b60ff19831686528186019350613451565b61342785613ca1565b60005b838110156134495781548189015260018201915060208101905061342a565b838801955050505b50505092915050565b6000613467602b83613d11565b915061347282614114565b604082019050919050565b600061348a603283613d11565b915061349582614163565b604082019050919050565b60006134ad602683613d11565b91506134b8826141b2565b604082019050919050565b60006134d0601c83613d11565b91506134db82614201565b602082019050919050565b60006134f3602483613d11565b91506134fe8261422a565b604082019050919050565b6000613516601983613d11565b915061352182614279565b602082019050919050565b6000613539602c83613d11565b9150613544826142a2565b604082019050919050565b600061355c602483613d11565b9150613567826142f1565b604082019050919050565b600061357f601283613d11565b915061358a82614340565b602082019050919050565b60006135a2603883613d11565b91506135ad82614369565b604082019050919050565b60006135c5602a83613d11565b91506135d0826143b8565b604082019050919050565b60006135e8602983613d11565b91506135f382614407565b604082019050919050565b600061360b601683613d11565b915061361682614456565b602082019050919050565b600061362e602083613d11565b91506136398261447f565b602082019050919050565b6000613651602c83613d11565b915061365c826144a8565b604082019050919050565b6000613674602083613d11565b915061367f826144f7565b602082019050919050565b6000613697601683613d11565b91506136a282614520565b602082019050919050565b60006136ba602983613d11565b91506136c582614549565b604082019050919050565b60006136dd602f83613d11565b91506136e882614598565b604082019050919050565b6000613700601c83613d11565b915061370b826145e7565b602082019050919050565b6000613723602183613d11565b915061372e82614610565b604082019050919050565b6000613746600083613d06565b91506137518261465f565b600082019050919050565b6000613769603183613d11565b915061377482614662565b604082019050919050565b600061378c602c83613d11565b9150613797826146b1565b604082019050919050565b60006137af601b83613d11565b91506137ba82614700565b602082019050919050565b6137ce81613eac565b82525050565b6137dd81613eac565b82525050565b60006137ef82866133aa565b91506137fb82856133aa565b915061380782846133db565b9150819050949350505050565b600061381f82613739565b9150819050919050565b600060208201905061383e60008301846132bc565b92915050565b600060808201905061385960008301876132bc565b61386660208301866132bc565b61387360408301856137d4565b81810360608301526138858184613338565b905095945050505050565b600060208201905081810360008301526138aa81846132cb565b905092915050565b60006020820190506138c76000830184613329565b92915050565b600060208201905081810360008301526138e78184613371565b905092915050565b600060208201905081810360008301526139088161345a565b9050919050565b600060208201905081810360008301526139288161347d565b9050919050565b60006020820190508181036000830152613948816134a0565b9050919050565b60006020820190508181036000830152613968816134c3565b9050919050565b60006020820190508181036000830152613988816134e6565b9050919050565b600060208201905081810360008301526139a881613509565b9050919050565b600060208201905081810360008301526139c88161352c565b9050919050565b600060208201905081810360008301526139e88161354f565b9050919050565b60006020820190508181036000830152613a0881613572565b9050919050565b60006020820190508181036000830152613a2881613595565b9050919050565b60006020820190508181036000830152613a48816135b8565b9050919050565b60006020820190508181036000830152613a68816135db565b9050919050565b60006020820190508181036000830152613a88816135fe565b9050919050565b60006020820190508181036000830152613aa881613621565b9050919050565b60006020820190508181036000830152613ac881613644565b9050919050565b60006020820190508181036000830152613ae881613667565b9050919050565b60006020820190508181036000830152613b088161368a565b9050919050565b60006020820190508181036000830152613b28816136ad565b9050919050565b60006020820190508181036000830152613b48816136d0565b9050919050565b60006020820190508181036000830152613b68816136f3565b9050919050565b60006020820190508181036000830152613b8881613716565b9050919050565b60006020820190508181036000830152613ba88161375c565b9050919050565b60006020820190508181036000830152613bc88161377f565b9050919050565b60006020820190508181036000830152613be8816137a2565b9050919050565b6000602082019050613c0460008301846137d4565b92915050565b6000613c14613c25565b9050613c208282613f2a565b919050565b6000604051905090565b600067ffffffffffffffff821115613c4a57613c496140c0565b5b613c5382614103565b9050602081019050919050565b600067ffffffffffffffff821115613c7b57613c7a6140c0565b5b613c8482614103565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d3882613eac565b9150613d4383613eac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7857613d77613fd5565b5b828201905092915050565b6000613d8e82613eac565b9150613d9983613eac565b925082613da957613da8614004565b5b828204905092915050565b6000613dbf82613eac565b9150613dca83613eac565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0357613e02613fd5565b5b828202905092915050565b6000613e1982613eac565b9150613e2483613eac565b925082821015613e3757613e36613fd5565b5b828203905092915050565b6000613e4d82613e8c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ee3578082015181840152602081019050613ec8565b83811115613ef2576000848401525b50505050565b60006002820490506001821680613f1057607f821691505b60208210811415613f2457613f23614033565b5b50919050565b613f3382614103565b810181811067ffffffffffffffff82111715613f5257613f516140c0565b5b80604052505050565b6000613f6682613eac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f9957613f98613fd5565b5b600182019050919050565b6000613faf82613eac565b9150613fba83613eac565b925082613fca57613fc9614004565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61473281613e42565b811461473d57600080fd5b50565b61474981613e54565b811461475457600080fd5b50565b61476081613e60565b811461476b57600080fd5b50565b61477781613eac565b811461478257600080fd5b5056fea2646970667358221220f7a9c10c789d385b801c196f852c1cfa656ee002e004c5870a55e75bce538e8464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a506978656c446f6f7273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004446f6f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f697066732f2f516d545835547742673152574647756577716a78474c364e35775758766e65615a446639316336586654365037722f00000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636352211e11610118578063b88d4fde116100a0578063d0eb26b01161006f578063d0eb26b014610795578063d5abeb01146107be578063da3ef23f146107e9578063e985e9c514610812578063f2fde38b1461084f5761020f565b8063b88d4fde146106d9578063ba7d2c7614610702578063c66828621461072d578063c87b56dd146107585761020f565b80637f00c7a6116100e75780637f00c7a6146106155780638da5cb5b1461063e57806395d89b4114610669578063a0712d6814610694578063a22cb465146106b05761020f565b80636352211e146105595780636c0360eb1461059657806370a08231146105c1578063715018a6146105fe5761020f565b806323b872dd1161019b578063438b63001161016a578063438b63001461046257806344a0d68a1461049f5780634f6ccce7146104c857806355f804b3146105055780635c975abb1461052e5761020f565b806323b872dd146103c95780632f745c59146103f25780633ccfd60b1461042f57806342842e0e146104395761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd1461033657806318cae26914610361578063239c70ae1461039e5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131d4565b610878565b60405161024891906138b2565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131a7565b6108f2565b005b34801561028657600080fd5b5061028f61098b565b60405161029c91906138cd565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190613277565b610a1d565b6040516102d99190613829565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613167565b610aa2565b005b34801561031757600080fd5b50610320610bba565b60405161032d9190613bef565b60405180910390f35b34801561034257600080fd5b5061034b610bc0565b6040516103589190613bef565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190612fe4565b610bcd565b6040516103959190613bef565b60405180910390f35b3480156103aa57600080fd5b506103b3610be5565b6040516103c09190613bef565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190613051565b610beb565b005b3480156103fe57600080fd5b5061041960048036038101906104149190613167565b610c4b565b6040516104269190613bef565b60405180910390f35b610437610cf0565b005b34801561044557600080fd5b50610460600480360381019061045b9190613051565b610de5565b005b34801561046e57600080fd5b5061048960048036038101906104849190612fe4565b610e05565b6040516104969190613890565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613277565b610eb3565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613277565b610f39565b6040516104fc9190613bef565b60405180910390f35b34801561051157600080fd5b5061052c6004803603810190610527919061322e565b610faa565b005b34801561053a57600080fd5b50610543611040565b60405161055091906138b2565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190613277565b611053565b60405161058d9190613829565b60405180910390f35b3480156105a257600080fd5b506105ab611105565b6040516105b891906138cd565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190612fe4565b611193565b6040516105f59190613bef565b60405180910390f35b34801561060a57600080fd5b5061061361124b565b005b34801561062157600080fd5b5061063c60048036038101906106379190613277565b6112d3565b005b34801561064a57600080fd5b50610653611359565b6040516106609190613829565b60405180910390f35b34801561067557600080fd5b5061067e611383565b60405161068b91906138cd565b60405180910390f35b6106ae60048036038101906106a99190613277565b611415565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613127565b611751565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906130a4565b6118d2565b005b34801561070e57600080fd5b50610717611934565b6040516107249190613bef565b60405180910390f35b34801561073957600080fd5b5061074261193a565b60405161074f91906138cd565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190613277565b6119c8565b60405161078c91906138cd565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613277565b611a72565b005b3480156107ca57600080fd5b506107d3611af8565b6040516107e09190613bef565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061322e565b611afe565b005b34801561081e57600080fd5b5061083960048036038101906108349190613011565b611b94565b60405161084691906138b2565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190612fe4565b611c28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108eb57506108ea82611d38565b5b9050919050565b6108fa611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610918611359565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590613acf565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60606000805461099a90613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690613ef8565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2882611e22565b610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613aaf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aad82611053565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590613b6f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3d611e1a565b73ffffffffffffffffffffffffffffffffffffffff161480610b6c5750610b6b81610b66611e1a565b611b94565b5b610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290613a0f565b60405180910390fd5b610bb58383611e8e565b505050565b600d5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b600f5481565b610bfc610bf6611e1a565b82611f47565b610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290613b8f565b60405180910390fd5b610c46838383612025565b505050565b6000610c5683611193565b8210610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906138ef565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf8611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610d16611359565b73ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613acf565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d9290613814565b60006040518083038185875af1925050503d8060008114610dcf576040519150601f19603f3d011682016040523d82523d6000602084013e610dd4565b606091505b5050905080610de257600080fd5b50565b610e00838383604051806020016040528060008152506118d2565b505050565b60606000610e1283611193565b905060008167ffffffffffffffff811115610e3057610e2f6140c0565b5b604051908082528060200260200182016040528015610e5e5781602001602082028036833780820191505090505b50905060005b82811015610ea857610e768582610c4b565b828281518110610e8957610e88614091565b5b6020026020010181815250508080610ea090613f5b565b915050610e64565b508092505050919050565b610ebb611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611359565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613acf565b60405180910390fd5b80600d8190555050565b6000610f43610bc0565b8210610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613baf565b60405180910390fd5b60088281548110610f9857610f97614091565b5b90600052602060002001549050919050565b610fb2611e1a565b73ffffffffffffffffffffffffffffffffffffffff16610fd0611359565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613acf565b60405180910390fd5b80600b908051906020019061103c929190612df8565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390613a4f565b60405180910390fd5b80915050919050565b600b805461111290613ef8565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90613ef8565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90613a2f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611253611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611271611359565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613acf565b60405180910390fd5b6112d16000612281565b565b6112db611e1a565b73ffffffffffffffffffffffffffffffffffffffff166112f9611359565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690613acf565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461139290613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546113be90613ef8565b801561140b5780601f106113e05761010080835404028352916020019161140b565b820191906000526020600020905b8154815290600101906020018083116113ee57829003601f168201915b5050505050905090565b601160009054906101000a900460ff1615611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613aef565b60405180910390fd5b600061146f610bc0565b90506103e8811061149957662386f26fc10000600d819055506014600f8190555060646010819055505b61138881106114b15766470de4df820000600d819055505b611f4081106114c957666a94d74f430000600d819055505b6000821161150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390613bcf565b60405180910390fd5b600f54821115611551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611548906139cf565b60405180910390fd5b600e5482826115609190613d2d565b11156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613a6f565b60405180910390fd5b6115a9611359565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c1576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601054838261162e9190613d2d565b111561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613b4f565b60405180910390fd5b82600d5461167d9190613db4565b3410156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906139ef565b60405180910390fd5b505b6000600190505b82811161174c57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061171f90613f5b565b91905055506117393382846117349190613d2d565b612347565b808061174490613f5b565b9150506116c8565b505050565b611759611e1a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be9061398f565b60405180910390fd5b80600560006117d4611e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611881611e1a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c691906138b2565b60405180910390a35050565b6118e36118dd611e1a565b83611f47565b611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990613b8f565b60405180910390fd5b61192e84848484612365565b50505050565b60105481565b600c805461194790613ef8565b80601f016020809104026020016040519081016040528092919081815260200182805461197390613ef8565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b60606119d382611e22565b611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613b2f565b60405180910390fd5b6000611a1c6123c1565b90506000815111611a3c5760405180602001604052806000815250611a6a565b80611a4684612453565b600c604051602001611a5a939291906137e3565b6040516020818303038152906040525b915050919050565b611a7a611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611a98611359565b73ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613acf565b60405180910390fd5b8060108190555050565b600e5481565b611b06611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611b24611359565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613acf565b60405180910390fd5b80600c9080519060200190611b90929190612df8565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c30611e1a565b73ffffffffffffffffffffffffffffffffffffffff16611c4e611359565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613acf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b9061392f565b60405180910390fd5b611d1d81612281565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e0357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e135750611e12826125b4565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f0183611053565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f5282611e22565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f88906139af565b60405180910390fd5b6000611f9c83611053565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200b57508373ffffffffffffffffffffffffffffffffffffffff16611ff384610a1d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061201c575061201b8185611b94565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661204582611053565b73ffffffffffffffffffffffffffffffffffffffff161461209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613b0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121029061396f565b60405180910390fd5b61211683838361261e565b612121600082611e8e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121719190613e0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c89190613d2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612361828260405180602001604052806000815250612732565b5050565b612370848484612025565b61237c8484848461278d565b6123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061390f565b60405180910390fd5b50505050565b6060600b80546123d090613ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546123fc90613ef8565b80156124495780601f1061241e57610100808354040283529160200191612449565b820191906000526020600020905b81548152906001019060200180831161242c57829003601f168201915b5050505050905090565b6060600082141561249b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125af565b600082905060005b600082146124cd5780806124b690613f5b565b915050600a826124c69190613d83565b91506124a3565b60008167ffffffffffffffff8111156124e9576124e86140c0565b5b6040519080825280601f01601f19166020018201604052801561251b5781602001600182028036833780820191505090505b5090505b600085146125a8576001826125349190613e0e565b9150600a856125439190613fa4565b603061254f9190613d2d565b60f81b81838151811061256557612564614091565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a19190613d83565b945061251f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612629838383611d33565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561266c5761266781612924565b6126ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126aa576126a9838261296d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576126e981612ada565b61272d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461272c5761272b8282612bab565b5b5b505050565b61273c8383612c2a565b612749600084848461278d565b612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f9061390f565b60405180910390fd5b505050565b60006127ae8473ffffffffffffffffffffffffffffffffffffffff16611d20565b15612917578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127d7611e1a565b8786866040518563ffffffff1660e01b81526004016127f99493929190613844565b602060405180830381600087803b15801561281357600080fd5b505af192505050801561284457506040513d601f19601f820116820180604052508101906128419190613201565b60015b6128c7573d8060008114612874576040519150601f19603f3d011682016040523d82523d6000602084013e612879565b606091505b506000815114156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b69061390f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291c565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297a84611193565b6129849190613e0e565b9050600060076000848152602001908152602001600020549050818114612a69576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aee9190613e0e565b9050600060096000848152602001908152602001600020549050600060088381548110612b1e57612b1d614091565b5b906000526020600020015490508060088381548110612b4057612b3f614091565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b8f57612b8e614062565b5b6001900381819060005260206000200160009055905550505050565b6000612bb683611193565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190613a8f565b60405180910390fd5b612ca381611e22565b15612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061394f565b60405180910390fd5b612cef6000838361261e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3f9190613d2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e0490613ef8565b90600052602060002090601f016020900481019282612e265760008555612e6d565b82601f10612e3f57805160ff1916838001178555612e6d565b82800160010185558215612e6d579182015b82811115612e6c578251825591602001919060010190612e51565b5b509050612e7a9190612e7e565b5090565b5b80821115612e97576000816000905550600101612e7f565b5090565b6000612eae612ea984613c2f565b613c0a565b905082815260208101848484011115612eca57612ec96140f4565b5b612ed5848285613eb6565b509392505050565b6000612ef0612eeb84613c60565b613c0a565b905082815260208101848484011115612f0c57612f0b6140f4565b5b612f17848285613eb6565b509392505050565b600081359050612f2e81614729565b92915050565b600081359050612f4381614740565b92915050565b600081359050612f5881614757565b92915050565b600081519050612f6d81614757565b92915050565b600082601f830112612f8857612f876140ef565b5b8135612f98848260208601612e9b565b91505092915050565b600082601f830112612fb657612fb56140ef565b5b8135612fc6848260208601612edd565b91505092915050565b600081359050612fde8161476e565b92915050565b600060208284031215612ffa57612ff96140fe565b5b600061300884828501612f1f565b91505092915050565b60008060408385031215613028576130276140fe565b5b600061303685828601612f1f565b925050602061304785828601612f1f565b9150509250929050565b60008060006060848603121561306a576130696140fe565b5b600061307886828701612f1f565b935050602061308986828701612f1f565b925050604061309a86828701612fcf565b9150509250925092565b600080600080608085870312156130be576130bd6140fe565b5b60006130cc87828801612f1f565b94505060206130dd87828801612f1f565b93505060406130ee87828801612fcf565b925050606085013567ffffffffffffffff81111561310f5761310e6140f9565b5b61311b87828801612f73565b91505092959194509250565b6000806040838503121561313e5761313d6140fe565b5b600061314c85828601612f1f565b925050602061315d85828601612f34565b9150509250929050565b6000806040838503121561317e5761317d6140fe565b5b600061318c85828601612f1f565b925050602061319d85828601612fcf565b9150509250929050565b6000602082840312156131bd576131bc6140fe565b5b60006131cb84828501612f34565b91505092915050565b6000602082840312156131ea576131e96140fe565b5b60006131f884828501612f49565b91505092915050565b600060208284031215613217576132166140fe565b5b600061322584828501612f5e565b91505092915050565b600060208284031215613244576132436140fe565b5b600082013567ffffffffffffffff811115613262576132616140f9565b5b61326e84828501612fa1565b91505092915050565b60006020828403121561328d5761328c6140fe565b5b600061329b84828501612fcf565b91505092915050565b60006132b083836137c5565b60208301905092915050565b6132c581613e42565b82525050565b60006132d682613cb6565b6132e08185613ce4565b93506132eb83613c91565b8060005b8381101561331c57815161330388826132a4565b975061330e83613cd7565b9250506001810190506132ef565b5085935050505092915050565b61333281613e54565b82525050565b600061334382613cc1565b61334d8185613cf5565b935061335d818560208601613ec5565b61336681614103565b840191505092915050565b600061337c82613ccc565b6133868185613d11565b9350613396818560208601613ec5565b61339f81614103565b840191505092915050565b60006133b582613ccc565b6133bf8185613d22565b93506133cf818560208601613ec5565b80840191505092915050565b600081546133e881613ef8565b6133f28186613d22565b9450600182166000811461340d576001811461341e57613451565b60ff19831686528186019350613451565b61342785613ca1565b60005b838110156134495781548189015260018201915060208101905061342a565b838801955050505b50505092915050565b6000613467602b83613d11565b915061347282614114565b604082019050919050565b600061348a603283613d11565b915061349582614163565b604082019050919050565b60006134ad602683613d11565b91506134b8826141b2565b604082019050919050565b60006134d0601c83613d11565b91506134db82614201565b602082019050919050565b60006134f3602483613d11565b91506134fe8261422a565b604082019050919050565b6000613516601983613d11565b915061352182614279565b602082019050919050565b6000613539602c83613d11565b9150613544826142a2565b604082019050919050565b600061355c602483613d11565b9150613567826142f1565b604082019050919050565b600061357f601283613d11565b915061358a82614340565b602082019050919050565b60006135a2603883613d11565b91506135ad82614369565b604082019050919050565b60006135c5602a83613d11565b91506135d0826143b8565b604082019050919050565b60006135e8602983613d11565b91506135f382614407565b604082019050919050565b600061360b601683613d11565b915061361682614456565b602082019050919050565b600061362e602083613d11565b91506136398261447f565b602082019050919050565b6000613651602c83613d11565b915061365c826144a8565b604082019050919050565b6000613674602083613d11565b915061367f826144f7565b602082019050919050565b6000613697601683613d11565b91506136a282614520565b602082019050919050565b60006136ba602983613d11565b91506136c582614549565b604082019050919050565b60006136dd602f83613d11565b91506136e882614598565b604082019050919050565b6000613700601c83613d11565b915061370b826145e7565b602082019050919050565b6000613723602183613d11565b915061372e82614610565b604082019050919050565b6000613746600083613d06565b91506137518261465f565b600082019050919050565b6000613769603183613d11565b915061377482614662565b604082019050919050565b600061378c602c83613d11565b9150613797826146b1565b604082019050919050565b60006137af601b83613d11565b91506137ba82614700565b602082019050919050565b6137ce81613eac565b82525050565b6137dd81613eac565b82525050565b60006137ef82866133aa565b91506137fb82856133aa565b915061380782846133db565b9150819050949350505050565b600061381f82613739565b9150819050919050565b600060208201905061383e60008301846132bc565b92915050565b600060808201905061385960008301876132bc565b61386660208301866132bc565b61387360408301856137d4565b81810360608301526138858184613338565b905095945050505050565b600060208201905081810360008301526138aa81846132cb565b905092915050565b60006020820190506138c76000830184613329565b92915050565b600060208201905081810360008301526138e78184613371565b905092915050565b600060208201905081810360008301526139088161345a565b9050919050565b600060208201905081810360008301526139288161347d565b9050919050565b60006020820190508181036000830152613948816134a0565b9050919050565b60006020820190508181036000830152613968816134c3565b9050919050565b60006020820190508181036000830152613988816134e6565b9050919050565b600060208201905081810360008301526139a881613509565b9050919050565b600060208201905081810360008301526139c88161352c565b9050919050565b600060208201905081810360008301526139e88161354f565b9050919050565b60006020820190508181036000830152613a0881613572565b9050919050565b60006020820190508181036000830152613a2881613595565b9050919050565b60006020820190508181036000830152613a48816135b8565b9050919050565b60006020820190508181036000830152613a68816135db565b9050919050565b60006020820190508181036000830152613a88816135fe565b9050919050565b60006020820190508181036000830152613aa881613621565b9050919050565b60006020820190508181036000830152613ac881613644565b9050919050565b60006020820190508181036000830152613ae881613667565b9050919050565b60006020820190508181036000830152613b088161368a565b9050919050565b60006020820190508181036000830152613b28816136ad565b9050919050565b60006020820190508181036000830152613b48816136d0565b9050919050565b60006020820190508181036000830152613b68816136f3565b9050919050565b60006020820190508181036000830152613b8881613716565b9050919050565b60006020820190508181036000830152613ba88161375c565b9050919050565b60006020820190508181036000830152613bc88161377f565b9050919050565b60006020820190508181036000830152613be8816137a2565b9050919050565b6000602082019050613c0460008301846137d4565b92915050565b6000613c14613c25565b9050613c208282613f2a565b919050565b6000604051905090565b600067ffffffffffffffff821115613c4a57613c496140c0565b5b613c5382614103565b9050602081019050919050565b600067ffffffffffffffff821115613c7b57613c7a6140c0565b5b613c8482614103565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d3882613eac565b9150613d4383613eac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7857613d77613fd5565b5b828201905092915050565b6000613d8e82613eac565b9150613d9983613eac565b925082613da957613da8614004565b5b828204905092915050565b6000613dbf82613eac565b9150613dca83613eac565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0357613e02613fd5565b5b828202905092915050565b6000613e1982613eac565b9150613e2483613eac565b925082821015613e3757613e36613fd5565b5b828203905092915050565b6000613e4d82613e8c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ee3578082015181840152602081019050613ec8565b83811115613ef2576000848401525b50505050565b60006002820490506001821680613f1057607f821691505b60208210811415613f2457613f23614033565b5b50919050565b613f3382614103565b810181811067ffffffffffffffff82111715613f5257613f516140c0565b5b80604052505050565b6000613f6682613eac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f9957613f98613fd5565b5b600182019050919050565b6000613faf82613eac565b9150613fba83613eac565b925082613fca57613fc9614004565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61473281613e42565b811461473d57600080fd5b50565b61474981613e54565b811461475457600080fd5b50565b61476081613e60565b811461476b57600080fd5b50565b61477781613eac565b811461478257600080fd5b5056fea2646970667358221220f7a9c10c789d385b801c196f852c1cfa656ee002e004c5870a55e75bce538e8464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a506978656c446f6f7273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004446f6f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f697066732f2f516d545835547742673152574647756577716a78474c364e35775758766e65615a446639316336586654365037722f00000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): PixelDoors
Arg [1] : _symbol (string): Door
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud//ipfs//QmTX5TwBg1RWFGuewqjxGL6N5wWXvneaZDf91c6XfT6P7r/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 506978656c446f6f727300000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 446f6f7200000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f6970
Arg [9] : 66732f2f516d545835547742673152574647756577716a78474c364e35775758
Arg [10] : 766e65615a446639316336586654365037722f00000000000000000000000000
Deployed Bytecode Sourcemap
43226:3413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36971:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46398:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24863:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26422:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25945:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43380:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37611:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43561:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43451:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27312:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37279:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46478:158;;;:::i;:::-;;27722:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45039:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45956:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37801:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46168:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43530:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24557:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43312:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:94;;;;;;;;;;;;;:::i;:::-;;46044:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1837:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43943:1090;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26715:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27978:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43488:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43338;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45393:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45842:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43414:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46272:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27081:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2737:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36971:224;37073:4;37112:35;37097:50;;;:11;:50;;;;:90;;;;37151:36;37175:11;37151:23;:36::i;:::-;37097:90;37090:97;;36971:224;;;:::o;46398:73::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46459:6:::1;46450;;:15;;;;;;;;;;;;;;;;;;46398:73:::0;:::o;24863:100::-;24917:13;24950:5;24943:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24863:100;:::o;26422:221::-;26498:7;26526:16;26534:7;26526;:16::i;:::-;26518:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26611:15;:24;26627:7;26611:24;;;;;;;;;;;;;;;;;;;;;26604:31;;26422:221;;;:::o;25945:411::-;26026:13;26042:23;26057:7;26042:14;:23::i;:::-;26026:39;;26090:5;26084:11;;:2;:11;;;;26076:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:5;26168:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26193:37;26210:5;26217:12;:10;:12::i;:::-;26193:16;:37::i;:::-;26168:62;26146:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26327:21;26336:2;26340:7;26327:8;:21::i;:::-;26015:341;25945:411;;:::o;43380:29::-;;;;:::o;37611:113::-;37672:7;37699:10;:17;;;;37692:24;;37611:113;:::o;43561:55::-;;;;;;;;;;;;;;;;;:::o;43451:32::-;;;;:::o;27312:339::-;27507:41;27526:12;:10;:12::i;:::-;27540:7;27507:18;:41::i;:::-;27499:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27615:28;27625:4;27631:2;27635:7;27615:9;:28::i;:::-;27312:339;;;:::o;37279:256::-;37376:7;37412:23;37429:5;37412:16;:23::i;:::-;37404:5;:31;37396:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37501:12;:19;37514:5;37501:19;;;;;;;;;;;;;;;:26;37521:5;37501:26;;;;;;;;;;;;37494:33;;37279:256;;;;:::o;46478:158::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46531:12:::1;46557:10;46549:24;;46581:21;46549:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46530:77;;;46622:7;46614:16;;;::::0;::::1;;46523:113;46478:158::o:0;27722:185::-;27860:39;27877:4;27883:2;27887:7;27860:39;;;;;;;;;;;;:16;:39::i;:::-;27722:185;;;:::o;45039:348::-;45114:16;45142:23;45168:17;45178:6;45168:9;:17::i;:::-;45142:43;;45192:25;45234:15;45220:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45192:58;;45262:9;45257:103;45277:15;45273:1;:19;45257:103;;;45322:30;45342:6;45350:1;45322:19;:30::i;:::-;45308:8;45317:1;45308:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45294:3;;;;;:::i;:::-;;;;45257:103;;;;45373:8;45366:15;;;;45039:348;;;:::o;45956:82::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46024:8:::1;46017:4;:15;;;;45956:82:::0;:::o;37801:233::-;37876:7;37912:30;:28;:30::i;:::-;37904:5;:38;37896:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38009:10;38020:5;38009:17;;;;;;;;:::i;:::-;;;;;;;;;;38002:24;;37801:233;;;:::o;46168:98::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46249:11:::1;46239:7;:21;;;;;;;;;;;;:::i;:::-;;46168:98:::0;:::o;43530:26::-;;;;;;;;;;;;;:::o;24557:239::-;24629:7;24649:13;24665:7;:16;24673:7;24665:16;;;;;;;;;;;;;;;;;;;;;24649:32;;24717:1;24700:19;;:5;:19;;;;24692:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24783:5;24776:12;;;24557:239;;;:::o;43312:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24287:208::-;24359:7;24404:1;24387:19;;:5;:19;;;;24379:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24471:9;:16;24481:5;24471:16;;;;;;;;;;;;;;;;24464:23;;24287:208;;;:::o;2488:94::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2553:21:::1;2571:1;2553:9;:21::i;:::-;2488:94::o:0;46044:118::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46139:17:::1;46123:13;:33;;;;46044:118:::0;:::o;1837:87::-;1883:7;1910:6;;;;;;;;;;;1903:13;;1837:87;:::o;25032:104::-;25088:13;25121:7;25114:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25032:104;:::o;43943:1090::-;44009:6;;;;;;;;;;;44008:7;44000:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44049:14;44066:13;:11;:13::i;:::-;44049:30;;44100:4;44090:6;:14;44086:199;;44211:10;44204:4;:17;;;;44244:2;44228:13;:18;;;;44274:3;44253:18;:24;;;;44086:199;44305:4;44295:6;:14;44291:37;;44318:10;44311:4;:17;;;;44291:37;44349:4;44339:6;:14;44335:37;;44362:10;44355:4;:17;;;;44335:37;44401:1;44387:11;:15;44379:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44464:13;;44449:11;:28;;44441:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44557:9;;44542:11;44533:6;:20;;;;:::i;:::-;:33;;44525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44620:7;:5;:7::i;:::-;44606:21;;:10;:21;;;44602:282;;44640:24;44667:20;:32;44688:10;44667:32;;;;;;;;;;;;;;;;44640:59;;44752:18;;44737:11;44718:16;:30;;;;:::i;:::-;:52;;44710:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44842:11;44835:4;;:18;;;;:::i;:::-;44822:9;:31;;44814:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44629:255;44602:282;44897:9;44909:1;44897:13;;44892:136;44917:11;44912:1;:16;44892:136;;44944:20;:32;44965:10;44944:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44987:33;44997:10;45018:1;45009:6;:10;;;;:::i;:::-;44987:9;:33::i;:::-;44930:3;;;;;:::i;:::-;;;;44892:136;;;;43993:1040;43943:1090;:::o;26715:295::-;26830:12;:10;:12::i;:::-;26818:24;;:8;:24;;;;26810:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26930:8;26885:18;:32;26904:12;:10;:12::i;:::-;26885:32;;;;;;;;;;;;;;;:42;26918:8;26885:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26983:8;26954:48;;26969:12;:10;:12::i;:::-;26954:48;;;26993:8;26954:48;;;;;;:::i;:::-;;;;;;;;26715:295;;:::o;27978:328::-;28153:41;28172:12;:10;:12::i;:::-;28186:7;28153:18;:41::i;:::-;28145:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28259:39;28273:4;28279:2;28283:7;28292:5;28259:13;:39::i;:::-;27978:328;;;;:::o;43488:37::-;;;;:::o;43338:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45393:427::-;45491:13;45532:16;45540:7;45532;:16::i;:::-;45516:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45626:28;45657:10;:8;:10::i;:::-;45626:41;;45712:1;45687:14;45681:28;:32;:133;;;;;;;;;;;;;;;;;45749:14;45765:18;:7;:16;:18::i;:::-;45785:13;45732:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45681:133;45674:140;;;45393:427;;;:::o;45842:106::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45936:6:::1;45915:18;:27;;;;45842:106:::0;:::o;43414:32::-;;;;:::o;46272:122::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46371:17:::1;46355:13;:33;;;;;;;;;;;;:::i;:::-;;46272:122:::0;:::o;27081:164::-;27178:4;27202:18;:25;27221:5;27202:25;;;;;;;;;;;;;;;:35;27228:8;27202:35;;;;;;;;;;;;;;;;;;;;;;;;;27195:42;;27081:164;;;;:::o;2737:192::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:::1;2826:22;;:8;:22;;;;2818:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:19;2912:8;2902:9;:19::i;:::-;2737:192:::0;:::o;13556:387::-;13616:4;13824:12;13891:7;13879:20;13871:28;;13934:1;13927:4;:8;13920:15;;;13556:387;;;:::o;35908:126::-;;;;:::o;23918:305::-;24020:4;24072:25;24057:40;;;:11;:40;;;;:105;;;;24129:33;24114:48;;;:11;:48;;;;24057:105;:158;;;;24179:36;24203:11;24179:23;:36::i;:::-;24057:158;24037:178;;23918:305;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;29816:127::-;29881:4;29933:1;29905:30;;:7;:16;29913:7;29905:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29898:37;;29816:127;;;:::o;33798:174::-;33900:2;33873:15;:24;33889:7;33873:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33956:7;33952:2;33918:46;;33927:23;33942:7;33927:14;:23::i;:::-;33918:46;;;;;;;;;;;;33798:174;;:::o;30110:348::-;30203:4;30228:16;30236:7;30228;:16::i;:::-;30220:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30304:13;30320:23;30335:7;30320:14;:23::i;:::-;30304:39;;30373:5;30362:16;;:7;:16;;;:51;;;;30406:7;30382:31;;:20;30394:7;30382:11;:20::i;:::-;:31;;;30362:51;:87;;;;30417:32;30434:5;30441:7;30417:16;:32::i;:::-;30362:87;30354:96;;;30110:348;;;;:::o;33102:578::-;33261:4;33234:31;;:23;33249:7;33234:14;:23::i;:::-;:31;;;33226:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33344:1;33330:16;;:2;:16;;;;33322:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33400:39;33421:4;33427:2;33431:7;33400:20;:39::i;:::-;33504:29;33521:1;33525:7;33504:8;:29::i;:::-;33565:1;33546:9;:15;33556:4;33546:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33594:1;33577:9;:13;33587:2;33577:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33625:2;33606:7;:16;33614:7;33606:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33664:7;33660:2;33645:27;;33654:4;33645:27;;;;;;;;;;;;33102:578;;;:::o;2937:173::-;2993:16;3012:6;;;;;;;;;;;2993:25;;3038:8;3029:6;;:17;;;;;;;;;;;;;;;;;;3093:8;3062:40;;3083:8;3062:40;;;;;;;;;;;;2982:128;2937:173;:::o;30800:110::-;30876:26;30886:2;30890:7;30876:26;;;;;;;;;;;;:9;:26::i;:::-;30800:110;;:::o;29188:315::-;29345:28;29355:4;29361:2;29365:7;29345:9;:28::i;:::-;29392:48;29415:4;29421:2;29425:7;29434:5;29392:22;:48::i;:::-;29384:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29188:315;;;;:::o;43822:102::-;43882:13;43911:7;43904:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43822:102;:::o;11031:723::-;11087:13;11317:1;11308:5;:10;11304:53;;;11335:10;;;;;;;;;;;;;;;;;;;;;11304:53;11367:12;11382:5;11367:20;;11398:14;11423:78;11438:1;11430:4;:9;11423:78;;11456:8;;;;;:::i;:::-;;;;11487:2;11479:10;;;;;:::i;:::-;;;11423:78;;;11511:19;11543:6;11533:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11511:39;;11561:154;11577:1;11568:5;:10;11561:154;;11605:1;11595:11;;;;;:::i;:::-;;;11672:2;11664:5;:10;;;;:::i;:::-;11651:2;:24;;;;:::i;:::-;11638:39;;11621:6;11628;11621:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11701:2;11692:11;;;;;:::i;:::-;;;11561:154;;;11739:6;11725:21;;;;;11031:723;;;;:::o;10556:157::-;10641:4;10680:25;10665:40;;;:11;:40;;;;10658:47;;10556:157;;;:::o;38647:589::-;38791:45;38818:4;38824:2;38828:7;38791:26;:45::i;:::-;38869:1;38853:18;;:4;:18;;;38849:187;;;38888:40;38920:7;38888:31;:40::i;:::-;38849:187;;;38958:2;38950:10;;:4;:10;;;38946:90;;38977:47;39010:4;39016:7;38977:32;:47::i;:::-;38946:90;38849:187;39064:1;39050:16;;:2;:16;;;39046:183;;;39083:45;39120:7;39083:36;:45::i;:::-;39046:183;;;39156:4;39150:10;;:2;:10;;;39146:83;;39177:40;39205:2;39209:7;39177:27;:40::i;:::-;39146:83;39046:183;38647:589;;;:::o;31137:321::-;31267:18;31273:2;31277:7;31267:5;:18::i;:::-;31318:54;31349:1;31353:2;31357:7;31366:5;31318:22;:54::i;:::-;31296:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31137:321;;;:::o;34537:799::-;34692:4;34713:15;:2;:13;;;:15::i;:::-;34709:620;;;34765:2;34749:36;;;34786:12;:10;:12::i;:::-;34800:4;34806:7;34815:5;34749:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34745:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35008:1;34991:6;:13;:18;34987:272;;;35034:60;;;;;;;;;;:::i;:::-;;;;;;;;34987:272;35209:6;35203:13;35194:6;35190:2;35186:15;35179:38;34745:529;34882:41;;;34872:51;;;:6;:51;;;;34865:58;;;;;34709:620;35313:4;35306:11;;34537:799;;;;;;;:::o;39959:164::-;40063:10;:17;;;;40036:15;:24;40052:7;40036:24;;;;;;;;;;;:44;;;;40091:10;40107:7;40091:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39959:164;:::o;40750:988::-;41016:22;41066:1;41041:22;41058:4;41041:16;:22::i;:::-;:26;;;;:::i;:::-;41016:51;;41078:18;41099:17;:26;41117:7;41099:26;;;;;;;;;;;;41078:47;;41246:14;41232:10;:28;41228:328;;41277:19;41299:12;:18;41312:4;41299:18;;;;;;;;;;;;;;;:34;41318:14;41299:34;;;;;;;;;;;;41277:56;;41383:11;41350:12;:18;41363:4;41350:18;;;;;;;;;;;;;;;:30;41369:10;41350:30;;;;;;;;;;;:44;;;;41500:10;41467:17;:30;41485:11;41467:30;;;;;;;;;;;:43;;;;41262:294;41228:328;41652:17;:26;41670:7;41652:26;;;;;;;;;;;41645:33;;;41696:12;:18;41709:4;41696:18;;;;;;;;;;;;;;;:34;41715:14;41696:34;;;;;;;;;;;41689:41;;;40831:907;;40750:988;;:::o;42033:1079::-;42286:22;42331:1;42311:10;:17;;;;:21;;;;:::i;:::-;42286:46;;42343:18;42364:15;:24;42380:7;42364:24;;;;;;;;;;;;42343:45;;42715:19;42737:10;42748:14;42737:26;;;;;;;;:::i;:::-;;;;;;;;;;42715:48;;42801:11;42776:10;42787;42776:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42912:10;42881:15;:28;42897:11;42881:28;;;;;;;;;;;:41;;;;43053:15;:24;43069:7;43053:24;;;;;;;;;;;43046:31;;;43088:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42104:1008;;;42033:1079;:::o;39537:221::-;39622:14;39639:20;39656:2;39639:16;:20::i;:::-;39622:37;;39697:7;39670:12;:16;39683:2;39670:16;;;;;;;;;;;;;;;:24;39687:6;39670:24;;;;;;;;;;;:34;;;;39744:6;39715:17;:26;39733:7;39715:26;;;;;;;;;;;:35;;;;39611:147;39537:221;;:::o;31794:382::-;31888:1;31874:16;;:2;:16;;;;31866:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31947:16;31955:7;31947;:16::i;:::-;31946:17;31938:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32009:45;32038:1;32042:2;32046:7;32009:20;:45::i;:::-;32084:1;32067:9;:13;32077:2;32067:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32115:2;32096:7;:16;32104:7;32096:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32160:7;32156:2;32135:33;;32152:1;32135:33;;;;;;;;;;;;31794:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:::-;17883:3;17904:67;17968:2;17963:3;17904:67;:::i;:::-;17897:74;;17980:93;18069:3;17980:93;:::i;:::-;18098:2;18093:3;18089:12;18082:19;;17741:366;;;:::o;18113:::-;18255:3;18276:67;18340:2;18335:3;18276:67;:::i;:::-;18269:74;;18352:93;18441:3;18352:93;:::i;:::-;18470:2;18465:3;18461:12;18454:19;;18113:366;;;:::o;18485:398::-;18644:3;18665:83;18746:1;18741:3;18665:83;:::i;:::-;18658:90;;18757:93;18846:3;18757:93;:::i;:::-;18875:1;18870:3;18866:11;18859:18;;18485:398;;;:::o;18889:366::-;19031:3;19052:67;19116:2;19111:3;19052:67;:::i;:::-;19045:74;;19128:93;19217:3;19128:93;:::i;:::-;19246:2;19241:3;19237:12;19230:19;;18889:366;;;:::o;19261:::-;19403:3;19424:67;19488:2;19483:3;19424:67;:::i;:::-;19417:74;;19500:93;19589:3;19500:93;:::i;:::-;19618:2;19613:3;19609:12;19602:19;;19261:366;;;:::o;19633:::-;19775:3;19796:67;19860:2;19855:3;19796:67;:::i;:::-;19789:74;;19872:93;19961:3;19872:93;:::i;:::-;19990:2;19985:3;19981:12;19974:19;;19633:366;;;:::o;20005:108::-;20082:24;20100:5;20082:24;:::i;:::-;20077:3;20070:37;20005:108;;:::o;20119:118::-;20206:24;20224:5;20206:24;:::i;:::-;20201:3;20194:37;20119:118;;:::o;20243:589::-;20468:3;20490:95;20581:3;20572:6;20490:95;:::i;:::-;20483:102;;20602:95;20693:3;20684:6;20602:95;:::i;:::-;20595:102;;20714:92;20802:3;20793:6;20714:92;:::i;:::-;20707:99;;20823:3;20816:10;;20243:589;;;;;;:::o;20838:379::-;21022:3;21044:147;21187:3;21044:147;:::i;:::-;21037:154;;21208:3;21201:10;;20838:379;;;:::o;21223:222::-;21316:4;21354:2;21343:9;21339:18;21331:26;;21367:71;21435:1;21424:9;21420:17;21411:6;21367:71;:::i;:::-;21223:222;;;;:::o;21451:640::-;21646:4;21684:3;21673:9;21669:19;21661:27;;21698:71;21766:1;21755:9;21751:17;21742:6;21698:71;:::i;:::-;21779:72;21847:2;21836:9;21832:18;21823:6;21779:72;:::i;:::-;21861;21929:2;21918:9;21914:18;21905:6;21861:72;:::i;:::-;21980:9;21974:4;21970:20;21965:2;21954:9;21950:18;21943:48;22008:76;22079:4;22070:6;22008:76;:::i;:::-;22000:84;;21451:640;;;;;;;:::o;22097:373::-;22240:4;22278:2;22267:9;22263:18;22255:26;;22327:9;22321:4;22317:20;22313:1;22302:9;22298:17;22291:47;22355:108;22458:4;22449:6;22355:108;:::i;:::-;22347:116;;22097:373;;;;:::o;22476:210::-;22563:4;22601:2;22590:9;22586:18;22578:26;;22614:65;22676:1;22665:9;22661:17;22652:6;22614:65;:::i;:::-;22476:210;;;;:::o;22692:313::-;22805:4;22843:2;22832:9;22828:18;22820:26;;22892:9;22886:4;22882:20;22878:1;22867:9;22863:17;22856:47;22920:78;22993:4;22984:6;22920:78;:::i;:::-;22912:86;;22692:313;;;;:::o;23011:419::-;23177:4;23215:2;23204:9;23200:18;23192:26;;23264:9;23258:4;23254:20;23250:1;23239:9;23235:17;23228:47;23292:131;23418:4;23292:131;:::i;:::-;23284:139;;23011:419;;;:::o;23436:::-;23602:4;23640:2;23629:9;23625:18;23617:26;;23689:9;23683:4;23679:20;23675:1;23664:9;23660:17;23653:47;23717:131;23843:4;23717:131;:::i;:::-;23709:139;;23436:419;;;:::o;23861:::-;24027:4;24065:2;24054:9;24050:18;24042:26;;24114:9;24108:4;24104:20;24100:1;24089:9;24085:17;24078:47;24142:131;24268:4;24142:131;:::i;:::-;24134:139;;23861:419;;;:::o;24286:::-;24452:4;24490:2;24479:9;24475:18;24467:26;;24539:9;24533:4;24529:20;24525:1;24514:9;24510:17;24503:47;24567:131;24693:4;24567:131;:::i;:::-;24559:139;;24286:419;;;:::o;24711:::-;24877:4;24915:2;24904:9;24900:18;24892:26;;24964:9;24958:4;24954:20;24950:1;24939:9;24935:17;24928:47;24992:131;25118:4;24992:131;:::i;:::-;24984:139;;24711:419;;;:::o;25136:::-;25302:4;25340:2;25329:9;25325:18;25317:26;;25389:9;25383:4;25379:20;25375:1;25364:9;25360:17;25353:47;25417:131;25543:4;25417:131;:::i;:::-;25409:139;;25136:419;;;:::o;25561:::-;25727:4;25765:2;25754:9;25750:18;25742:26;;25814:9;25808:4;25804:20;25800:1;25789:9;25785:17;25778:47;25842:131;25968:4;25842:131;:::i;:::-;25834:139;;25561:419;;;:::o;25986:::-;26152:4;26190:2;26179:9;26175:18;26167:26;;26239:9;26233:4;26229:20;26225:1;26214:9;26210:17;26203:47;26267:131;26393:4;26267:131;:::i;:::-;26259:139;;25986:419;;;:::o;26411:::-;26577:4;26615:2;26604:9;26600:18;26592:26;;26664:9;26658:4;26654:20;26650:1;26639:9;26635:17;26628:47;26692:131;26818:4;26692:131;:::i;:::-;26684:139;;26411:419;;;:::o;26836:::-;27002:4;27040:2;27029:9;27025:18;27017:26;;27089:9;27083:4;27079:20;27075:1;27064:9;27060:17;27053:47;27117:131;27243:4;27117:131;:::i;:::-;27109:139;;26836:419;;;:::o;27261:::-;27427:4;27465:2;27454:9;27450:18;27442:26;;27514:9;27508:4;27504:20;27500:1;27489:9;27485:17;27478:47;27542:131;27668:4;27542:131;:::i;:::-;27534:139;;27261:419;;;:::o;27686:::-;27852:4;27890:2;27879:9;27875:18;27867:26;;27939:9;27933:4;27929:20;27925:1;27914:9;27910:17;27903:47;27967:131;28093:4;27967:131;:::i;:::-;27959:139;;27686:419;;;:::o;28111:::-;28277:4;28315:2;28304:9;28300:18;28292:26;;28364:9;28358:4;28354:20;28350:1;28339:9;28335:17;28328:47;28392:131;28518:4;28392:131;:::i;:::-;28384:139;;28111:419;;;:::o;28536:::-;28702:4;28740:2;28729:9;28725:18;28717:26;;28789:9;28783:4;28779:20;28775:1;28764:9;28760:17;28753:47;28817:131;28943:4;28817:131;:::i;:::-;28809:139;;28536:419;;;:::o;28961:::-;29127:4;29165:2;29154:9;29150:18;29142:26;;29214:9;29208:4;29204:20;29200:1;29189:9;29185:17;29178:47;29242:131;29368:4;29242:131;:::i;:::-;29234:139;;28961:419;;;:::o;29386:::-;29552:4;29590:2;29579:9;29575:18;29567:26;;29639:9;29633:4;29629:20;29625:1;29614:9;29610:17;29603:47;29667:131;29793:4;29667:131;:::i;:::-;29659:139;;29386:419;;;:::o;29811:::-;29977:4;30015:2;30004:9;30000:18;29992:26;;30064:9;30058:4;30054:20;30050:1;30039:9;30035:17;30028:47;30092:131;30218:4;30092:131;:::i;:::-;30084:139;;29811:419;;;:::o;30236:::-;30402:4;30440:2;30429:9;30425:18;30417:26;;30489:9;30483:4;30479:20;30475:1;30464:9;30460:17;30453:47;30517:131;30643:4;30517:131;:::i;:::-;30509:139;;30236:419;;;:::o;30661:::-;30827:4;30865:2;30854:9;30850:18;30842:26;;30914:9;30908:4;30904:20;30900:1;30889:9;30885:17;30878:47;30942:131;31068:4;30942:131;:::i;:::-;30934:139;;30661:419;;;:::o;31086:::-;31252:4;31290:2;31279:9;31275:18;31267:26;;31339:9;31333:4;31329:20;31325:1;31314:9;31310:17;31303:47;31367:131;31493:4;31367:131;:::i;:::-;31359:139;;31086:419;;;:::o;31511:::-;31677:4;31715:2;31704:9;31700:18;31692:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31792:131;31918:4;31792:131;:::i;:::-;31784:139;;31511:419;;;:::o;31936:::-;32102:4;32140:2;32129:9;32125:18;32117:26;;32189:9;32183:4;32179:20;32175:1;32164:9;32160:17;32153:47;32217:131;32343:4;32217:131;:::i;:::-;32209:139;;31936:419;;;:::o;32361:::-;32527:4;32565:2;32554:9;32550:18;32542:26;;32614:9;32608:4;32604:20;32600:1;32589:9;32585:17;32578:47;32642:131;32768:4;32642:131;:::i;:::-;32634:139;;32361:419;;;:::o;32786:::-;32952:4;32990:2;32979:9;32975:18;32967:26;;33039:9;33033:4;33029:20;33025:1;33014:9;33010:17;33003:47;33067:131;33193:4;33067:131;:::i;:::-;33059:139;;32786:419;;;:::o;33211:222::-;33304:4;33342:2;33331:9;33327:18;33319:26;;33355:71;33423:1;33412:9;33408:17;33399:6;33355:71;:::i;:::-;33211:222;;;;:::o;33439:129::-;33473:6;33500:20;;:::i;:::-;33490:30;;33529:33;33557:4;33549:6;33529:33;:::i;:::-;33439:129;;;:::o;33574:75::-;33607:6;33640:2;33634:9;33624:19;;33574:75;:::o;33655:307::-;33716:4;33806:18;33798:6;33795:30;33792:56;;;33828:18;;:::i;:::-;33792:56;33866:29;33888:6;33866:29;:::i;:::-;33858:37;;33950:4;33944;33940:15;33932:23;;33655:307;;;:::o;33968:308::-;34030:4;34120:18;34112:6;34109:30;34106:56;;;34142:18;;:::i;:::-;34106:56;34180:29;34202:6;34180:29;:::i;:::-;34172:37;;34264:4;34258;34254:15;34246:23;;33968:308;;;:::o;34282:132::-;34349:4;34372:3;34364:11;;34402:4;34397:3;34393:14;34385:22;;34282:132;;;:::o;34420:141::-;34469:4;34492:3;34484:11;;34515:3;34512:1;34505:14;34549:4;34546:1;34536:18;34528:26;;34420:141;;;:::o;34567:114::-;34634:6;34668:5;34662:12;34652:22;;34567:114;;;:::o;34687:98::-;34738:6;34772:5;34766:12;34756:22;;34687:98;;;:::o;34791:99::-;34843:6;34877:5;34871:12;34861:22;;34791:99;;;:::o;34896:113::-;34966:4;34998;34993:3;34989:14;34981:22;;34896:113;;;:::o;35015:184::-;35114:11;35148:6;35143:3;35136:19;35188:4;35183:3;35179:14;35164:29;;35015:184;;;;:::o;35205:168::-;35288:11;35322:6;35317:3;35310:19;35362:4;35357:3;35353:14;35338:29;;35205:168;;;;:::o;35379:147::-;35480:11;35517:3;35502:18;;35379:147;;;;:::o;35532:169::-;35616:11;35650:6;35645:3;35638:19;35690:4;35685:3;35681:14;35666:29;;35532:169;;;;:::o;35707:148::-;35809:11;35846:3;35831:18;;35707:148;;;;:::o;35861:305::-;35901:3;35920:20;35938:1;35920:20;:::i;:::-;35915:25;;35954:20;35972:1;35954:20;:::i;:::-;35949:25;;36108:1;36040:66;36036:74;36033:1;36030:81;36027:107;;;36114:18;;:::i;:::-;36027:107;36158:1;36155;36151:9;36144:16;;35861:305;;;;:::o;36172:185::-;36212:1;36229:20;36247:1;36229:20;:::i;:::-;36224:25;;36263:20;36281:1;36263:20;:::i;:::-;36258:25;;36302:1;36292:35;;36307:18;;:::i;:::-;36292:35;36349:1;36346;36342:9;36337:14;;36172:185;;;;:::o;36363:348::-;36403:7;36426:20;36444:1;36426:20;:::i;:::-;36421:25;;36460:20;36478:1;36460:20;:::i;:::-;36455:25;;36648:1;36580:66;36576:74;36573:1;36570:81;36565:1;36558:9;36551:17;36547:105;36544:131;;;36655:18;;:::i;:::-;36544:131;36703:1;36700;36696:9;36685:20;;36363:348;;;;:::o;36717:191::-;36757:4;36777:20;36795:1;36777:20;:::i;:::-;36772:25;;36811:20;36829:1;36811:20;:::i;:::-;36806:25;;36850:1;36847;36844:8;36841:34;;;36855:18;;:::i;:::-;36841:34;36900:1;36897;36893:9;36885:17;;36717:191;;;;:::o;36914:96::-;36951:7;36980:24;36998:5;36980:24;:::i;:::-;36969:35;;36914:96;;;:::o;37016:90::-;37050:7;37093:5;37086:13;37079:21;37068:32;;37016:90;;;:::o;37112:149::-;37148:7;37188:66;37181:5;37177:78;37166:89;;37112:149;;;:::o;37267:126::-;37304:7;37344:42;37337:5;37333:54;37322:65;;37267:126;;;:::o;37399:77::-;37436:7;37465:5;37454:16;;37399:77;;;:::o;37482:154::-;37566:6;37561:3;37556;37543:30;37628:1;37619:6;37614:3;37610:16;37603:27;37482:154;;;:::o;37642:307::-;37710:1;37720:113;37734:6;37731:1;37728:13;37720:113;;;37819:1;37814:3;37810:11;37804:18;37800:1;37795:3;37791:11;37784:39;37756:2;37753:1;37749:10;37744:15;;37720:113;;;37851:6;37848:1;37845:13;37842:101;;;37931:1;37922:6;37917:3;37913:16;37906:27;37842:101;37691:258;37642:307;;;:::o;37955:320::-;37999:6;38036:1;38030:4;38026:12;38016:22;;38083:1;38077:4;38073:12;38104:18;38094:81;;38160:4;38152:6;38148:17;38138:27;;38094:81;38222:2;38214:6;38211:14;38191:18;38188:38;38185:84;;;38241:18;;:::i;:::-;38185:84;38006:269;37955:320;;;:::o;38281:281::-;38364:27;38386:4;38364:27;:::i;:::-;38356:6;38352:40;38494:6;38482:10;38479:22;38458:18;38446:10;38443:34;38440:62;38437:88;;;38505:18;;:::i;:::-;38437:88;38545:10;38541:2;38534:22;38324:238;38281:281;;:::o;38568:233::-;38607:3;38630:24;38648:5;38630:24;:::i;:::-;38621:33;;38676:66;38669:5;38666:77;38663:103;;;38746:18;;:::i;:::-;38663:103;38793:1;38786:5;38782:13;38775:20;;38568:233;;;:::o;38807:176::-;38839:1;38856:20;38874:1;38856:20;:::i;:::-;38851:25;;38890:20;38908:1;38890:20;:::i;:::-;38885:25;;38929:1;38919:35;;38934:18;;:::i;:::-;38919:35;38975:1;38972;38968:9;38963:14;;38807:176;;;;:::o;38989:180::-;39037:77;39034:1;39027:88;39134:4;39131:1;39124:15;39158:4;39155:1;39148:15;39175:180;39223:77;39220:1;39213:88;39320:4;39317:1;39310:15;39344:4;39341:1;39334:15;39361:180;39409:77;39406:1;39399:88;39506:4;39503:1;39496:15;39530:4;39527:1;39520:15;39547:180;39595:77;39592:1;39585:88;39692:4;39689:1;39682:15;39716:4;39713:1;39706:15;39733:180;39781:77;39778:1;39771:88;39878:4;39875:1;39868:15;39902:4;39899:1;39892:15;39919:180;39967:77;39964:1;39957:88;40064:4;40061:1;40054:15;40088:4;40085:1;40078:15;40105:117;40214:1;40211;40204:12;40228:117;40337:1;40334;40327:12;40351:117;40460:1;40457;40450:12;40474:117;40583:1;40580;40573:12;40597:102;40638:6;40689:2;40685:7;40680:2;40673:5;40669:14;40665:28;40655:38;;40597:102;;;:::o;40705:230::-;40845:34;40841:1;40833:6;40829:14;40822:58;40914:13;40909:2;40901:6;40897:15;40890:38;40705:230;:::o;40941:237::-;41081:34;41077:1;41069:6;41065:14;41058:58;41150:20;41145:2;41137:6;41133:15;41126:45;40941:237;:::o;41184:225::-;41324:34;41320:1;41312:6;41308:14;41301:58;41393:8;41388:2;41380:6;41376:15;41369:33;41184:225;:::o;41415:178::-;41555:30;41551:1;41543:6;41539:14;41532:54;41415:178;:::o;41599:223::-;41739:34;41735:1;41727:6;41723:14;41716:58;41808:6;41803:2;41795:6;41791:15;41784:31;41599:223;:::o;41828:175::-;41968:27;41964:1;41956:6;41952:14;41945:51;41828:175;:::o;42009:231::-;42149:34;42145:1;42137:6;42133:14;42126:58;42218:14;42213:2;42205:6;42201:15;42194:39;42009:231;:::o;42246:223::-;42386:34;42382:1;42374:6;42370:14;42363:58;42455:6;42450:2;42442:6;42438:15;42431:31;42246:223;:::o;42475:168::-;42615:20;42611:1;42603:6;42599:14;42592:44;42475:168;:::o;42649:243::-;42789:34;42785:1;42777:6;42773:14;42766:58;42858:26;42853:2;42845:6;42841:15;42834:51;42649:243;:::o;42898:229::-;43038:34;43034:1;43026:6;43022:14;43015:58;43107:12;43102:2;43094:6;43090:15;43083:37;42898:229;:::o;43133:228::-;43273:34;43269:1;43261:6;43257:14;43250:58;43342:11;43337:2;43329:6;43325:15;43318:36;43133:228;:::o;43367:172::-;43507:24;43503:1;43495:6;43491:14;43484:48;43367:172;:::o;43545:182::-;43685:34;43681:1;43673:6;43669:14;43662:58;43545:182;:::o;43733:231::-;43873:34;43869:1;43861:6;43857:14;43850:58;43942:14;43937:2;43929:6;43925:15;43918:39;43733:231;:::o;43970:182::-;44110:34;44106:1;44098:6;44094:14;44087:58;43970:182;:::o;44158:172::-;44298:24;44294:1;44286:6;44282:14;44275:48;44158:172;:::o;44336:228::-;44476:34;44472:1;44464:6;44460:14;44453:58;44545:11;44540:2;44532:6;44528:15;44521:36;44336:228;:::o;44570:234::-;44710:34;44706:1;44698:6;44694:14;44687:58;44779:17;44774:2;44766:6;44762:15;44755:42;44570:234;:::o;44810:178::-;44950:30;44946:1;44938:6;44934:14;44927:54;44810:178;:::o;44994:220::-;45134:34;45130:1;45122:6;45118:14;45111:58;45203:3;45198:2;45190:6;45186:15;45179:28;44994:220;:::o;45220:114::-;;:::o;45340:236::-;45480:34;45476:1;45468:6;45464:14;45457:58;45549:19;45544:2;45536:6;45532:15;45525:44;45340:236;:::o;45582:231::-;45722:34;45718:1;45710:6;45706:14;45699:58;45791:14;45786:2;45778:6;45774:15;45767:39;45582:231;:::o;45819:177::-;45959:29;45955:1;45947:6;45943:14;45936:53;45819:177;:::o;46002:122::-;46075:24;46093:5;46075:24;:::i;:::-;46068:5;46065:35;46055:63;;46114:1;46111;46104:12;46055:63;46002:122;:::o;46130:116::-;46200:21;46215:5;46200:21;:::i;:::-;46193:5;46190:32;46180:60;;46236:1;46233;46226:12;46180:60;46130:116;:::o;46252:120::-;46324:23;46341:5;46324:23;:::i;:::-;46317:5;46314:34;46304:62;;46362:1;46359;46352:12;46304:62;46252:120;:::o;46378:122::-;46451:24;46469:5;46451:24;:::i;:::-;46444:5;46441:35;46431:63;;46490:1;46487;46480:12;46431:63;46378:122;:::o
Swarm Source
ipfs://f7a9c10c789d385b801c196f852c1cfa656ee002e004c5870a55e75bce538e84
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.