ERC-721
Overview
Max Total Supply
3,999 3landersmfers
Holders
399
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
30 3landersmfersLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
landersmfersContract
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-25 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /* * @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; } } 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); } } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } 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..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ 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 private currentIndex = 0; uint256 internal immutable TotalToken; uint256 internal immutable maxBatchSize; // 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) private _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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `TotalToken_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 TotalToken_ ) { require( TotalToken_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; TotalToken = TotalToken_; } /** * @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(TotalToken). 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 = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; 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); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; 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())) : ""; } 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 virtual 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 virtual 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 Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); 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); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, 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] = TokenOwnership( prevOwnership.addr, 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); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > TotalToken - 1) { endIndex = TotalToken - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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 {} } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } pragma solidity ^0.8.0; contract landersmfersContract is Ownable, ERC721A, ReentrancyGuard { bool public IsSalesStart; bool public IsClaimActive; uint256 public TotalCollectionSize; uint256 public Mintprice; uint256 public MaxClaimTokenTotalForFree; uint256 public MaxClaimTokenTotalForFreePerwallet; uint public MaxFreeClaimPerTx; uint public MaxMintPerTx; mapping(address => uint256) private ClaimPerWallet; constructor( uint256 maxBatchSize_, uint256 TotalToken_ ) ERC721A("3Landers Mfers", "3landersmfers", maxBatchSize_, TotalToken_) { MaxMintPerTx = maxBatchSize_; TotalCollectionSize = TotalToken_; IsSalesStart = true; IsClaimActive = false; Mintprice = 6900000000000000; MaxClaimTokenTotalForFree = 1000; MaxClaimTokenTotalForFreePerwallet = 20; MaxFreeClaimPerTx = 20; } function MintTo(address _to,uint256 mintamount) external onlyOwner { require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than TotalCollectionSize"); _safeMint(_to, mintamount); } function Claim(uint256 mintamount) external payable { require(IsClaimActive, "Sale is not started"); require(mintamount > 0 && mintamount <= MaxFreeClaimPerTx, "Can not mint more than MaxFreeClaimPerTx"); require(ClaimPerWallet[msg.sender] + mintamount <= MaxClaimTokenTotalForFreePerwallet, "Can not mint more than MaxClaimTokenTotalForFreePerwallet"); require(totalSupply() + mintamount <= MaxClaimTokenTotalForFree, "Can not mint more than MaxClaimTokenTotalForFree"); _safeMint(msg.sender, mintamount); ClaimPerWallet[msg.sender] += mintamount; } function Mint(uint256 mintamount) external payable { require(IsSalesStart, "Sale is not started"); require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than TotalCollectionSize"); require(mintamount > 0 && mintamount <= MaxMintPerTx, "Can not mint more than MaxMintPerTx"); require(msg.value >= Mintprice*mintamount, "Not paid enough ETH."); _safeMint(msg.sender, mintamount); } function SetMaxMintPerTxForClaim(uint _MaxFreeClaimPerTx) external onlyOwner { MaxFreeClaimPerTx = _MaxFreeClaimPerTx; } function setMaxMintPerTx(uint _MaxMintPerTx) external onlyOwner { MaxMintPerTx = _MaxMintPerTx; } function setTotalCollectionSize(uint _TotalToken) external onlyOwner { TotalCollectionSize = _TotalToken; } function setMintprice(uint _Mintprice) external onlyOwner { Mintprice = _Mintprice; } function setMaxClaimTokenTotalForFree(uint _MaxClaimTokenTotalForFree) external onlyOwner { MaxClaimTokenTotalForFree = _MaxClaimTokenTotalForFree; } function SetSalesStart() public onlyOwner { IsSalesStart = !IsSalesStart; } function SetIsClaimActive() public onlyOwner { IsClaimActive = !IsClaimActive; } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } string private _baseAPIURI; function setBaseURI(string calldata baseURI) external onlyOwner { _baseAPIURI = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseAPIURI; } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } function tokensOfOwner(address _owner) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"TotalToken_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"IsClaimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IsSalesStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFreePerwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxFreeClaimPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"MintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Mintprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetIsClaimActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxFreeClaimPerTx","type":"uint256"}],"name":"SetMaxMintPerTxForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetSalesStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalCollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxClaimTokenTotalForFree","type":"uint256"}],"name":"setMaxClaimTokenTotalForFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Mintprice","type":"uint256"}],"name":"setMintprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TotalToken","type":"uint256"}],"name":"setTotalCollectionSize","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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
60c0604052600060015560006008553480156200001b57600080fd5b5060405162005bbd38038062005bbd8339818101604052810190620000419190620003af565b6040518060400160405280600e81526020017f334c616e64657273204d666572730000000000000000000000000000000000008152506040518060400160405280600d81526020017f336c616e646572736d66657273000000000000000000000000000000000000008152508383620000cf620000c36200021c60201b60201c565b6200022460201b60201c565b6000811162000115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010c90620004e2565b60405180910390fd5b600082116200015b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015290620004c0565b60405180910390fd5b836002908051906020019062000173929190620002e8565b5082600390805190602001906200018c929190620002e8565b508160a0818152505080608081815250505050505060016009819055508160108190555080600b819055506001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506618838370f34000600c819055506103e8600d819055506014600e819055506014600f8190555050506200059e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f6906200051f565b90600052602060002090601f0160209004810192826200031a576000855562000366565b82601f106200033557805160ff191683800117855562000366565b8280016001018555821562000366579182015b828111156200036557825182559160200191906001019062000348565b5b50905062000375919062000379565b5090565b5b80821115620003945760008160009055506001016200037a565b5090565b600081519050620003a98162000584565b92915050565b60008060408385031215620003c357600080fd5b6000620003d38582860162000398565b9250506020620003e68582860162000398565b9150509250929050565b6000620003ff60278362000504565b91507f455243373231413a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000467602e8362000504565b91507f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008301527f6e6f6e7a65726f20737570706c790000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620004db81620003f0565b9050919050565b60006020820190508181036000830152620004fd8162000458565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200053857607f821691505b602082108114156200054f576200054e62000555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200058f8162000515565b81146200059b57600080fd5b50565b60805160a0516155e4620005d960003960008181612d4101528181612d6a0152613535015260008181612ac90152612afd01526155e46000f3fe6080604052600436106102675760003560e01c806361f1f87d1161014457806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd146108d8578063d7224ba014610915578063dc33e68114610940578063e985e9c51461097d578063f2fde38b146109ba578063fb41438b146109e357610267565b806395d89b41146108055780639a47415e14610830578063a22cb4651461085b578063afb2b1a914610884578063b88d4fde146108af57610267565b80637b0a6691116101085780637b0a6691146106ee5780637bb2b3c114610719578063823903a9146107355780638462151c146107605780638da5cb5b1461079d5780639231ab2a146107c857610267565b806361f1f87d146106075780636352211e1461063257806370a082311461066f578063715018a6146106ac5780637293773c146106c357610267565b80632f745c59116101dd5780634f6ccce7116101a15780634f6ccce71461050b57806354870bc614610548578063556621cc1461055f57806355f804b31461058a5780635b7a0d88146105b3578063616cdb1e146105de57610267565b80632f745c591461044e578063367480011461048b5780633ccfd60b146104b457806342842e0e146104cb5780634f1aa58f146104f457610267565b8063095ea7b31161022f578063095ea7b31461035657806318160ddd1461037f5780631e8ab346146103aa57806323b872dd146103d35780632ccee9be146103fc5780632d20fb601461042557610267565b8063011239571461026c57806301ffc9a71461029557806306fdde03146102d257806307883703146102fd578063081812fc14610319575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613da8565b610a0c565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613d11565b610a92565b6040516102c99190614bdf565b60405180910390f35b3480156102de57600080fd5b506102e7610bdc565b6040516102f49190614bfa565b60405180910390f35b61031760048036038101906103129190613da8565b610c6e565b005b34801561032557600080fd5b50610340600480360381019061033b9190613da8565b610dc2565b60405161034d9190614b56565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613cd5565b610e47565b005b34801561038b57600080fd5b50610394610f60565b6040516103a19190615037565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613da8565b610f6a565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613bcf565b610ff0565b005b34801561040857600080fd5b50610423600480360381019061041e9190613cd5565b611000565b005b34801561043157600080fd5b5061044c60048036038101906104479190613da8565b6110e1565b005b34801561045a57600080fd5b5061047560048036038101906104709190613cd5565b6111bf565b6040516104829190615037565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613da8565b6113bd565b005b3480156104c057600080fd5b506104c9611443565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190613bcf565b6115c4565b005b34801561050057600080fd5b506105096115e4565b005b34801561051757600080fd5b50610532600480360381019061052d9190613da8565b61168c565b60405161053f9190615037565b60405180910390f35b34801561055457600080fd5b5061055d6116df565b005b34801561056b57600080fd5b50610574611787565b6040516105819190615037565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613d63565b61178d565b005b3480156105bf57600080fd5b506105c861181f565b6040516105d59190615037565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613da8565b611825565b005b34801561061357600080fd5b5061061c6118ab565b6040516106299190615037565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613da8565b6118b1565b6040516106669190614b56565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613b6a565b6118c7565b6040516106a39190615037565b60405180910390f35b3480156106b857600080fd5b506106c16119b0565b005b3480156106cf57600080fd5b506106d8611a38565b6040516106e59190614bdf565b60405180910390f35b3480156106fa57600080fd5b50610703611a4b565b6040516107109190614bdf565b60405180910390f35b610733600480360381019061072e9190613da8565b611a5e565b005b34801561074157600080fd5b5061074a611c47565b6040516107579190615037565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613b6a565b611c4d565b6040516107949190614bbd565b60405180910390f35b3480156107a957600080fd5b506107b2611dc9565b6040516107bf9190614b56565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613da8565b611df2565b6040516107fc919061501c565b60405180910390f35b34801561081157600080fd5b5061081a611e0a565b6040516108279190614bfa565b60405180910390f35b34801561083c57600080fd5b50610845611e9c565b6040516108529190615037565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613c99565b611ea2565b005b34801561089057600080fd5b50610899612023565b6040516108a69190615037565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613c1e565b612029565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613da8565b612085565b60405161090c9190614bfa565b60405180910390f35b34801561092157600080fd5b5061092a61212c565b6040516109379190615037565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613b6a565b612132565b6040516109749190615037565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613b93565b612144565b6040516109b19190614bdf565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613b6a565b6121d8565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613da8565b6122d0565b005b610a14612356565b73ffffffffffffffffffffffffffffffffffffffff16610a32611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90614dfc565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bc557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd55750610bd48261235e565b5b9050919050565b606060028054610beb906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c17906153d9565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b600a60009054906101000a900460ff16610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490614d3c565b60405180910390fd5b600b5481610cc9610f60565b610cd39190615180565b1115610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90614e7c565b60405180910390fd5b600081118015610d2657506010548111155b610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90614c5c565b60405180910390fd5b80600c54610d739190615207565b341015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614e9c565b60405180910390fd5b610dbf33826123c8565b50565b6000610dcd826123e6565b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614fdc565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e52826118b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90614ebc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee2612356565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610f1081610f0b612356565b612144565b5b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614d7c565b60405180910390fd5b610f5b8383836123f4565b505050565b6000600154905090565b610f72612356565b73ffffffffffffffffffffffffffffffffffffffff16610f90611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90614dfc565b60405180910390fd5b80600f8190555050565b610ffb8383836124a6565b505050565b611008612356565b73ffffffffffffffffffffffffffffffffffffffff16611026611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614dfc565b60405180910390fd5b600b5481611088610f60565b6110929190615180565b11156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614e7c565b60405180910390fd5b6110dd82826123c8565b5050565b6110e9612356565b73ffffffffffffffffffffffffffffffffffffffff16611107611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490614dfc565b60405180910390fd5b600260095414156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90614f9c565b60405180910390fd5b60026009819055506111b481612a5f565b600160098190555050565b60006111ca836118c7565b821061120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290614c1c565b60405180910390fd5b6000611215610f60565b905060008060005b8381101561137b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461130f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136757868414156113585781955050505050506113b7565b83806113639061540b565b9450505b5080806113739061540b565b91505061121d565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614f5c565b60405180910390fd5b92915050565b6113c5612356565b73ffffffffffffffffffffffffffffffffffffffff166113e3611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614dfc565b60405180910390fd5b80600c8190555050565b61144b612356565b73ffffffffffffffffffffffffffffffffffffffff16611469611dc9565b73ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b690614dfc565b60405180910390fd5b60026009541415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90614f9c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161153390614b41565b60006040518083038185875af1925050503d8060008114611570576040519150601f19603f3d011682016040523d82523d6000602084013e611575565b606091505b50509050806115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090614edc565b60405180910390fd5b506001600981905550565b6115df83838360405180602001604052806000815250612029565b505050565b6115ec612356565b73ffffffffffffffffffffffffffffffffffffffff1661160a611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614dfc565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b6000611696610f60565b82106116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614cdc565b60405180910390fd5b819050919050565b6116e7612356565b73ffffffffffffffffffffffffffffffffffffffff16611705611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614dfc565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b611795612356565b73ffffffffffffffffffffffffffffffffffffffff166117b3611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614dfc565b60405180910390fd5b81816012919061181a929190613972565b505050565b600b5481565b61182d612356565b73ffffffffffffffffffffffffffffffffffffffff1661184b611dc9565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614dfc565b60405180910390fd5b8060108190555050565b600d5481565b60006118bc82612ced565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614dbc565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119b8612356565b73ffffffffffffffffffffffffffffffffffffffff166119d6611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390614dfc565b60405180910390fd5b611a366000612ef0565b565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b600a60019054906101000a900460ff16611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614d3c565b60405180910390fd5b600081118015611abf5750600f548111155b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614cbc565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b4c9190615180565b1115611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614d5c565b60405180910390fd5b600d5481611b99610f60565b611ba39190615180565b1115611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90614c3c565b60405180910390fd5b611bee33826123c8565b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d9190615180565b9250508190555050565b60105481565b60606000611c5a836118c7565b90506000811415611cdd57600067ffffffffffffffff811115611ca6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611cd45781602001602082028036833780820191505090505b50915050611dc4565b60008167ffffffffffffffff811115611d1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d4d5781602001602082028036833780820191505090505b50905060005b82811015611dbd57611d6585826111bf565b828281518110611d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611db59061540b565b915050611d53565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dfa6139f8565b611e0382612ced565b9050919050565b606060038054611e19906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e45906153d9565b8015611e925780601f10611e6757610100808354040283529160200191611e92565b820191906000526020600020905b815481529060010190602001808311611e7557829003601f168201915b5050505050905090565b600e5481565b611eaa612356565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f90614e3c565b60405180910390fd5b8060076000611f25612356565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fd2612356565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120179190614bdf565b60405180910390a35050565b600f5481565b6120348484846124a6565b61204084848484612fb4565b61207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690614efc565b60405180910390fd5b50505050565b6060612090826123e6565b6120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614e1c565b60405180910390fd5b60006120d961314b565b905060008151116120f95760405180602001604052806000815250612124565b80612103846131dd565b604051602001612114929190614b1d565b6040516020818303038152906040525b915050919050565b60085481565b600061213d8261338a565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121e0612356565b73ffffffffffffffffffffffffffffffffffffffff166121fe611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614dfc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614c7c565b60405180910390fd5b6122cd81612ef0565b50565b6122d8612356565b73ffffffffffffffffffffffffffffffffffffffff166122f6611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614dfc565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123e2828260405180602001604052806000815250613473565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006124b182612ced565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124d8612356565b73ffffffffffffffffffffffffffffffffffffffff16148061253457506124fd612356565b73ffffffffffffffffffffffffffffffffffffffff1661251c84610dc2565b73ffffffffffffffffffffffffffffffffffffffff16145b80612550575061254f826000015161254a612356565b612144565b5b905080612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990614e5c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb90614ddc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90614cfc565b60405180910390fd5b6126818585856001613953565b61269160008484600001516123f4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126ff9190615261565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127a3919061513a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128a99190615180565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129ef5761291f816123e6565b156129ee576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a578686866001613959565b505050505050565b6000600854905060008211612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa090614d9c565b60405180910390fd5b600060018383612ab99190615180565b612ac39190615295565b905060017f0000000000000000000000000000000000000000000000000000000000000000612af29190615295565b811115612b295760017f0000000000000000000000000000000000000000000000000000000000000000612b269190615295565b90505b612b32816123e6565b612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6890614f7c565b60405180910390fd5b60008290505b818111612cd457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cc1576000612bf482612ced565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612ccc9061540b565b915050612b77565b50600181612ce29190615180565b600881905550505050565b612cf56139f8565b612cfe826123e6565b612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490614c9c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612da15760017f000000000000000000000000000000000000000000000000000000000000000084612d949190615295565b612d9e9190615180565b90505b60008390505b818110612eaf576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e9b57809350505050612eeb565b508080612ea7906153af565b915050612da7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee290614fbc565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fd58473ffffffffffffffffffffffffffffffffffffffff1661395f565b1561313e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ffe612356565b8786866040518563ffffffff1660e01b81526004016130209493929190614b71565b602060405180830381600087803b15801561303a57600080fd5b505af192505050801561306b57506040513d601f19601f820116820180604052508101906130689190613d3a565b60015b6130ee573d806000811461309b576040519150601f19603f3d011682016040523d82523d6000602084013e6130a0565b606091505b506000815114156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd90614efc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613143565b600190505b949350505050565b60606012805461315a906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054613186906153d9565b80156131d35780601f106131a8576101008083540402835291602001916131d3565b820191906000526020600020905b8154815290600101906020018083116131b657829003601f168201915b5050505050905090565b60606000821415613225576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613385565b600082905060005b600082146132575780806132409061540b565b915050600a8261325091906151d6565b915061322d565b60008167ffffffffffffffff811115613299577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132cb5781602001600182028036833780820191505090505b5090505b6000851461337e576001826132e49190615295565b9150600a856132f39190615454565b60306132ff9190615180565b60f81b81838151811061333b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337791906151d6565b94506132cf565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f290614d1c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e190614f3c565b60405180910390fd5b6134f3816123e6565b15613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a90614f1c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d90614ffc565b60405180910390fd5b6135a36000858386613953565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136a0919061513a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136c7919061513a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561393657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138d66000888488612fb4565b613915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390c90614efc565b60405180910390fd5b81806139209061540b565b925050808061392e9061540b565b915050613865565b508060018190555061394b6000878588613959565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461397e906153d9565b90600052602060002090601f0160209004810192826139a057600085556139e7565b82601f106139b957803560ff19168380011785556139e7565b828001600101855582156139e7579182015b828111156139e65782358255916020019190600101906139cb565b5b5090506139f49190613a32565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4b576000816000905550600101613a33565b5090565b6000613a62613a5d84615083565b615052565b905082815260208101848484011115613a7a57600080fd5b613a8584828561536d565b509392505050565b600081359050613a9c81615552565b92915050565b600081359050613ab181615569565b92915050565b600081359050613ac681615580565b92915050565b600081519050613adb81615580565b92915050565b600082601f830112613af257600080fd5b8135613b02848260208601613a4f565b91505092915050565b60008083601f840112613b1d57600080fd5b8235905067ffffffffffffffff811115613b3657600080fd5b602083019150836001820283011115613b4e57600080fd5b9250929050565b600081359050613b6481615597565b92915050565b600060208284031215613b7c57600080fd5b6000613b8a84828501613a8d565b91505092915050565b60008060408385031215613ba657600080fd5b6000613bb485828601613a8d565b9250506020613bc585828601613a8d565b9150509250929050565b600080600060608486031215613be457600080fd5b6000613bf286828701613a8d565b9350506020613c0386828701613a8d565b9250506040613c1486828701613b55565b9150509250925092565b60008060008060808587031215613c3457600080fd5b6000613c4287828801613a8d565b9450506020613c5387828801613a8d565b9350506040613c6487828801613b55565b925050606085013567ffffffffffffffff811115613c8157600080fd5b613c8d87828801613ae1565b91505092959194509250565b60008060408385031215613cac57600080fd5b6000613cba85828601613a8d565b9250506020613ccb85828601613aa2565b9150509250929050565b60008060408385031215613ce857600080fd5b6000613cf685828601613a8d565b9250506020613d0785828601613b55565b9150509250929050565b600060208284031215613d2357600080fd5b6000613d3184828501613ab7565b91505092915050565b600060208284031215613d4c57600080fd5b6000613d5a84828501613acc565b91505092915050565b60008060208385031215613d7657600080fd5b600083013567ffffffffffffffff811115613d9057600080fd5b613d9c85828601613b0b565b92509250509250929050565b600060208284031215613dba57600080fd5b6000613dc884828501613b55565b91505092915050565b6000613ddd8383614af0565b60208301905092915050565b613df2816152c9565b82525050565b613e01816152c9565b82525050565b6000613e12826150c3565b613e1c81856150f1565b9350613e27836150b3565b8060005b83811015613e58578151613e3f8882613dd1565b9750613e4a836150e4565b925050600181019050613e2b565b5085935050505092915050565b613e6e816152db565b82525050565b6000613e7f826150ce565b613e898185615102565b9350613e9981856020860161537c565b613ea281615541565b840191505092915050565b6000613eb8826150d9565b613ec2818561511e565b9350613ed281856020860161537c565b613edb81615541565b840191505092915050565b6000613ef1826150d9565b613efb818561512f565b9350613f0b81856020860161537c565b80840191505092915050565b6000613f2460228361511e565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8a60308361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f7246726565000000000000000000000000000000006020830152604082019050919050565b6000613ff060238361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d61784d696e74506560008301527f72547800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061405660268361511e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140bc602a8361511e565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061412260288361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d617846726565436c60008301527f61696d50657254780000000000000000000000000000000000000000000000006020830152604082019050919050565b600061418860238361511e565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141ee60258361511e565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061425460318361511e565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b60006142ba60138361511e565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006142fa60398361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f724672656550657277616c6c6574000000000000006020830152604082019050919050565b600061436060398361511e565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006143c660188361511e565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b6000614406602b8361511e565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061446c60268361511e565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144d260208361511e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614512602f8361511e565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614578601a8361511e565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006145b860328361511e565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061461e602a8361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e20546f74616c436f6c6c60008301527f656374696f6e53697a65000000000000000000000000000000000000000000006020830152604082019050919050565b600061468460148361511e565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b60006146c460228361511e565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061472a600083615113565b9150600082019050919050565b600061474460108361511e565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b600061478460338361511e565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006147ea601d8361511e565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061482a60218361511e565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614890602e8361511e565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006148f660268361511e565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061495c601f8361511e565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061499c602f8361511e565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614a02602d8361511e565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614a6860228361511e565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151614ad76000850182613de9565b506020820151614aea6020850182614b0e565b50505050565b614af98161534f565b82525050565b614b088161534f565b82525050565b614b1781615359565b82525050565b6000614b298285613ee6565b9150614b358284613ee6565b91508190509392505050565b6000614b4c8261471d565b9150819050919050565b6000602082019050614b6b6000830184613df8565b92915050565b6000608082019050614b866000830187613df8565b614b936020830186613df8565b614ba06040830185614aff565b8181036060830152614bb28184613e74565b905095945050505050565b60006020820190508181036000830152614bd78184613e07565b905092915050565b6000602082019050614bf46000830184613e65565b92915050565b60006020820190508181036000830152614c148184613ead565b905092915050565b60006020820190508181036000830152614c3581613f17565b9050919050565b60006020820190508181036000830152614c5581613f7d565b9050919050565b60006020820190508181036000830152614c7581613fe3565b9050919050565b60006020820190508181036000830152614c9581614049565b9050919050565b60006020820190508181036000830152614cb5816140af565b9050919050565b60006020820190508181036000830152614cd581614115565b9050919050565b60006020820190508181036000830152614cf58161417b565b9050919050565b60006020820190508181036000830152614d15816141e1565b9050919050565b60006020820190508181036000830152614d3581614247565b9050919050565b60006020820190508181036000830152614d55816142ad565b9050919050565b60006020820190508181036000830152614d75816142ed565b9050919050565b60006020820190508181036000830152614d9581614353565b9050919050565b60006020820190508181036000830152614db5816143b9565b9050919050565b60006020820190508181036000830152614dd5816143f9565b9050919050565b60006020820190508181036000830152614df58161445f565b9050919050565b60006020820190508181036000830152614e15816144c5565b9050919050565b60006020820190508181036000830152614e3581614505565b9050919050565b60006020820190508181036000830152614e558161456b565b9050919050565b60006020820190508181036000830152614e75816145ab565b9050919050565b60006020820190508181036000830152614e9581614611565b9050919050565b60006020820190508181036000830152614eb581614677565b9050919050565b60006020820190508181036000830152614ed5816146b7565b9050919050565b60006020820190508181036000830152614ef581614737565b9050919050565b60006020820190508181036000830152614f1581614777565b9050919050565b60006020820190508181036000830152614f35816147dd565b9050919050565b60006020820190508181036000830152614f558161481d565b9050919050565b60006020820190508181036000830152614f7581614883565b9050919050565b60006020820190508181036000830152614f95816148e9565b9050919050565b60006020820190508181036000830152614fb58161494f565b9050919050565b60006020820190508181036000830152614fd58161498f565b9050919050565b60006020820190508181036000830152614ff5816149f5565b9050919050565b6000602082019050818103600083015261501581614a5b565b9050919050565b60006040820190506150316000830184614ac1565b92915050565b600060208201905061504c6000830184614aff565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561507957615078615512565b5b8060405250919050565b600067ffffffffffffffff82111561509e5761509d615512565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061514582615313565b915061515083615313565b9250826fffffffffffffffffffffffffffffffff0382111561517557615174615485565b5b828201905092915050565b600061518b8261534f565b91506151968361534f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151cb576151ca615485565b5b828201905092915050565b60006151e18261534f565b91506151ec8361534f565b9250826151fc576151fb6154b4565b5b828204905092915050565b60006152128261534f565b915061521d8361534f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561525657615255615485565b5b828202905092915050565b600061526c82615313565b915061527783615313565b92508282101561528a57615289615485565b5b828203905092915050565b60006152a08261534f565b91506152ab8361534f565b9250828210156152be576152bd615485565b5b828203905092915050565b60006152d48261532f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561539a57808201518184015260208101905061537f565b838111156153a9576000848401525b50505050565b60006153ba8261534f565b915060008214156153ce576153cd615485565b5b600182039050919050565b600060028204905060018216806153f157607f821691505b60208210811415615405576154046154e3565b5b50919050565b60006154168261534f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561544957615448615485565b5b600182019050919050565b600061545f8261534f565b915061546a8361534f565b92508261547a576154796154b4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61555b816152c9565b811461556657600080fd5b50565b615572816152db565b811461557d57600080fd5b50565b615589816152e7565b811461559457600080fd5b50565b6155a08161534f565b81146155ab57600080fd5b5056fea26469706673582212205356ec8507931f6812fe52def42b3a9b7d3c840f96cf69970bd7fa0e32f5070764736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000001a0a
Deployed Bytecode
0x6080604052600436106102675760003560e01c806361f1f87d1161014457806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd146108d8578063d7224ba014610915578063dc33e68114610940578063e985e9c51461097d578063f2fde38b146109ba578063fb41438b146109e357610267565b806395d89b41146108055780639a47415e14610830578063a22cb4651461085b578063afb2b1a914610884578063b88d4fde146108af57610267565b80637b0a6691116101085780637b0a6691146106ee5780637bb2b3c114610719578063823903a9146107355780638462151c146107605780638da5cb5b1461079d5780639231ab2a146107c857610267565b806361f1f87d146106075780636352211e1461063257806370a082311461066f578063715018a6146106ac5780637293773c146106c357610267565b80632f745c59116101dd5780634f6ccce7116101a15780634f6ccce71461050b57806354870bc614610548578063556621cc1461055f57806355f804b31461058a5780635b7a0d88146105b3578063616cdb1e146105de57610267565b80632f745c591461044e578063367480011461048b5780633ccfd60b146104b457806342842e0e146104cb5780634f1aa58f146104f457610267565b8063095ea7b31161022f578063095ea7b31461035657806318160ddd1461037f5780631e8ab346146103aa57806323b872dd146103d35780632ccee9be146103fc5780632d20fb601461042557610267565b8063011239571461026c57806301ffc9a71461029557806306fdde03146102d257806307883703146102fd578063081812fc14610319575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613da8565b610a0c565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613d11565b610a92565b6040516102c99190614bdf565b60405180910390f35b3480156102de57600080fd5b506102e7610bdc565b6040516102f49190614bfa565b60405180910390f35b61031760048036038101906103129190613da8565b610c6e565b005b34801561032557600080fd5b50610340600480360381019061033b9190613da8565b610dc2565b60405161034d9190614b56565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613cd5565b610e47565b005b34801561038b57600080fd5b50610394610f60565b6040516103a19190615037565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613da8565b610f6a565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613bcf565b610ff0565b005b34801561040857600080fd5b50610423600480360381019061041e9190613cd5565b611000565b005b34801561043157600080fd5b5061044c60048036038101906104479190613da8565b6110e1565b005b34801561045a57600080fd5b5061047560048036038101906104709190613cd5565b6111bf565b6040516104829190615037565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613da8565b6113bd565b005b3480156104c057600080fd5b506104c9611443565b005b3480156104d757600080fd5b506104f260048036038101906104ed9190613bcf565b6115c4565b005b34801561050057600080fd5b506105096115e4565b005b34801561051757600080fd5b50610532600480360381019061052d9190613da8565b61168c565b60405161053f9190615037565b60405180910390f35b34801561055457600080fd5b5061055d6116df565b005b34801561056b57600080fd5b50610574611787565b6040516105819190615037565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613d63565b61178d565b005b3480156105bf57600080fd5b506105c861181f565b6040516105d59190615037565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613da8565b611825565b005b34801561061357600080fd5b5061061c6118ab565b6040516106299190615037565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613da8565b6118b1565b6040516106669190614b56565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613b6a565b6118c7565b6040516106a39190615037565b60405180910390f35b3480156106b857600080fd5b506106c16119b0565b005b3480156106cf57600080fd5b506106d8611a38565b6040516106e59190614bdf565b60405180910390f35b3480156106fa57600080fd5b50610703611a4b565b6040516107109190614bdf565b60405180910390f35b610733600480360381019061072e9190613da8565b611a5e565b005b34801561074157600080fd5b5061074a611c47565b6040516107579190615037565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613b6a565b611c4d565b6040516107949190614bbd565b60405180910390f35b3480156107a957600080fd5b506107b2611dc9565b6040516107bf9190614b56565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613da8565b611df2565b6040516107fc919061501c565b60405180910390f35b34801561081157600080fd5b5061081a611e0a565b6040516108279190614bfa565b60405180910390f35b34801561083c57600080fd5b50610845611e9c565b6040516108529190615037565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613c99565b611ea2565b005b34801561089057600080fd5b50610899612023565b6040516108a69190615037565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613c1e565b612029565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613da8565b612085565b60405161090c9190614bfa565b60405180910390f35b34801561092157600080fd5b5061092a61212c565b6040516109379190615037565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613b6a565b612132565b6040516109749190615037565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613b93565b612144565b6040516109b19190614bdf565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613b6a565b6121d8565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613da8565b6122d0565b005b610a14612356565b73ffffffffffffffffffffffffffffffffffffffff16610a32611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90614dfc565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bc557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd55750610bd48261235e565b5b9050919050565b606060028054610beb906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c17906153d9565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b600a60009054906101000a900460ff16610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490614d3c565b60405180910390fd5b600b5481610cc9610f60565b610cd39190615180565b1115610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90614e7c565b60405180910390fd5b600081118015610d2657506010548111155b610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90614c5c565b60405180910390fd5b80600c54610d739190615207565b341015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614e9c565b60405180910390fd5b610dbf33826123c8565b50565b6000610dcd826123e6565b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614fdc565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e52826118b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90614ebc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee2612356565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610f1081610f0b612356565b612144565b5b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614d7c565b60405180910390fd5b610f5b8383836123f4565b505050565b6000600154905090565b610f72612356565b73ffffffffffffffffffffffffffffffffffffffff16610f90611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90614dfc565b60405180910390fd5b80600f8190555050565b610ffb8383836124a6565b505050565b611008612356565b73ffffffffffffffffffffffffffffffffffffffff16611026611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614dfc565b60405180910390fd5b600b5481611088610f60565b6110929190615180565b11156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614e7c565b60405180910390fd5b6110dd82826123c8565b5050565b6110e9612356565b73ffffffffffffffffffffffffffffffffffffffff16611107611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490614dfc565b60405180910390fd5b600260095414156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90614f9c565b60405180910390fd5b60026009819055506111b481612a5f565b600160098190555050565b60006111ca836118c7565b821061120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290614c1c565b60405180910390fd5b6000611215610f60565b905060008060005b8381101561137b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461130f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136757868414156113585781955050505050506113b7565b83806113639061540b565b9450505b5080806113739061540b565b91505061121d565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614f5c565b60405180910390fd5b92915050565b6113c5612356565b73ffffffffffffffffffffffffffffffffffffffff166113e3611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614dfc565b60405180910390fd5b80600c8190555050565b61144b612356565b73ffffffffffffffffffffffffffffffffffffffff16611469611dc9565b73ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b690614dfc565b60405180910390fd5b60026009541415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90614f9c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161153390614b41565b60006040518083038185875af1925050503d8060008114611570576040519150601f19603f3d011682016040523d82523d6000602084013e611575565b606091505b50509050806115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090614edc565b60405180910390fd5b506001600981905550565b6115df83838360405180602001604052806000815250612029565b505050565b6115ec612356565b73ffffffffffffffffffffffffffffffffffffffff1661160a611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614dfc565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b6000611696610f60565b82106116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614cdc565b60405180910390fd5b819050919050565b6116e7612356565b73ffffffffffffffffffffffffffffffffffffffff16611705611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614dfc565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b611795612356565b73ffffffffffffffffffffffffffffffffffffffff166117b3611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614dfc565b60405180910390fd5b81816012919061181a929190613972565b505050565b600b5481565b61182d612356565b73ffffffffffffffffffffffffffffffffffffffff1661184b611dc9565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614dfc565b60405180910390fd5b8060108190555050565b600d5481565b60006118bc82612ced565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614dbc565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119b8612356565b73ffffffffffffffffffffffffffffffffffffffff166119d6611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390614dfc565b60405180910390fd5b611a366000612ef0565b565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b600a60019054906101000a900460ff16611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614d3c565b60405180910390fd5b600081118015611abf5750600f548111155b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614cbc565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b4c9190615180565b1115611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614d5c565b60405180910390fd5b600d5481611b99610f60565b611ba39190615180565b1115611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90614c3c565b60405180910390fd5b611bee33826123c8565b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d9190615180565b9250508190555050565b60105481565b60606000611c5a836118c7565b90506000811415611cdd57600067ffffffffffffffff811115611ca6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611cd45781602001602082028036833780820191505090505b50915050611dc4565b60008167ffffffffffffffff811115611d1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d4d5781602001602082028036833780820191505090505b50905060005b82811015611dbd57611d6585826111bf565b828281518110611d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611db59061540b565b915050611d53565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dfa6139f8565b611e0382612ced565b9050919050565b606060038054611e19906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e45906153d9565b8015611e925780601f10611e6757610100808354040283529160200191611e92565b820191906000526020600020905b815481529060010190602001808311611e7557829003601f168201915b5050505050905090565b600e5481565b611eaa612356565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f90614e3c565b60405180910390fd5b8060076000611f25612356565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fd2612356565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120179190614bdf565b60405180910390a35050565b600f5481565b6120348484846124a6565b61204084848484612fb4565b61207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690614efc565b60405180910390fd5b50505050565b6060612090826123e6565b6120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614e1c565b60405180910390fd5b60006120d961314b565b905060008151116120f95760405180602001604052806000815250612124565b80612103846131dd565b604051602001612114929190614b1d565b6040516020818303038152906040525b915050919050565b60085481565b600061213d8261338a565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121e0612356565b73ffffffffffffffffffffffffffffffffffffffff166121fe611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614dfc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614c7c565b60405180910390fd5b6122cd81612ef0565b50565b6122d8612356565b73ffffffffffffffffffffffffffffffffffffffff166122f6611dc9565b73ffffffffffffffffffffffffffffffffffffffff161461234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614dfc565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123e2828260405180602001604052806000815250613473565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006124b182612ced565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124d8612356565b73ffffffffffffffffffffffffffffffffffffffff16148061253457506124fd612356565b73ffffffffffffffffffffffffffffffffffffffff1661251c84610dc2565b73ffffffffffffffffffffffffffffffffffffffff16145b80612550575061254f826000015161254a612356565b612144565b5b905080612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990614e5c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb90614ddc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90614cfc565b60405180910390fd5b6126818585856001613953565b61269160008484600001516123f4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126ff9190615261565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127a3919061513a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128a99190615180565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129ef5761291f816123e6565b156129ee576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a578686866001613959565b505050505050565b6000600854905060008211612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa090614d9c565b60405180910390fd5b600060018383612ab99190615180565b612ac39190615295565b905060017f0000000000000000000000000000000000000000000000000000000000001a0a612af29190615295565b811115612b295760017f0000000000000000000000000000000000000000000000000000000000001a0a612b269190615295565b90505b612b32816123e6565b612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6890614f7c565b60405180910390fd5b60008290505b818111612cd457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cc1576000612bf482612ced565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612ccc9061540b565b915050612b77565b50600181612ce29190615180565b600881905550505050565b612cf56139f8565b612cfe826123e6565b612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490614c9c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612da15760017f000000000000000000000000000000000000000000000000000000000000001484612d949190615295565b612d9e9190615180565b90505b60008390505b818110612eaf576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e9b57809350505050612eeb565b508080612ea7906153af565b915050612da7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee290614fbc565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fd58473ffffffffffffffffffffffffffffffffffffffff1661395f565b1561313e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ffe612356565b8786866040518563ffffffff1660e01b81526004016130209493929190614b71565b602060405180830381600087803b15801561303a57600080fd5b505af192505050801561306b57506040513d601f19601f820116820180604052508101906130689190613d3a565b60015b6130ee573d806000811461309b576040519150601f19603f3d011682016040523d82523d6000602084013e6130a0565b606091505b506000815114156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd90614efc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613143565b600190505b949350505050565b60606012805461315a906153d9565b80601f0160208091040260200160405190810160405280929190818152602001828054613186906153d9565b80156131d35780601f106131a8576101008083540402835291602001916131d3565b820191906000526020600020905b8154815290600101906020018083116131b657829003601f168201915b5050505050905090565b60606000821415613225576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613385565b600082905060005b600082146132575780806132409061540b565b915050600a8261325091906151d6565b915061322d565b60008167ffffffffffffffff811115613299577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132cb5781602001600182028036833780820191505090505b5090505b6000851461337e576001826132e49190615295565b9150600a856132f39190615454565b60306132ff9190615180565b60f81b81838151811061333b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337791906151d6565b94506132cf565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f290614d1c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e190614f3c565b60405180910390fd5b6134f3816123e6565b15613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a90614f1c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d90614ffc565b60405180910390fd5b6135a36000858386613953565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136a0919061513a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136c7919061513a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561393657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138d66000888488612fb4565b613915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390c90614efc565b60405180910390fd5b81806139209061540b565b925050808061392e9061540b565b915050613865565b508060018190555061394b6000878588613959565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461397e906153d9565b90600052602060002090601f0160209004810192826139a057600085556139e7565b82601f106139b957803560ff19168380011785556139e7565b828001600101855582156139e7579182015b828111156139e65782358255916020019190600101906139cb565b5b5090506139f49190613a32565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4b576000816000905550600101613a33565b5090565b6000613a62613a5d84615083565b615052565b905082815260208101848484011115613a7a57600080fd5b613a8584828561536d565b509392505050565b600081359050613a9c81615552565b92915050565b600081359050613ab181615569565b92915050565b600081359050613ac681615580565b92915050565b600081519050613adb81615580565b92915050565b600082601f830112613af257600080fd5b8135613b02848260208601613a4f565b91505092915050565b60008083601f840112613b1d57600080fd5b8235905067ffffffffffffffff811115613b3657600080fd5b602083019150836001820283011115613b4e57600080fd5b9250929050565b600081359050613b6481615597565b92915050565b600060208284031215613b7c57600080fd5b6000613b8a84828501613a8d565b91505092915050565b60008060408385031215613ba657600080fd5b6000613bb485828601613a8d565b9250506020613bc585828601613a8d565b9150509250929050565b600080600060608486031215613be457600080fd5b6000613bf286828701613a8d565b9350506020613c0386828701613a8d565b9250506040613c1486828701613b55565b9150509250925092565b60008060008060808587031215613c3457600080fd5b6000613c4287828801613a8d565b9450506020613c5387828801613a8d565b9350506040613c6487828801613b55565b925050606085013567ffffffffffffffff811115613c8157600080fd5b613c8d87828801613ae1565b91505092959194509250565b60008060408385031215613cac57600080fd5b6000613cba85828601613a8d565b9250506020613ccb85828601613aa2565b9150509250929050565b60008060408385031215613ce857600080fd5b6000613cf685828601613a8d565b9250506020613d0785828601613b55565b9150509250929050565b600060208284031215613d2357600080fd5b6000613d3184828501613ab7565b91505092915050565b600060208284031215613d4c57600080fd5b6000613d5a84828501613acc565b91505092915050565b60008060208385031215613d7657600080fd5b600083013567ffffffffffffffff811115613d9057600080fd5b613d9c85828601613b0b565b92509250509250929050565b600060208284031215613dba57600080fd5b6000613dc884828501613b55565b91505092915050565b6000613ddd8383614af0565b60208301905092915050565b613df2816152c9565b82525050565b613e01816152c9565b82525050565b6000613e12826150c3565b613e1c81856150f1565b9350613e27836150b3565b8060005b83811015613e58578151613e3f8882613dd1565b9750613e4a836150e4565b925050600181019050613e2b565b5085935050505092915050565b613e6e816152db565b82525050565b6000613e7f826150ce565b613e898185615102565b9350613e9981856020860161537c565b613ea281615541565b840191505092915050565b6000613eb8826150d9565b613ec2818561511e565b9350613ed281856020860161537c565b613edb81615541565b840191505092915050565b6000613ef1826150d9565b613efb818561512f565b9350613f0b81856020860161537c565b80840191505092915050565b6000613f2460228361511e565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8a60308361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f7246726565000000000000000000000000000000006020830152604082019050919050565b6000613ff060238361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d61784d696e74506560008301527f72547800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061405660268361511e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140bc602a8361511e565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061412260288361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d617846726565436c60008301527f61696d50657254780000000000000000000000000000000000000000000000006020830152604082019050919050565b600061418860238361511e565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141ee60258361511e565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061425460318361511e565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b60006142ba60138361511e565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006142fa60398361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f724672656550657277616c6c6574000000000000006020830152604082019050919050565b600061436060398361511e565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006143c660188361511e565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b6000614406602b8361511e565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061446c60268361511e565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144d260208361511e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614512602f8361511e565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614578601a8361511e565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006145b860328361511e565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061461e602a8361511e565b91507f43616e206e6f74206d696e74206d6f7265207468616e20546f74616c436f6c6c60008301527f656374696f6e53697a65000000000000000000000000000000000000000000006020830152604082019050919050565b600061468460148361511e565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b60006146c460228361511e565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061472a600083615113565b9150600082019050919050565b600061474460108361511e565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b600061478460338361511e565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006147ea601d8361511e565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061482a60218361511e565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614890602e8361511e565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006148f660268361511e565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061495c601f8361511e565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061499c602f8361511e565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614a02602d8361511e565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614a6860228361511e565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151614ad76000850182613de9565b506020820151614aea6020850182614b0e565b50505050565b614af98161534f565b82525050565b614b088161534f565b82525050565b614b1781615359565b82525050565b6000614b298285613ee6565b9150614b358284613ee6565b91508190509392505050565b6000614b4c8261471d565b9150819050919050565b6000602082019050614b6b6000830184613df8565b92915050565b6000608082019050614b866000830187613df8565b614b936020830186613df8565b614ba06040830185614aff565b8181036060830152614bb28184613e74565b905095945050505050565b60006020820190508181036000830152614bd78184613e07565b905092915050565b6000602082019050614bf46000830184613e65565b92915050565b60006020820190508181036000830152614c148184613ead565b905092915050565b60006020820190508181036000830152614c3581613f17565b9050919050565b60006020820190508181036000830152614c5581613f7d565b9050919050565b60006020820190508181036000830152614c7581613fe3565b9050919050565b60006020820190508181036000830152614c9581614049565b9050919050565b60006020820190508181036000830152614cb5816140af565b9050919050565b60006020820190508181036000830152614cd581614115565b9050919050565b60006020820190508181036000830152614cf58161417b565b9050919050565b60006020820190508181036000830152614d15816141e1565b9050919050565b60006020820190508181036000830152614d3581614247565b9050919050565b60006020820190508181036000830152614d55816142ad565b9050919050565b60006020820190508181036000830152614d75816142ed565b9050919050565b60006020820190508181036000830152614d9581614353565b9050919050565b60006020820190508181036000830152614db5816143b9565b9050919050565b60006020820190508181036000830152614dd5816143f9565b9050919050565b60006020820190508181036000830152614df58161445f565b9050919050565b60006020820190508181036000830152614e15816144c5565b9050919050565b60006020820190508181036000830152614e3581614505565b9050919050565b60006020820190508181036000830152614e558161456b565b9050919050565b60006020820190508181036000830152614e75816145ab565b9050919050565b60006020820190508181036000830152614e9581614611565b9050919050565b60006020820190508181036000830152614eb581614677565b9050919050565b60006020820190508181036000830152614ed5816146b7565b9050919050565b60006020820190508181036000830152614ef581614737565b9050919050565b60006020820190508181036000830152614f1581614777565b9050919050565b60006020820190508181036000830152614f35816147dd565b9050919050565b60006020820190508181036000830152614f558161481d565b9050919050565b60006020820190508181036000830152614f7581614883565b9050919050565b60006020820190508181036000830152614f95816148e9565b9050919050565b60006020820190508181036000830152614fb58161494f565b9050919050565b60006020820190508181036000830152614fd58161498f565b9050919050565b60006020820190508181036000830152614ff5816149f5565b9050919050565b6000602082019050818103600083015261501581614a5b565b9050919050565b60006040820190506150316000830184614ac1565b92915050565b600060208201905061504c6000830184614aff565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561507957615078615512565b5b8060405250919050565b600067ffffffffffffffff82111561509e5761509d615512565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061514582615313565b915061515083615313565b9250826fffffffffffffffffffffffffffffffff0382111561517557615174615485565b5b828201905092915050565b600061518b8261534f565b91506151968361534f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151cb576151ca615485565b5b828201905092915050565b60006151e18261534f565b91506151ec8361534f565b9250826151fc576151fb6154b4565b5b828204905092915050565b60006152128261534f565b915061521d8361534f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561525657615255615485565b5b828202905092915050565b600061526c82615313565b915061527783615313565b92508282101561528a57615289615485565b5b828203905092915050565b60006152a08261534f565b91506152ab8361534f565b9250828210156152be576152bd615485565b5b828203905092915050565b60006152d48261532f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561539a57808201518184015260208101905061537f565b838111156153a9576000848401525b50505050565b60006153ba8261534f565b915060008214156153ce576153cd615485565b5b600182039050919050565b600060028204905060018216806153f157607f821691505b60208210811415615405576154046154e3565b5b50919050565b60006154168261534f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561544957615448615485565b5b600182019050919050565b600061545f8261534f565b915061546a8361534f565b92508261547a576154796154b4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61555b816152c9565b811461556657600080fd5b50565b615572816152db565b811461557d57600080fd5b50565b615589816152e7565b811461559457600080fd5b50565b6155a08161534f565b81146155ab57600080fd5b5056fea26469706673582212205356ec8507931f6812fe52def42b3a9b7d3c840f96cf69970bd7fa0e32f5070764736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000001a0a
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : TotalToken_ (uint256): 6666
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001a0a
Deployed Bytecode Sourcemap
40857:4299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43514:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21930:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42589:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24953:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43035:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25803:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41756:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43870:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21122:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43407:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44974:176;;;;;;;;;;;;;:::i;:::-;;26016:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43776:88;;;;;;;;;;;;;:::i;:::-;;20658:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43687:83;;;;;;;;;;;;;:::i;:::-;;41042:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44142:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41002:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43172:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41074:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38235:94;;;;;;;;;;;;;:::i;:::-;;40966:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40931:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41991:592;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41219:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44511:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37584:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44358:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41121:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41179:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26236:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30659:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43994:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38484:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43286:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43514:157;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43639:26:::1;43611:25;:54;;;;43514:157:::0;:::o;21930:370::-;22057:4;22102:25;22087:40;;;:11;:40;;;;:99;;;;22153:33;22138:48;;;:11;:48;;;;22087:99;:160;;;;22212:35;22197:50;;;:11;:50;;;;22087:160;:207;;;;22258:36;22282:11;22258:23;:36::i;:::-;22087:207;22073:221;;21930:370;;;:::o;23656:94::-;23710:13;23739:5;23732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23656:94;:::o;42589:437::-;42655:12;;;;;;;;;;;42647:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;42736:19;;42722:10;42706:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;42698:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;42834:1;42821:10;:14;:44;;;;;42853:12;;42839:10;:26;;42821:44;42813:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;42943:10;42933:9;;:20;;;;:::i;:::-;42920:9;:33;;42912:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42987:33;42997:10;43009;42987:9;:33::i;:::-;42589:437;:::o;24953:204::-;25021:7;25045:16;25053:7;25045;:16::i;:::-;25037:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25127:15;:24;25143:7;25127:24;;;;;;;;;;;;;;;;;;;;;25120:31;;24953:204;;;:::o;24516:379::-;24585:13;24601:24;24617:7;24601:15;:24::i;:::-;24585:40;;24646:5;24640:11;;:2;:11;;;;24632:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:5;24715:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24740:37;24757:5;24764:12;:10;:12::i;:::-;24740:16;:37::i;:::-;24715:62;24699:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;24861:28;24870:2;24874:7;24883:5;24861:8;:28::i;:::-;24516:379;;;:::o;20495:94::-;20548:7;20571:12;;20564:19;;20495:94;:::o;43035:128::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43139:18:::1;43119:17;:38;;;;43035:128:::0;:::o;25803:150::-;25919:28;25929:4;25935:2;25939:7;25919:9;:28::i;:::-;25803:150;;;:::o;41756:229::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41876:19:::1;;41862:10;41846:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;41838:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;41951:26;41961:3;41966:10;41951:9;:26::i;:::-;41756:229:::0;;:::o;43870:118::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;43954:28:::2;43973:8;43954:18;:28::i;:::-;35652:1:::1;36604:7;:22;;;;43870:118:::0;:::o;21122:744::-;21231:7;21266:16;21276:5;21266:9;:16::i;:::-;21258:5;:24;21250:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21328:22;21353:13;:11;:13::i;:::-;21328:38;;21373:19;21403:25;21453:9;21448:350;21472:14;21468:1;:18;21448:350;;;21502:31;21536:11;:14;21548:1;21536:14;;;;;;;;;;;21502:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21589:1;21563:28;;:9;:14;;;:28;;;21559:89;;21624:9;:14;;;21604:34;;21559:89;21681:5;21660:26;;:17;:26;;;21656:135;;;21718:5;21703:11;:20;21699:59;;;21745:1;21738:8;;;;;;;;;21699:59;21768:13;;;;;:::i;:::-;;;;21656:135;21448:350;21488:3;;;;;:::i;:::-;;;;21448:350;;;;21804:56;;;;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;:::o;43407:93::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43484:10:::1;43472:9;:22;;;;43407:93:::0;:::o;44974:176::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;45034:12:::2;45052:10;:15;;45075:21;45052:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45033:68;;;45116:7;45108:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36456:1;35652::::1;36604:7;:22;;;;44974:176::o:0;26016:157::-;26128:39;26145:4;26151:2;26155:7;26128:39;;;;;;;;;;;;:16;:39::i;:::-;26016:157;;;:::o;43776:88::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43845:13:::1;;;;;;;;;;;43844:14;43828:13;;:30;;;;;;;;;;;;;;;;;;43776:88::o:0;20658:177::-;20725:7;20757:13;:11;:13::i;:::-;20749:5;:21;20741:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20824:5;20817:12;;20658:177;;;:::o;43687:83::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43752:12:::1;;;;;;;;;;;43751:13;43736:12;;:28;;;;;;;;;;;;;;;;;;43687:83::o:0;41042:25::-;;;;:::o;44142:98::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44227:7:::1;;44213:11;:21;;;;;;;:::i;:::-;;44142:98:::0;;:::o;41002:35::-;;;;:::o;43172:105::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43258:13:::1;43243:12;:28;;;;43172:105:::0;:::o;41074:41::-;;;;:::o;23479:118::-;23543:7;23566:20;23578:7;23566:11;:20::i;:::-;:25;;;23559:32;;23479:118;;;:::o;22356:211::-;22420:7;22461:1;22444:19;;:5;:19;;;;22436:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22533:12;:19;22546:5;22533:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22525:36;;22518:43;;22356:211;;;:::o;38235:94::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38300:21:::1;38318:1;38300:9;:21::i;:::-;38235:94::o:0;40966:29::-;;;;;;;;;;;;;:::o;40931:28::-;;;;;;;;;;;;;:::o;41991:592::-;42058:13;;;;;;;;;;;42050:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42123:1;42110:10;:14;:49;;;;;42142:17;;42128:10;:31;;42110:49;42102:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;42264:34;;42250:10;42221:14;:26;42236:10;42221:26;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:77;;42213:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;42410:25;;42396:10;42380:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:55;;42372:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;42497:33;42507:10;42519;42497:9;:33::i;:::-;42567:10;42537:14;:26;42552:10;42537:26;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;41991:592;:::o;41219:28::-;;;;:::o;44511:456::-;44572:16;44598:18;44619:17;44629:6;44619:9;:17::i;:::-;44598:38;;44661:1;44647:10;:15;44643:319;;;44696:1;44682:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44675:23;;;;;44643:319;44723:23;44763:10;44749:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44723:51;;44785:13;44809:122;44833:10;44825:5;:18;44809:122;;;44885:34;44905:6;44913:5;44885:19;:34::i;:::-;44869:6;44876:5;44869:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;44845:7;;;;;:::i;:::-;;;;44809:122;;;44948:6;44941:13;;;;;44511:456;;;;:::o;37584:87::-;37630:7;37657:6;;;;;;;;;;;37650:13;;37584:87;:::o;44358:147::-;44439:21;;:::i;:::-;44479:20;44491:7;44479:11;:20::i;:::-;44472:27;;44358:147;;;:::o;23811:98::-;23867:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:98;:::o;41121:50::-;;;;:::o;25221:274::-;25324:12;:10;:12::i;:::-;25312:24;;:8;:24;;;;25304:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25421:8;25376:18;:32;25395:12;:10;:12::i;:::-;25376:32;;;;;;;;;;;;;;;:42;25409:8;25376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25470:8;25441:48;;25456:12;:10;:12::i;:::-;25441:48;;;25480:8;25441:48;;;;;;:::i;:::-;;;;;;;;25221:274;;:::o;41179:33::-;;;;:::o;26236:319::-;26381:28;26391:4;26397:2;26401:7;26381:9;:28::i;:::-;26432:48;26455:4;26461:2;26465:7;26474:5;26432:22;:48::i;:::-;26416:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;26236:319;;;;:::o;23972:394::-;24070:13;24111:16;24119:7;24111;:16::i;:::-;24095:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:21;24225:10;:8;:10::i;:::-;24201:34;;24280:1;24262:7;24256:21;:25;:104;;;;;;;;;;;;;;;;;24317:7;24326:18;:7;:16;:18::i;:::-;24300:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24256:104;24242:118;;;23972:394;;;:::o;30659:43::-;;;;:::o;43994:107::-;44052:7;44075:20;44089:5;44075:13;:20::i;:::-;44068:27;;43994:107;;;:::o;25558:186::-;25680:4;25703:18;:25;25722:5;25703:25;;;;;;;;;;;;;;;:35;25729:8;25703:35;;;;;;;;;;;;;;;;;;;;;;;;;25696:42;;25558:186;;;;:::o;38484:192::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:1:::1;38573:22;;:8;:22;;;;38565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38649:19;38659:8;38649:9;:19::i;:::-;38484:192:::0;:::o;43286:115::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43384:11:::1;43362:19;:33;;;;43286:115:::0;:::o;14481:98::-;14534:7;14561:10;14554:17;;14481:98;:::o;306:157::-;391:4;430:25;415:40;;;:11;:40;;;;408:47;;306:157;;;:::o;26905:98::-;26970:27;26980:2;26984:8;26970:27;;;;;;;;;;;;:9;:27::i;:::-;26905:98;;:::o;26794:105::-;26851:4;26881:12;;26871:7;:22;26864:29;;26794:105;;;:::o;30481:172::-;30605:2;30578:15;:24;30594:7;30578:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30639:7;30635:2;30619:28;;30628:5;30619:28;;;;;;;;;;;;30481:172;;;:::o;28846:1529::-;28943:35;28981:20;28993:7;28981:11;:20::i;:::-;28943:58;;29010:22;29052:13;:18;;;29036:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;29105:12;:10;:12::i;:::-;29081:36;;:20;29093:7;29081:11;:20::i;:::-;:36;;;29036:81;:142;;;;29128:50;29145:13;:18;;;29165:12;:10;:12::i;:::-;29128:16;:50::i;:::-;29036:142;29010:169;;29204:17;29188:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29336:4;29314:26;;:13;:18;;;:26;;;29298:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29425:1;29411:16;;:2;:16;;;;29403:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:43;29500:4;29506:2;29510:7;29519:1;29478:21;:43::i;:::-;29578:49;29595:1;29599:7;29608:13;:18;;;29578:8;:49::i;:::-;29666:1;29636:12;:18;29649:4;29636:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29702:1;29674:12;:16;29687:2;29674:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29733:43;;;;;;;;29748:2;29733:43;;;;;;29759:15;29733:43;;;;;29710:11;:20;29722:7;29710:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:19;30036:1;30026:7;:11;;;;:::i;:::-;30004:33;;30089:1;30048:43;;:11;:24;30060:11;30048:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30044:236;;;30106:20;30114:11;30106:7;:20::i;:::-;30102:171;;;30166:97;;;;;;;;30193:13;:18;;;30166:97;;;;;;30224:13;:28;;;30166:97;;;;;30139:11;:24;30151:11;30139:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30102:171;30044:236;30312:7;30308:2;30293:27;;30302:4;30293:27;;;;;;;;;;;;30327:42;30348:4;30354:2;30358:7;30367:1;30327:20;:42::i;:::-;28846:1529;;;;;;:::o;30807:838::-;30869:25;30897:24;;30869:52;;30947:1;30936:8;:12;30928:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:16;31034:1;31023:8;31003:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;30984:51;;31070:1;31057:10;:14;;;;:::i;:::-;31046:8;:25;31042:73;;;31106:1;31093:10;:14;;;;:::i;:::-;31082:25;;31042:73;31230:17;31238:8;31230:7;:17::i;:::-;31222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31302:9;31314:17;31302:29;;31297:297;31338:8;31333:1;:13;31297:297;;31397:1;31366:33;;:11;:14;31378:1;31366:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;31362:225;;;31412:31;31446:14;31458:1;31446:11;:14::i;:::-;31412:48;;31488:89;;;;;;;;31515:9;:14;;;31488:89;;;;;;31542:9;:24;;;31488:89;;;;;31471:11;:14;31483:1;31471:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31362:225;;31348:3;;;;;:::i;:::-;;;;31297:297;;;;31638:1;31627:8;:12;;;;:::i;:::-;31600:24;:39;;;;30807:838;;;:::o;22819:606::-;22895:21;;:::i;:::-;22936:16;22944:7;22936;:16::i;:::-;22928:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23008:26;23056:12;23045:7;:23;23041:93;;23125:1;23110:12;23100:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23079:47;;23041:93;23147:12;23162:7;23147:22;;23142:212;23179:18;23171:4;:26;23142:212;;23216:31;23250:11;:17;23262:4;23250:17;;;;;;;;;;;23216:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23306:1;23280:28;;:9;:14;;;:28;;;23276:71;;23328:9;23321:16;;;;;;;23276:71;23142:212;23199:6;;;;;:::i;:::-;;;;23142:212;;;;23362:57;;;;;;;;;;:::i;:::-;;;;;;;;22819:606;;;;:::o;38684:173::-;38740:16;38759:6;;;;;;;;;;;38740:25;;38785:8;38776:6;;:17;;;;;;;;;;;;;;;;;;38840:8;38809:40;;38830:8;38809:40;;;;;;;;;;;;38684:173;;:::o;32188:690::-;32325:4;32342:15;:2;:13;;;:15::i;:::-;32338:535;;;32397:2;32381:36;;;32418:12;:10;:12::i;:::-;32432:4;32438:7;32447:5;32381:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32368:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32629:1;32612:6;:13;:18;32608:215;;;32645:61;;;;;;;;;;:::i;:::-;;;;;;;;32608:215;32791:6;32785:13;32776:6;32772:2;32768:15;32761:38;32368:464;32513:45;;;32503:55;;;:6;:55;;;;32496:62;;;;;32338:535;32861:4;32854:11;;32188:690;;;;;;;:::o;44246:106::-;44306:13;44335:11;44328:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44246:106;:::o;14948:723::-;15004:13;15234:1;15225:5;:10;15221:53;;;15252:10;;;;;;;;;;;;;;;;;;;;;15221:53;15284:12;15299:5;15284:20;;15315:14;15340:78;15355:1;15347:4;:9;15340:78;;15373:8;;;;;:::i;:::-;;;;15404:2;15396:10;;;;;:::i;:::-;;;15340:78;;;15428:19;15460:6;15450:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15428:39;;15478:154;15494:1;15485:5;:10;15478:154;;15522:1;15512:11;;;;;:::i;:::-;;;15589:2;15581:5;:10;;;;:::i;:::-;15568:2;:24;;;;:::i;:::-;15555:39;;15538:6;15545;15538:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;15618:2;15609:11;;;;;:::i;:::-;;;15478:154;;;15656:6;15642:21;;;;;14948:723;;;;:::o;22573:240::-;22634:7;22683:1;22666:19;;:5;:19;;;;22650:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:12;:19;22787:5;22774:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22766:41;;22759:48;;22573:240;;;:::o;27342:1272::-;27447:20;27470:12;;27447:35;;27511:1;27497:16;;:2;:16;;;;27489:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27688:21;27696:12;27688:7;:21::i;:::-;27687:22;27679:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27770:12;27758:8;:24;;27750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:61;27860:1;27864:2;27868:12;27882:8;27830:21;:61::i;:::-;27900:30;27933:12;:16;27946:2;27933:16;;;;;;;;;;;;;;;27900:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:119;;;;;;;;28025:8;27995:11;:19;;;:39;;;;:::i;:::-;27975:119;;;;;;28078:8;28043:11;:24;;;:44;;;;:::i;:::-;27975:119;;;;;27956:12;:16;27969:2;27956:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28129:43;;;;;;;;28144:2;28129:43;;;;;;28155:15;28129:43;;;;;28101:11;:25;28113:12;28101:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:20;28204:12;28181:35;;28230:9;28225:281;28249:8;28245:1;:12;28225:281;;;28303:12;28299:2;28278:38;;28295:1;28278:38;;;;;;;;;;;;28343:59;28374:1;28378:2;28382:12;28396:5;28343:22;:59::i;:::-;28325:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;28484:14;;;;;:::i;:::-;;;;28259:3;;;;;:::i;:::-;;;;28225:281;;;;28529:12;28514;:27;;;;28548:60;28577:1;28581:2;28585:12;28599:8;28548:20;:60::i;:::-;27342:1272;;;;;;:::o;33340:141::-;;;;;:::o;33867:140::-;;;;;:::o;1178:387::-;1238:4;1446:12;1513:7;1501:20;1493:28;;1556:1;1549:4;:8;1542:15;;;1178:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1233:352::-;;;1351:3;1344:4;1336:6;1332:17;1328:27;1318:2;;1369:1;1366;1359:12;1318:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1467:1;1464;1457:12;1421:2;1504:4;1496:6;1492:17;1480:29;;1558:3;1550:4;1542:6;1538:17;1528:8;1524:32;1521:41;1518:2;;;1575:1;1572;1565:12;1518:2;1308:277;;;;;:::o;1591:139::-;;1675:6;1662:20;1653:29;;1691:33;1718:5;1691:33;:::i;:::-;1643:87;;;;:::o;1736:262::-;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;1860:1;1857;1850:12;1812:2;1903:1;1928:53;1973:7;1964:6;1953:9;1949:22;1928:53;:::i;:::-;1918:63;;1874:117;1802:196;;;;:::o;2004:407::-;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2087:324;;;;;:::o;2417:552::-;;;;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2575:1;2572;2565:12;2527:2;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;2517:452;;;;;:::o;2975:809::-;;;;;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3160:1;3157;3150:12;3111:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:2;;;3677:1;3674;3667:12;3631:2;3705:62;3759:7;3750:6;3739:9;3735:22;3705:62;:::i;:::-;3695:72;;3557:220;3101:683;;;;;;;:::o;3790:401::-;;;3912:2;3900:9;3891:7;3887:23;3883:32;3880:2;;;3928:1;3925;3918:12;3880:2;3971:1;3996:53;4041:7;4032:6;4021:9;4017:22;3996:53;:::i;:::-;3986:63;;3942:117;4098:2;4124:50;4166:7;4157:6;4146:9;4142:22;4124:50;:::i;:::-;4114:60;;4069:115;3870:321;;;;;:::o;4197:407::-;;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4338:1;4335;4328:12;4290:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4280:324;;;;;:::o;4610:260::-;;4717:2;4705:9;4696:7;4692:23;4688:32;4685:2;;;4733:1;4730;4723:12;4685:2;4776:1;4801:52;4845:7;4836:6;4825:9;4821:22;4801:52;:::i;:::-;4791:62;;4747:116;4675:195;;;;:::o;4876:282::-;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;5010:1;5007;5000:12;4962:2;5053:1;5078:63;5133:7;5124:6;5113:9;5109:22;5078:63;:::i;:::-;5068:73;;5024:127;4952:206;;;;:::o;5164:395::-;;;5292:2;5280:9;5271:7;5267:23;5263:32;5260:2;;;5308:1;5305;5298:12;5260:2;5379:1;5368:9;5364:17;5351:31;5409:18;5401:6;5398:30;5395:2;;;5441:1;5438;5431:12;5395:2;5477:65;5534:7;5525:6;5514:9;5510:22;5477:65;:::i;:::-;5459:83;;;;5322:230;5250:309;;;;;:::o;5565:262::-;;5673:2;5661:9;5652:7;5648:23;5644:32;5641:2;;;5689:1;5686;5679:12;5641:2;5732:1;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5703:117;5631:196;;;;:::o;5833:179::-;;5923:46;5965:3;5957:6;5923:46;:::i;:::-;6001:4;5996:3;5992:14;5978:28;;5913:99;;;;:::o;6018:108::-;6095:24;6113:5;6095:24;:::i;:::-;6090:3;6083:37;6073:53;;:::o;6132:118::-;6219:24;6237:5;6219:24;:::i;:::-;6214:3;6207:37;6197:53;;:::o;6286:732::-;;6434:54;6482:5;6434:54;:::i;:::-;6504:86;6583:6;6578:3;6504:86;:::i;:::-;6497:93;;6614:56;6664:5;6614:56;:::i;:::-;6693:7;6724:1;6709:284;6734:6;6731:1;6728:13;6709:284;;;6810:6;6804:13;6837:63;6896:3;6881:13;6837:63;:::i;:::-;6830:70;;6923:60;6976:6;6923:60;:::i;:::-;6913:70;;6769:224;6756:1;6753;6749:9;6744:14;;6709:284;;;6713:14;7009:3;7002:10;;6410:608;;;;;;;:::o;7024:109::-;7105:21;7120:5;7105:21;:::i;:::-;7100:3;7093:34;7083:50;;:::o;7139:360::-;;7253:38;7285:5;7253:38;:::i;:::-;7307:70;7370:6;7365:3;7307:70;:::i;:::-;7300:77;;7386:52;7431:6;7426:3;7419:4;7412:5;7408:16;7386:52;:::i;:::-;7463:29;7485:6;7463:29;:::i;:::-;7458:3;7454:39;7447:46;;7229:270;;;;;:::o;7505:364::-;;7621:39;7654:5;7621:39;:::i;:::-;7676:71;7740:6;7735:3;7676:71;:::i;:::-;7669:78;;7756:52;7801:6;7796:3;7789:4;7782:5;7778:16;7756:52;:::i;:::-;7833:29;7855:6;7833:29;:::i;:::-;7828:3;7824:39;7817:46;;7597:272;;;;;:::o;7875:377::-;;8009:39;8042:5;8009:39;:::i;:::-;8064:89;8146:6;8141:3;8064:89;:::i;:::-;8057:96;;8162:52;8207:6;8202:3;8195:4;8188:5;8184:16;8162:52;:::i;:::-;8239:6;8234:3;8230:16;8223:23;;7985:267;;;;;:::o;8258:366::-;;8421:67;8485:2;8480:3;8421:67;:::i;:::-;8414:74;;8518:34;8514:1;8509:3;8505:11;8498:55;8584:4;8579:2;8574:3;8570:12;8563:26;8615:2;8610:3;8606:12;8599:19;;8404:220;;;:::o;8630:380::-;;8793:67;8857:2;8852:3;8793:67;:::i;:::-;8786:74;;8890:34;8886:1;8881:3;8877:11;8870:55;8956:18;8951:2;8946:3;8942:12;8935:40;9001:2;8996:3;8992:12;8985:19;;8776:234;;;:::o;9016:367::-;;9179:67;9243:2;9238:3;9179:67;:::i;:::-;9172:74;;9276:34;9272:1;9267:3;9263:11;9256:55;9342:5;9337:2;9332:3;9328:12;9321:27;9374:2;9369:3;9365:12;9358:19;;9162:221;;;:::o;9389:370::-;;9552:67;9616:2;9611:3;9552:67;:::i;:::-;9545:74;;9649:34;9645:1;9640:3;9636:11;9629:55;9715:8;9710:2;9705:3;9701:12;9694:30;9750:2;9745:3;9741:12;9734:19;;9535:224;;;:::o;9765:374::-;;9928:67;9992:2;9987:3;9928:67;:::i;:::-;9921:74;;10025:34;10021:1;10016:3;10012:11;10005:55;10091:12;10086:2;10081:3;10077:12;10070:34;10130:2;10125:3;10121:12;10114:19;;9911:228;;;:::o;10145:372::-;;10308:67;10372:2;10367:3;10308:67;:::i;:::-;10301:74;;10405:34;10401:1;10396:3;10392:11;10385:55;10471:10;10466:2;10461:3;10457:12;10450:32;10508:2;10503:3;10499:12;10492:19;;10291:226;;;:::o;10523:367::-;;10686:67;10750:2;10745:3;10686:67;:::i;:::-;10679:74;;10783:34;10779:1;10774:3;10770:11;10763:55;10849:5;10844:2;10839:3;10835:12;10828:27;10881:2;10876:3;10872:12;10865:19;;10669:221;;;:::o;10896:369::-;;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11156:34;11152:1;11147:3;11143:11;11136:55;11222:7;11217:2;11212:3;11208:12;11201:29;11256:2;11251:3;11247:12;11240:19;;11042:223;;;:::o;11271:381::-;;11434:67;11498:2;11493:3;11434:67;:::i;:::-;11427:74;;11531:34;11527:1;11522:3;11518:11;11511:55;11597:19;11592:2;11587:3;11583:12;11576:41;11643:2;11638:3;11634:12;11627:19;;11417:235;;;:::o;11658:317::-;;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11918:21;11914:1;11909:3;11905:11;11898:42;11966:2;11961:3;11957:12;11950:19;;11804:171;;;:::o;11981:389::-;;12144:67;12208:2;12203:3;12144:67;:::i;:::-;12137:74;;12241:34;12237:1;12232:3;12228:11;12221:55;12307:27;12302:2;12297:3;12293:12;12286:49;12361:2;12356:3;12352:12;12345:19;;12127:243;;;:::o;12376:389::-;;12539:67;12603:2;12598:3;12539:67;:::i;:::-;12532:74;;12636:34;12632:1;12627:3;12623:11;12616:55;12702:27;12697:2;12692:3;12688:12;12681:49;12756:2;12751:3;12747:12;12740:19;;12522:243;;;:::o;12771:322::-;;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13031:26;13027:1;13022:3;13018:11;13011:47;13084:2;13079:3;13075:12;13068:19;;12917:176;;;:::o;13099:375::-;;13262:67;13326:2;13321:3;13262:67;:::i;:::-;13255:74;;13359:34;13355:1;13350:3;13346:11;13339:55;13425:13;13420:2;13415:3;13411:12;13404:35;13465:2;13460:3;13456:12;13449:19;;13245:229;;;:::o;13480:370::-;;13643:67;13707:2;13702:3;13643:67;:::i;:::-;13636:74;;13740:34;13736:1;13731:3;13727:11;13720:55;13806:8;13801:2;13796:3;13792:12;13785:30;13841:2;13836:3;13832:12;13825:19;;13626:224;;;:::o;13856:330::-;;14019:67;14083:2;14078:3;14019:67;:::i;:::-;14012:74;;14116:34;14112:1;14107:3;14103:11;14096:55;14177:2;14172:3;14168:12;14161:19;;14002:184;;;:::o;14192:379::-;;14355:67;14419:2;14414:3;14355:67;:::i;:::-;14348:74;;14452:34;14448:1;14443:3;14439:11;14432:55;14518:17;14513:2;14508:3;14504:12;14497:39;14562:2;14557:3;14553:12;14546:19;;14338:233;;;:::o;14577:324::-;;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14837:28;14833:1;14828:3;14824:11;14817:49;14892:2;14887:3;14883:12;14876:19;;14723:178;;;:::o;14907:382::-;;15070:67;15134:2;15129:3;15070:67;:::i;:::-;15063:74;;15167:34;15163:1;15158:3;15154:11;15147:55;15233:20;15228:2;15223:3;15219:12;15212:42;15280:2;15275:3;15271:12;15264:19;;15053:236;;;:::o;15295:374::-;;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15555:34;15551:1;15546:3;15542:11;15535:55;15621:12;15616:2;15611:3;15607:12;15600:34;15660:2;15655:3;15651:12;15644:19;;15441:228;;;:::o;15675:318::-;;15838:67;15902:2;15897:3;15838:67;:::i;:::-;15831:74;;15935:22;15931:1;15926:3;15922:11;15915:43;15984:2;15979:3;15975:12;15968:19;;15821:172;;;:::o;15999:366::-;;16162:67;16226:2;16221:3;16162:67;:::i;:::-;16155:74;;16259:34;16255:1;16250:3;16246:11;16239:55;16325:4;16320:2;16315:3;16311:12;16304:26;16356:2;16351:3;16347:12;16340:19;;16145:220;;;:::o;16371:297::-;;16551:83;16632:1;16627:3;16551:83;:::i;:::-;16544:90;;16660:1;16655:3;16651:11;16644:18;;16534:134;;;:::o;16674:314::-;;16837:67;16901:2;16896:3;16837:67;:::i;:::-;16830:74;;16934:18;16930:1;16925:3;16921:11;16914:39;16979:2;16974:3;16970:12;16963:19;;16820:168;;;:::o;16994:383::-;;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17254:34;17250:1;17245:3;17241:11;17234:55;17320:21;17315:2;17310:3;17306:12;17299:43;17368:2;17363:3;17359:12;17352:19;;17140:237;;;:::o;17383:327::-;;17546:67;17610:2;17605:3;17546:67;:::i;:::-;17539:74;;17643:31;17639:1;17634:3;17630:11;17623:52;17701:2;17696:3;17692:12;17685:19;;17529:181;;;:::o;17716:365::-;;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17976:34;17972:1;17967:3;17963:11;17956:55;18042:3;18037:2;18032:3;18028:12;18021:25;18072:2;18067:3;18063:12;18056:19;;17862:219;;;:::o;18087:378::-;;18250:67;18314:2;18309:3;18250:67;:::i;:::-;18243:74;;18347:34;18343:1;18338:3;18334:11;18327:55;18413:16;18408:2;18403:3;18399:12;18392:38;18456:2;18451:3;18447:12;18440:19;;18233:232;;;:::o;18471:370::-;;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18731:34;18727:1;18722:3;18718:11;18711:55;18797:8;18792:2;18787:3;18783:12;18776:30;18832:2;18827:3;18823:12;18816:19;;18617:224;;;:::o;18847:329::-;;19010:67;19074:2;19069:3;19010:67;:::i;:::-;19003:74;;19107:33;19103:1;19098:3;19094:11;19087:54;19167:2;19162:3;19158:12;19151:19;;18993:183;;;:::o;19182:379::-;;19345:67;19409:2;19404:3;19345:67;:::i;:::-;19338:74;;19442:34;19438:1;19433:3;19429:11;19422:55;19508:17;19503:2;19498:3;19494:12;19487:39;19552:2;19547:3;19543:12;19536:19;;19328:233;;;:::o;19567:377::-;;19730:67;19794:2;19789:3;19730:67;:::i;:::-;19723:74;;19827:34;19823:1;19818:3;19814:11;19807:55;19893:15;19888:2;19883:3;19879:12;19872:37;19935:2;19930:3;19926:12;19919:19;;19713:231;;;:::o;19950:366::-;;20113:67;20177:2;20172:3;20113:67;:::i;:::-;20106:74;;20210:34;20206:1;20201:3;20197:11;20190:55;20276:4;20271:2;20266:3;20262:12;20255:26;20307:2;20302:3;20298:12;20291:19;;20096:220;;;:::o;20392:527::-;20551:4;20546:3;20542:14;20638:4;20631:5;20627:16;20621:23;20657:63;20714:4;20709:3;20705:14;20691:12;20657:63;:::i;:::-;20566:164;20822:4;20815:5;20811:16;20805:23;20841:61;20896:4;20891:3;20887:14;20873:12;20841:61;:::i;:::-;20740:172;20520:399;;;:::o;20925:108::-;21002:24;21020:5;21002:24;:::i;:::-;20997:3;20990:37;20980:53;;:::o;21039:118::-;21126:24;21144:5;21126:24;:::i;:::-;21121:3;21114:37;21104:53;;:::o;21163:105::-;21238:23;21255:5;21238:23;:::i;:::-;21233:3;21226:36;21216:52;;:::o;21274:435::-;;21476:95;21567:3;21558:6;21476:95;:::i;:::-;21469:102;;21588:95;21679:3;21670:6;21588:95;:::i;:::-;21581:102;;21700:3;21693:10;;21458:251;;;;;:::o;21715:379::-;;21921:147;22064:3;21921:147;:::i;:::-;21914:154;;22085:3;22078:10;;21903:191;;;:::o;22100:222::-;;22231:2;22220:9;22216:18;22208:26;;22244:71;22312:1;22301:9;22297:17;22288:6;22244:71;:::i;:::-;22198:124;;;;:::o;22328:640::-;;22561:3;22550:9;22546:19;22538:27;;22575:71;22643:1;22632:9;22628:17;22619:6;22575:71;:::i;:::-;22656:72;22724:2;22713:9;22709:18;22700:6;22656:72;:::i;:::-;22738;22806:2;22795:9;22791:18;22782:6;22738:72;:::i;:::-;22857:9;22851:4;22847:20;22842:2;22831:9;22827:18;22820:48;22885:76;22956:4;22947:6;22885:76;:::i;:::-;22877:84;;22528:440;;;;;;;:::o;22974:373::-;;23155:2;23144:9;23140:18;23132:26;;23204:9;23198:4;23194:20;23190:1;23179:9;23175:17;23168:47;23232:108;23335:4;23326:6;23232:108;:::i;:::-;23224:116;;23122:225;;;;:::o;23353:210::-;;23478:2;23467:9;23463:18;23455:26;;23491:65;23553:1;23542:9;23538:17;23529:6;23491:65;:::i;:::-;23445:118;;;;:::o;23569:313::-;;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;;23687:195;;;;:::o;23888:419::-;;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;;24059:248;;;:::o;24313:419::-;;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;;24484:248;;;:::o;24738:419::-;;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;;24909:248;;;:::o;25163:419::-;;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;;25334:248;;;:::o;25588:419::-;;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;;25759:248;;;:::o;26013:419::-;;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;;26184:248;;;:::o;26438:419::-;;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;;26609:248;;;:::o;26863:419::-;;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;;27034:248;;;:::o;27288:419::-;;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;;27459:248;;;:::o;27713:419::-;;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;;27884:248;;;:::o;28138:419::-;;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;;28309:248;;;:::o;28563:419::-;;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;;28734:248;;;:::o;28988:419::-;;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;;29159:248;;;:::o;29413:419::-;;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;;29584:248;;;:::o;29838:419::-;;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;;30009:248;;;:::o;30263:419::-;;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;;30434:248;;;:::o;30688:419::-;;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;;30859:248;;;:::o;31113:419::-;;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;;31284:248;;;:::o;31538:419::-;;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;;31709:248;;;:::o;31963:419::-;;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;;32134:248;;;:::o;32388:419::-;;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;;32559:248;;;:::o;32813:419::-;;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;;32984:248;;;:::o;33238:419::-;;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;;33409:248;;;:::o;33663:419::-;;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;;33834:248;;;:::o;34088:419::-;;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;;34259:248;;;:::o;34513:419::-;;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;;34684:248;;;:::o;34938:419::-;;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;;35109:248;;;:::o;35363:419::-;;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;;35534:248;;;:::o;35788:419::-;;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;;35959:248;;;:::o;36213:419::-;;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;;36384:248;;;:::o;36638:419::-;;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;;36809:248;;;:::o;37063:419::-;;37267:2;37256:9;37252:18;37244:26;;37316:9;37310:4;37306:20;37302:1;37291:9;37287:17;37280:47;37344:131;37470:4;37344:131;:::i;:::-;37336:139;;37234:248;;;:::o;37488:346::-;;37681:2;37670:9;37666:18;37658:26;;37694:133;37824:1;37813:9;37809:17;37800:6;37694:133;:::i;:::-;37648:186;;;;:::o;37840:222::-;;37971:2;37960:9;37956:18;37948:26;;37984:71;38052:1;38041:9;38037:17;38028:6;37984:71;:::i;:::-;37938:124;;;;:::o;38068:283::-;;38134:2;38128:9;38118:19;;38176:4;38168:6;38164:17;38283:6;38271:10;38268:22;38247:18;38235:10;38232:34;38229:62;38226:2;;;38294:18;;:::i;:::-;38226:2;38334:10;38330:2;38323:22;38108:243;;;;:::o;38357:331::-;;38508:18;38500:6;38497:30;38494:2;;;38530:18;;:::i;:::-;38494:2;38615:4;38611:9;38604:4;38596:6;38592:17;38588:33;38580:41;;38676:4;38670;38666:15;38658:23;;38423:265;;;:::o;38694:132::-;;38784:3;38776:11;;38814:4;38809:3;38805:14;38797:22;;38766:60;;;:::o;38832:114::-;;38933:5;38927:12;38917:22;;38906:40;;;:::o;38952:98::-;;39037:5;39031:12;39021:22;;39010:40;;;:::o;39056:99::-;;39142:5;39136:12;39126:22;;39115:40;;;:::o;39161:113::-;;39263:4;39258:3;39254:14;39246:22;;39236:38;;;:::o;39280:184::-;;39413:6;39408:3;39401:19;39453:4;39448:3;39444:14;39429:29;;39391:73;;;;:::o;39470:168::-;;39587:6;39582:3;39575:19;39627:4;39622:3;39618:14;39603:29;;39565:73;;;;:::o;39644:147::-;;39782:3;39767:18;;39757:34;;;;:::o;39797:169::-;;39915:6;39910:3;39903:19;39955:4;39950:3;39946:14;39931:29;;39893:73;;;;:::o;39972:148::-;;40111:3;40096:18;;40086:34;;;;:::o;40126:273::-;;40185:20;40203:1;40185:20;:::i;:::-;40180:25;;40219:20;40237:1;40219:20;:::i;:::-;40214:25;;40341:1;40305:34;40301:42;40298:1;40295:49;40292:2;;;40347:18;;:::i;:::-;40292:2;40391:1;40388;40384:9;40377:16;;40170:229;;;;:::o;40405:305::-;;40464:20;40482:1;40464:20;:::i;:::-;40459:25;;40498:20;40516:1;40498:20;:::i;:::-;40493:25;;40652:1;40584:66;40580:74;40577:1;40574:81;40571:2;;;40658:18;;:::i;:::-;40571:2;40702:1;40699;40695:9;40688:16;;40449:261;;;;:::o;40716:185::-;;40773:20;40791:1;40773:20;:::i;:::-;40768:25;;40807:20;40825:1;40807:20;:::i;:::-;40802:25;;40846:1;40836:2;;40851:18;;:::i;:::-;40836:2;40893:1;40890;40886:9;40881:14;;40758:143;;;;:::o;40907:348::-;;40970:20;40988:1;40970:20;:::i;:::-;40965:25;;41004:20;41022:1;41004:20;:::i;:::-;40999:25;;41192:1;41124:66;41120:74;41117:1;41114:81;41109:1;41102:9;41095:17;41091:105;41088:2;;;41199:18;;:::i;:::-;41088:2;41247:1;41244;41240:9;41229:20;;40955:300;;;;:::o;41261:191::-;;41321:20;41339:1;41321:20;:::i;:::-;41316:25;;41355:20;41373:1;41355:20;:::i;:::-;41350:25;;41394:1;41391;41388:8;41385:2;;;41399:18;;:::i;:::-;41385:2;41444:1;41441;41437:9;41429:17;;41306:146;;;;:::o;41458:191::-;;41518:20;41536:1;41518:20;:::i;:::-;41513:25;;41552:20;41570:1;41552:20;:::i;:::-;41547:25;;41591:1;41588;41585:8;41582:2;;;41596:18;;:::i;:::-;41582:2;41641:1;41638;41634:9;41626:17;;41503:146;;;;:::o;41655:96::-;;41721:24;41739:5;41721:24;:::i;:::-;41710:35;;41700:51;;;:::o;41757:90::-;;41834:5;41827:13;41820:21;41809:32;;41799:48;;;:::o;41853:149::-;;41929:66;41922:5;41918:78;41907:89;;41897:105;;;:::o;42008:118::-;;42085:34;42078:5;42074:46;42063:57;;42053:73;;;:::o;42132:126::-;;42209:42;42202:5;42198:54;42187:65;;42177:81;;;:::o;42264:77::-;;42330:5;42319:16;;42309:32;;;:::o;42347:101::-;;42423:18;42416:5;42412:30;42401:41;;42391:57;;;:::o;42454:154::-;42538:6;42533:3;42528;42515:30;42600:1;42591:6;42586:3;42582:16;42575:27;42505:103;;;:::o;42614:307::-;42682:1;42692:113;42706:6;42703:1;42700:13;42692:113;;;42791:1;42786:3;42782:11;42776:18;42772:1;42767:3;42763:11;42756:39;42728:2;42725:1;42721:10;42716:15;;42692:113;;;42823:6;42820:1;42817:13;42814:2;;;42903:1;42894:6;42889:3;42885:16;42878:27;42814:2;42663:258;;;;:::o;42927:171::-;;42989:24;43007:5;42989:24;:::i;:::-;42980:33;;43035:4;43028:5;43025:15;43022:2;;;43043:18;;:::i;:::-;43022:2;43090:1;43083:5;43079:13;43072:20;;42970:128;;;:::o;43104:320::-;;43185:1;43179:4;43175:12;43165:22;;43232:1;43226:4;43222:12;43253:18;43243:2;;43309:4;43301:6;43297:17;43287:27;;43243:2;43371;43363:6;43360:14;43340:18;43337:38;43334:2;;;43390:18;;:::i;:::-;43334:2;43155:269;;;;:::o;43430:233::-;;43492:24;43510:5;43492:24;:::i;:::-;43483:33;;43538:66;43531:5;43528:77;43525:2;;;43608:18;;:::i;:::-;43525:2;43655:1;43648:5;43644:13;43637:20;;43473:190;;;:::o;43669:176::-;;43718:20;43736:1;43718:20;:::i;:::-;43713:25;;43752:20;43770:1;43752:20;:::i;:::-;43747:25;;43791:1;43781:2;;43796:18;;:::i;:::-;43781:2;43837:1;43834;43830:9;43825:14;;43703:142;;;;:::o;43851:180::-;43899:77;43896:1;43889:88;43996:4;43993:1;43986:15;44020:4;44017:1;44010:15;44037:180;44085:77;44082:1;44075:88;44182:4;44179:1;44172:15;44206:4;44203:1;44196:15;44223:180;44271:77;44268:1;44261:88;44368:4;44365:1;44358:15;44392:4;44389:1;44382:15;44409:180;44457:77;44454:1;44447:88;44554:4;44551:1;44544:15;44578:4;44575:1;44568:15;44595:102;;44687:2;44683:7;44678:2;44671:5;44667:14;44663:28;44653:38;;44643:54;;;:::o;44703:122::-;44776:24;44794:5;44776:24;:::i;:::-;44769:5;44766:35;44756:2;;44815:1;44812;44805:12;44756:2;44746:79;:::o;44831:116::-;44901:21;44916:5;44901:21;:::i;:::-;44894:5;44891:32;44881:2;;44937:1;44934;44927:12;44881:2;44871:76;:::o;44953:120::-;45025:23;45042:5;45025:23;:::i;:::-;45018:5;45015:34;45005:2;;45063:1;45060;45053:12;45005:2;44995:78;:::o;45079:122::-;45152:24;45170:5;45152:24;:::i;:::-;45145:5;45142:35;45132:2;;45191:1;45188;45181:12;45132:2;45122:79;:::o
Swarm Source
ipfs://5356ec8507931f6812fe52def42b3a9b7d3c840f96cf69970bd7fa0e32f50707
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.