Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
9,000 Moonbirds Mfers
Holders
1,168
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
7 Moonbirds MfersLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MoonbirdsMfers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-19 */ // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: github/chiru-labs/ERC721A/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: github/chiru-labs/ERC721A/contracts/MoonbirdsMfers.sol // Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721 pragma solidity ^0.8.4; contract MoonbirdsMfers is ERC721A, Ownable { uint256 public constant maxSupply = 9000; uint256 public constant reservedAmount = 100; uint256 private constant maxBatchSize = 10; constructor() ERC721A("MoonbirdsMfers", "Moonbirds Mfers") {} uint256 public mintPrice = 0.005 ether; uint256 public maxAmountPerMint = 10; uint256 public maxMintPerWallet = 50; function setMintPrice(uint256 newMintPrice) external onlyOwner { mintPrice = newMintPrice; } function setMaxAmountPerMint(uint256 newMaxAmountPerMint) external onlyOwner { maxAmountPerMint = newMaxAmountPerMint; } function setMaxMintPerWallet(uint256 newMaxMintPerWallet) external onlyOwner { maxMintPerWallet = newMaxMintPerWallet; } /** * metadata URI */ string private _baseURIExtended = "ipfs://QmYMgwdgAfDuUiZDhca8V4SGRWUswQxHWeooWgFEvozcpz/"; function setBaseURI(string memory baseURI) external onlyOwner { _baseURIExtended = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIExtended; } /** * withdraw proceeds */ function withdraw() public onlyOwner { uint256 balance = address(this).balance; Address.sendValue(payable(msg.sender), balance); } /** * pre-mint for team */ function devMint(uint256 amount) public onlyOwner { require(totalSupply() + amount <= reservedAmount, "too many already minted before dev mint"); require(amount % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize"); uint256 numChunks = amount / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } /** * Public minting * _publicSaleCode & publicSaleStartTime will be set to non-zero to enable minting. This helps to slow down bot. * allowedMintSupply will be used to enable multi-phases minting. Default is equal to maxSupply. */ uint private _publicSaleCode = 0; uint32 public publicSaleStartTime = 0; uint256 public allowedMintSupply = maxSupply; mapping(address => uint256) public minted; function setPublicSaleCode(uint newCode) public onlyOwner { _publicSaleCode = newCode; } function setPublicSaleStartTime(uint32 newTime) public onlyOwner { publicSaleStartTime = newTime; } function setAllowedMintSupply(uint newLimit) public onlyOwner { allowedMintSupply = newLimit; } function publicMint(uint amount, uint code) external payable { require(msg.sender == tx.origin, "User wallet required"); require(code != 0 && code == _publicSaleCode, "code is mismatched"); require(publicSaleStartTime != 0 && publicSaleStartTime <= block.timestamp, "sales is not started"); require(minted[msg.sender] + amount <= maxMintPerWallet, "limit per wallet reached"); require(totalSupply() + amount <= allowedMintSupply, "current phase minting was ended"); uint256 mintableAmount = amount; require(mintableAmount <= maxAmountPerMint, "Exceeded max token purchase"); // check to ensure amount is not exceeded MAX_SUPPLY uint256 availableSupply = maxSupply - totalSupply(); require(availableSupply > 0, "No more item to mint!"); mintableAmount = Math.min(mintableAmount, availableSupply); uint256 totalMintCost = mintableAmount * mintPrice; require(msg.value >= totalMintCost, "Not enough ETH sent; check price!"); minted[msg.sender] += mintableAmount; _safeMint(msg.sender, mintableAmount); // Refund unused fund uint256 changes = msg.value - totalMintCost; if (changes != 0) { Address.sendValue(payable(msg.sender), changes); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"allowedMintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","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":"maxAmountPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"code","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStartTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedAmount","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":"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":"uint256","name":"newLimit","type":"uint256"}],"name":"setAllowedMintSupply","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxAmountPerMint","type":"uint256"}],"name":"setMaxAmountPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintPerWallet","type":"uint256"}],"name":"setMaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCode","type":"uint256"}],"name":"setPublicSaleCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newTime","type":"uint32"}],"name":"setPublicSaleStartTime","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526611c37937e08000600855600a6009556032600a556040518060600160405280603681526020016200500a60369139600b90805190602001906200004a9291906200021a565b506000600c556000600d60006101000a81548163ffffffff021916908363ffffffff160217905550612328600e553480156200008557600080fd5b506040518060400160405280600e81526020017f4d6f6f6e62697264734d666572730000000000000000000000000000000000008152506040518060400160405280600f81526020017f4d6f6f6e6269726473204d66657273000000000000000000000000000000000081525081600190805190602001906200010a9291906200021a565b508060029080519060200190620001239291906200021a565b505050620001466200013a6200014c60201b60201c565b6200015460201b60201c565b6200032f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022890620002ca565b90600052602060002090601f0160209004810192826200024c576000855562000298565b82601f106200026757805160ff191683800117855562000298565b8280016001018555821562000298579182015b82811115620002975782518255916020019190600101906200027a565b5b509050620002a79190620002ab565b5090565b5b80821115620002c6576000816000905550600101620002ac565b5090565b60006002820490506001821680620002e357607f821691505b60208210811415620002fa57620002f962000300565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614ccb806200033f6000396000f3fe60806040526004361061021a5760003560e01c80636bb7b1d911610123578063b228d925116100ab578063e985e9c51161006f578063e985e9c5146107c0578063ef66947a146107fd578063f2fde38b14610828578063f4a0a52814610851578063f92c45b71461087a5761021a565b8063b228d925146106db578063b88d4fde14610706578063c3c8b2041461072f578063c87b56dd14610758578063d5abeb01146107955761021a565b806395d89b41116100f257806395d89b411461061957806398ae99a814610644578063a22cb46514610660578063ad8e75aa14610689578063afdf6134146106b25761021a565b80636bb7b1d91461056f57806370a082311461059a578063715018a6146105d75780638da5cb5b146105ee5761021a565b8063375a069a116101a657806355f804b31161017557806355f804b31461048c57806359f030ca146104b55780635fd84c28146104de5780636352211e146105075780636817c76c146105445761021a565b8063375a069a146103e65780633ccfd60b1461040f57806342842e0e146104265780634f6ccce71461044f5761021a565b806318160ddd116101ed57806318160ddd146102ed5780631e7269c51461031857806323b872dd1461035557806327acc76d1461037e5780632f745c59146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906133fe565b6108a5565b6040516102539190613b1a565b60405180910390f35b34801561026857600080fd5b506102716109ef565b60405161027e9190613b35565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906134a1565b610a81565b6040516102bb9190613ab3565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133be565b610b06565b005b3480156102f957600080fd5b50610302610c1f565b60405161030f9190613f37565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a919061323b565b610c28565b60405161034c9190613f37565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906132a8565b610c40565b005b34801561038a57600080fd5b50610393610c50565b6040516103a09190613f37565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906133be565b610c56565b6040516103dd9190613f37565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906134a1565b610e48565b005b34801561041b57600080fd5b50610424610fa8565b005b34801561043257600080fd5b5061044d600480360381019061044891906132a8565b611036565b005b34801561045b57600080fd5b50610476600480360381019061047191906134a1565b611056565b6040516104839190613f37565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613458565b6110a9565b005b3480156104c157600080fd5b506104dc60048036038101906104d791906134a1565b61113f565b005b3480156104ea57600080fd5b506105056004803603810190610500919061350e565b6111c5565b005b34801561051357600080fd5b5061052e600480360381019061052991906134a1565b611265565b60405161053b9190613ab3565b60405180910390f35b34801561055057600080fd5b5061055961127b565b6040516105669190613f37565b60405180910390f35b34801561057b57600080fd5b50610584611281565b6040516105919190613f52565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc919061323b565b611297565b6040516105ce9190613f37565b60405180910390f35b3480156105e357600080fd5b506105ec611380565b005b3480156105fa57600080fd5b50610603611408565b6040516106109190613ab3565b60405180910390f35b34801561062557600080fd5b5061062e611432565b60405161063b9190613b35565b60405180910390f35b61065e600480360381019061065991906134ce565b6114c4565b005b34801561066c57600080fd5b506106876004803603810190610682919061337e565b61187b565b005b34801561069557600080fd5b506106b060048036038101906106ab91906134a1565b6119fc565b005b3480156106be57600080fd5b506106d960048036038101906106d491906134a1565b611a82565b005b3480156106e757600080fd5b506106f0611b08565b6040516106fd9190613f37565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906132fb565b611b0e565b005b34801561073b57600080fd5b50610756600480360381019061075191906134a1565b611b6a565b005b34801561076457600080fd5b5061077f600480360381019061077a91906134a1565b611bf0565b60405161078c9190613b35565b60405180910390f35b3480156107a157600080fd5b506107aa611c98565b6040516107b79190613f37565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613268565b611c9e565b6040516107f49190613b1a565b60405180910390f35b34801561080957600080fd5b50610812611d32565b60405161081f9190613f37565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a919061323b565b611d38565b005b34801561085d57600080fd5b50610878600480360381019061087391906134a1565b611e30565b005b34801561088657600080fd5b5061088f611eb6565b60405161089c9190613f37565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e857506109e782611ebb565b5b9050919050565b6060600180546109fe9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061421d565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82611f25565b610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613f17565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1182611265565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613df7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba1611f32565b73ffffffffffffffffffffffffffffffffffffffff161480610bd05750610bcf81610bca611f32565b611c9e565b5b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613cb7565b60405180910390fd5b610c1a838383611f3a565b505050565b60008054905090565b600f6020528060005260406000206000915090505481565b610c4b838383611fec565b505050565b60095481565b6000610c6183611297565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613b57565b60405180910390fd5b6000610cac610c1f565b905060008060005b83811015610e06576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df85786841415610def578195505050505050610e42565b83806001019450505b508080600101915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613e97565b60405180910390fd5b92915050565b610e50611f32565b73ffffffffffffffffffffffffffffffffffffffff16610e6e611408565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d17565b60405180910390fd5b606481610ecf610c1f565b610ed99190614042565b1115610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613e57565b60405180910390fd5b6000600a82610f2991906142c9565b14610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090613bf7565b60405180910390fd5b6000600a82610f789190614098565b905060005b81811015610fa357610f9033600a61252c565b8080610f9b90614280565b915050610f7d565b505050565b610fb0611f32565b73ffffffffffffffffffffffffffffffffffffffff16610fce611408565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90613d17565b60405180910390fd5b6000479050611033338261254a565b50565b61105183838360405180602001604052806000815250611b0e565b505050565b6000611060610c1f565b82106110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890613c37565b60405180910390fd5b819050919050565b6110b1611f32565b73ffffffffffffffffffffffffffffffffffffffff166110cf611408565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d17565b60405180910390fd5b80600b908051906020019061113b929190613000565b5050565b611147611f32565b73ffffffffffffffffffffffffffffffffffffffff16611165611408565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613d17565b60405180910390fd5b80600c8190555050565b6111cd611f32565b73ffffffffffffffffffffffffffffffffffffffff166111eb611408565b73ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613d17565b60405180910390fd5b80600d60006101000a81548163ffffffff021916908363ffffffff16021790555050565b60006112708261263e565b600001519050919050565b60085481565b600d60009054906101000a900463ffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613cd7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611388611f32565b73ffffffffffffffffffffffffffffffffffffffff166113a6611408565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613d17565b60405180910390fd5b61140660006127d8565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114419061421d565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061421d565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613dd7565b60405180910390fd5b600081141580156115445750600c5481145b611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613d97565b60405180910390fd5b6000600d60009054906101000a900463ffffffff1663ffffffff16141580156115c4575042600d60009054906101000a900463ffffffff1663ffffffff1611155b611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613eb7565b60405180910390fd5b600a5482600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116519190614042565b1115611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990613c17565b60405180910390fd5b600e548261169e610c1f565b6116a89190614042565b11156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613b77565b60405180910390fd5b6000829050600954811115611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613db7565b60405180910390fd5b600061173d610c1f565b61232861174a9190614123565b90506000811161178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613b97565b60405180910390fd5b611799828261289e565b91506000600854836117ab91906140c9565b9050803410156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613ed7565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183f9190614042565b92505081905550611850338461252c565b6000813461185e9190614123565b90506000811461187357611872338261254a565b5b505050505050565b611883611f32565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613d57565b60405180910390fd5b80600660006118fe611f32565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119ab611f32565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119f09190613b1a565b60405180910390a35050565b611a04611f32565b73ffffffffffffffffffffffffffffffffffffffff16611a22611408565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613d17565b60405180910390fd5b8060098190555050565b611a8a611f32565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611408565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613d17565b60405180910390fd5b80600a8190555050565b600a5481565b611b19848484611fec565b611b25848484846128b7565b611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613e17565b60405180910390fd5b50505050565b611b72611f32565b73ffffffffffffffffffffffffffffffffffffffff16611b90611408565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613d17565b60405180910390fd5b80600e8190555050565b6060611bfb82611f25565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190613d37565b60405180910390fd5b6000611c44612a4e565b9050600081511415611c655760405180602001604052806000815250611c90565b80611c6f84612ae0565b604051602001611c80929190613a7a565b6040516020818303038152906040525b915050919050565b61232881565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b611d40611f32565b73ffffffffffffffffffffffffffffffffffffffff16611d5e611408565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613bb7565b60405180910390fd5b611e2d816127d8565b50565b611e38611f32565b73ffffffffffffffffffffffffffffffffffffffff16611e56611408565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613d17565b60405180910390fd5b8060088190555050565b606481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ff78261263e565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661201e611f32565b73ffffffffffffffffffffffffffffffffffffffff16148061207a5750612043611f32565b73ffffffffffffffffffffffffffffffffffffffff1661206284610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b8061209657506120958260000151612090611f32565b611c9e565b5b9050806120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90613d77565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190613c57565b60405180910390fd5b6121c78585856001612c41565b6121d76000848460000151611f3a565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124bc5761241b81611f25565b156124bb5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125258585856001612c47565b5050505050565b612546828260405180602001604052806000815250612c4d565b5050565b8047101561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490613c97565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125b390613a9e565b60006040518083038185875af1925050503d80600081146125f0576040519150601f19603f3d011682016040523d82523d6000602084013e6125f5565b606091505b5050905080612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090613c77565b60405180910390fd5b505050565b612646613086565b61264f82611f25565b61268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268590613bd7565b60405180910390fd5b60008290505b60008110612797576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127885780925050506127d3565b50808060019003915050612694565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90613ef7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106128ad57816128af565b825b905092915050565b60006128d88473ffffffffffffffffffffffffffffffffffffffff16612c5f565b15612a41578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612901611f32565b8786866040518563ffffffff1660e01b81526004016129239493929190613ace565b602060405180830381600087803b15801561293d57600080fd5b505af192505050801561296e57506040513d601f19601f8201168201806040525081019061296b919061342b565b60015b6129f1573d806000811461299e576040519150601f19603f3d011682016040523d82523d6000602084013e6129a3565b606091505b506000815114156129e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e090613e17565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a46565b600190505b949350505050565b6060600b8054612a5d9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a899061421d565b8015612ad65780601f10612aab57610100808354040283529160200191612ad6565b820191906000526020600020905b815481529060010190602001808311612ab957829003601f168201915b5050505050905090565b60606000821415612b28576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c3c565b600082905060005b60008214612b5a578080612b4390614280565b915050600a82612b539190614098565b9150612b30565b60008167ffffffffffffffff811115612b7657612b756143b6565b5b6040519080825280601f01601f191660200182016040528015612ba85781602001600182028036833780820191505090505b5090505b60008514612c3557600182612bc19190614123565b9150600a85612bd091906142c9565b6030612bdc9190614042565b60f81b818381518110612bf257612bf1614387565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c2e9190614098565b9450612bac565b8093505050505b919050565b50505050565b50505050565b612c5a8383836001612c82565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90613e37565b60405180910390fd5b6000841415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390613e77565b60405180910390fd5b612d496000868387612c41565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612fe357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612fce57612f8e60008884886128b7565b612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490613e17565b60405180910390fd5b5b81806001019250508080600101915050612f17565b508060008190555050612ff96000868387612c47565b5050505050565b82805461300c9061421d565b90600052602060002090601f01602090048101928261302e5760008555613075565b82601f1061304757805160ff1916838001178555613075565b82800160010185558215613075579182015b82811115613074578251825591602001919060010190613059565b5b50905061308291906130c0565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156130d95760008160009055506001016130c1565b5090565b60006130f06130eb84613f92565b613f6d565b90508281526020810184848401111561310c5761310b6143ea565b5b6131178482856141db565b509392505050565b600061313261312d84613fc3565b613f6d565b90508281526020810184848401111561314e5761314d6143ea565b5b6131598482856141db565b509392505050565b60008135905061317081614c22565b92915050565b60008135905061318581614c39565b92915050565b60008135905061319a81614c50565b92915050565b6000815190506131af81614c50565b92915050565b600082601f8301126131ca576131c96143e5565b5b81356131da8482602086016130dd565b91505092915050565b600082601f8301126131f8576131f76143e5565b5b813561320884826020860161311f565b91505092915050565b60008135905061322081614c67565b92915050565b60008135905061323581614c7e565b92915050565b600060208284031215613251576132506143f4565b5b600061325f84828501613161565b91505092915050565b6000806040838503121561327f5761327e6143f4565b5b600061328d85828601613161565b925050602061329e85828601613161565b9150509250929050565b6000806000606084860312156132c1576132c06143f4565b5b60006132cf86828701613161565b93505060206132e086828701613161565b92505060406132f186828701613211565b9150509250925092565b60008060008060808587031215613315576133146143f4565b5b600061332387828801613161565b945050602061333487828801613161565b935050604061334587828801613211565b925050606085013567ffffffffffffffff811115613366576133656143ef565b5b613372878288016131b5565b91505092959194509250565b60008060408385031215613395576133946143f4565b5b60006133a385828601613161565b92505060206133b485828601613176565b9150509250929050565b600080604083850312156133d5576133d46143f4565b5b60006133e385828601613161565b92505060206133f485828601613211565b9150509250929050565b600060208284031215613414576134136143f4565b5b60006134228482850161318b565b91505092915050565b600060208284031215613441576134406143f4565b5b600061344f848285016131a0565b91505092915050565b60006020828403121561346e5761346d6143f4565b5b600082013567ffffffffffffffff81111561348c5761348b6143ef565b5b613498848285016131e3565b91505092915050565b6000602082840312156134b7576134b66143f4565b5b60006134c584828501613211565b91505092915050565b600080604083850312156134e5576134e46143f4565b5b60006134f385828601613211565b925050602061350485828601613211565b9150509250929050565b600060208284031215613524576135236143f4565b5b600061353284828501613226565b91505092915050565b61354481614157565b82525050565b61355381614169565b82525050565b600061356482613ff4565b61356e818561400a565b935061357e8185602086016141ea565b613587816143f9565b840191505092915050565b600061359d82613fff565b6135a78185614026565b93506135b78185602086016141ea565b6135c0816143f9565b840191505092915050565b60006135d682613fff565b6135e08185614037565b93506135f08185602086016141ea565b80840191505092915050565b6000613609602283614026565b91506136148261440a565b604082019050919050565b600061362c601f83614026565b915061363782614459565b602082019050919050565b600061364f601583614026565b915061365a82614482565b602082019050919050565b6000613672602683614026565b915061367d826144ab565b604082019050919050565b6000613695602a83614026565b91506136a0826144fa565b604082019050919050565b60006136b8602c83614026565b91506136c382614549565b604082019050919050565b60006136db601883614026565b91506136e682614598565b602082019050919050565b60006136fe602383614026565b9150613709826145c1565b604082019050919050565b6000613721602583614026565b915061372c82614610565b604082019050919050565b6000613744603a83614026565b915061374f8261465f565b604082019050919050565b6000613767601d83614026565b9150613772826146ae565b602082019050919050565b600061378a603983614026565b9150613795826146d7565b604082019050919050565b60006137ad602b83614026565b91506137b882614726565b604082019050919050565b60006137d0602683614026565b91506137db82614775565b604082019050919050565b60006137f3602083614026565b91506137fe826147c4565b602082019050919050565b6000613816602f83614026565b9150613821826147ed565b604082019050919050565b6000613839601a83614026565b91506138448261483c565b602082019050919050565b600061385c603283614026565b915061386782614865565b604082019050919050565b600061387f601283614026565b915061388a826148b4565b602082019050919050565b60006138a2601b83614026565b91506138ad826148dd565b602082019050919050565b60006138c5601483614026565b91506138d082614906565b602082019050919050565b60006138e8602283614026565b91506138f38261492f565b604082019050919050565b600061390b60008361401b565b91506139168261497e565b600082019050919050565b600061392e603383614026565b915061393982614981565b604082019050919050565b6000613951602183614026565b915061395c826149d0565b604082019050919050565b6000613974602783614026565b915061397f82614a1f565b604082019050919050565b6000613997602883614026565b91506139a282614a6e565b604082019050919050565b60006139ba602e83614026565b91506139c582614abd565b604082019050919050565b60006139dd601483614026565b91506139e882614b0c565b602082019050919050565b6000613a00602183614026565b9150613a0b82614b35565b604082019050919050565b6000613a23602f83614026565b9150613a2e82614b84565b604082019050919050565b6000613a46602d83614026565b9150613a5182614bd3565b604082019050919050565b613a65816141c1565b82525050565b613a74816141cb565b82525050565b6000613a8682856135cb565b9150613a9282846135cb565b91508190509392505050565b6000613aa9826138fe565b9150819050919050565b6000602082019050613ac8600083018461353b565b92915050565b6000608082019050613ae3600083018761353b565b613af0602083018661353b565b613afd6040830185613a5c565b8181036060830152613b0f8184613559565b905095945050505050565b6000602082019050613b2f600083018461354a565b92915050565b60006020820190508181036000830152613b4f8184613592565b905092915050565b60006020820190508181036000830152613b70816135fc565b9050919050565b60006020820190508181036000830152613b908161361f565b9050919050565b60006020820190508181036000830152613bb081613642565b9050919050565b60006020820190508181036000830152613bd081613665565b9050919050565b60006020820190508181036000830152613bf081613688565b9050919050565b60006020820190508181036000830152613c10816136ab565b9050919050565b60006020820190508181036000830152613c30816136ce565b9050919050565b60006020820190508181036000830152613c50816136f1565b9050919050565b60006020820190508181036000830152613c7081613714565b9050919050565b60006020820190508181036000830152613c9081613737565b9050919050565b60006020820190508181036000830152613cb08161375a565b9050919050565b60006020820190508181036000830152613cd08161377d565b9050919050565b60006020820190508181036000830152613cf0816137a0565b9050919050565b60006020820190508181036000830152613d10816137c3565b9050919050565b60006020820190508181036000830152613d30816137e6565b9050919050565b60006020820190508181036000830152613d5081613809565b9050919050565b60006020820190508181036000830152613d708161382c565b9050919050565b60006020820190508181036000830152613d908161384f565b9050919050565b60006020820190508181036000830152613db081613872565b9050919050565b60006020820190508181036000830152613dd081613895565b9050919050565b60006020820190508181036000830152613df0816138b8565b9050919050565b60006020820190508181036000830152613e10816138db565b9050919050565b60006020820190508181036000830152613e3081613921565b9050919050565b60006020820190508181036000830152613e5081613944565b9050919050565b60006020820190508181036000830152613e7081613967565b9050919050565b60006020820190508181036000830152613e908161398a565b9050919050565b60006020820190508181036000830152613eb0816139ad565b9050919050565b60006020820190508181036000830152613ed0816139d0565b9050919050565b60006020820190508181036000830152613ef0816139f3565b9050919050565b60006020820190508181036000830152613f1081613a16565b9050919050565b60006020820190508181036000830152613f3081613a39565b9050919050565b6000602082019050613f4c6000830184613a5c565b92915050565b6000602082019050613f676000830184613a6b565b92915050565b6000613f77613f88565b9050613f83828261424f565b919050565b6000604051905090565b600067ffffffffffffffff821115613fad57613fac6143b6565b5b613fb6826143f9565b9050602081019050919050565b600067ffffffffffffffff821115613fde57613fdd6143b6565b5b613fe7826143f9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061404d826141c1565b9150614058836141c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408d5761408c6142fa565b5b828201905092915050565b60006140a3826141c1565b91506140ae836141c1565b9250826140be576140bd614329565b5b828204905092915050565b60006140d4826141c1565b91506140df836141c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614118576141176142fa565b5b828202905092915050565b600061412e826141c1565b9150614139836141c1565b92508282101561414c5761414b6142fa565b5b828203905092915050565b6000614162826141a1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156142085780820151818401526020810190506141ed565b83811115614217576000848401525b50505050565b6000600282049050600182168061423557607f821691505b6020821081141561424957614248614358565b5b50919050565b614258826143f9565b810181811067ffffffffffffffff82111715614277576142766143b6565b5b80604052505050565b600061428b826141c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142be576142bd6142fa565b5b600182019050919050565b60006142d4826141c1565b91506142df836141c1565b9250826142ef576142ee614329565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f63757272656e74207068617365206d696e74696e672077617320656e64656400600082015250565b7f4e6f206d6f7265206974656d20746f206d696e74210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f6c696d6974207065722077616c6c657420726561636865640000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f636f6465206973206d69736d6174636865640000000000000000000000000000600082015250565b7f4578636565646564206d617820746f6b656e2070757263686173650000000000600082015250565b7f557365722077616c6c6574207265717569726564000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f73616c6573206973206e6f742073746172746564000000000000000000000000600082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614c2b81614157565b8114614c3657600080fd5b50565b614c4281614169565b8114614c4d57600080fd5b50565b614c5981614175565b8114614c6457600080fd5b50565b614c70816141c1565b8114614c7b57600080fd5b50565b614c87816141cb565b8114614c9257600080fd5b5056fea26469706673582212203ffabf15292024ba32d56f5c919435344492feac295e18ca39b8cdf1da75968064736f6c63430008070033697066733a2f2f516d594d677764674166447555695a446863613856345347525755737751784857656f6f57674645766f7a63707a2f
Deployed Bytecode
0x60806040526004361061021a5760003560e01c80636bb7b1d911610123578063b228d925116100ab578063e985e9c51161006f578063e985e9c5146107c0578063ef66947a146107fd578063f2fde38b14610828578063f4a0a52814610851578063f92c45b71461087a5761021a565b8063b228d925146106db578063b88d4fde14610706578063c3c8b2041461072f578063c87b56dd14610758578063d5abeb01146107955761021a565b806395d89b41116100f257806395d89b411461061957806398ae99a814610644578063a22cb46514610660578063ad8e75aa14610689578063afdf6134146106b25761021a565b80636bb7b1d91461056f57806370a082311461059a578063715018a6146105d75780638da5cb5b146105ee5761021a565b8063375a069a116101a657806355f804b31161017557806355f804b31461048c57806359f030ca146104b55780635fd84c28146104de5780636352211e146105075780636817c76c146105445761021a565b8063375a069a146103e65780633ccfd60b1461040f57806342842e0e146104265780634f6ccce71461044f5761021a565b806318160ddd116101ed57806318160ddd146102ed5780631e7269c51461031857806323b872dd1461035557806327acc76d1461037e5780632f745c59146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906133fe565b6108a5565b6040516102539190613b1a565b60405180910390f35b34801561026857600080fd5b506102716109ef565b60405161027e9190613b35565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906134a1565b610a81565b6040516102bb9190613ab3565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133be565b610b06565b005b3480156102f957600080fd5b50610302610c1f565b60405161030f9190613f37565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a919061323b565b610c28565b60405161034c9190613f37565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906132a8565b610c40565b005b34801561038a57600080fd5b50610393610c50565b6040516103a09190613f37565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906133be565b610c56565b6040516103dd9190613f37565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906134a1565b610e48565b005b34801561041b57600080fd5b50610424610fa8565b005b34801561043257600080fd5b5061044d600480360381019061044891906132a8565b611036565b005b34801561045b57600080fd5b50610476600480360381019061047191906134a1565b611056565b6040516104839190613f37565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613458565b6110a9565b005b3480156104c157600080fd5b506104dc60048036038101906104d791906134a1565b61113f565b005b3480156104ea57600080fd5b506105056004803603810190610500919061350e565b6111c5565b005b34801561051357600080fd5b5061052e600480360381019061052991906134a1565b611265565b60405161053b9190613ab3565b60405180910390f35b34801561055057600080fd5b5061055961127b565b6040516105669190613f37565b60405180910390f35b34801561057b57600080fd5b50610584611281565b6040516105919190613f52565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc919061323b565b611297565b6040516105ce9190613f37565b60405180910390f35b3480156105e357600080fd5b506105ec611380565b005b3480156105fa57600080fd5b50610603611408565b6040516106109190613ab3565b60405180910390f35b34801561062557600080fd5b5061062e611432565b60405161063b9190613b35565b60405180910390f35b61065e600480360381019061065991906134ce565b6114c4565b005b34801561066c57600080fd5b506106876004803603810190610682919061337e565b61187b565b005b34801561069557600080fd5b506106b060048036038101906106ab91906134a1565b6119fc565b005b3480156106be57600080fd5b506106d960048036038101906106d491906134a1565b611a82565b005b3480156106e757600080fd5b506106f0611b08565b6040516106fd9190613f37565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906132fb565b611b0e565b005b34801561073b57600080fd5b50610756600480360381019061075191906134a1565b611b6a565b005b34801561076457600080fd5b5061077f600480360381019061077a91906134a1565b611bf0565b60405161078c9190613b35565b60405180910390f35b3480156107a157600080fd5b506107aa611c98565b6040516107b79190613f37565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613268565b611c9e565b6040516107f49190613b1a565b60405180910390f35b34801561080957600080fd5b50610812611d32565b60405161081f9190613f37565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a919061323b565b611d38565b005b34801561085d57600080fd5b50610878600480360381019061087391906134a1565b611e30565b005b34801561088657600080fd5b5061088f611eb6565b60405161089c9190613f37565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e857506109e782611ebb565b5b9050919050565b6060600180546109fe9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061421d565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82611f25565b610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613f17565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1182611265565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613df7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba1611f32565b73ffffffffffffffffffffffffffffffffffffffff161480610bd05750610bcf81610bca611f32565b611c9e565b5b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613cb7565b60405180910390fd5b610c1a838383611f3a565b505050565b60008054905090565b600f6020528060005260406000206000915090505481565b610c4b838383611fec565b505050565b60095481565b6000610c6183611297565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613b57565b60405180910390fd5b6000610cac610c1f565b905060008060005b83811015610e06576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df85786841415610def578195505050505050610e42565b83806001019450505b508080600101915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613e97565b60405180910390fd5b92915050565b610e50611f32565b73ffffffffffffffffffffffffffffffffffffffff16610e6e611408565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d17565b60405180910390fd5b606481610ecf610c1f565b610ed99190614042565b1115610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613e57565b60405180910390fd5b6000600a82610f2991906142c9565b14610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090613bf7565b60405180910390fd5b6000600a82610f789190614098565b905060005b81811015610fa357610f9033600a61252c565b8080610f9b90614280565b915050610f7d565b505050565b610fb0611f32565b73ffffffffffffffffffffffffffffffffffffffff16610fce611408565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90613d17565b60405180910390fd5b6000479050611033338261254a565b50565b61105183838360405180602001604052806000815250611b0e565b505050565b6000611060610c1f565b82106110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890613c37565b60405180910390fd5b819050919050565b6110b1611f32565b73ffffffffffffffffffffffffffffffffffffffff166110cf611408565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d17565b60405180910390fd5b80600b908051906020019061113b929190613000565b5050565b611147611f32565b73ffffffffffffffffffffffffffffffffffffffff16611165611408565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613d17565b60405180910390fd5b80600c8190555050565b6111cd611f32565b73ffffffffffffffffffffffffffffffffffffffff166111eb611408565b73ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613d17565b60405180910390fd5b80600d60006101000a81548163ffffffff021916908363ffffffff16021790555050565b60006112708261263e565b600001519050919050565b60085481565b600d60009054906101000a900463ffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613cd7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611388611f32565b73ffffffffffffffffffffffffffffffffffffffff166113a6611408565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613d17565b60405180910390fd5b61140660006127d8565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114419061421d565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061421d565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613dd7565b60405180910390fd5b600081141580156115445750600c5481145b611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613d97565b60405180910390fd5b6000600d60009054906101000a900463ffffffff1663ffffffff16141580156115c4575042600d60009054906101000a900463ffffffff1663ffffffff1611155b611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613eb7565b60405180910390fd5b600a5482600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116519190614042565b1115611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990613c17565b60405180910390fd5b600e548261169e610c1f565b6116a89190614042565b11156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613b77565b60405180910390fd5b6000829050600954811115611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613db7565b60405180910390fd5b600061173d610c1f565b61232861174a9190614123565b90506000811161178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613b97565b60405180910390fd5b611799828261289e565b91506000600854836117ab91906140c9565b9050803410156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613ed7565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183f9190614042565b92505081905550611850338461252c565b6000813461185e9190614123565b90506000811461187357611872338261254a565b5b505050505050565b611883611f32565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613d57565b60405180910390fd5b80600660006118fe611f32565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119ab611f32565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119f09190613b1a565b60405180910390a35050565b611a04611f32565b73ffffffffffffffffffffffffffffffffffffffff16611a22611408565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613d17565b60405180910390fd5b8060098190555050565b611a8a611f32565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611408565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613d17565b60405180910390fd5b80600a8190555050565b600a5481565b611b19848484611fec565b611b25848484846128b7565b611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613e17565b60405180910390fd5b50505050565b611b72611f32565b73ffffffffffffffffffffffffffffffffffffffff16611b90611408565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613d17565b60405180910390fd5b80600e8190555050565b6060611bfb82611f25565b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190613d37565b60405180910390fd5b6000611c44612a4e565b9050600081511415611c655760405180602001604052806000815250611c90565b80611c6f84612ae0565b604051602001611c80929190613a7a565b6040516020818303038152906040525b915050919050565b61232881565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b611d40611f32565b73ffffffffffffffffffffffffffffffffffffffff16611d5e611408565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613bb7565b60405180910390fd5b611e2d816127d8565b50565b611e38611f32565b73ffffffffffffffffffffffffffffffffffffffff16611e56611408565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613d17565b60405180910390fd5b8060088190555050565b606481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ff78261263e565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661201e611f32565b73ffffffffffffffffffffffffffffffffffffffff16148061207a5750612043611f32565b73ffffffffffffffffffffffffffffffffffffffff1661206284610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b8061209657506120958260000151612090611f32565b611c9e565b5b9050806120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90613d77565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190613c57565b60405180910390fd5b6121c78585856001612c41565b6121d76000848460000151611f3a565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124bc5761241b81611f25565b156124bb5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125258585856001612c47565b5050505050565b612546828260405180602001604052806000815250612c4d565b5050565b8047101561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490613c97565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125b390613a9e565b60006040518083038185875af1925050503d80600081146125f0576040519150601f19603f3d011682016040523d82523d6000602084013e6125f5565b606091505b5050905080612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090613c77565b60405180910390fd5b505050565b612646613086565b61264f82611f25565b61268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268590613bd7565b60405180910390fd5b60008290505b60008110612797576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127885780925050506127d3565b50808060019003915050612694565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90613ef7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106128ad57816128af565b825b905092915050565b60006128d88473ffffffffffffffffffffffffffffffffffffffff16612c5f565b15612a41578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612901611f32565b8786866040518563ffffffff1660e01b81526004016129239493929190613ace565b602060405180830381600087803b15801561293d57600080fd5b505af192505050801561296e57506040513d601f19601f8201168201806040525081019061296b919061342b565b60015b6129f1573d806000811461299e576040519150601f19603f3d011682016040523d82523d6000602084013e6129a3565b606091505b506000815114156129e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e090613e17565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a46565b600190505b949350505050565b6060600b8054612a5d9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a899061421d565b8015612ad65780601f10612aab57610100808354040283529160200191612ad6565b820191906000526020600020905b815481529060010190602001808311612ab957829003601f168201915b5050505050905090565b60606000821415612b28576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c3c565b600082905060005b60008214612b5a578080612b4390614280565b915050600a82612b539190614098565b9150612b30565b60008167ffffffffffffffff811115612b7657612b756143b6565b5b6040519080825280601f01601f191660200182016040528015612ba85781602001600182028036833780820191505090505b5090505b60008514612c3557600182612bc19190614123565b9150600a85612bd091906142c9565b6030612bdc9190614042565b60f81b818381518110612bf257612bf1614387565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c2e9190614098565b9450612bac565b8093505050505b919050565b50505050565b50505050565b612c5a8383836001612c82565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90613e37565b60405180910390fd5b6000841415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390613e77565b60405180910390fd5b612d496000868387612c41565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612fe357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612fce57612f8e60008884886128b7565b612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490613e17565b60405180910390fd5b5b81806001019250508080600101915050612f17565b508060008190555050612ff96000868387612c47565b5050505050565b82805461300c9061421d565b90600052602060002090601f01602090048101928261302e5760008555613075565b82601f1061304757805160ff1916838001178555613075565b82800160010185558215613075579182015b82811115613074578251825591602001919060010190613059565b5b50905061308291906130c0565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156130d95760008160009055506001016130c1565b5090565b60006130f06130eb84613f92565b613f6d565b90508281526020810184848401111561310c5761310b6143ea565b5b6131178482856141db565b509392505050565b600061313261312d84613fc3565b613f6d565b90508281526020810184848401111561314e5761314d6143ea565b5b6131598482856141db565b509392505050565b60008135905061317081614c22565b92915050565b60008135905061318581614c39565b92915050565b60008135905061319a81614c50565b92915050565b6000815190506131af81614c50565b92915050565b600082601f8301126131ca576131c96143e5565b5b81356131da8482602086016130dd565b91505092915050565b600082601f8301126131f8576131f76143e5565b5b813561320884826020860161311f565b91505092915050565b60008135905061322081614c67565b92915050565b60008135905061323581614c7e565b92915050565b600060208284031215613251576132506143f4565b5b600061325f84828501613161565b91505092915050565b6000806040838503121561327f5761327e6143f4565b5b600061328d85828601613161565b925050602061329e85828601613161565b9150509250929050565b6000806000606084860312156132c1576132c06143f4565b5b60006132cf86828701613161565b93505060206132e086828701613161565b92505060406132f186828701613211565b9150509250925092565b60008060008060808587031215613315576133146143f4565b5b600061332387828801613161565b945050602061333487828801613161565b935050604061334587828801613211565b925050606085013567ffffffffffffffff811115613366576133656143ef565b5b613372878288016131b5565b91505092959194509250565b60008060408385031215613395576133946143f4565b5b60006133a385828601613161565b92505060206133b485828601613176565b9150509250929050565b600080604083850312156133d5576133d46143f4565b5b60006133e385828601613161565b92505060206133f485828601613211565b9150509250929050565b600060208284031215613414576134136143f4565b5b60006134228482850161318b565b91505092915050565b600060208284031215613441576134406143f4565b5b600061344f848285016131a0565b91505092915050565b60006020828403121561346e5761346d6143f4565b5b600082013567ffffffffffffffff81111561348c5761348b6143ef565b5b613498848285016131e3565b91505092915050565b6000602082840312156134b7576134b66143f4565b5b60006134c584828501613211565b91505092915050565b600080604083850312156134e5576134e46143f4565b5b60006134f385828601613211565b925050602061350485828601613211565b9150509250929050565b600060208284031215613524576135236143f4565b5b600061353284828501613226565b91505092915050565b61354481614157565b82525050565b61355381614169565b82525050565b600061356482613ff4565b61356e818561400a565b935061357e8185602086016141ea565b613587816143f9565b840191505092915050565b600061359d82613fff565b6135a78185614026565b93506135b78185602086016141ea565b6135c0816143f9565b840191505092915050565b60006135d682613fff565b6135e08185614037565b93506135f08185602086016141ea565b80840191505092915050565b6000613609602283614026565b91506136148261440a565b604082019050919050565b600061362c601f83614026565b915061363782614459565b602082019050919050565b600061364f601583614026565b915061365a82614482565b602082019050919050565b6000613672602683614026565b915061367d826144ab565b604082019050919050565b6000613695602a83614026565b91506136a0826144fa565b604082019050919050565b60006136b8602c83614026565b91506136c382614549565b604082019050919050565b60006136db601883614026565b91506136e682614598565b602082019050919050565b60006136fe602383614026565b9150613709826145c1565b604082019050919050565b6000613721602583614026565b915061372c82614610565b604082019050919050565b6000613744603a83614026565b915061374f8261465f565b604082019050919050565b6000613767601d83614026565b9150613772826146ae565b602082019050919050565b600061378a603983614026565b9150613795826146d7565b604082019050919050565b60006137ad602b83614026565b91506137b882614726565b604082019050919050565b60006137d0602683614026565b91506137db82614775565b604082019050919050565b60006137f3602083614026565b91506137fe826147c4565b602082019050919050565b6000613816602f83614026565b9150613821826147ed565b604082019050919050565b6000613839601a83614026565b91506138448261483c565b602082019050919050565b600061385c603283614026565b915061386782614865565b604082019050919050565b600061387f601283614026565b915061388a826148b4565b602082019050919050565b60006138a2601b83614026565b91506138ad826148dd565b602082019050919050565b60006138c5601483614026565b91506138d082614906565b602082019050919050565b60006138e8602283614026565b91506138f38261492f565b604082019050919050565b600061390b60008361401b565b91506139168261497e565b600082019050919050565b600061392e603383614026565b915061393982614981565b604082019050919050565b6000613951602183614026565b915061395c826149d0565b604082019050919050565b6000613974602783614026565b915061397f82614a1f565b604082019050919050565b6000613997602883614026565b91506139a282614a6e565b604082019050919050565b60006139ba602e83614026565b91506139c582614abd565b604082019050919050565b60006139dd601483614026565b91506139e882614b0c565b602082019050919050565b6000613a00602183614026565b9150613a0b82614b35565b604082019050919050565b6000613a23602f83614026565b9150613a2e82614b84565b604082019050919050565b6000613a46602d83614026565b9150613a5182614bd3565b604082019050919050565b613a65816141c1565b82525050565b613a74816141cb565b82525050565b6000613a8682856135cb565b9150613a9282846135cb565b91508190509392505050565b6000613aa9826138fe565b9150819050919050565b6000602082019050613ac8600083018461353b565b92915050565b6000608082019050613ae3600083018761353b565b613af0602083018661353b565b613afd6040830185613a5c565b8181036060830152613b0f8184613559565b905095945050505050565b6000602082019050613b2f600083018461354a565b92915050565b60006020820190508181036000830152613b4f8184613592565b905092915050565b60006020820190508181036000830152613b70816135fc565b9050919050565b60006020820190508181036000830152613b908161361f565b9050919050565b60006020820190508181036000830152613bb081613642565b9050919050565b60006020820190508181036000830152613bd081613665565b9050919050565b60006020820190508181036000830152613bf081613688565b9050919050565b60006020820190508181036000830152613c10816136ab565b9050919050565b60006020820190508181036000830152613c30816136ce565b9050919050565b60006020820190508181036000830152613c50816136f1565b9050919050565b60006020820190508181036000830152613c7081613714565b9050919050565b60006020820190508181036000830152613c9081613737565b9050919050565b60006020820190508181036000830152613cb08161375a565b9050919050565b60006020820190508181036000830152613cd08161377d565b9050919050565b60006020820190508181036000830152613cf0816137a0565b9050919050565b60006020820190508181036000830152613d10816137c3565b9050919050565b60006020820190508181036000830152613d30816137e6565b9050919050565b60006020820190508181036000830152613d5081613809565b9050919050565b60006020820190508181036000830152613d708161382c565b9050919050565b60006020820190508181036000830152613d908161384f565b9050919050565b60006020820190508181036000830152613db081613872565b9050919050565b60006020820190508181036000830152613dd081613895565b9050919050565b60006020820190508181036000830152613df0816138b8565b9050919050565b60006020820190508181036000830152613e10816138db565b9050919050565b60006020820190508181036000830152613e3081613921565b9050919050565b60006020820190508181036000830152613e5081613944565b9050919050565b60006020820190508181036000830152613e7081613967565b9050919050565b60006020820190508181036000830152613e908161398a565b9050919050565b60006020820190508181036000830152613eb0816139ad565b9050919050565b60006020820190508181036000830152613ed0816139d0565b9050919050565b60006020820190508181036000830152613ef0816139f3565b9050919050565b60006020820190508181036000830152613f1081613a16565b9050919050565b60006020820190508181036000830152613f3081613a39565b9050919050565b6000602082019050613f4c6000830184613a5c565b92915050565b6000602082019050613f676000830184613a6b565b92915050565b6000613f77613f88565b9050613f83828261424f565b919050565b6000604051905090565b600067ffffffffffffffff821115613fad57613fac6143b6565b5b613fb6826143f9565b9050602081019050919050565b600067ffffffffffffffff821115613fde57613fdd6143b6565b5b613fe7826143f9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061404d826141c1565b9150614058836141c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408d5761408c6142fa565b5b828201905092915050565b60006140a3826141c1565b91506140ae836141c1565b9250826140be576140bd614329565b5b828204905092915050565b60006140d4826141c1565b91506140df836141c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614118576141176142fa565b5b828202905092915050565b600061412e826141c1565b9150614139836141c1565b92508282101561414c5761414b6142fa565b5b828203905092915050565b6000614162826141a1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156142085780820151818401526020810190506141ed565b83811115614217576000848401525b50505050565b6000600282049050600182168061423557607f821691505b6020821081141561424957614248614358565b5b50919050565b614258826143f9565b810181811067ffffffffffffffff82111715614277576142766143b6565b5b80604052505050565b600061428b826141c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142be576142bd6142fa565b5b600182019050919050565b60006142d4826141c1565b91506142df836141c1565b9250826142ef576142ee614329565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f63757272656e74207068617365206d696e74696e672077617320656e64656400600082015250565b7f4e6f206d6f7265206974656d20746f206d696e74210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f6c696d6974207065722077616c6c657420726561636865640000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f636f6465206973206d69736d6174636865640000000000000000000000000000600082015250565b7f4578636565646564206d617820746f6b656e2070757263686173650000000000600082015250565b7f557365722077616c6c6574207265717569726564000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f73616c6573206973206e6f742073746172746564000000000000000000000000600082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614c2b81614157565b8114614c3657600080fd5b50565b614c4281614169565b8114614c4d57600080fd5b50565b614c5981614175565b8114614c6457600080fd5b50565b614c70816141c1565b8114614c7b57600080fd5b50565b614c87816141cb565b8114614c9257600080fd5b5056fea26469706673582212203ffabf15292024ba32d56f5c919435344492feac295e18ca39b8cdf1da75968064736f6c63430008070033
Deployed Bytecode Sourcemap
41958:4005:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28661:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30547:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32109:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31630:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26918:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44221:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32985:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42272:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27582:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43385:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43180:153;;;;;;;;;;;;;:::i;:::-;;33218:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27095:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42896:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44271:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44381:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30356:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42227:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44124:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29097:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6027:103;;;;;;;;;;;;;:::i;:::-;;5376:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30716:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44619:1341;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32395:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42474:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42315:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44502:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30891:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42009:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32754:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44168:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6285:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42360:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42056:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28661:372;28763:4;28815:25;28800:40;;;:11;:40;;;;:105;;;;28872:33;28857:48;;;:11;:48;;;;28800:105;:172;;;;28937:35;28922:50;;;:11;:50;;;;28800:172;:225;;;;28989:36;29013:11;28989:23;:36::i;:::-;28800:225;28780:245;;28661:372;;;:::o;30547:100::-;30601:13;30634:5;30627:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30547:100;:::o;32109:214::-;32177:7;32205:16;32213:7;32205;:16::i;:::-;32197:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32291:15;:24;32307:7;32291:24;;;;;;;;;;;;;;;;;;;;;32284:31;;32109:214;;;:::o;31630:413::-;31703:13;31719:24;31735:7;31719:15;:24::i;:::-;31703:40;;31768:5;31762:11;;:2;:11;;;;31754:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31863:5;31847:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31872:37;31889:5;31896:12;:10;:12::i;:::-;31872:16;:37::i;:::-;31847:62;31825:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;32007:28;32016:2;32020:7;32029:5;32007:8;:28::i;:::-;31692:351;31630:413;;:::o;26918:100::-;26971:7;26998:12;;26991:19;;26918:100;:::o;44221:41::-;;;;;;;;;;;;;;;;;:::o;32985:162::-;33111:28;33121:4;33127:2;33131:7;33111:9;:28::i;:::-;32985:162;;;:::o;42272:36::-;;;;:::o;27582:1007::-;27671:7;27707:16;27717:5;27707:9;:16::i;:::-;27699:5;:24;27691:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27773:22;27798:13;:11;:13::i;:::-;27773:38;;27822:19;27852:25;28041:9;28036:466;28056:14;28052:1;:18;28036:466;;;28096:31;28130:11;:14;28142:1;28130:14;;;;;;;;;;;28096:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28193:1;28167:28;;:9;:14;;;:28;;;28163:111;;28240:9;:14;;;28220:34;;28163:111;28317:5;28296:26;;:17;:26;;;28292:195;;;28366:5;28351:11;:20;28347:85;;;28407:1;28400:8;;;;;;;;;28347:85;28454:13;;;;;;;28292:195;28077:425;28072:3;;;;;;;28036:466;;;;28525:56;;;;;;;;;;:::i;:::-;;;;;;;;27582:1007;;;;;:::o;43385:429::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42097:3:::1;43470:6;43454:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;43446:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;43582:1;42147:2;43557:6;:21;;;;:::i;:::-;:26;43549:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;43653:17;42147:2;43673:6;:21;;;;:::i;:::-;43653:41;;43710:9;43705:102;43729:9;43725:1;:13;43705:102;;;43760:35;43770:10;42147:2;43760:9;:35::i;:::-;43740:3;;;;;:::i;:::-;;;;43705:102;;;;43435:379;43385:429:::0;:::o;43180:153::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43228:15:::1;43246:21;43228:39;;43278:47;43304:10;43317:7;43278:17;:47::i;:::-;43217:116;43180:153::o:0;33218:177::-;33348:39;33365:4;33371:2;33375:7;33348:39;;;;;;;;;;;;:16;:39::i;:::-;33218:177;;;:::o;27095:187::-;27162:7;27198:13;:11;:13::i;:::-;27190:5;:21;27182:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27269:5;27262:12;;27095:187;;;:::o;42896:107::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42988:7:::1;42969:16;:26;;;;;;;;;;;;:::i;:::-;;42896:107:::0;:::o;44271:102::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44358:7:::1;44340:15;:25;;;;44271:102:::0;:::o;44381:113::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44479:7:::1;44457:19;;:29;;;;;;;;;;;;;;;;;;44381:113:::0;:::o;30356:124::-;30420:7;30447:20;30459:7;30447:11;:20::i;:::-;:25;;;30440:32;;30356:124;;;:::o;42227:38::-;;;;:::o;44124:37::-;;;;;;;;;;;;;:::o;29097:221::-;29161:7;29206:1;29189:19;;:5;:19;;;;29181:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29282:12;:19;29295:5;29282:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29274:36;;29267:43;;29097:221;;;:::o;6027:103::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6092:30:::1;6119:1;6092:18;:30::i;:::-;6027:103::o:0;5376:87::-;5422:7;5449:6;;;;;;;;;;;5442:13;;5376:87;:::o;30716:104::-;30772:13;30805:7;30798:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30716:104;:::o;44619:1341::-;44713:9;44699:23;;:10;:23;;;44691:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44774:1;44766:4;:9;;:36;;;;;44787:15;;44779:4;:23;44766:36;44758:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44867:1;44844:19;;;;;;;;;;;:24;;;;:66;;;;;44895:15;44872:19;;;;;;;;;;;:38;;;;44844:66;44836:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44985:16;;44975:6;44954;:18;44961:10;44954:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:47;;44946:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45075:17;;45065:6;45049:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:43;;45041:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45141:22;45166:6;45141:31;;45209:16;;45191:14;:34;;45183:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45332:23;45370:13;:11;:13::i;:::-;42045:4;45358:25;;;;:::i;:::-;45332:51;;45420:1;45402:15;:19;45394:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45476:41;45485:14;45501:15;45476:8;:41::i;:::-;45459:58;;45530:21;45571:9;;45554:14;:26;;;;:::i;:::-;45530:50;;45612:13;45599:9;:26;;45591:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45699:14;45677:6;:18;45684:10;45677:18;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;45726:37;45736:10;45748:14;45726:9;:37::i;:::-;45807:15;45837:13;45825:9;:25;;;;:::i;:::-;45807:43;;45876:1;45865:7;:12;45861:92;;45894:47;45920:10;45933:7;45894:17;:47::i;:::-;45861:92;44680:1280;;;;44619:1341;;:::o;32395:288::-;32502:12;:10;:12::i;:::-;32490:24;;:8;:24;;;;32482:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32603:8;32558:18;:32;32577:12;:10;:12::i;:::-;32558:32;;;;;;;;;;;;;;;:42;32591:8;32558:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32656:8;32627:48;;32642:12;:10;:12::i;:::-;32627:48;;;32666:8;32627:48;;;;;;:::i;:::-;;;;;;;;32395:288;;:::o;42474:134::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42581:19:::1;42562:16;:38;;;;42474:134:::0;:::o;42616:::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42723:19:::1;42704:16;:38;;;;42616:134:::0;:::o;42315:36::-;;;;:::o;33466:355::-;33625:28;33635:4;33641:2;33645:7;33625:9;:28::i;:::-;33686:48;33709:4;33715:2;33719:7;33728:5;33686:22;:48::i;:::-;33664:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:355;;;;:::o;44502:109::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44595:8:::1;44575:17;:28;;;;44502:109:::0;:::o;30891:335::-;30964:13;30998:16;31006:7;30998;:16::i;:::-;30990:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31079:21;31103:10;:8;:10::i;:::-;31079:34;;31156:1;31137:7;31131:21;:26;;:87;;;;;;;;;;;;;;;;;31184:7;31193:18;:7;:16;:18::i;:::-;31167:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31131:87;31124:94;;;30891:335;;;:::o;42009:40::-;42045:4;42009:40;:::o;32754:164::-;32851:4;32875:18;:25;32894:5;32875:25;;;;;;;;;;;;;;;:35;32901:8;32875:35;;;;;;;;;;;;;;;;;;;;;;;;;32868:42;;32754:164;;;;:::o;44168:44::-;;;;:::o;6285:201::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6394:1:::1;6374:22;;:8;:22;;;;6366:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6450:28;6469:8;6450:18;:28::i;:::-;6285:201:::0;:::o;42360:106::-;5607:12;:10;:12::i;:::-;5596:23;;:7;:5;:7::i;:::-;:23;;;5588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42446:12:::1;42434:9;:24;;;;42360:106:::0;:::o;42056:44::-;42097:3;42056:44;:::o;18160:157::-;18245:4;18284:25;18269:40;;;:11;:40;;;;18262:47;;18160:157;;;:::o;34076:111::-;34133:4;34167:12;;34157:7;:22;34150:29;;34076:111;;;:::o;4100:98::-;4153:7;4180:10;4173:17;;4100:98;:::o;38996:196::-;39138:2;39111:15;:24;39127:7;39111:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39176:7;39172:2;39156:28;;39165:5;39156:28;;;;;;;;;;;;38996:196;;;:::o;36876:2002::-;36991:35;37029:20;37041:7;37029:11;:20::i;:::-;36991:58;;37062:22;37104:13;:18;;;37088:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;37163:12;:10;:12::i;:::-;37139:36;;:20;37151:7;37139:11;:20::i;:::-;:36;;;37088:87;:154;;;;37192:50;37209:13;:18;;;37229:12;:10;:12::i;:::-;37192:16;:50::i;:::-;37088:154;37062:181;;37264:17;37256:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;37379:4;37357:26;;:13;:18;;;:26;;;37349:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37459:1;37445:16;;:2;:16;;;;37437:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37516:43;37538:4;37544:2;37548:7;37557:1;37516:21;:43::i;:::-;37624:49;37641:1;37645:7;37654:13;:18;;;37624:8;:49::i;:::-;37999:1;37969:12;:18;37982:4;37969:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38043:1;38015:12;:16;38028:2;38015:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38089:2;38061:11;:20;38073:7;38061:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;38151:15;38106:11;:20;38118:7;38106:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;38419:19;38451:1;38441:7;:11;38419:33;;38512:1;38471:43;;:11;:24;38483:11;38471:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;38467:295;;;38539:20;38547:11;38539:7;:20::i;:::-;38535:212;;;38616:13;:18;;;38584:11;:24;38596:11;38584:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;38699:13;:28;;;38657:11;:24;38669:11;38657:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;38535:212;38467:295;37944:829;38809:7;38805:2;38790:27;;38799:4;38790:27;;;;;;;;;;;;38828:42;38849:4;38855:2;38859:7;38868:1;38828:20;:42::i;:::-;36980:1898;;36876:2002;;;:::o;34195:104::-;34264:27;34274:2;34278:8;34264:27;;;;;;;;;;;;:9;:27::i;:::-;34195:104;;:::o;9338:317::-;9453:6;9428:21;:31;;9420:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9507:12;9525:9;:14;;9547:6;9525:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9506:52;;;9577:7;9569:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;9409:246;9338:317;;:::o;29757:537::-;29818:21;;:::i;:::-;29860:16;29868:7;29860;:16::i;:::-;29852:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29966:12;29981:7;29966:22;;29961:245;29998:1;29990:4;:9;29961:245;;30028:31;30062:11;:17;30074:4;30062:17;;;;;;;;;;;30028:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30128:1;30102:28;;:9;:14;;;:28;;;30098:93;;30162:9;30155:16;;;;;;30098:93;30009:197;30001:6;;;;;;;;29961:245;;;;30229:57;;;;;;;;;;:::i;:::-;;;;;;;;29757:537;;;;:::o;6646:191::-;6720:16;6739:6;;;;;;;;;;;6720:25;;6765:8;6756:6;;:17;;;;;;;;;;;;;;;;;;6820:8;6789:40;;6810:8;6789:40;;;;;;;;;;;;6709:128;6646:191;:::o;505:106::-;563:7;594:1;590;:5;:13;;602:1;590:13;;;598:1;590:13;583:20;;505:106;;;;:::o;39757:804::-;39912:4;39933:15;:2;:13;;;:15::i;:::-;39929:625;;;39985:2;39969:36;;;40006:12;:10;:12::i;:::-;40020:4;40026:7;40035:5;39969:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39965:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40232:1;40215:6;:13;:18;40211:273;;;40258:61;;;;;;;;;;:::i;:::-;;;;;;;;40211:273;40434:6;40428:13;40419:6;40415:2;40411:15;40404:38;39965:534;40102:45;;;40092:55;;;:6;:55;;;;40085:62;;;;;39929:625;40538:4;40531:11;;39757:804;;;;;;;:::o;43011:117::-;43071:13;43104:16;43097:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43011:117;:::o;1662:723::-;1718:13;1948:1;1939:5;:10;1935:53;;;1966:10;;;;;;;;;;;;;;;;;;;;;1935:53;1998:12;2013:5;1998:20;;2029:14;2054:78;2069:1;2061:4;:9;2054:78;;2087:8;;;;;:::i;:::-;;;;2118:2;2110:10;;;;;:::i;:::-;;;2054:78;;;2142:19;2174:6;2164:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2142:39;;2192:154;2208:1;2199:5;:10;2192:154;;2236:1;2226:11;;;;;:::i;:::-;;;2303:2;2295:5;:10;;;;:::i;:::-;2282:2;:24;;;;:::i;:::-;2269:39;;2252:6;2259;2252:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2332:2;2323:11;;;;;:::i;:::-;;;2192:154;;;2370:6;2356:21;;;;;1662:723;;;;:::o;41049:159::-;;;;;:::o;41620:158::-;;;;;:::o;34662:163::-;34785:32;34791:2;34795:8;34805:5;34812:4;34785:5;:32::i;:::-;34662:163;;;:::o;8077:326::-;8137:4;8394:1;8372:7;:19;;;:23;8365:30;;8077:326;;;:::o;35084:1538::-;35223:20;35246:12;;35223:35;;35291:1;35277:16;;:2;:16;;;;35269:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35362:1;35350:8;:13;;35342:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35421:61;35451:1;35455:2;35459:12;35473:8;35421:21;:61::i;:::-;35796:8;35760:12;:16;35773:2;35760:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35861:8;35820:12;:16;35833:2;35820:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35920:2;35887:11;:25;35899:12;35887:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;35987:15;35937:11;:25;35949:12;35937:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36020:20;36043:12;36020:35;;36077:9;36072:415;36092:8;36088:1;:12;36072:415;;;36156:12;36152:2;36131:38;;36148:1;36131:38;;;;;;;;;;;;36192:4;36188:249;;;36255:59;36286:1;36290:2;36294:12;36308:5;36255:22;:59::i;:::-;36221:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;36188:249;36457:14;;;;;;;36102:3;;;;;;;36072:415;;;;36518:12;36503;:27;;;;35735:807;36554:60;36583:1;36587:2;36591:12;36605:8;36554:20;:60::i;:::-;35212:1410;35084:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::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:137::-;2322:5;2360:6;2347:20;2338:29;;2376:32;2402:5;2376:32;:::i;:::-;2277:137;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:327::-;5821:6;5870:2;5858:9;5849:7;5845:23;5841:32;5838:119;;;5876:79;;:::i;:::-;5838:119;5996:1;6021:52;6065:7;6056:6;6045:9;6041:22;6021:52;:::i;:::-;6011:62;;5967:116;5763:327;;;;:::o;6096:349::-;6165:6;6214:2;6202:9;6193:7;6189:23;6185:32;6182:119;;;6220:79;;:::i;:::-;6182:119;6340:1;6365:63;6420:7;6411:6;6400:9;6396:22;6365:63;:::i;:::-;6355:73;;6311:127;6096:349;;;;:::o;6451:509::-;6520:6;6569:2;6557:9;6548:7;6544:23;6540:32;6537:119;;;6575:79;;:::i;:::-;6537:119;6723:1;6712:9;6708:17;6695:31;6753:18;6745:6;6742:30;6739:117;;;6775:79;;:::i;:::-;6739:117;6880:63;6935:7;6926:6;6915:9;6911:22;6880:63;:::i;:::-;6870:73;;6666:287;6451:509;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:118::-;8201:24;8219:5;8201:24;:::i;:::-;8196:3;8189:37;8114:118;;:::o;8238:109::-;8319:21;8334:5;8319:21;:::i;:::-;8314:3;8307:34;8238:109;;:::o;8353:360::-;8439:3;8467:38;8499:5;8467:38;:::i;:::-;8521:70;8584:6;8579:3;8521:70;:::i;:::-;8514:77;;8600:52;8645:6;8640:3;8633:4;8626:5;8622:16;8600:52;:::i;:::-;8677:29;8699:6;8677:29;:::i;:::-;8672:3;8668:39;8661:46;;8443:270;8353:360;;;;:::o;8719:364::-;8807:3;8835:39;8868:5;8835:39;:::i;:::-;8890:71;8954:6;8949:3;8890:71;:::i;:::-;8883:78;;8970:52;9015:6;9010:3;9003:4;8996:5;8992:16;8970:52;:::i;:::-;9047:29;9069:6;9047:29;:::i;:::-;9042:3;9038:39;9031:46;;8811:272;8719:364;;;;:::o;9089:377::-;9195:3;9223:39;9256:5;9223:39;:::i;:::-;9278:89;9360:6;9355:3;9278:89;:::i;:::-;9271:96;;9376:52;9421:6;9416:3;9409:4;9402:5;9398:16;9376:52;:::i;:::-;9453:6;9448:3;9444:16;9437:23;;9199:267;9089:377;;;;:::o;9472:366::-;9614:3;9635:67;9699:2;9694:3;9635:67;:::i;:::-;9628:74;;9711:93;9800:3;9711:93;:::i;:::-;9829:2;9824:3;9820:12;9813:19;;9472:366;;;:::o;9844:::-;9986:3;10007:67;10071:2;10066:3;10007:67;:::i;:::-;10000:74;;10083:93;10172:3;10083:93;:::i;:::-;10201:2;10196:3;10192:12;10185:19;;9844:366;;;:::o;10216:::-;10358:3;10379:67;10443:2;10438:3;10379:67;:::i;:::-;10372:74;;10455:93;10544:3;10455:93;:::i;:::-;10573:2;10568:3;10564:12;10557:19;;10216:366;;;:::o;10588:::-;10730:3;10751:67;10815:2;10810:3;10751:67;:::i;:::-;10744:74;;10827:93;10916:3;10827:93;:::i;:::-;10945:2;10940:3;10936:12;10929:19;;10588:366;;;:::o;10960:::-;11102:3;11123:67;11187:2;11182:3;11123:67;:::i;:::-;11116:74;;11199:93;11288:3;11199:93;:::i;:::-;11317:2;11312:3;11308:12;11301:19;;10960:366;;;:::o;11332:::-;11474:3;11495:67;11559:2;11554:3;11495:67;:::i;:::-;11488:74;;11571:93;11660:3;11571:93;:::i;:::-;11689:2;11684:3;11680:12;11673:19;;11332:366;;;:::o;11704:::-;11846:3;11867:67;11931:2;11926:3;11867:67;:::i;:::-;11860:74;;11943:93;12032:3;11943:93;:::i;:::-;12061:2;12056:3;12052:12;12045:19;;11704:366;;;:::o;12076:::-;12218:3;12239:67;12303:2;12298:3;12239:67;:::i;:::-;12232:74;;12315:93;12404:3;12315:93;:::i;:::-;12433:2;12428:3;12424:12;12417:19;;12076:366;;;:::o;12448:::-;12590:3;12611:67;12675:2;12670:3;12611:67;:::i;:::-;12604:74;;12687:93;12776:3;12687:93;:::i;:::-;12805:2;12800:3;12796:12;12789:19;;12448:366;;;:::o;12820:::-;12962:3;12983:67;13047:2;13042:3;12983:67;:::i;:::-;12976:74;;13059:93;13148:3;13059:93;:::i;:::-;13177:2;13172:3;13168:12;13161:19;;12820:366;;;:::o;13192:::-;13334:3;13355:67;13419:2;13414:3;13355:67;:::i;:::-;13348:74;;13431:93;13520:3;13431:93;:::i;:::-;13549:2;13544:3;13540:12;13533:19;;13192:366;;;:::o;13564:::-;13706:3;13727:67;13791:2;13786:3;13727:67;:::i;:::-;13720:74;;13803:93;13892:3;13803:93;:::i;:::-;13921:2;13916:3;13912:12;13905:19;;13564:366;;;:::o;13936:::-;14078:3;14099:67;14163:2;14158:3;14099:67;:::i;:::-;14092:74;;14175:93;14264:3;14175:93;:::i;:::-;14293:2;14288:3;14284:12;14277:19;;13936:366;;;:::o;14308:::-;14450:3;14471:67;14535:2;14530:3;14471:67;:::i;:::-;14464:74;;14547:93;14636:3;14547:93;:::i;:::-;14665:2;14660:3;14656:12;14649:19;;14308:366;;;:::o;14680:::-;14822:3;14843:67;14907:2;14902:3;14843:67;:::i;:::-;14836:74;;14919:93;15008:3;14919:93;:::i;:::-;15037:2;15032:3;15028:12;15021:19;;14680:366;;;:::o;15052:::-;15194:3;15215:67;15279:2;15274:3;15215:67;:::i;:::-;15208:74;;15291:93;15380:3;15291:93;:::i;:::-;15409:2;15404:3;15400:12;15393:19;;15052:366;;;:::o;15424:::-;15566:3;15587:67;15651:2;15646:3;15587:67;:::i;:::-;15580:74;;15663:93;15752:3;15663:93;:::i;:::-;15781:2;15776:3;15772:12;15765:19;;15424:366;;;:::o;15796:::-;15938:3;15959:67;16023:2;16018:3;15959:67;:::i;:::-;15952:74;;16035:93;16124:3;16035:93;:::i;:::-;16153:2;16148:3;16144:12;16137:19;;15796:366;;;:::o;16168:::-;16310:3;16331:67;16395:2;16390:3;16331:67;:::i;:::-;16324:74;;16407:93;16496:3;16407:93;:::i;:::-;16525:2;16520:3;16516:12;16509:19;;16168:366;;;:::o;16540:::-;16682:3;16703:67;16767:2;16762:3;16703:67;:::i;:::-;16696:74;;16779:93;16868:3;16779:93;:::i;:::-;16897:2;16892:3;16888:12;16881:19;;16540:366;;;:::o;16912:::-;17054:3;17075:67;17139:2;17134:3;17075:67;:::i;:::-;17068:74;;17151:93;17240:3;17151:93;:::i;:::-;17269:2;17264:3;17260:12;17253:19;;16912:366;;;:::o;17284:::-;17426:3;17447:67;17511:2;17506:3;17447:67;:::i;:::-;17440:74;;17523:93;17612:3;17523:93;:::i;:::-;17641:2;17636:3;17632:12;17625:19;;17284:366;;;:::o;17656:398::-;17815:3;17836:83;17917:1;17912:3;17836:83;:::i;:::-;17829:90;;17928:93;18017:3;17928:93;:::i;:::-;18046:1;18041:3;18037:11;18030:18;;17656:398;;;:::o;18060:366::-;18202:3;18223:67;18287:2;18282:3;18223:67;:::i;:::-;18216:74;;18299:93;18388:3;18299:93;:::i;:::-;18417:2;18412:3;18408:12;18401:19;;18060:366;;;:::o;18432:::-;18574:3;18595:67;18659:2;18654:3;18595:67;:::i;:::-;18588:74;;18671:93;18760:3;18671:93;:::i;:::-;18789:2;18784:3;18780:12;18773:19;;18432:366;;;:::o;18804:::-;18946:3;18967:67;19031:2;19026:3;18967:67;:::i;:::-;18960:74;;19043:93;19132:3;19043:93;:::i;:::-;19161:2;19156:3;19152:12;19145:19;;18804:366;;;:::o;19176:::-;19318:3;19339:67;19403:2;19398:3;19339:67;:::i;:::-;19332:74;;19415:93;19504:3;19415:93;:::i;:::-;19533:2;19528:3;19524:12;19517:19;;19176:366;;;:::o;19548:::-;19690:3;19711:67;19775:2;19770:3;19711:67;:::i;:::-;19704:74;;19787:93;19876:3;19787:93;:::i;:::-;19905:2;19900:3;19896:12;19889:19;;19548:366;;;:::o;19920:::-;20062:3;20083:67;20147:2;20142:3;20083:67;:::i;:::-;20076:74;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;19920:366;;;:::o;20292:::-;20434:3;20455:67;20519:2;20514:3;20455:67;:::i;:::-;20448:74;;20531:93;20620:3;20531:93;:::i;:::-;20649:2;20644:3;20640:12;20633:19;;20292:366;;;:::o;20664:::-;20806:3;20827:67;20891:2;20886:3;20827:67;:::i;:::-;20820:74;;20903:93;20992:3;20903:93;:::i;:::-;21021:2;21016:3;21012:12;21005:19;;20664:366;;;:::o;21036:::-;21178:3;21199:67;21263:2;21258:3;21199:67;:::i;:::-;21192:74;;21275:93;21364:3;21275:93;:::i;:::-;21393:2;21388:3;21384:12;21377:19;;21036:366;;;:::o;21408:118::-;21495:24;21513:5;21495:24;:::i;:::-;21490:3;21483:37;21408:118;;:::o;21532:115::-;21617:23;21634:5;21617:23;:::i;:::-;21612:3;21605:36;21532:115;;:::o;21653:435::-;21833:3;21855:95;21946:3;21937:6;21855:95;:::i;:::-;21848:102;;21967:95;22058:3;22049:6;21967:95;:::i;:::-;21960:102;;22079:3;22072:10;;21653:435;;;;;:::o;22094:379::-;22278:3;22300:147;22443:3;22300:147;:::i;:::-;22293:154;;22464:3;22457:10;;22094:379;;;:::o;22479:222::-;22572:4;22610:2;22599:9;22595:18;22587:26;;22623:71;22691:1;22680:9;22676:17;22667:6;22623:71;:::i;:::-;22479:222;;;;:::o;22707:640::-;22902:4;22940:3;22929:9;22925:19;22917:27;;22954:71;23022:1;23011:9;23007:17;22998:6;22954:71;:::i;:::-;23035:72;23103:2;23092:9;23088:18;23079:6;23035:72;:::i;:::-;23117;23185:2;23174:9;23170:18;23161:6;23117:72;:::i;:::-;23236:9;23230:4;23226:20;23221:2;23210:9;23206:18;23199:48;23264:76;23335:4;23326:6;23264:76;:::i;:::-;23256:84;;22707:640;;;;;;;:::o;23353:210::-;23440:4;23478:2;23467:9;23463:18;23455:26;;23491:65;23553:1;23542:9;23538:17;23529:6;23491:65;:::i;:::-;23353:210;;;;:::o;23569:313::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:78;23870:4;23861:6;23797:78;:::i;:::-;23789:86;;23569:313;;;;:::o;23888:419::-;24054:4;24092:2;24081:9;24077:18;24069:26;;24141:9;24135:4;24131:20;24127:1;24116:9;24112:17;24105:47;24169:131;24295:4;24169:131;:::i;:::-;24161:139;;23888:419;;;:::o;24313:::-;24479:4;24517:2;24506:9;24502:18;24494:26;;24566:9;24560:4;24556:20;24552:1;24541:9;24537:17;24530:47;24594:131;24720:4;24594:131;:::i;:::-;24586:139;;24313:419;;;:::o;24738:::-;24904:4;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24738:419;;;:::o;25163:::-;25329:4;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25163:419;;;:::o;25588:::-;25754:4;25792:2;25781:9;25777:18;25769:26;;25841:9;25835:4;25831:20;25827:1;25816:9;25812:17;25805:47;25869:131;25995:4;25869:131;:::i;:::-;25861:139;;25588:419;;;:::o;26013:::-;26179:4;26217:2;26206:9;26202:18;26194:26;;26266:9;26260:4;26256:20;26252:1;26241:9;26237:17;26230:47;26294:131;26420:4;26294:131;:::i;:::-;26286:139;;26013:419;;;:::o;26438:::-;26604:4;26642:2;26631:9;26627:18;26619:26;;26691:9;26685:4;26681:20;26677:1;26666:9;26662:17;26655:47;26719:131;26845:4;26719:131;:::i;:::-;26711:139;;26438:419;;;:::o;26863:::-;27029:4;27067:2;27056:9;27052:18;27044:26;;27116:9;27110:4;27106:20;27102:1;27091:9;27087:17;27080:47;27144:131;27270:4;27144:131;:::i;:::-;27136:139;;26863:419;;;:::o;27288:::-;27454:4;27492:2;27481:9;27477:18;27469:26;;27541:9;27535:4;27531:20;27527:1;27516:9;27512:17;27505:47;27569:131;27695:4;27569:131;:::i;:::-;27561:139;;27288:419;;;:::o;27713:::-;27879:4;27917:2;27906:9;27902:18;27894:26;;27966:9;27960:4;27956:20;27952:1;27941:9;27937:17;27930:47;27994:131;28120:4;27994:131;:::i;:::-;27986:139;;27713:419;;;:::o;28138:::-;28304:4;28342:2;28331:9;28327:18;28319:26;;28391:9;28385:4;28381:20;28377:1;28366:9;28362:17;28355:47;28419:131;28545:4;28419:131;:::i;:::-;28411:139;;28138:419;;;:::o;28563:::-;28729:4;28767:2;28756:9;28752:18;28744:26;;28816:9;28810:4;28806:20;28802:1;28791:9;28787:17;28780:47;28844:131;28970:4;28844:131;:::i;:::-;28836:139;;28563:419;;;:::o;28988:::-;29154:4;29192:2;29181:9;29177:18;29169:26;;29241:9;29235:4;29231:20;29227:1;29216:9;29212:17;29205:47;29269:131;29395:4;29269:131;:::i;:::-;29261:139;;28988:419;;;:::o;29413:::-;29579:4;29617:2;29606:9;29602:18;29594:26;;29666:9;29660:4;29656:20;29652:1;29641:9;29637:17;29630:47;29694:131;29820:4;29694:131;:::i;:::-;29686:139;;29413:419;;;:::o;29838:::-;30004:4;30042:2;30031:9;30027:18;30019:26;;30091:9;30085:4;30081:20;30077:1;30066:9;30062:17;30055:47;30119:131;30245:4;30119:131;:::i;:::-;30111:139;;29838:419;;;:::o;30263:::-;30429:4;30467:2;30456:9;30452:18;30444:26;;30516:9;30510:4;30506:20;30502:1;30491:9;30487:17;30480:47;30544:131;30670:4;30544:131;:::i;:::-;30536:139;;30263:419;;;:::o;30688:::-;30854:4;30892:2;30881:9;30877:18;30869:26;;30941:9;30935:4;30931:20;30927:1;30916:9;30912:17;30905:47;30969:131;31095:4;30969:131;:::i;:::-;30961:139;;30688:419;;;:::o;31113:::-;31279:4;31317:2;31306:9;31302:18;31294:26;;31366:9;31360:4;31356:20;31352:1;31341:9;31337:17;31330:47;31394:131;31520:4;31394:131;:::i;:::-;31386:139;;31113:419;;;:::o;31538:::-;31704:4;31742:2;31731:9;31727:18;31719:26;;31791:9;31785:4;31781:20;31777:1;31766:9;31762:17;31755:47;31819:131;31945:4;31819:131;:::i;:::-;31811:139;;31538:419;;;:::o;31963:::-;32129:4;32167:2;32156:9;32152:18;32144:26;;32216:9;32210:4;32206:20;32202:1;32191:9;32187:17;32180:47;32244:131;32370:4;32244:131;:::i;:::-;32236:139;;31963:419;;;:::o;32388:::-;32554:4;32592:2;32581:9;32577:18;32569:26;;32641:9;32635:4;32631:20;32627:1;32616:9;32612:17;32605:47;32669:131;32795:4;32669:131;:::i;:::-;32661:139;;32388:419;;;:::o;32813:::-;32979:4;33017:2;33006:9;33002:18;32994:26;;33066:9;33060:4;33056:20;33052:1;33041:9;33037:17;33030:47;33094:131;33220:4;33094:131;:::i;:::-;33086:139;;32813:419;;;:::o;33238:::-;33404:4;33442:2;33431:9;33427:18;33419:26;;33491:9;33485:4;33481:20;33477:1;33466:9;33462:17;33455:47;33519:131;33645:4;33519:131;:::i;:::-;33511:139;;33238:419;;;:::o;33663:::-;33829:4;33867:2;33856:9;33852:18;33844:26;;33916:9;33910:4;33906:20;33902:1;33891:9;33887:17;33880:47;33944:131;34070:4;33944:131;:::i;:::-;33936:139;;33663:419;;;:::o;34088:::-;34254:4;34292:2;34281:9;34277:18;34269:26;;34341:9;34335:4;34331:20;34327:1;34316:9;34312:17;34305:47;34369:131;34495:4;34369:131;:::i;:::-;34361:139;;34088:419;;;:::o;34513:::-;34679:4;34717:2;34706:9;34702:18;34694:26;;34766:9;34760:4;34756:20;34752:1;34741:9;34737:17;34730:47;34794:131;34920:4;34794:131;:::i;:::-;34786:139;;34513:419;;;:::o;34938:::-;35104:4;35142:2;35131:9;35127:18;35119:26;;35191:9;35185:4;35181:20;35177:1;35166:9;35162:17;35155:47;35219:131;35345:4;35219:131;:::i;:::-;35211:139;;34938:419;;;:::o;35363:::-;35529:4;35567:2;35556:9;35552:18;35544:26;;35616:9;35610:4;35606:20;35602:1;35591:9;35587:17;35580:47;35644:131;35770:4;35644:131;:::i;:::-;35636:139;;35363:419;;;:::o;35788:::-;35954:4;35992:2;35981:9;35977:18;35969:26;;36041:9;36035:4;36031:20;36027:1;36016:9;36012:17;36005:47;36069:131;36195:4;36069:131;:::i;:::-;36061:139;;35788:419;;;:::o;36213:::-;36379:4;36417:2;36406:9;36402:18;36394:26;;36466:9;36460:4;36456:20;36452:1;36441:9;36437:17;36430:47;36494:131;36620:4;36494:131;:::i;:::-;36486:139;;36213:419;;;:::o;36638:::-;36804:4;36842:2;36831:9;36827:18;36819:26;;36891:9;36885:4;36881:20;36877:1;36866:9;36862:17;36855:47;36919:131;37045:4;36919:131;:::i;:::-;36911:139;;36638:419;;;:::o;37063:222::-;37156:4;37194:2;37183:9;37179:18;37171:26;;37207:71;37275:1;37264:9;37260:17;37251:6;37207:71;:::i;:::-;37063:222;;;;:::o;37291:218::-;37382:4;37420:2;37409:9;37405:18;37397:26;;37433:69;37499:1;37488:9;37484:17;37475:6;37433:69;:::i;:::-;37291:218;;;;:::o;37515:129::-;37549:6;37576:20;;:::i;:::-;37566:30;;37605:33;37633:4;37625:6;37605:33;:::i;:::-;37515:129;;;:::o;37650:75::-;37683:6;37716:2;37710:9;37700:19;;37650:75;:::o;37731:307::-;37792:4;37882:18;37874:6;37871:30;37868:56;;;37904:18;;:::i;:::-;37868:56;37942:29;37964:6;37942:29;:::i;:::-;37934:37;;38026:4;38020;38016:15;38008:23;;37731:307;;;:::o;38044:308::-;38106:4;38196:18;38188:6;38185:30;38182:56;;;38218:18;;:::i;:::-;38182:56;38256:29;38278:6;38256:29;:::i;:::-;38248:37;;38340:4;38334;38330:15;38322:23;;38044:308;;;:::o;38358:98::-;38409:6;38443:5;38437:12;38427:22;;38358:98;;;:::o;38462:99::-;38514:6;38548:5;38542:12;38532:22;;38462:99;;;:::o;38567:168::-;38650:11;38684:6;38679:3;38672:19;38724:4;38719:3;38715:14;38700:29;;38567:168;;;;:::o;38741:147::-;38842:11;38879:3;38864:18;;38741:147;;;;:::o;38894:169::-;38978:11;39012:6;39007:3;39000:19;39052:4;39047:3;39043:14;39028:29;;38894:169;;;;:::o;39069:148::-;39171:11;39208:3;39193:18;;39069:148;;;;:::o;39223:305::-;39263:3;39282:20;39300:1;39282:20;:::i;:::-;39277:25;;39316:20;39334:1;39316:20;:::i;:::-;39311:25;;39470:1;39402:66;39398:74;39395:1;39392:81;39389:107;;;39476:18;;:::i;:::-;39389:107;39520:1;39517;39513:9;39506:16;;39223:305;;;;:::o;39534:185::-;39574:1;39591:20;39609:1;39591:20;:::i;:::-;39586:25;;39625:20;39643:1;39625:20;:::i;:::-;39620:25;;39664:1;39654:35;;39669:18;;:::i;:::-;39654:35;39711:1;39708;39704:9;39699:14;;39534:185;;;;:::o;39725:348::-;39765:7;39788:20;39806:1;39788:20;:::i;:::-;39783:25;;39822:20;39840:1;39822:20;:::i;:::-;39817:25;;40010:1;39942:66;39938:74;39935:1;39932:81;39927:1;39920:9;39913:17;39909:105;39906:131;;;40017:18;;:::i;:::-;39906:131;40065:1;40062;40058:9;40047:20;;39725:348;;;;:::o;40079:191::-;40119:4;40139:20;40157:1;40139:20;:::i;:::-;40134:25;;40173:20;40191:1;40173:20;:::i;:::-;40168:25;;40212:1;40209;40206:8;40203:34;;;40217:18;;:::i;:::-;40203:34;40262:1;40259;40255:9;40247:17;;40079:191;;;;:::o;40276:96::-;40313:7;40342:24;40360:5;40342:24;:::i;:::-;40331:35;;40276:96;;;:::o;40378:90::-;40412:7;40455:5;40448:13;40441:21;40430:32;;40378:90;;;:::o;40474:149::-;40510:7;40550:66;40543:5;40539:78;40528:89;;40474:149;;;:::o;40629:126::-;40666:7;40706:42;40699:5;40695:54;40684:65;;40629:126;;;:::o;40761:77::-;40798:7;40827:5;40816:16;;40761:77;;;:::o;40844:93::-;40880:7;40920:10;40913:5;40909:22;40898:33;;40844:93;;;:::o;40943:154::-;41027:6;41022:3;41017;41004:30;41089:1;41080:6;41075:3;41071:16;41064:27;40943:154;;;:::o;41103:307::-;41171:1;41181:113;41195:6;41192:1;41189:13;41181:113;;;41280:1;41275:3;41271:11;41265:18;41261:1;41256:3;41252:11;41245:39;41217:2;41214:1;41210:10;41205:15;;41181:113;;;41312:6;41309:1;41306:13;41303:101;;;41392:1;41383:6;41378:3;41374:16;41367:27;41303:101;41152:258;41103:307;;;:::o;41416:320::-;41460:6;41497:1;41491:4;41487:12;41477:22;;41544:1;41538:4;41534:12;41565:18;41555:81;;41621:4;41613:6;41609:17;41599:27;;41555:81;41683:2;41675:6;41672:14;41652:18;41649:38;41646:84;;;41702:18;;:::i;:::-;41646:84;41467:269;41416:320;;;:::o;41742:281::-;41825:27;41847:4;41825:27;:::i;:::-;41817:6;41813:40;41955:6;41943:10;41940:22;41919:18;41907:10;41904:34;41901:62;41898:88;;;41966:18;;:::i;:::-;41898:88;42006:10;42002:2;41995:22;41785:238;41742:281;;:::o;42029:233::-;42068:3;42091:24;42109:5;42091:24;:::i;:::-;42082:33;;42137:66;42130:5;42127:77;42124:103;;;42207:18;;:::i;:::-;42124:103;42254:1;42247:5;42243:13;42236:20;;42029:233;;;:::o;42268:176::-;42300:1;42317:20;42335:1;42317:20;:::i;:::-;42312:25;;42351:20;42369:1;42351:20;:::i;:::-;42346:25;;42390:1;42380:35;;42395:18;;:::i;:::-;42380:35;42436:1;42433;42429:9;42424:14;;42268:176;;;;:::o;42450:180::-;42498:77;42495:1;42488:88;42595:4;42592:1;42585:15;42619:4;42616:1;42609:15;42636:180;42684:77;42681:1;42674:88;42781:4;42778:1;42771:15;42805:4;42802:1;42795:15;42822:180;42870:77;42867:1;42860:88;42967:4;42964:1;42957:15;42991:4;42988:1;42981:15;43008:180;43056:77;43053:1;43046:88;43153:4;43150:1;43143:15;43177:4;43174:1;43167:15;43194:180;43242:77;43239:1;43232:88;43339:4;43336:1;43329:15;43363:4;43360:1;43353:15;43380:117;43489:1;43486;43479:12;43503:117;43612:1;43609;43602:12;43626:117;43735:1;43732;43725:12;43749:117;43858:1;43855;43848:12;43872:102;43913:6;43964:2;43960:7;43955:2;43948:5;43944:14;43940:28;43930:38;;43872:102;;;:::o;43980:221::-;44120:34;44116:1;44108:6;44104:14;44097:58;44189:4;44184:2;44176:6;44172:15;44165:29;43980:221;:::o;44207:181::-;44347:33;44343:1;44335:6;44331:14;44324:57;44207:181;:::o;44394:171::-;44534:23;44530:1;44522:6;44518:14;44511:47;44394:171;:::o;44571:225::-;44711:34;44707:1;44699:6;44695:14;44688:58;44780:8;44775:2;44767:6;44763:15;44756:33;44571:225;:::o;44802:229::-;44942:34;44938:1;44930:6;44926:14;44919:58;45011:12;45006:2;44998:6;44994:15;44987:37;44802:229;:::o;45037:231::-;45177:34;45173:1;45165:6;45161:14;45154:58;45246:14;45241:2;45233:6;45229:15;45222:39;45037:231;:::o;45274:174::-;45414:26;45410:1;45402:6;45398:14;45391:50;45274:174;:::o;45454:222::-;45594:34;45590:1;45582:6;45578:14;45571:58;45663:5;45658:2;45650:6;45646:15;45639:30;45454:222;:::o;45682:224::-;45822:34;45818:1;45810:6;45806:14;45799:58;45891:7;45886:2;45878:6;45874:15;45867:32;45682:224;:::o;45912:245::-;46052:34;46048:1;46040:6;46036:14;46029:58;46121:28;46116:2;46108:6;46104:15;46097:53;45912:245;:::o;46163:179::-;46303:31;46299:1;46291:6;46287:14;46280:55;46163:179;:::o;46348:244::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:27;46552:2;46544:6;46540:15;46533:52;46348:244;:::o;46598:230::-;46738:34;46734:1;46726:6;46722:14;46715:58;46807:13;46802:2;46794:6;46790:15;46783:38;46598:230;:::o;46834:225::-;46974:34;46970:1;46962:6;46958:14;46951:58;47043:8;47038:2;47030:6;47026:15;47019:33;46834:225;:::o;47065:182::-;47205:34;47201:1;47193:6;47189:14;47182:58;47065:182;:::o;47253:234::-;47393:34;47389:1;47381:6;47377:14;47370:58;47462:17;47457:2;47449:6;47445:15;47438:42;47253:234;:::o;47493:176::-;47633:28;47629:1;47621:6;47617:14;47610:52;47493:176;:::o;47675:237::-;47815:34;47811:1;47803:6;47799:14;47792:58;47884:20;47879:2;47871:6;47867:15;47860:45;47675:237;:::o;47918:168::-;48058:20;48054:1;48046:6;48042:14;48035:44;47918:168;:::o;48092:177::-;48232:29;48228:1;48220:6;48216:14;48209:53;48092:177;:::o;48275:170::-;48415:22;48411:1;48403:6;48399:14;48392:46;48275:170;:::o;48451:221::-;48591:34;48587:1;48579:6;48575:14;48568:58;48660:4;48655:2;48647:6;48643:15;48636:29;48451:221;:::o;48678:114::-;;:::o;48798:238::-;48938:34;48934:1;48926:6;48922:14;48915:58;49007:21;49002:2;48994:6;48990:15;48983:46;48798:238;:::o;49042:220::-;49182:34;49178:1;49170:6;49166:14;49159:58;49251:3;49246:2;49238:6;49234:15;49227:28;49042:220;:::o;49268:226::-;49408:34;49404:1;49396:6;49392:14;49385:58;49477:9;49472:2;49464:6;49460:15;49453:34;49268:226;:::o;49500:227::-;49640:34;49636:1;49628:6;49624:14;49617:58;49709:10;49704:2;49696:6;49692:15;49685:35;49500:227;:::o;49733:233::-;49873:34;49869:1;49861:6;49857:14;49850:58;49942:16;49937:2;49929:6;49925:15;49918:41;49733:233;:::o;49972:170::-;50112:22;50108:1;50100:6;50096:14;50089:46;49972:170;:::o;50148:220::-;50288:34;50284:1;50276:6;50272:14;50265:58;50357:3;50352:2;50344:6;50340:15;50333:28;50148:220;:::o;50374:234::-;50514:34;50510:1;50502:6;50498:14;50491:58;50583:17;50578:2;50570:6;50566:15;50559:42;50374:234;:::o;50614:232::-;50754:34;50750:1;50742:6;50738:14;50731:58;50823:15;50818:2;50810:6;50806:15;50799:40;50614:232;:::o;50852:122::-;50925:24;50943:5;50925:24;:::i;:::-;50918:5;50915:35;50905:63;;50964:1;50961;50954:12;50905:63;50852:122;:::o;50980:116::-;51050:21;51065:5;51050:21;:::i;:::-;51043:5;51040:32;51030:60;;51086:1;51083;51076:12;51030:60;50980:116;:::o;51102:120::-;51174:23;51191:5;51174:23;:::i;:::-;51167:5;51164:34;51154:62;;51212:1;51209;51202:12;51154:62;51102:120;:::o;51228:122::-;51301:24;51319:5;51301:24;:::i;:::-;51294:5;51291:35;51281:63;;51340:1;51337;51330:12;51281:63;51228:122;:::o;51356:120::-;51428:23;51445:5;51428:23;:::i;:::-;51421:5;51418:34;51408:62;;51466:1;51463;51456:12;51408:62;51356:120;:::o
Swarm Source
ipfs://3ffabf15292024ba32d56f5c919435344492feac295e18ca39b8cdf1da759680
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.