Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
5,000 NAP
Holders
2,498
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 NAPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NexusAccessPass
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-08 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } 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; _; _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _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 virtual 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); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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); } function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/NexusAccessPass.sol pragma solidity >= 0.8.0 < 0.9.0; contract NexusAccessPass is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; address signerAddress; uint256 public MAX_SUPPLY = 5000; uint256 public MAX_PUBLIC_MINT = 1; uint256 public MAX_WHITELIST_MINT = 2; uint256 public MAX_PER_TRX = 2; uint256 public PUBLIC_SALE_PRICE = 0 ether; uint256 public WHITELIST_SALE_PRICE = 0 ether; string public uriPrefix; string public notRevealedURI; string public uriSuffix = ".json"; bool public pause = true; bool public revealed = false; bool public publicSale = false; bool public whiteListSale = true; mapping(address => uint256) public totalPublicMint; mapping(address => uint256) public totalWhitelistMint; constructor( address _signerAddress ) ERC721A ( "NEXUS ACCESS PASS", "NAP" ) { setNotRevealedURI( "ipfs://bafkreie4shalhl5lp4ibtxs46uny4axr6gfq7li7c5zb7hl47idjcr2ifq" ); signerAddress = _signerAddress; } // ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~ function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } // ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~ modifier mintCompliance(uint256 _quantity) { if (msg.sender != owner()) { require(!pause, "The contract is paused!"); require(_quantity <= MAX_PER_TRX, "Max mint per transaction exceeded!"); } require(_quantity > 0, "Mint amount can't be zero."); require(tx.origin == msg.sender, "The caller is another contract"); require(totalSupply() + _quantity <= MAX_SUPPLY, "Nexus Access Pass :: Beyond Max Supply"); _; } // ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~ // MINT function mint(uint256 _quantity, bytes memory sig) public payable mintCompliance(_quantity) { if(whiteListSale == true) { require(isValidData(msg.sender, sig) == true, "Nexus Access Pass :: You are not whitelisted."); require(totalWhitelistMint[msg.sender] + _quantity <= MAX_WHITELIST_MINT, "Nexus Access Pass :: Max whitelist mint per wallet exceeded!!"); require(msg.value >= WHITELIST_SALE_PRICE * _quantity, "Insufficient funds!"); totalWhitelistMint[msg.sender] += _quantity; } else { require(publicSale, "Nexus Access Pass :: Public Mint is Not Yet Active."); require(totalPublicMint[msg.sender] + _quantity <= MAX_PUBLIC_MINT, "Nexus Access Pass :: Max public mint per wallet exceeded!"); require(msg.value >= PUBLIC_SALE_PRICE * _quantity, "Insufficient funds!"); totalPublicMint[msg.sender] += _quantity; } _safeMint(msg.sender, _quantity); } // MINT for address function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner { require(totalSupply() + _mintAmount <= MAX_SUPPLY, "Mint amount exceeds max supply!"); _safeMint(_receiver, _mintAmount); } // ~~~~~~~~~~~~~~~~~~~~ SIGNATURES ~~~~~~~~~~~~~~~~~~~~ function isValidData(address _user, bytes memory sig) public view returns (bool) { bytes32 message = keccak256(abi.encodePacked(_user)); return (recoverSigner(message, sig) == signerAddress); } function recoverSigner(bytes32 message, bytes memory sig) public pure returns (address) { uint8 v; bytes32 r; bytes32 s; (v, r, s) = splitSignature(sig); return ecrecover(message, v, r, s); } function splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) { require(sig.length == 65); bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } return (v, r, s); } // ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~ // TOKEN URI function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token."); if (revealed == false) { return notRevealedURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } // Start Token function _startTokenId() internal view virtual override returns (uint256) { return 1; } // Check Wallet assets function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = _startTokenId(); uint256 ownedTokenIndex = 0; address latestOwnerAddress; while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) { TokenOwnership memory ownership = _ownerships[currentTokenId]; if (!ownership.burned) { if (ownership.addr != address(0)) { latestOwnerAddress = ownership.addr; } if (latestOwnerAddress == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } } currentTokenId++; } return ownedTokenIds; } // ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~ // BaseURI function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } // NotRevealedURI function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedURI = _notRevealedURI; } function setCostPublic(uint256 _cost) public onlyOwner { PUBLIC_SALE_PRICE = _cost; } function setCostWhitelist(uint256 _cost) public onlyOwner { WHITELIST_SALE_PRICE = _cost; } function setMaxPB(uint256 _maxPB) public onlyOwner { MAX_PUBLIC_MINT = _maxPB; } function setMaxWL(uint256 _maxWL) public onlyOwner { MAX_WHITELIST_MINT = _maxWL; } function setMaxPerTrx(uint256 _maxTrx) public onlyOwner { MAX_PER_TRX = _maxTrx; } function setPause(bool _state) public onlyOwner { pause = _state; } function setReveal(bool _state) public onlyOwner { revealed = _state; } function setWhitelist(bool _state) public onlyOwner { whiteListSale = _state; } function setPublicSale (bool _state) public onlyOwner { publicSale = _state; } function withdraw() external onlyOwner nonReentrant { (bool success, ) = payable(owner()).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_TRX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WHITELIST_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_SALE_PRICE","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":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCostPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCostWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPB","type":"uint256"}],"name":"setMaxPB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTrx","type":"uint256"}],"name":"setMaxPerTrx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWL","type":"uint256"}],"name":"setMaxWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPublicMint","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":"","type":"address"}],"name":"totalWhitelistMint","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611388600b556001600c556002600d556002600e556000600f5560006010556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060139080519060200190620000709291906200040c565b506001601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548160ff0219169083151502179055506001601460036101000a81548160ff021916908315150217905550348015620000ea57600080fd5b506040516200585b3803806200585b8339818101604052810190620001109190620004d3565b6040518060400160405280601181526020017f4e455855532041434345535320504153530000000000000000000000000000008152506040518060400160405280600381526020017f4e415000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001949291906200040c565b508060039080519060200190620001ad9291906200040c565b50620001be6200026060201b60201c565b6000819055505050620001e6620001da6200026960201b60201c565b6200027160201b60201c565b60016009819055506200021860405180608001604052806042815260200162005819604291396200033760201b60201c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000640565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003476200026960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200036d620003e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003bd906200052c565b60405180910390fd5b8060129080519060200190620003de9291906200040c565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200041a9062000593565b90600052602060002090601f0160209004810192826200043e57600085556200048a565b82601f106200045957805160ff19168380011785556200048a565b828001600101855582156200048a579182015b82811115620004895782518255916020019190600101906200046c565b5b5090506200049991906200049d565b5090565b5b80821115620004b85760008160009055506001016200049e565b5090565b600081519050620004cd8162000626565b92915050565b600060208284031215620004ec57620004eb620005f8565b5b6000620004fc84828501620004bc565b91505092915050565b6000620005146020836200054e565b91506200052182620005fd565b602082019050919050565b60006020820190508181036000830152620005478162000505565b9050919050565b600082825260208201905092915050565b60006200056c8262000573565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620005ac57607f821691505b60208210811415620005c357620005c2620005c9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000631816200055f565b81146200063d57600080fd5b50565b6151c980620006506000396000f3fe6080604052600436106102c95760003560e01c806365f1309711610175578063a7bb5803116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610afb578063f2c4ce1e14610b38578063f2fde38b14610b61578063f958a65714610b8a576102c9565b8063c87b56dd14610a79578063db7fd40814610ab6578063df106d1314610ad2576102c9565b8063a7bb580314610955578063b0940d4514610994578063b88d4fde146109d1578063bc912e1a146109fa578063bedb86fb14610a25578063c08dfd3c14610a4e576102c9565b80638456cb591161012e5780638456cb591461084357806386a173ee1461086e5780638da5cb5b1461089957806395d89b41146108c457806397aba7f9146108ef578063a22cb4651461092c576102c9565b806365f13097146107455780636a14550c1461077057806370a082311461079b578063715018a6146107d857806372250380146107ef5780637ec4a6591461081a576102c9565b806332cb6b0c1161023457806351830227116101ed5780635aca1bb6116101c75780635aca1bb61461068b57806362b99ad4146106b457806362e84eff146106df5780636352211e14610708576102c9565b8063518302271461060c5780635503a0e8146106375780635841a03014610662576102c9565b806332cb6b0c1461051057806333bc1c5c1461053b5780633ccfd60b1461056657806342842e0e1461057d578063438b6300146105a6578063512b658d146105e3576102c9565b8063121c93ca11610286578063121c93ca1461040457806318160ddd1461042d5780631c16521c1461045857806323b872dd146104955780632a3f300c146104be5780632f9a7c58146104e7576102c9565b806301ffc9a7146102ce5780630345e3cb1461030b57806306fdde031461034857806307e89ec014610373578063081812fc1461039e578063095ea7b3146103db575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613ed7565b610bb3565b60405161030291906145af565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613c2f565b610c95565b60405161033f9190614811565b60405180910390f35b34801561035457600080fd5b5061035d610cad565b60405161036a919061460f565b60405180910390f35b34801561037f57600080fd5b50610388610d3f565b6040516103959190614811565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613fc3565b610d45565b6040516103d29190614526565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190613e0e565b610dc1565b005b34801561041057600080fd5b5061042b60048036038101906104269190613fc3565b610ec6565b005b34801561043957600080fd5b50610442610f4c565b60405161044f9190614811565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613c2f565b610f63565b60405161048c9190614811565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613c9c565b610f7b565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e4e565b610f8b565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613fc3565b611024565b005b34801561051c57600080fd5b506105256110aa565b6040516105329190614811565b60405180910390f35b34801561054757600080fd5b506105506110b0565b60405161055d91906145af565b60405180910390f35b34801561057257600080fd5b5061057b6110c3565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613c9c565b611215565b005b3480156105b257600080fd5b506105cd60048036038101906105c89190613c2f565b611235565b6040516105da919061458d565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190613ff0565b611449565b005b34801561061857600080fd5b5061062161152a565b60405161062e91906145af565b60405180910390f35b34801561064357600080fd5b5061064c61153d565b604051610659919061460f565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613fc3565b6115cb565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613e4e565b611651565b005b3480156106c057600080fd5b506106c96116ea565b6040516106d6919061460f565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613fc3565b611778565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613fc3565b6117fe565b60405161073c9190614526565b60405180910390f35b34801561075157600080fd5b5061075a611814565b6040516107679190614811565b60405180910390f35b34801561077c57600080fd5b5061078561181a565b6040516107929190614811565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613c2f565b611820565b6040516107cf9190614811565b60405180910390f35b3480156107e457600080fd5b506107ed6118f0565b005b3480156107fb57600080fd5b50610804611978565b604051610811919061460f565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c9190613f7a565b611a06565b005b34801561084f57600080fd5b50610858611a9c565b60405161086591906145af565b60405180910390f35b34801561087a57600080fd5b50610883611aaf565b60405161089091906145af565b60405180910390f35b3480156108a557600080fd5b506108ae611ac2565b6040516108bb9190614526565b60405180910390f35b3480156108d057600080fd5b506108d9611aec565b6040516108e6919061460f565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613e7b565b611b7e565b6040516109239190614526565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613d72565b611bf3565b005b34801561096157600080fd5b5061097c60048036038101906109779190613f31565b611d6b565b60405161098b9392919061482c565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613db2565b611dae565b6040516109c891906145af565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190613cef565b611e3d565b005b348015610a0657600080fd5b50610a0f611eb5565b604051610a1c9190614811565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613e4e565b611ebb565b005b348015610a5a57600080fd5b50610a63611f54565b604051610a709190614811565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613fc3565b611f5a565b604051610aad919061460f565b60405180910390f35b610ad06004803603810190610acb9190614030565b6120b3565b005b348015610ade57600080fd5b50610af96004803603810190610af49190613fc3565b6125c6565b005b348015610b0757600080fd5b50610b226004803603810190610b1d9190613c5c565b61264c565b604051610b2f91906145af565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613f7a565b6126e0565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190613c2f565b612776565b005b348015610b9657600080fd5b50610bb16004803603810190610bac9190613e4e565b61286e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c7e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c8e5750610c8d82612907565b5b9050919050565b60166020528060005260406000206000915090505481565b606060028054610cbc90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890614b68565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b600f5481565b6000610d5082612971565b610d86576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dcc826117fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e536129bf565b73ffffffffffffffffffffffffffffffffffffffff1614610eb657610e7f81610e7a6129bf565b61264c565b610eb5576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ec18383836129c7565b505050565b610ece6129bf565b73ffffffffffffffffffffffffffffffffffffffff16610eec611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906146d1565b60405180910390fd5b8060108190555050565b6000610f56612a79565b6001546000540303905090565b60156020528060005260406000206000915090505481565b610f86838383612a82565b505050565b610f936129bf565b73ffffffffffffffffffffffffffffffffffffffff16610fb1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe906146d1565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61102c6129bf565b73ffffffffffffffffffffffffffffffffffffffff1661104a611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906146d1565b60405180910390fd5b80600f8190555050565b600b5481565b601460029054906101000a900460ff1681565b6110cb6129bf565b73ffffffffffffffffffffffffffffffffffffffff166110e9611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906146d1565b60405180910390fd5b60026009541415611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c906147b1565b60405180910390fd5b60026009819055506000611197611ac2565b73ffffffffffffffffffffffffffffffffffffffff16476040516111ba90614511565b60006040518083038185875af1925050503d80600081146111f7576040519150601f19603f3d011682016040523d82523d6000602084013e6111fc565b606091505b505090508061120a57600080fd5b506001600981905550565b61123083838360405180602001604052806000815250611e3d565b505050565b6060600061124283611820565b905060008167ffffffffffffffff8111156112605761125f614d25565b5b60405190808252806020026020018201604052801561128e5781602001602082028036833780820191505090505b509050600061129b612a79565b90506000805b84821080156112b1575060005483105b1561143c576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161142857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113c457806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611427578385848151811061140c5761140b614cf6565b5b602002602001018181525050828061142390614bcb565b9350505b5b838061143390614bcb565b945050506112a1565b8395505050505050919050565b6114516129bf565b73ffffffffffffffffffffffffffffffffffffffff1661146f611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906146d1565b60405180910390fd5b600b54826114d1610f4c565b6114db9190614986565b111561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614671565b60405180910390fd5b6115268183612f38565b5050565b601460019054906101000a900460ff1681565b6013805461154a90614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461157690614b68565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b6115d36129bf565b73ffffffffffffffffffffffffffffffffffffffff166115f1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e906146d1565b60405180910390fd5b80600d8190555050565b6116596129bf565b73ffffffffffffffffffffffffffffffffffffffff16611677611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906146d1565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b601180546116f790614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461172390614b68565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b505050505081565b6117806129bf565b73ffffffffffffffffffffffffffffffffffffffff1661179e611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb906146d1565b60405180910390fd5b80600c8190555050565b600061180982612f56565b600001519050919050565b600c5481565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611888576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118f86129bf565b73ffffffffffffffffffffffffffffffffffffffff16611916611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906146d1565b60405180910390fd5b61197660006131e1565b565b6012805461198590614b68565b80601f01602080910402602001604051908101604052809291908181526020018280546119b190614b68565b80156119fe5780601f106119d3576101008083540402835291602001916119fe565b820191906000526020600020905b8154815290600101906020018083116119e157829003601f168201915b505050505081565b611a0e6129bf565b73ffffffffffffffffffffffffffffffffffffffff16611a2c611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a79906146d1565b60405180910390fd5b8060119080519060200190611a989291906139eb565b5050565b601460009054906101000a900460ff1681565b601460039054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611afb90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2790614b68565b8015611b745780601f10611b4957610100808354040283529160200191611b74565b820191906000526020600020905b815481529060010190602001808311611b5757829003601f168201915b5050505050905090565b600080600080611b8d85611d6b565b80935081945082955050505060018684848460405160008152602001604052604051611bbc94939291906145ca565b6020604051602081039080840390855afa158015611bde573d6000803e3d6000fd5b50505060206040510351935050505092915050565b611bfb6129bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c60576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611c6d6129bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d1a6129bf565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d5f91906145af565b60405180910390a35050565b60008060006041845114611d7e57600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b60008083604051602001611dc291906144c5565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1d8285611b7e565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b611e48848484612a82565b611e678373ffffffffffffffffffffffffffffffffffffffff166132a7565b15611eaf57611e78848484846132ca565b611eae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60105481565b611ec36129bf565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906146d1565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b600d5481565b6060611f6582612971565b611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906147d1565b60405180910390fd5b60001515601460019054906101000a900460ff16151514156120525760128054611fcd90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff990614b68565b80156120465780601f1061201b57610100808354040283529160200191612046565b820191906000526020600020905b81548152906001019060200180831161202957829003601f168201915b505050505090506120ae565b600061205c61342a565b9050600081511161207c57604051806020016040528060008152506120aa565b80612086846134bc565b601360405160200161209a939291906144e0565b6040516020818303038152906040525b9150505b919050565b816120bc611ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218457601460009054906101000a900460ff161561213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612135906146f1565b60405180910390fd5b600e54811115612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90614751565b60405180910390fd5b5b600081116121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906146b1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90614691565b60405180910390fd5b600b5481612241610f4c565b61224b9190614986565b111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614731565b60405180910390fd5b60011515601460039054906101000a900460ff161515141561243257600115156122b63384611dae565b1515146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614631565b60405180910390fd5b600d5483601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123469190614986565b1115612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90614791565b60405180910390fd5b826010546123959190614a0d565b3410156123d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ce906147f1565b60405180910390fd5b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124269190614986565b925050819055506125b7565b601460029054906101000a900460ff16612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247890614771565b60405180910390fd5b600c5483601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124cf9190614986565b1115612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614711565b60405180910390fd5b82600f5461251e9190614a0d565b341015612560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612557906147f1565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125af9190614986565b925050819055505b6125c13384612f38565b505050565b6125ce6129bf565b73ffffffffffffffffffffffffffffffffffffffff166125ec611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906146d1565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126e86129bf565b73ffffffffffffffffffffffffffffffffffffffff16612706611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906146d1565b60405180910390fd5b80601290805190602001906127729291906139eb565b5050565b61277e6129bf565b73ffffffffffffffffffffffffffffffffffffffff1661279c611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e9906146d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990614651565b60405180910390fd5b61286b816131e1565b50565b6128766129bf565b73ffffffffffffffffffffffffffffffffffffffff16612894611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906146d1565b60405180910390fd5b80601460036101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161297c612a79565b1115801561298b575060005482105b80156129b8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612a8d82612f56565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af8576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612b196129bf565b73ffffffffffffffffffffffffffffffffffffffff161480612b485750612b4785612b426129bf565b61264c565b5b80612b8d5750612b566129bf565b73ffffffffffffffffffffffffffffffffffffffff16612b7584610d45565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612bc6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c2d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3a858585600161361d565b612c46600084876129c7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ec6576000548214612ec557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f318585856001613623565b5050505050565b612f52828260405180602001604052806000815250613629565b5050565b612f5e613a71565b600082905080612f6c612a79565b116131aa576000548110156131a9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516131a757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461308b5780925050506131dc565b5b6001156131a657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146131a15780925050506131dc565b61308c565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f06129bf565b8786866040518563ffffffff1660e01b81526004016133129493929190614541565b602060405180830381600087803b15801561332c57600080fd5b505af192505050801561335d57506040513d601f19601f8201168201806040525081019061335a9190613f04565b60015b6133d7573d806000811461338d576040519150601f19603f3d011682016040523d82523d6000602084013e613392565b606091505b506000815114156133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606011805461343990614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461346590614b68565b80156134b25780601f10613487576101008083540402835291602001916134b2565b820191906000526020600020905b81548152906001019060200180831161349557829003601f168201915b5050505050905090565b60606000821415613504576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613618565b600082905060005b6000821461353657808061351f90614bcb565b915050600a8261352f91906149dc565b915061350c565b60008167ffffffffffffffff81111561355257613551614d25565b5b6040519080825280601f01601f1916602001820160405280156135845781602001600182028036833780820191505090505b5090505b600085146136115760018261359d9190614a67565b9150600a856135ac9190614c38565b60306135b89190614986565b60f81b8183815181106135ce576135cd614cf6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561360a91906149dc565b9450613588565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613696576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156136d1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136de600085838661361d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061389f8673ffffffffffffffffffffffffffffffffffffffff166132a7565b15613964575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461391460008784806001019550876132ca565b61394a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106138a557826000541461395f57600080fd5b6139cf565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613965575b8160008190555050506139e56000858386613623565b50505050565b8280546139f790614b68565b90600052602060002090601f016020900481019282613a195760008555613a60565b82601f10613a3257805160ff1916838001178555613a60565b82800160010185558215613a60579182015b82811115613a5f578251825591602001919060010190613a44565b5b509050613a6d9190613ab4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613acd576000816000905550600101613ab5565b5090565b6000613ae4613adf84614888565b614863565b905082815260208101848484011115613b0057613aff614d59565b5b613b0b848285614b26565b509392505050565b6000613b26613b21846148b9565b614863565b905082815260208101848484011115613b4257613b41614d59565b5b613b4d848285614b26565b509392505050565b600081359050613b6481615120565b92915050565b600081359050613b7981615137565b92915050565b600081359050613b8e8161514e565b92915050565b600081359050613ba381615165565b92915050565b600081519050613bb881615165565b92915050565b600082601f830112613bd357613bd2614d54565b5b8135613be3848260208601613ad1565b91505092915050565b600082601f830112613c0157613c00614d54565b5b8135613c11848260208601613b13565b91505092915050565b600081359050613c298161517c565b92915050565b600060208284031215613c4557613c44614d63565b5b6000613c5384828501613b55565b91505092915050565b60008060408385031215613c7357613c72614d63565b5b6000613c8185828601613b55565b9250506020613c9285828601613b55565b9150509250929050565b600080600060608486031215613cb557613cb4614d63565b5b6000613cc386828701613b55565b9350506020613cd486828701613b55565b9250506040613ce586828701613c1a565b9150509250925092565b60008060008060808587031215613d0957613d08614d63565b5b6000613d1787828801613b55565b9450506020613d2887828801613b55565b9350506040613d3987828801613c1a565b925050606085013567ffffffffffffffff811115613d5a57613d59614d5e565b5b613d6687828801613bbe565b91505092959194509250565b60008060408385031215613d8957613d88614d63565b5b6000613d9785828601613b55565b9250506020613da885828601613b6a565b9150509250929050565b60008060408385031215613dc957613dc8614d63565b5b6000613dd785828601613b55565b925050602083013567ffffffffffffffff811115613df857613df7614d5e565b5b613e0485828601613bbe565b9150509250929050565b60008060408385031215613e2557613e24614d63565b5b6000613e3385828601613b55565b9250506020613e4485828601613c1a565b9150509250929050565b600060208284031215613e6457613e63614d63565b5b6000613e7284828501613b6a565b91505092915050565b60008060408385031215613e9257613e91614d63565b5b6000613ea085828601613b7f565b925050602083013567ffffffffffffffff811115613ec157613ec0614d5e565b5b613ecd85828601613bbe565b9150509250929050565b600060208284031215613eed57613eec614d63565b5b6000613efb84828501613b94565b91505092915050565b600060208284031215613f1a57613f19614d63565b5b6000613f2884828501613ba9565b91505092915050565b600060208284031215613f4757613f46614d63565b5b600082013567ffffffffffffffff811115613f6557613f64614d5e565b5b613f7184828501613bbe565b91505092915050565b600060208284031215613f9057613f8f614d63565b5b600082013567ffffffffffffffff811115613fae57613fad614d5e565b5b613fba84828501613bec565b91505092915050565b600060208284031215613fd957613fd8614d63565b5b6000613fe784828501613c1a565b91505092915050565b6000806040838503121561400757614006614d63565b5b600061401585828601613c1a565b925050602061402685828601613b55565b9150509250929050565b6000806040838503121561404757614046614d63565b5b600061405585828601613c1a565b925050602083013567ffffffffffffffff81111561407657614075614d5e565b5b61408285828601613bbe565b9150509250929050565b60006140988383614498565b60208301905092915050565b6140ad81614a9b565b82525050565b6140c46140bf82614a9b565b614c14565b82525050565b60006140d58261490f565b6140df818561493d565b93506140ea836148ea565b8060005b8381101561411b578151614102888261408c565b975061410d83614930565b9250506001810190506140ee565b5085935050505092915050565b61413181614aad565b82525050565b61414081614ab9565b82525050565b60006141518261491a565b61415b818561494e565b935061416b818560208601614b35565b61417481614d68565b840191505092915050565b600061418a82614925565b614194818561496a565b93506141a4818560208601614b35565b6141ad81614d68565b840191505092915050565b60006141c382614925565b6141cd818561497b565b93506141dd818560208601614b35565b80840191505092915050565b600081546141f681614b68565b614200818661497b565b9450600182166000811461421b576001811461422c5761425f565b60ff1983168652818601935061425f565b614235856148fa565b60005b8381101561425757815481890152600182019150602081019050614238565b838801955050505b50505092915050565b6000614275602d8361496a565b915061428082614d86565b604082019050919050565b600061429860268361496a565b91506142a382614dd5565b604082019050919050565b60006142bb601f8361496a565b91506142c682614e24565b602082019050919050565b60006142de601e8361496a565b91506142e982614e4d565b602082019050919050565b6000614301601a8361496a565b915061430c82614e76565b602082019050919050565b600061432460208361496a565b915061432f82614e9f565b602082019050919050565b600061434760178361496a565b915061435282614ec8565b602082019050919050565b600061436a60398361496a565b915061437582614ef1565b604082019050919050565b600061438d60268361496a565b915061439882614f40565b604082019050919050565b60006143b060008361495f565b91506143bb82614f8f565b600082019050919050565b60006143d360228361496a565b91506143de82614f92565b604082019050919050565b60006143f660338361496a565b915061440182614fe1565b604082019050919050565b6000614419603d8361496a565b915061442482615030565b604082019050919050565b600061443c601f8361496a565b91506144478261507f565b602082019050919050565b600061445f60308361496a565b915061446a826150a8565b604082019050919050565b600061448260138361496a565b915061448d826150f7565b602082019050919050565b6144a181614b0f565b82525050565b6144b081614b0f565b82525050565b6144bf81614b19565b82525050565b60006144d182846140b3565b60148201915081905092915050565b60006144ec82866141b8565b91506144f882856141b8565b915061450482846141e9565b9150819050949350505050565b600061451c826143a3565b9150819050919050565b600060208201905061453b60008301846140a4565b92915050565b600060808201905061455660008301876140a4565b61456360208301866140a4565b61457060408301856144a7565b81810360608301526145828184614146565b905095945050505050565b600060208201905081810360008301526145a781846140ca565b905092915050565b60006020820190506145c46000830184614128565b92915050565b60006080820190506145df6000830187614137565b6145ec60208301866144b6565b6145f96040830185614137565b6146066060830184614137565b95945050505050565b60006020820190508181036000830152614629818461417f565b905092915050565b6000602082019050818103600083015261464a81614268565b9050919050565b6000602082019050818103600083015261466a8161428b565b9050919050565b6000602082019050818103600083015261468a816142ae565b9050919050565b600060208201905081810360008301526146aa816142d1565b9050919050565b600060208201905081810360008301526146ca816142f4565b9050919050565b600060208201905081810360008301526146ea81614317565b9050919050565b6000602082019050818103600083015261470a8161433a565b9050919050565b6000602082019050818103600083015261472a8161435d565b9050919050565b6000602082019050818103600083015261474a81614380565b9050919050565b6000602082019050818103600083015261476a816143c6565b9050919050565b6000602082019050818103600083015261478a816143e9565b9050919050565b600060208201905081810360008301526147aa8161440c565b9050919050565b600060208201905081810360008301526147ca8161442f565b9050919050565b600060208201905081810360008301526147ea81614452565b9050919050565b6000602082019050818103600083015261480a81614475565b9050919050565b600060208201905061482660008301846144a7565b92915050565b600060608201905061484160008301866144b6565b61484e6020830185614137565b61485b6040830184614137565b949350505050565b600061486d61487e565b90506148798282614b9a565b919050565b6000604051905090565b600067ffffffffffffffff8211156148a3576148a2614d25565b5b6148ac82614d68565b9050602081019050919050565b600067ffffffffffffffff8211156148d4576148d3614d25565b5b6148dd82614d68565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061499182614b0f565b915061499c83614b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149d1576149d0614c69565b5b828201905092915050565b60006149e782614b0f565b91506149f283614b0f565b925082614a0257614a01614c98565b5b828204905092915050565b6000614a1882614b0f565b9150614a2383614b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a5c57614a5b614c69565b5b828202905092915050565b6000614a7282614b0f565b9150614a7d83614b0f565b925082821015614a9057614a8f614c69565b5b828203905092915050565b6000614aa682614aef565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614b53578082015181840152602081019050614b38565b83811115614b62576000848401525b50505050565b60006002820490506001821680614b8057607f821691505b60208210811415614b9457614b93614cc7565b5b50919050565b614ba382614d68565b810181811067ffffffffffffffff82111715614bc257614bc1614d25565b5b80604052505050565b6000614bd682614b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0957614c08614c69565b5b600182019050919050565b6000614c1f82614c26565b9050919050565b6000614c3182614d79565b9050919050565b6000614c4382614b0f565b9150614c4e83614b0f565b925082614c5e57614c5d614c98565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e65787573204163636573732050617373203a3a20596f7520617265206e6f7460008201527f2077686974656c69737465642e00000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e65787573204163636573732050617373203a3a204d6178207075626c69632060008201527f6d696e74207065722077616c6c65742065786365656465642100000000000000602082015250565b7f4e65787573204163636573732050617373203a3a204265796f6e64204d61782060008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e65787573204163636573732050617373203a3a205075626c6963204d696e7460008201527f206973204e6f7420596574204163746976652e00000000000000000000000000602082015250565b7f4e65787573204163636573732050617373203a3a204d61782077686974656c6960008201527f7374206d696e74207065722077616c6c65742065786365656465642121000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61512981614a9b565b811461513457600080fd5b50565b61514081614aad565b811461514b57600080fd5b50565b61515781614ab9565b811461516257600080fd5b50565b61516e81614ac3565b811461517957600080fd5b50565b61518581614b0f565b811461519057600080fd5b5056fea26469706673582212204e7ef1f4ed2ffd0cb9b536cf5b51507176b7d080f92e609c87452bbe1703fa7464736f6c63430008070033697066733a2f2f6261666b72656965347368616c686c356c703469627478733436756e793461787236676671376c693763357a6237686c343769646a637232696671000000000000000000000000ce55031a8bd1e1c377b8ea2a5560650f29fc31ee
Deployed Bytecode
0x6080604052600436106102c95760003560e01c806365f1309711610175578063a7bb5803116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610afb578063f2c4ce1e14610b38578063f2fde38b14610b61578063f958a65714610b8a576102c9565b8063c87b56dd14610a79578063db7fd40814610ab6578063df106d1314610ad2576102c9565b8063a7bb580314610955578063b0940d4514610994578063b88d4fde146109d1578063bc912e1a146109fa578063bedb86fb14610a25578063c08dfd3c14610a4e576102c9565b80638456cb591161012e5780638456cb591461084357806386a173ee1461086e5780638da5cb5b1461089957806395d89b41146108c457806397aba7f9146108ef578063a22cb4651461092c576102c9565b806365f13097146107455780636a14550c1461077057806370a082311461079b578063715018a6146107d857806372250380146107ef5780637ec4a6591461081a576102c9565b806332cb6b0c1161023457806351830227116101ed5780635aca1bb6116101c75780635aca1bb61461068b57806362b99ad4146106b457806362e84eff146106df5780636352211e14610708576102c9565b8063518302271461060c5780635503a0e8146106375780635841a03014610662576102c9565b806332cb6b0c1461051057806333bc1c5c1461053b5780633ccfd60b1461056657806342842e0e1461057d578063438b6300146105a6578063512b658d146105e3576102c9565b8063121c93ca11610286578063121c93ca1461040457806318160ddd1461042d5780631c16521c1461045857806323b872dd146104955780632a3f300c146104be5780632f9a7c58146104e7576102c9565b806301ffc9a7146102ce5780630345e3cb1461030b57806306fdde031461034857806307e89ec014610373578063081812fc1461039e578063095ea7b3146103db575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613ed7565b610bb3565b60405161030291906145af565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613c2f565b610c95565b60405161033f9190614811565b60405180910390f35b34801561035457600080fd5b5061035d610cad565b60405161036a919061460f565b60405180910390f35b34801561037f57600080fd5b50610388610d3f565b6040516103959190614811565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613fc3565b610d45565b6040516103d29190614526565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190613e0e565b610dc1565b005b34801561041057600080fd5b5061042b60048036038101906104269190613fc3565b610ec6565b005b34801561043957600080fd5b50610442610f4c565b60405161044f9190614811565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613c2f565b610f63565b60405161048c9190614811565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613c9c565b610f7b565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e4e565b610f8b565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613fc3565b611024565b005b34801561051c57600080fd5b506105256110aa565b6040516105329190614811565b60405180910390f35b34801561054757600080fd5b506105506110b0565b60405161055d91906145af565b60405180910390f35b34801561057257600080fd5b5061057b6110c3565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613c9c565b611215565b005b3480156105b257600080fd5b506105cd60048036038101906105c89190613c2f565b611235565b6040516105da919061458d565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190613ff0565b611449565b005b34801561061857600080fd5b5061062161152a565b60405161062e91906145af565b60405180910390f35b34801561064357600080fd5b5061064c61153d565b604051610659919061460f565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613fc3565b6115cb565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613e4e565b611651565b005b3480156106c057600080fd5b506106c96116ea565b6040516106d6919061460f565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613fc3565b611778565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613fc3565b6117fe565b60405161073c9190614526565b60405180910390f35b34801561075157600080fd5b5061075a611814565b6040516107679190614811565b60405180910390f35b34801561077c57600080fd5b5061078561181a565b6040516107929190614811565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613c2f565b611820565b6040516107cf9190614811565b60405180910390f35b3480156107e457600080fd5b506107ed6118f0565b005b3480156107fb57600080fd5b50610804611978565b604051610811919061460f565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c9190613f7a565b611a06565b005b34801561084f57600080fd5b50610858611a9c565b60405161086591906145af565b60405180910390f35b34801561087a57600080fd5b50610883611aaf565b60405161089091906145af565b60405180910390f35b3480156108a557600080fd5b506108ae611ac2565b6040516108bb9190614526565b60405180910390f35b3480156108d057600080fd5b506108d9611aec565b6040516108e6919061460f565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613e7b565b611b7e565b6040516109239190614526565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613d72565b611bf3565b005b34801561096157600080fd5b5061097c60048036038101906109779190613f31565b611d6b565b60405161098b9392919061482c565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613db2565b611dae565b6040516109c891906145af565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190613cef565b611e3d565b005b348015610a0657600080fd5b50610a0f611eb5565b604051610a1c9190614811565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613e4e565b611ebb565b005b348015610a5a57600080fd5b50610a63611f54565b604051610a709190614811565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613fc3565b611f5a565b604051610aad919061460f565b60405180910390f35b610ad06004803603810190610acb9190614030565b6120b3565b005b348015610ade57600080fd5b50610af96004803603810190610af49190613fc3565b6125c6565b005b348015610b0757600080fd5b50610b226004803603810190610b1d9190613c5c565b61264c565b604051610b2f91906145af565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613f7a565b6126e0565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190613c2f565b612776565b005b348015610b9657600080fd5b50610bb16004803603810190610bac9190613e4e565b61286e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c7e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c8e5750610c8d82612907565b5b9050919050565b60166020528060005260406000206000915090505481565b606060028054610cbc90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890614b68565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b600f5481565b6000610d5082612971565b610d86576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dcc826117fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e536129bf565b73ffffffffffffffffffffffffffffffffffffffff1614610eb657610e7f81610e7a6129bf565b61264c565b610eb5576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ec18383836129c7565b505050565b610ece6129bf565b73ffffffffffffffffffffffffffffffffffffffff16610eec611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906146d1565b60405180910390fd5b8060108190555050565b6000610f56612a79565b6001546000540303905090565b60156020528060005260406000206000915090505481565b610f86838383612a82565b505050565b610f936129bf565b73ffffffffffffffffffffffffffffffffffffffff16610fb1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe906146d1565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61102c6129bf565b73ffffffffffffffffffffffffffffffffffffffff1661104a611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906146d1565b60405180910390fd5b80600f8190555050565b600b5481565b601460029054906101000a900460ff1681565b6110cb6129bf565b73ffffffffffffffffffffffffffffffffffffffff166110e9611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906146d1565b60405180910390fd5b60026009541415611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c906147b1565b60405180910390fd5b60026009819055506000611197611ac2565b73ffffffffffffffffffffffffffffffffffffffff16476040516111ba90614511565b60006040518083038185875af1925050503d80600081146111f7576040519150601f19603f3d011682016040523d82523d6000602084013e6111fc565b606091505b505090508061120a57600080fd5b506001600981905550565b61123083838360405180602001604052806000815250611e3d565b505050565b6060600061124283611820565b905060008167ffffffffffffffff8111156112605761125f614d25565b5b60405190808252806020026020018201604052801561128e5781602001602082028036833780820191505090505b509050600061129b612a79565b90506000805b84821080156112b1575060005483105b1561143c576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161142857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113c457806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611427578385848151811061140c5761140b614cf6565b5b602002602001018181525050828061142390614bcb565b9350505b5b838061143390614bcb565b945050506112a1565b8395505050505050919050565b6114516129bf565b73ffffffffffffffffffffffffffffffffffffffff1661146f611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906146d1565b60405180910390fd5b600b54826114d1610f4c565b6114db9190614986565b111561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614671565b60405180910390fd5b6115268183612f38565b5050565b601460019054906101000a900460ff1681565b6013805461154a90614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461157690614b68565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b6115d36129bf565b73ffffffffffffffffffffffffffffffffffffffff166115f1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e906146d1565b60405180910390fd5b80600d8190555050565b6116596129bf565b73ffffffffffffffffffffffffffffffffffffffff16611677611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906146d1565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b601180546116f790614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461172390614b68565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b505050505081565b6117806129bf565b73ffffffffffffffffffffffffffffffffffffffff1661179e611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb906146d1565b60405180910390fd5b80600c8190555050565b600061180982612f56565b600001519050919050565b600c5481565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611888576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118f86129bf565b73ffffffffffffffffffffffffffffffffffffffff16611916611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906146d1565b60405180910390fd5b61197660006131e1565b565b6012805461198590614b68565b80601f01602080910402602001604051908101604052809291908181526020018280546119b190614b68565b80156119fe5780601f106119d3576101008083540402835291602001916119fe565b820191906000526020600020905b8154815290600101906020018083116119e157829003601f168201915b505050505081565b611a0e6129bf565b73ffffffffffffffffffffffffffffffffffffffff16611a2c611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a79906146d1565b60405180910390fd5b8060119080519060200190611a989291906139eb565b5050565b601460009054906101000a900460ff1681565b601460039054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611afb90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2790614b68565b8015611b745780601f10611b4957610100808354040283529160200191611b74565b820191906000526020600020905b815481529060010190602001808311611b5757829003601f168201915b5050505050905090565b600080600080611b8d85611d6b565b80935081945082955050505060018684848460405160008152602001604052604051611bbc94939291906145ca565b6020604051602081039080840390855afa158015611bde573d6000803e3d6000fd5b50505060206040510351935050505092915050565b611bfb6129bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c60576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611c6d6129bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d1a6129bf565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d5f91906145af565b60405180910390a35050565b60008060006041845114611d7e57600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b60008083604051602001611dc291906144c5565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1d8285611b7e565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b611e48848484612a82565b611e678373ffffffffffffffffffffffffffffffffffffffff166132a7565b15611eaf57611e78848484846132ca565b611eae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60105481565b611ec36129bf565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906146d1565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b600d5481565b6060611f6582612971565b611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906147d1565b60405180910390fd5b60001515601460019054906101000a900460ff16151514156120525760128054611fcd90614b68565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff990614b68565b80156120465780601f1061201b57610100808354040283529160200191612046565b820191906000526020600020905b81548152906001019060200180831161202957829003601f168201915b505050505090506120ae565b600061205c61342a565b9050600081511161207c57604051806020016040528060008152506120aa565b80612086846134bc565b601360405160200161209a939291906144e0565b6040516020818303038152906040525b9150505b919050565b816120bc611ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218457601460009054906101000a900460ff161561213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612135906146f1565b60405180910390fd5b600e54811115612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90614751565b60405180910390fd5b5b600081116121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906146b1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90614691565b60405180910390fd5b600b5481612241610f4c565b61224b9190614986565b111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614731565b60405180910390fd5b60011515601460039054906101000a900460ff161515141561243257600115156122b63384611dae565b1515146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614631565b60405180910390fd5b600d5483601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123469190614986565b1115612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90614791565b60405180910390fd5b826010546123959190614a0d565b3410156123d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ce906147f1565b60405180910390fd5b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124269190614986565b925050819055506125b7565b601460029054906101000a900460ff16612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247890614771565b60405180910390fd5b600c5483601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124cf9190614986565b1115612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614711565b60405180910390fd5b82600f5461251e9190614a0d565b341015612560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612557906147f1565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125af9190614986565b925050819055505b6125c13384612f38565b505050565b6125ce6129bf565b73ffffffffffffffffffffffffffffffffffffffff166125ec611ac2565b73ffffffffffffffffffffffffffffffffffffffff1614612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906146d1565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126e86129bf565b73ffffffffffffffffffffffffffffffffffffffff16612706611ac2565b73ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906146d1565b60405180910390fd5b80601290805190602001906127729291906139eb565b5050565b61277e6129bf565b73ffffffffffffffffffffffffffffffffffffffff1661279c611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e9906146d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990614651565b60405180910390fd5b61286b816131e1565b50565b6128766129bf565b73ffffffffffffffffffffffffffffffffffffffff16612894611ac2565b73ffffffffffffffffffffffffffffffffffffffff16146128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906146d1565b60405180910390fd5b80601460036101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161297c612a79565b1115801561298b575060005482105b80156129b8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612a8d82612f56565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af8576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612b196129bf565b73ffffffffffffffffffffffffffffffffffffffff161480612b485750612b4785612b426129bf565b61264c565b5b80612b8d5750612b566129bf565b73ffffffffffffffffffffffffffffffffffffffff16612b7584610d45565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612bc6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c2d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3a858585600161361d565b612c46600084876129c7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ec6576000548214612ec557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f318585856001613623565b5050505050565b612f52828260405180602001604052806000815250613629565b5050565b612f5e613a71565b600082905080612f6c612a79565b116131aa576000548110156131a9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516131a757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461308b5780925050506131dc565b5b6001156131a657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146131a15780925050506131dc565b61308c565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f06129bf565b8786866040518563ffffffff1660e01b81526004016133129493929190614541565b602060405180830381600087803b15801561332c57600080fd5b505af192505050801561335d57506040513d601f19601f8201168201806040525081019061335a9190613f04565b60015b6133d7573d806000811461338d576040519150601f19603f3d011682016040523d82523d6000602084013e613392565b606091505b506000815114156133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606011805461343990614b68565b80601f016020809104026020016040519081016040528092919081815260200182805461346590614b68565b80156134b25780601f10613487576101008083540402835291602001916134b2565b820191906000526020600020905b81548152906001019060200180831161349557829003601f168201915b5050505050905090565b60606000821415613504576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613618565b600082905060005b6000821461353657808061351f90614bcb565b915050600a8261352f91906149dc565b915061350c565b60008167ffffffffffffffff81111561355257613551614d25565b5b6040519080825280601f01601f1916602001820160405280156135845781602001600182028036833780820191505090505b5090505b600085146136115760018261359d9190614a67565b9150600a856135ac9190614c38565b60306135b89190614986565b60f81b8183815181106135ce576135cd614cf6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561360a91906149dc565b9450613588565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613696576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156136d1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136de600085838661361d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061389f8673ffffffffffffffffffffffffffffffffffffffff166132a7565b15613964575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461391460008784806001019550876132ca565b61394a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106138a557826000541461395f57600080fd5b6139cf565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613965575b8160008190555050506139e56000858386613623565b50505050565b8280546139f790614b68565b90600052602060002090601f016020900481019282613a195760008555613a60565b82601f10613a3257805160ff1916838001178555613a60565b82800160010185558215613a60579182015b82811115613a5f578251825591602001919060010190613a44565b5b509050613a6d9190613ab4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613acd576000816000905550600101613ab5565b5090565b6000613ae4613adf84614888565b614863565b905082815260208101848484011115613b0057613aff614d59565b5b613b0b848285614b26565b509392505050565b6000613b26613b21846148b9565b614863565b905082815260208101848484011115613b4257613b41614d59565b5b613b4d848285614b26565b509392505050565b600081359050613b6481615120565b92915050565b600081359050613b7981615137565b92915050565b600081359050613b8e8161514e565b92915050565b600081359050613ba381615165565b92915050565b600081519050613bb881615165565b92915050565b600082601f830112613bd357613bd2614d54565b5b8135613be3848260208601613ad1565b91505092915050565b600082601f830112613c0157613c00614d54565b5b8135613c11848260208601613b13565b91505092915050565b600081359050613c298161517c565b92915050565b600060208284031215613c4557613c44614d63565b5b6000613c5384828501613b55565b91505092915050565b60008060408385031215613c7357613c72614d63565b5b6000613c8185828601613b55565b9250506020613c9285828601613b55565b9150509250929050565b600080600060608486031215613cb557613cb4614d63565b5b6000613cc386828701613b55565b9350506020613cd486828701613b55565b9250506040613ce586828701613c1a565b9150509250925092565b60008060008060808587031215613d0957613d08614d63565b5b6000613d1787828801613b55565b9450506020613d2887828801613b55565b9350506040613d3987828801613c1a565b925050606085013567ffffffffffffffff811115613d5a57613d59614d5e565b5b613d6687828801613bbe565b91505092959194509250565b60008060408385031215613d8957613d88614d63565b5b6000613d9785828601613b55565b9250506020613da885828601613b6a565b9150509250929050565b60008060408385031215613dc957613dc8614d63565b5b6000613dd785828601613b55565b925050602083013567ffffffffffffffff811115613df857613df7614d5e565b5b613e0485828601613bbe565b9150509250929050565b60008060408385031215613e2557613e24614d63565b5b6000613e3385828601613b55565b9250506020613e4485828601613c1a565b9150509250929050565b600060208284031215613e6457613e63614d63565b5b6000613e7284828501613b6a565b91505092915050565b60008060408385031215613e9257613e91614d63565b5b6000613ea085828601613b7f565b925050602083013567ffffffffffffffff811115613ec157613ec0614d5e565b5b613ecd85828601613bbe565b9150509250929050565b600060208284031215613eed57613eec614d63565b5b6000613efb84828501613b94565b91505092915050565b600060208284031215613f1a57613f19614d63565b5b6000613f2884828501613ba9565b91505092915050565b600060208284031215613f4757613f46614d63565b5b600082013567ffffffffffffffff811115613f6557613f64614d5e565b5b613f7184828501613bbe565b91505092915050565b600060208284031215613f9057613f8f614d63565b5b600082013567ffffffffffffffff811115613fae57613fad614d5e565b5b613fba84828501613bec565b91505092915050565b600060208284031215613fd957613fd8614d63565b5b6000613fe784828501613c1a565b91505092915050565b6000806040838503121561400757614006614d63565b5b600061401585828601613c1a565b925050602061402685828601613b55565b9150509250929050565b6000806040838503121561404757614046614d63565b5b600061405585828601613c1a565b925050602083013567ffffffffffffffff81111561407657614075614d5e565b5b61408285828601613bbe565b9150509250929050565b60006140988383614498565b60208301905092915050565b6140ad81614a9b565b82525050565b6140c46140bf82614a9b565b614c14565b82525050565b60006140d58261490f565b6140df818561493d565b93506140ea836148ea565b8060005b8381101561411b578151614102888261408c565b975061410d83614930565b9250506001810190506140ee565b5085935050505092915050565b61413181614aad565b82525050565b61414081614ab9565b82525050565b60006141518261491a565b61415b818561494e565b935061416b818560208601614b35565b61417481614d68565b840191505092915050565b600061418a82614925565b614194818561496a565b93506141a4818560208601614b35565b6141ad81614d68565b840191505092915050565b60006141c382614925565b6141cd818561497b565b93506141dd818560208601614b35565b80840191505092915050565b600081546141f681614b68565b614200818661497b565b9450600182166000811461421b576001811461422c5761425f565b60ff1983168652818601935061425f565b614235856148fa565b60005b8381101561425757815481890152600182019150602081019050614238565b838801955050505b50505092915050565b6000614275602d8361496a565b915061428082614d86565b604082019050919050565b600061429860268361496a565b91506142a382614dd5565b604082019050919050565b60006142bb601f8361496a565b91506142c682614e24565b602082019050919050565b60006142de601e8361496a565b91506142e982614e4d565b602082019050919050565b6000614301601a8361496a565b915061430c82614e76565b602082019050919050565b600061432460208361496a565b915061432f82614e9f565b602082019050919050565b600061434760178361496a565b915061435282614ec8565b602082019050919050565b600061436a60398361496a565b915061437582614ef1565b604082019050919050565b600061438d60268361496a565b915061439882614f40565b604082019050919050565b60006143b060008361495f565b91506143bb82614f8f565b600082019050919050565b60006143d360228361496a565b91506143de82614f92565b604082019050919050565b60006143f660338361496a565b915061440182614fe1565b604082019050919050565b6000614419603d8361496a565b915061442482615030565b604082019050919050565b600061443c601f8361496a565b91506144478261507f565b602082019050919050565b600061445f60308361496a565b915061446a826150a8565b604082019050919050565b600061448260138361496a565b915061448d826150f7565b602082019050919050565b6144a181614b0f565b82525050565b6144b081614b0f565b82525050565b6144bf81614b19565b82525050565b60006144d182846140b3565b60148201915081905092915050565b60006144ec82866141b8565b91506144f882856141b8565b915061450482846141e9565b9150819050949350505050565b600061451c826143a3565b9150819050919050565b600060208201905061453b60008301846140a4565b92915050565b600060808201905061455660008301876140a4565b61456360208301866140a4565b61457060408301856144a7565b81810360608301526145828184614146565b905095945050505050565b600060208201905081810360008301526145a781846140ca565b905092915050565b60006020820190506145c46000830184614128565b92915050565b60006080820190506145df6000830187614137565b6145ec60208301866144b6565b6145f96040830185614137565b6146066060830184614137565b95945050505050565b60006020820190508181036000830152614629818461417f565b905092915050565b6000602082019050818103600083015261464a81614268565b9050919050565b6000602082019050818103600083015261466a8161428b565b9050919050565b6000602082019050818103600083015261468a816142ae565b9050919050565b600060208201905081810360008301526146aa816142d1565b9050919050565b600060208201905081810360008301526146ca816142f4565b9050919050565b600060208201905081810360008301526146ea81614317565b9050919050565b6000602082019050818103600083015261470a8161433a565b9050919050565b6000602082019050818103600083015261472a8161435d565b9050919050565b6000602082019050818103600083015261474a81614380565b9050919050565b6000602082019050818103600083015261476a816143c6565b9050919050565b6000602082019050818103600083015261478a816143e9565b9050919050565b600060208201905081810360008301526147aa8161440c565b9050919050565b600060208201905081810360008301526147ca8161442f565b9050919050565b600060208201905081810360008301526147ea81614452565b9050919050565b6000602082019050818103600083015261480a81614475565b9050919050565b600060208201905061482660008301846144a7565b92915050565b600060608201905061484160008301866144b6565b61484e6020830185614137565b61485b6040830184614137565b949350505050565b600061486d61487e565b90506148798282614b9a565b919050565b6000604051905090565b600067ffffffffffffffff8211156148a3576148a2614d25565b5b6148ac82614d68565b9050602081019050919050565b600067ffffffffffffffff8211156148d4576148d3614d25565b5b6148dd82614d68565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061499182614b0f565b915061499c83614b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149d1576149d0614c69565b5b828201905092915050565b60006149e782614b0f565b91506149f283614b0f565b925082614a0257614a01614c98565b5b828204905092915050565b6000614a1882614b0f565b9150614a2383614b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a5c57614a5b614c69565b5b828202905092915050565b6000614a7282614b0f565b9150614a7d83614b0f565b925082821015614a9057614a8f614c69565b5b828203905092915050565b6000614aa682614aef565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614b53578082015181840152602081019050614b38565b83811115614b62576000848401525b50505050565b60006002820490506001821680614b8057607f821691505b60208210811415614b9457614b93614cc7565b5b50919050565b614ba382614d68565b810181811067ffffffffffffffff82111715614bc257614bc1614d25565b5b80604052505050565b6000614bd682614b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0957614c08614c69565b5b600182019050919050565b6000614c1f82614c26565b9050919050565b6000614c3182614d79565b9050919050565b6000614c4382614b0f565b9150614c4e83614b0f565b925082614c5e57614c5d614c98565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e65787573204163636573732050617373203a3a20596f7520617265206e6f7460008201527f2077686974656c69737465642e00000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e65787573204163636573732050617373203a3a204d6178207075626c69632060008201527f6d696e74207065722077616c6c65742065786365656465642100000000000000602082015250565b7f4e65787573204163636573732050617373203a3a204265796f6e64204d61782060008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e65787573204163636573732050617373203a3a205075626c6963204d696e7460008201527f206973204e6f7420596574204163746976652e00000000000000000000000000602082015250565b7f4e65787573204163636573732050617373203a3a204d61782077686974656c6960008201527f7374206d696e74207065722077616c6c65742065786365656465642121000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61512981614a9b565b811461513457600080fd5b50565b61514081614aad565b811461514b57600080fd5b50565b61515781614ab9565b811461516257600080fd5b50565b61516e81614ac3565b811461517957600080fd5b50565b61518581614b0f565b811461519057600080fd5b5056fea26469706673582212204e7ef1f4ed2ffd0cb9b536cf5b51507176b7d080f92e609c87452bbe1703fa7464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ce55031a8bd1e1c377b8ea2a5560650f29fc31ee
-----Decoded View---------------
Arg [0] : _signerAddress (address): 0xcE55031a8bD1E1c377B8EA2a5560650F29Fc31Ee
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ce55031a8bd1e1c377b8ea2a5560650f29fc31ee
Deployed Bytecode Sourcemap
36809:6804:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19682:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37520:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22797:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37105:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24301:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23863:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42635:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18922:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37463:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43148:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42528:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36944:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37381:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43442:162;;;;;;;;;;;;;:::i;:::-;;25407:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41334:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39673:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37273:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42850:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43342:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37208:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42748:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22605:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36983:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37068:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20051:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4069:103;;;;;;;;;;;;;:::i;:::-;;37238:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42257:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37315:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37418:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3418:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22966:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40176:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24577:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39964:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25663:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37154:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43059:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37024:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40753:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38612:1028;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42955:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24935:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42394:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4327:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43241:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19682:305;19784:4;19836:25;19821:40;;;:11;:40;;;;:105;;;;19893:33;19878:48;;;:11;:48;;;;19821:105;:158;;;;19943:36;19967:11;19943:23;:36::i;:::-;19821:158;19801:178;;19682:305;;;:::o;37520:53::-;;;;;;;;;;;;;;;;;:::o;22797:100::-;22851:13;22884:5;22877:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:100;:::o;37105:42::-;;;;:::o;24301:204::-;24369:7;24394:16;24402:7;24394;:16::i;:::-;24389:64;;24419:34;;;;;;;;;;;;;;24389:64;24473:15;:24;24489:7;24473:24;;;;;;;;;;;;;;;;;;;;;24466:31;;24301:204;;;:::o;23863:372::-;23936:13;23952:24;23968:7;23952:15;:24::i;:::-;23936:40;;23997:5;23991:11;;:2;:11;;;23987:48;;;24011:24;;;;;;;;;;;;;;23987:48;24068:5;24052:21;;:12;:10;:12::i;:::-;:21;;;24048:139;;24079:37;24096:5;24103:12;:10;:12::i;:::-;24079:16;:37::i;:::-;24075:112;;24140:35;;;;;;;;;;;;;;24075:112;24048:139;24199:28;24208:2;24212:7;24221:5;24199:8;:28::i;:::-;23925:310;23863:372;;:::o;42635:105::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42727:5:::1;42704:20;:28;;;;42635:105:::0;:::o;18922:312::-;18975:7;19200:15;:13;:15::i;:::-;19185:12;;19169:13;;:28;:46;19162:53;;18922:312;:::o;37463:50::-;;;;;;;;;;;;;;;;;:::o;25166:170::-;25300:28;25310:4;25316:2;25320:7;25300:9;:28::i;:::-;25166:170;;;:::o;43148:85::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43219:6:::1;43208:8;;:17;;;;;;;;;;;;;;;;;;43148:85:::0;:::o;42528:99::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42614:5:::1;42594:17;:25;;;;42528:99:::0;:::o;36944:32::-;;;;:::o;37381:30::-;;;;;;;;;;;;;:::o;43442:162::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;262:1:::1;482:7;;:19;;474:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;262:1;615:7;:18;;;;43502:12:::2;43528:7;:5;:7::i;:::-;43520:21;;43549;43520:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43501:74;;;43590:7;43582:16;;;::::0;::::2;;43494:110;218:1:::1;660:7;:22;;;;43442:162::o:0;25407:185::-;25545:39;25562:4;25568:2;25572:7;25545:39;;;;;;;;;;;;:16;:39::i;:::-;25407:185;;;:::o;41334:827::-;41394:16;41419:23;41445:17;41455:6;41445:9;:17::i;:::-;41419:43;;41469:30;41516:15;41502:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41469:63;;41539:22;41564:15;:13;:15::i;:::-;41539:40;;41586:23;41620:26;41655:474;41680:15;41662;:33;:67;;;;;41716:13;;41699:14;:30;41662:67;41655:474;;;41740:31;41774:11;:27;41786:14;41774:27;;;;;;;;;;;41740:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41817:9;:16;;;41812:285;;41876:1;41850:28;;:9;:14;;;:28;;;41846:94;;41914:9;:14;;;41893:35;;41846:94;41978:6;41956:28;;:18;:28;;;41952:136;;;42032:14;41999:13;42013:15;41999:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42059:17;;;;;:::i;:::-;;;;41952:136;41812:285;42105:16;;;;;:::i;:::-;;;;41731:398;41655:474;;;42142:13;42135:20;;;;;;;41334:827;;;:::o;39673:228::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39803:10:::1;;39788:11;39772:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;39764:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39860:33;39870:9;39881:11;39860:9;:33::i;:::-;39673:228:::0;;:::o;37346:28::-;;;;;;;;;;;;;:::o;37273:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42850:97::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42933:6:::1;42912:18;:27;;;;42850:97:::0;:::o;43342:92::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43420:6:::1;43407:10;;:19;;;;;;;;;;;;;;;;;;43342:92:::0;:::o;37208:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42748:94::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42828:6:::1;42810:15;:24;;;;42748:94:::0;:::o;22605:125::-;22669:7;22696:21;22709:7;22696:12;:21::i;:::-;:26;;;22689:33;;22605:125;;;:::o;36983:34::-;;;;:::o;37068:30::-;;;;:::o;20051:206::-;20115:7;20156:1;20139:19;;:5;:19;;;20135:60;;;20167:28;;;;;;;;;;;;;;20135:60;20221:12;:19;20234:5;20221:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20213:36;;20206:43;;20051:206;;;:::o;4069:103::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4134:30:::1;4161:1;4134:18;:30::i;:::-;4069:103::o:0;37238:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42257:106::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42345:10:::1;42333:9;:22;;;;;;;;;;;;:::i;:::-;;42257:106:::0;:::o;37315:24::-;;;;;;;;;;;;;:::o;37418:32::-;;;;;;;;;;;;;:::o;3418:87::-;3464:7;3491:6;;;;;;;;;;;3484:13;;3418:87;:::o;22966:104::-;23022:13;23055:7;23048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22966:104;:::o;40176:209::-;40255:7;40271;40280:9;40291;40319:19;40334:3;40319:14;:19::i;:::-;40307:31;;;;;;;;;;;;40352:27;40362:7;40371:1;40374;40377;40352:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40345:34;;;;;40176:209;;;;:::o;24577:287::-;24688:12;:10;:12::i;:::-;24676:24;;:8;:24;;;24672:54;;;24709:17;;;;;;;;;;;;;;24672:54;24784:8;24739:18;:32;24758:12;:10;:12::i;:::-;24739:32;;;;;;;;;;;;;;;:42;24772:8;24739:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24837:8;24808:48;;24823:12;:10;:12::i;:::-;24808:48;;;24847:8;24808:48;;;;;;:::i;:::-;;;;;;;;24577:287;;:::o;40391:::-;40454:5;40461:7;40470;40508:2;40494:3;:10;:16;40486:25;;;;;;40518:9;40529;40540:7;40585:2;40580:3;40576:12;40570:19;40565:24;;40610:2;40605:3;40601:12;40595:19;40590:24;;40643:2;40638:3;40634:12;40628:19;40625:1;40620:28;40615:33;;40664:1;40667;40670;40656:16;;;;;;;;;40391:287;;;;;:::o;39964:206::-;40039:4;40052:15;40097:5;40080:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;40070:34;;;;;;40052:52;;40150:13;;;;;;;;;;;40119:44;;:27;40133:7;40142:3;40119:13;:27::i;:::-;:44;;;40111:53;;;39964:206;;;;:::o;25663:370::-;25830:28;25840:4;25846:2;25850:7;25830:9;:28::i;:::-;25873:15;:2;:13;;;:15::i;:::-;25869:157;;;25894:56;25925:4;25931:2;25935:7;25944:5;25894:30;:56::i;:::-;25890:136;;25974:40;;;;;;;;;;;;;;25890:136;25869:157;25663:370;;;;:::o;37154:45::-;;;;:::o;43059:81::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43126:6:::1;43118:5;;:14;;;;;;;;;;;;;;;;;;43059:81:::0;:::o;37024:37::-;;;;:::o;40753:428::-;40827:13;40857:17;40865:8;40857:7;:17::i;:::-;40849:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40955:5;40943:17;;:8;;;;;;;;;;;:17;;;40939:49;;;40971:14;40964:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40939:49;40996:28;41027:10;:8;:10::i;:::-;40996:41;;41082:1;41057:14;41051:28;:32;:122;;;;;;;;;;;;;;;;;41115:14;41131:19;:8;:17;:19::i;:::-;41152:9;41098:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41051:122;41044:129;;;40753:428;;;;:::o;38612:1028::-;38693:9;38106:7;:5;:7::i;:::-;38092:21;;:10;:21;;;38088:186;;38139:5;;;;;;;;;;;38138:6;38130:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;38208:11;;38195:9;:24;;38187:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38088:186;38304:1;38292:9;:13;38284:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:10;38355:23;;:9;:23;;;38347:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38461:10;;38448:9;38432:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;38424:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;38735:4:::1;38718:21;;:13;;;;;;;;;;;:21;;;38715:875;;;38796:4;38764:36;;:28;38776:10;38788:3;38764:11;:28::i;:::-;:36;;;38756:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;38920:18;;38906:9;38873:18;:30;38892:10;38873:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:65;;38865:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;39063:9;39040:20;;:32;;;;:::i;:::-;39027:9;:45;;39019:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39145:9;39111:18;:30;39130:10;39111:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;38715:875;;;39221:10;;;;;;;;;;;39213:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;39353:15;;39340:9;39310:15;:27;39326:10;39310:27;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:58;;39302:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;39486:9;39466:17;;:29;;;;:::i;:::-;39453:9;:42;;39445:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;39565:9;39534:15;:27;39550:10;39534:27;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;38715:875;39600:32;39610:10;39622:9;39600;:32::i;:::-;38612:1028:::0;;;:::o;42955:96::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43036:7:::1;43022:11;:21;;;;42955:96:::0;:::o;24935:164::-;25032:4;25056:18;:25;25075:5;25056:25;;;;;;;;;;;;;;;:35;25082:8;25056:35;;;;;;;;;;;;;;;;;;;;;;;;;25049:42;;24935:164;;;;:::o;42394:126::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42497:15:::1;42480:14;:32;;;;;;;;;;;;:::i;:::-;;42394:126:::0;:::o;4327:201::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4436:1:::1;4416:22;;:8;:22;;;;4408:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4492:28;4511:8;4492:18;:28::i;:::-;4327:201:::0;:::o;43241:93::-;3649:12;:10;:12::i;:::-;3638:23;;:7;:5;:7::i;:::-;:23;;;3630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43320:6:::1;43304:13;;:22;;;;;;;;;;;;;;;;;;43241:93:::0;:::o;10910:157::-;10995:4;11034:25;11019:40;;;:11;:40;;;;11012:47;;10910:157;;;:::o;26288:174::-;26345:4;26388:7;26369:15;:13;:15::i;:::-;:26;;:53;;;;;26409:13;;26399:7;:23;26369:53;:85;;;;;26427:11;:20;26439:7;26427:20;;;;;;;;;;;:27;;;;;;;;;;;;26426:28;26369:85;26362:92;;26288:174;;;:::o;2708:98::-;2761:7;2788:10;2781:17;;2708:98;:::o;35510:196::-;35652:2;35625:15;:24;35641:7;35625:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35690:7;35686:2;35670:28;;35679:5;35670:28;;;;;;;;;;;;35510:196;;;:::o;41207:95::-;41272:7;41295:1;41288:8;;41207:95;:::o;30458:2130::-;30573:35;30611:21;30624:7;30611:12;:21::i;:::-;30573:59;;30671:4;30649:26;;:13;:18;;;:26;;;30645:67;;30684:28;;;;;;;;;;;;;;30645:67;30725:22;30767:4;30751:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;30788:36;30805:4;30811:12;:10;:12::i;:::-;30788:16;:36::i;:::-;30751:73;:126;;;;30865:12;:10;:12::i;:::-;30841:36;;:20;30853:7;30841:11;:20::i;:::-;:36;;;30751:126;30725:153;;30896:17;30891:66;;30922:35;;;;;;;;;;;;;;30891:66;30986:1;30972:16;;:2;:16;;;30968:52;;;30997:23;;;;;;;;;;;;;;30968:52;31033:43;31055:4;31061:2;31065:7;31074:1;31033:21;:43::i;:::-;31141:35;31158:1;31162:7;31171:4;31141:8;:35::i;:::-;31502:1;31472:12;:18;31485:4;31472:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31546:1;31518:12;:16;31531:2;31518:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31564:31;31598:11;:20;31610:7;31598:20;;;;;;;;;;;31564:54;;31649:2;31633:8;:13;;;:18;;;;;;;;;;;;;;;;;;31699:15;31666:8;:23;;;:49;;;;;;;;;;;;;;;;;;31967:19;31999:1;31989:7;:11;31967:33;;32015:31;32049:11;:24;32061:11;32049:24;;;;;;;;;;;32015:58;;32117:1;32092:27;;:8;:13;;;;;;;;;;;;:27;;;32088:384;;;32302:13;;32287:11;:28;32283:174;;32356:4;32340:8;:13;;;:20;;;;;;;;;;;;;;;;;;32409:13;:28;;;32383:8;:23;;;:54;;;;;;;;;;;;;;;;;;32283:174;32088:384;31447:1036;;;32519:7;32515:2;32500:27;;32509:4;32500:27;;;;;;;;;;;;32538:42;32559:4;32565:2;32569:7;32578:1;32538:20;:42::i;:::-;30562:2026;;30458:2130;;;:::o;26546:104::-;26615:27;26625:2;26629:8;26615:27;;;;;;;;;;;;:9;:27::i;:::-;26546:104;;:::o;21432:1111::-;21494:21;;:::i;:::-;21528:12;21543:7;21528:22;;21611:4;21592:15;:13;:15::i;:::-;:23;21588:888;;21628:13;;21621:4;:20;21617:859;;;21662:31;21696:11;:17;21708:4;21696:17;;;;;;;;;;;21662:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21737:9;:16;;;21732:729;;21808:1;21782:28;;:9;:14;;;:28;;;21778:101;;21846:9;21839:16;;;;;;21778:101;22181:261;22188:4;22181:261;;;22221:6;;;;;;;;22266:11;:17;22278:4;22266:17;;;;;;;;;;;22254:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22340:1;22314:28;;:9;:14;;;:28;;;22310:109;;22382:9;22375:16;;;;;;22310:109;22181:261;;;21732:729;21643:833;21617:859;21588:888;22504:31;;;;;;;;;;;;;;21432:1111;;;;:::o;4688:191::-;4762:16;4781:6;;;;;;;;;;;4762:25;;4807:8;4798:6;;:17;;;;;;;;;;;;;;;;;;4862:8;4831:40;;4852:8;4831:40;;;;;;;;;;;;4751:128;4688:191;:::o;5140:115::-;5200:4;5246:1;5224:7;:19;;;:23;5217:30;;5140:115;;;:::o;35716:667::-;35879:4;35916:2;35900:36;;;35937:12;:10;:12::i;:::-;35951:4;35957:7;35966:5;35900:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35896:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36151:1;36134:6;:13;:18;36130:235;;;36180:40;;;;;;;;;;;;;;36130:235;36323:6;36317:13;36308:6;36304:2;36300:15;36293:38;35896:480;36029:45;;;36019:55;;;:6;:55;;;;36012:62;;;35716:667;;;;;;:::o;37860:110::-;37920:13;37953:9;37946:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37860:110;:::o;966:534::-;1022:13;1063:1;1054:5;:10;1050:53;;;1081:10;;;;;;;;;;;;;;;;;;;;;1050:53;1113:12;1128:5;1113:20;;1144:14;1169:78;1184:1;1176:4;:9;1169:78;;1202:8;;;;;:::i;:::-;;;;1233:2;1225:10;;;;;:::i;:::-;;;1169:78;;;1257:19;1289:6;1279:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:39;;1307:154;1323:1;1314:5;:10;1307:154;;1351:1;1341:11;;;;;:::i;:::-;;;1418:2;1410:5;:10;;;;:::i;:::-;1397:2;:24;;;;:::i;:::-;1384:39;;1367:6;1374;1367:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1447:2;1438:11;;;;;:::i;:::-;;;1307:154;;;1485:6;1471:21;;;;;966:534;;;;:::o;36394:159::-;;;;;:::o;36563:158::-;;;;;:::o;27023:1749::-;27146:20;27169:13;;27146:36;;27211:1;27197:16;;:2;:16;;;27193:48;;;27222:19;;;;;;;;;;;;;;27193:48;27268:1;27256:8;:13;27252:44;;;27278:18;;;;;;;;;;;;;;27252:44;27309:61;27339:1;27343:2;27347:12;27361:8;27309:21;:61::i;:::-;27682:8;27647:12;:16;27660:2;27647:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27746:8;27706:12;:16;27719:2;27706:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27805:2;27772:11;:25;27784:12;27772:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;27872:15;27822:11;:25;27834:12;27822:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;27905:20;27928:12;27905:35;;27955:11;27984:8;27969:12;:23;27955:37;;28013:15;:2;:13;;;:15::i;:::-;28009:631;;;28049:313;28105:12;28101:2;28080:38;;28097:1;28080:38;;;;;;;;;;;;28146:69;28185:1;28189:2;28193:14;;;;;;28209:5;28146:30;:69::i;:::-;28141:174;;28251:40;;;;;;;;;;;;;;28141:174;28357:3;28342:12;:18;28049:313;;28443:12;28426:13;;:29;28422:43;;28457:8;;;28422:43;28009:631;;;28506:119;28562:14;;;;;;28558:2;28537:40;;28554:1;28537:40;;;;;;;;;;;;28620:3;28605:12;:18;28506:119;;28009:631;28670:12;28654:13;:28;;;;27622:1072;;28704:60;28733:1;28737:2;28741:12;28755:8;28704:20;:60::i;:::-;27135:1637;27023:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:329::-;2481:6;2530:2;2518:9;2509:7;2505:23;2501:32;2498:119;;;2536:79;;:::i;:::-;2498:119;2656:1;2681:53;2726:7;2717:6;2706:9;2702:22;2681:53;:::i;:::-;2671:63;;2627:117;2422:329;;;;:::o;2757:474::-;2825:6;2833;2882:2;2870:9;2861:7;2857:23;2853:32;2850:119;;;2888:79;;:::i;:::-;2850:119;3008:1;3033:53;3078:7;3069:6;3058:9;3054:22;3033:53;:::i;:::-;3023:63;;2979:117;3135:2;3161:53;3206:7;3197:6;3186:9;3182:22;3161:53;:::i;:::-;3151:63;;3106:118;2757:474;;;;;:::o;3237:619::-;3314:6;3322;3330;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3632:2;3658:53;3703:7;3694:6;3683:9;3679:22;3658:53;:::i;:::-;3648:63;;3603:118;3760:2;3786:53;3831:7;3822:6;3811:9;3807:22;3786:53;:::i;:::-;3776:63;;3731:118;3237:619;;;;;:::o;3862:943::-;3957:6;3965;3973;3981;4030:3;4018:9;4009:7;4005:23;4001:33;3998:120;;;4037:79;;:::i;:::-;3998:120;4157:1;4182:53;4227:7;4218:6;4207:9;4203:22;4182:53;:::i;:::-;4172:63;;4128:117;4284:2;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;:::i;:::-;4300:63;;4255:118;4412:2;4438:53;4483:7;4474:6;4463:9;4459:22;4438:53;:::i;:::-;4428:63;;4383:118;4568:2;4557:9;4553:18;4540:32;4599:18;4591:6;4588:30;4585:117;;;4621:79;;:::i;:::-;4585:117;4726:62;4780:7;4771:6;4760:9;4756:22;4726:62;:::i;:::-;4716:72;;4511:287;3862:943;;;;;;;:::o;4811:468::-;4876:6;4884;4933:2;4921:9;4912:7;4908:23;4904:32;4901:119;;;4939:79;;:::i;:::-;4901:119;5059:1;5084:53;5129:7;5120:6;5109:9;5105:22;5084:53;:::i;:::-;5074:63;;5030:117;5186:2;5212:50;5254:7;5245:6;5234:9;5230:22;5212:50;:::i;:::-;5202:60;;5157:115;4811:468;;;;;:::o;5285:652::-;5362:6;5370;5419:2;5407:9;5398:7;5394:23;5390:32;5387:119;;;5425:79;;:::i;:::-;5387:119;5545:1;5570:53;5615:7;5606:6;5595:9;5591:22;5570:53;:::i;:::-;5560:63;;5516:117;5700:2;5689:9;5685:18;5672:32;5731:18;5723:6;5720:30;5717:117;;;5753:79;;:::i;:::-;5717:117;5858:62;5912:7;5903:6;5892:9;5888:22;5858:62;:::i;:::-;5848:72;;5643:287;5285:652;;;;;:::o;5943:474::-;6011:6;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5943:474;;;;;:::o;6423:323::-;6479:6;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:50;6721:7;6712:6;6701:9;6697:22;6679:50;:::i;:::-;6669:60;;6625:114;6423:323;;;;:::o;6752:652::-;6829:6;6837;6886:2;6874:9;6865:7;6861:23;6857:32;6854:119;;;6892:79;;:::i;:::-;6854:119;7012:1;7037:53;7082:7;7073:6;7062:9;7058:22;7037:53;:::i;:::-;7027:63;;6983:117;7167:2;7156:9;7152:18;7139:32;7198:18;7190:6;7187:30;7184:117;;;7220:79;;:::i;:::-;7184:117;7325:62;7379:7;7370:6;7359:9;7355:22;7325:62;:::i;:::-;7315:72;;7110:287;6752:652;;;;;:::o;7410:327::-;7468:6;7517:2;7505:9;7496:7;7492:23;7488:32;7485:119;;;7523:79;;:::i;:::-;7485:119;7643:1;7668:52;7712:7;7703:6;7692:9;7688:22;7668:52;:::i;:::-;7658:62;;7614:116;7410:327;;;;:::o;7743:349::-;7812:6;7861:2;7849:9;7840:7;7836:23;7832:32;7829:119;;;7867:79;;:::i;:::-;7829:119;7987:1;8012:63;8067:7;8058:6;8047:9;8043:22;8012:63;:::i;:::-;8002:73;;7958:127;7743:349;;;;:::o;8098:507::-;8166:6;8215:2;8203:9;8194:7;8190:23;8186:32;8183:119;;;8221:79;;:::i;:::-;8183:119;8369:1;8358:9;8354:17;8341:31;8399:18;8391:6;8388:30;8385:117;;;8421:79;;:::i;:::-;8385:117;8526:62;8580:7;8571:6;8560:9;8556:22;8526:62;:::i;:::-;8516:72;;8312:286;8098:507;;;;:::o;8611:509::-;8680:6;8729:2;8717:9;8708:7;8704:23;8700:32;8697:119;;;8735:79;;:::i;:::-;8697:119;8883:1;8872:9;8868:17;8855:31;8913:18;8905:6;8902:30;8899:117;;;8935:79;;:::i;:::-;8899:117;9040:63;9095:7;9086:6;9075:9;9071:22;9040:63;:::i;:::-;9030:73;;8826:287;8611:509;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:474::-;9529:6;9537;9586:2;9574:9;9565:7;9561:23;9557:32;9554:119;;;9592:79;;:::i;:::-;9554:119;9712:1;9737:53;9782:7;9773:6;9762:9;9758:22;9737:53;:::i;:::-;9727:63;;9683:117;9839:2;9865:53;9910:7;9901:6;9890:9;9886:22;9865:53;:::i;:::-;9855:63;;9810:118;9461:474;;;;;:::o;9941:652::-;10018:6;10026;10075:2;10063:9;10054:7;10050:23;10046:32;10043:119;;;10081:79;;:::i;:::-;10043:119;10201:1;10226:53;10271:7;10262:6;10251:9;10247:22;10226:53;:::i;:::-;10216:63;;10172:117;10356:2;10345:9;10341:18;10328:32;10387:18;10379:6;10376:30;10373:117;;;10409:79;;:::i;:::-;10373:117;10514:62;10568:7;10559:6;10548:9;10544:22;10514:62;:::i;:::-;10504:72;;10299:287;9941:652;;;;;:::o;10599:179::-;10668:10;10689:46;10731:3;10723:6;10689:46;:::i;:::-;10767:4;10762:3;10758:14;10744:28;;10599:179;;;;:::o;10784:118::-;10871:24;10889:5;10871:24;:::i;:::-;10866:3;10859:37;10784:118;;:::o;10908:157::-;11013:45;11033:24;11051:5;11033:24;:::i;:::-;11013:45;:::i;:::-;11008:3;11001:58;10908:157;;:::o;11101:732::-;11220:3;11249:54;11297:5;11249:54;:::i;:::-;11319:86;11398:6;11393:3;11319:86;:::i;:::-;11312:93;;11429:56;11479:5;11429:56;:::i;:::-;11508:7;11539:1;11524:284;11549:6;11546:1;11543:13;11524:284;;;11625:6;11619:13;11652:63;11711:3;11696:13;11652:63;:::i;:::-;11645:70;;11738:60;11791:6;11738:60;:::i;:::-;11728:70;;11584:224;11571:1;11568;11564:9;11559:14;;11524:284;;;11528:14;11824:3;11817:10;;11225:608;;;11101:732;;;;:::o;11839:109::-;11920:21;11935:5;11920:21;:::i;:::-;11915:3;11908:34;11839:109;;:::o;11954:118::-;12041:24;12059:5;12041:24;:::i;:::-;12036:3;12029:37;11954:118;;:::o;12078:360::-;12164:3;12192:38;12224:5;12192:38;:::i;:::-;12246:70;12309:6;12304:3;12246:70;:::i;:::-;12239:77;;12325:52;12370:6;12365:3;12358:4;12351:5;12347:16;12325:52;:::i;:::-;12402:29;12424:6;12402:29;:::i;:::-;12397:3;12393:39;12386:46;;12168:270;12078:360;;;;:::o;12444:364::-;12532:3;12560:39;12593:5;12560:39;:::i;:::-;12615:71;12679:6;12674:3;12615:71;:::i;:::-;12608:78;;12695:52;12740:6;12735:3;12728:4;12721:5;12717:16;12695:52;:::i;:::-;12772:29;12794:6;12772:29;:::i;:::-;12767:3;12763:39;12756:46;;12536:272;12444:364;;;;:::o;12814:377::-;12920:3;12948:39;12981:5;12948:39;:::i;:::-;13003:89;13085:6;13080:3;13003:89;:::i;:::-;12996:96;;13101:52;13146:6;13141:3;13134:4;13127:5;13123:16;13101:52;:::i;:::-;13178:6;13173:3;13169:16;13162:23;;12924:267;12814:377;;;;:::o;13221:845::-;13324:3;13361:5;13355:12;13390:36;13416:9;13390:36;:::i;:::-;13442:89;13524:6;13519:3;13442:89;:::i;:::-;13435:96;;13562:1;13551:9;13547:17;13578:1;13573:137;;;;13724:1;13719:341;;;;13540:520;;13573:137;13657:4;13653:9;13642;13638:25;13633:3;13626:38;13693:6;13688:3;13684:16;13677:23;;13573:137;;13719:341;13786:38;13818:5;13786:38;:::i;:::-;13846:1;13860:154;13874:6;13871:1;13868:13;13860:154;;;13948:7;13942:14;13938:1;13933:3;13929:11;13922:35;13998:1;13989:7;13985:15;13974:26;;13896:4;13893:1;13889:12;13884:17;;13860:154;;;14043:6;14038:3;14034:16;14027:23;;13726:334;;13540:520;;13328:738;;13221:845;;;;:::o;14072:366::-;14214:3;14235:67;14299:2;14294:3;14235:67;:::i;:::-;14228:74;;14311:93;14400:3;14311:93;:::i;:::-;14429:2;14424:3;14420:12;14413:19;;14072:366;;;:::o;14444:::-;14586:3;14607:67;14671:2;14666:3;14607:67;:::i;:::-;14600:74;;14683:93;14772:3;14683:93;:::i;:::-;14801:2;14796:3;14792:12;14785:19;;14444:366;;;:::o;14816:::-;14958:3;14979:67;15043:2;15038:3;14979:67;:::i;:::-;14972:74;;15055:93;15144:3;15055:93;:::i;:::-;15173:2;15168:3;15164:12;15157:19;;14816:366;;;:::o;15188:::-;15330:3;15351:67;15415:2;15410:3;15351:67;:::i;:::-;15344:74;;15427:93;15516:3;15427:93;:::i;:::-;15545:2;15540:3;15536:12;15529:19;;15188:366;;;:::o;15560:::-;15702:3;15723:67;15787:2;15782:3;15723:67;:::i;:::-;15716:74;;15799:93;15888:3;15799:93;:::i;:::-;15917:2;15912:3;15908:12;15901:19;;15560:366;;;:::o;15932:::-;16074:3;16095:67;16159:2;16154:3;16095:67;:::i;:::-;16088:74;;16171:93;16260:3;16171:93;:::i;:::-;16289:2;16284:3;16280:12;16273:19;;15932:366;;;:::o;16304:::-;16446:3;16467:67;16531:2;16526:3;16467:67;:::i;:::-;16460:74;;16543:93;16632:3;16543:93;:::i;:::-;16661:2;16656:3;16652:12;16645:19;;16304:366;;;:::o;16676:::-;16818:3;16839:67;16903:2;16898:3;16839:67;:::i;:::-;16832:74;;16915:93;17004:3;16915:93;:::i;:::-;17033:2;17028:3;17024:12;17017:19;;16676:366;;;:::o;17048:::-;17190:3;17211:67;17275:2;17270:3;17211:67;:::i;:::-;17204:74;;17287:93;17376:3;17287:93;:::i;:::-;17405:2;17400:3;17396:12;17389:19;;17048:366;;;:::o;17420:398::-;17579:3;17600:83;17681:1;17676:3;17600:83;:::i;:::-;17593:90;;17692:93;17781:3;17692:93;:::i;:::-;17810:1;17805:3;17801:11;17794:18;;17420:398;;;:::o;17824:366::-;17966:3;17987:67;18051:2;18046:3;17987:67;:::i;:::-;17980:74;;18063:93;18152:3;18063:93;:::i;:::-;18181:2;18176:3;18172:12;18165:19;;17824:366;;;:::o;18196:::-;18338:3;18359:67;18423:2;18418:3;18359:67;:::i;:::-;18352:74;;18435:93;18524:3;18435:93;:::i;:::-;18553:2;18548:3;18544:12;18537:19;;18196:366;;;:::o;18568:::-;18710:3;18731:67;18795:2;18790:3;18731:67;:::i;:::-;18724:74;;18807:93;18896:3;18807:93;:::i;:::-;18925:2;18920:3;18916:12;18909:19;;18568:366;;;:::o;18940:::-;19082:3;19103:67;19167:2;19162:3;19103:67;:::i;:::-;19096:74;;19179:93;19268:3;19179:93;:::i;:::-;19297:2;19292:3;19288:12;19281:19;;18940:366;;;:::o;19312:::-;19454:3;19475:67;19539:2;19534:3;19475:67;:::i;:::-;19468:74;;19551:93;19640:3;19551:93;:::i;:::-;19669:2;19664:3;19660:12;19653:19;;19312:366;;;:::o;19684:::-;19826:3;19847:67;19911:2;19906:3;19847:67;:::i;:::-;19840:74;;19923:93;20012:3;19923:93;:::i;:::-;20041:2;20036:3;20032:12;20025:19;;19684:366;;;:::o;20056:108::-;20133:24;20151:5;20133:24;:::i;:::-;20128:3;20121:37;20056:108;;:::o;20170:118::-;20257:24;20275:5;20257:24;:::i;:::-;20252:3;20245:37;20170:118;;:::o;20294:112::-;20377:22;20393:5;20377:22;:::i;:::-;20372:3;20365:35;20294:112;;:::o;20412:256::-;20524:3;20539:75;20610:3;20601:6;20539:75;:::i;:::-;20639:2;20634:3;20630:12;20623:19;;20659:3;20652:10;;20412:256;;;;:::o;20674:589::-;20899:3;20921:95;21012:3;21003:6;20921:95;:::i;:::-;20914:102;;21033:95;21124:3;21115:6;21033:95;:::i;:::-;21026:102;;21145:92;21233:3;21224:6;21145:92;:::i;:::-;21138:99;;21254:3;21247:10;;20674:589;;;;;;:::o;21269:379::-;21453:3;21475:147;21618:3;21475:147;:::i;:::-;21468:154;;21639:3;21632:10;;21269:379;;;:::o;21654:222::-;21747:4;21785:2;21774:9;21770:18;21762:26;;21798:71;21866:1;21855:9;21851:17;21842:6;21798:71;:::i;:::-;21654:222;;;;:::o;21882:640::-;22077:4;22115:3;22104:9;22100:19;22092:27;;22129:71;22197:1;22186:9;22182:17;22173:6;22129:71;:::i;:::-;22210:72;22278:2;22267:9;22263:18;22254:6;22210:72;:::i;:::-;22292;22360:2;22349:9;22345:18;22336:6;22292:72;:::i;:::-;22411:9;22405:4;22401:20;22396:2;22385:9;22381:18;22374:48;22439:76;22510:4;22501:6;22439:76;:::i;:::-;22431:84;;21882:640;;;;;;;:::o;22528:373::-;22671:4;22709:2;22698:9;22694:18;22686:26;;22758:9;22752:4;22748:20;22744:1;22733:9;22729:17;22722:47;22786:108;22889:4;22880:6;22786:108;:::i;:::-;22778:116;;22528:373;;;;:::o;22907:210::-;22994:4;23032:2;23021:9;23017:18;23009:26;;23045:65;23107:1;23096:9;23092:17;23083:6;23045:65;:::i;:::-;22907:210;;;;:::o;23123:545::-;23296:4;23334:3;23323:9;23319:19;23311:27;;23348:71;23416:1;23405:9;23401:17;23392:6;23348:71;:::i;:::-;23429:68;23493:2;23482:9;23478:18;23469:6;23429:68;:::i;:::-;23507:72;23575:2;23564:9;23560:18;23551:6;23507:72;:::i;:::-;23589;23657:2;23646:9;23642:18;23633:6;23589:72;:::i;:::-;23123:545;;;;;;;:::o;23674:313::-;23787:4;23825:2;23814:9;23810:18;23802:26;;23874:9;23868:4;23864:20;23860:1;23849:9;23845:17;23838:47;23902:78;23975:4;23966:6;23902:78;:::i;:::-;23894:86;;23674:313;;;;:::o;23993:419::-;24159:4;24197:2;24186:9;24182:18;24174:26;;24246:9;24240:4;24236:20;24232:1;24221:9;24217:17;24210:47;24274:131;24400:4;24274:131;:::i;:::-;24266:139;;23993:419;;;:::o;24418:::-;24584:4;24622:2;24611:9;24607:18;24599:26;;24671:9;24665:4;24661:20;24657:1;24646:9;24642:17;24635:47;24699:131;24825:4;24699:131;:::i;:::-;24691:139;;24418:419;;;:::o;24843:::-;25009:4;25047:2;25036:9;25032:18;25024:26;;25096:9;25090:4;25086:20;25082:1;25071:9;25067:17;25060:47;25124:131;25250:4;25124:131;:::i;:::-;25116:139;;24843:419;;;:::o;25268:::-;25434:4;25472:2;25461:9;25457:18;25449:26;;25521:9;25515:4;25511:20;25507:1;25496:9;25492:17;25485:47;25549:131;25675:4;25549:131;:::i;:::-;25541:139;;25268:419;;;:::o;25693:::-;25859:4;25897:2;25886:9;25882:18;25874:26;;25946:9;25940:4;25936:20;25932:1;25921:9;25917:17;25910:47;25974:131;26100:4;25974:131;:::i;:::-;25966:139;;25693:419;;;:::o;26118:::-;26284:4;26322:2;26311:9;26307:18;26299:26;;26371:9;26365:4;26361:20;26357:1;26346:9;26342:17;26335:47;26399:131;26525:4;26399:131;:::i;:::-;26391:139;;26118:419;;;:::o;26543:::-;26709:4;26747:2;26736:9;26732:18;26724:26;;26796:9;26790:4;26786:20;26782:1;26771:9;26767:17;26760:47;26824:131;26950:4;26824:131;:::i;:::-;26816:139;;26543:419;;;:::o;26968:::-;27134:4;27172:2;27161:9;27157:18;27149:26;;27221:9;27215:4;27211:20;27207:1;27196:9;27192:17;27185:47;27249:131;27375:4;27249:131;:::i;:::-;27241:139;;26968:419;;;:::o;27393:::-;27559:4;27597:2;27586:9;27582:18;27574:26;;27646:9;27640:4;27636:20;27632:1;27621:9;27617:17;27610:47;27674:131;27800:4;27674:131;:::i;:::-;27666:139;;27393:419;;;:::o;27818:::-;27984:4;28022:2;28011:9;28007:18;27999:26;;28071:9;28065:4;28061:20;28057:1;28046:9;28042:17;28035:47;28099:131;28225:4;28099:131;:::i;:::-;28091:139;;27818:419;;;:::o;28243:::-;28409:4;28447:2;28436:9;28432:18;28424:26;;28496:9;28490:4;28486:20;28482:1;28471:9;28467:17;28460:47;28524:131;28650:4;28524:131;:::i;:::-;28516:139;;28243:419;;;:::o;28668:::-;28834:4;28872:2;28861:9;28857:18;28849:26;;28921:9;28915:4;28911:20;28907:1;28896:9;28892:17;28885:47;28949:131;29075:4;28949:131;:::i;:::-;28941:139;;28668:419;;;:::o;29093:::-;29259:4;29297:2;29286:9;29282:18;29274:26;;29346:9;29340:4;29336:20;29332:1;29321:9;29317:17;29310:47;29374:131;29500:4;29374:131;:::i;:::-;29366:139;;29093:419;;;:::o;29518:::-;29684:4;29722:2;29711:9;29707:18;29699:26;;29771:9;29765:4;29761:20;29757:1;29746:9;29742:17;29735:47;29799:131;29925:4;29799:131;:::i;:::-;29791:139;;29518:419;;;:::o;29943:::-;30109:4;30147:2;30136:9;30132:18;30124:26;;30196:9;30190:4;30186:20;30182:1;30171:9;30167:17;30160:47;30224:131;30350:4;30224:131;:::i;:::-;30216:139;;29943:419;;;:::o;30368:222::-;30461:4;30499:2;30488:9;30484:18;30476:26;;30512:71;30580:1;30569:9;30565:17;30556:6;30512:71;:::i;:::-;30368:222;;;;:::o;30596:434::-;30741:4;30779:2;30768:9;30764:18;30756:26;;30792:67;30856:1;30845:9;30841:17;30832:6;30792:67;:::i;:::-;30869:72;30937:2;30926:9;30922:18;30913:6;30869:72;:::i;:::-;30951;31019:2;31008:9;31004:18;30995:6;30951:72;:::i;:::-;30596:434;;;;;;:::o;31036:129::-;31070:6;31097:20;;:::i;:::-;31087:30;;31126:33;31154:4;31146:6;31126:33;:::i;:::-;31036:129;;;:::o;31171:75::-;31204:6;31237:2;31231:9;31221:19;;31171:75;:::o;31252:307::-;31313:4;31403:18;31395:6;31392:30;31389:56;;;31425:18;;:::i;:::-;31389:56;31463:29;31485:6;31463:29;:::i;:::-;31455:37;;31547:4;31541;31537:15;31529:23;;31252:307;;;:::o;31565:308::-;31627:4;31717:18;31709:6;31706:30;31703:56;;;31739:18;;:::i;:::-;31703:56;31777:29;31799:6;31777:29;:::i;:::-;31769:37;;31861:4;31855;31851:15;31843:23;;31565:308;;;:::o;31879:132::-;31946:4;31969:3;31961:11;;31999:4;31994:3;31990:14;31982:22;;31879:132;;;:::o;32017:141::-;32066:4;32089:3;32081:11;;32112:3;32109:1;32102:14;32146:4;32143:1;32133:18;32125:26;;32017:141;;;:::o;32164:114::-;32231:6;32265:5;32259:12;32249:22;;32164:114;;;:::o;32284:98::-;32335:6;32369:5;32363:12;32353:22;;32284:98;;;:::o;32388:99::-;32440:6;32474:5;32468:12;32458:22;;32388:99;;;:::o;32493:113::-;32563:4;32595;32590:3;32586:14;32578:22;;32493:113;;;:::o;32612:184::-;32711:11;32745:6;32740:3;32733:19;32785:4;32780:3;32776:14;32761:29;;32612:184;;;;:::o;32802:168::-;32885:11;32919:6;32914:3;32907:19;32959:4;32954:3;32950:14;32935:29;;32802:168;;;;:::o;32976:147::-;33077:11;33114:3;33099:18;;32976:147;;;;:::o;33129:169::-;33213:11;33247:6;33242:3;33235:19;33287:4;33282:3;33278:14;33263:29;;33129:169;;;;:::o;33304:148::-;33406:11;33443:3;33428:18;;33304:148;;;;:::o;33458:305::-;33498:3;33517:20;33535:1;33517:20;:::i;:::-;33512:25;;33551:20;33569:1;33551:20;:::i;:::-;33546:25;;33705:1;33637:66;33633:74;33630:1;33627:81;33624:107;;;33711:18;;:::i;:::-;33624:107;33755:1;33752;33748:9;33741:16;;33458:305;;;;:::o;33769:185::-;33809:1;33826:20;33844:1;33826:20;:::i;:::-;33821:25;;33860:20;33878:1;33860:20;:::i;:::-;33855:25;;33899:1;33889:35;;33904:18;;:::i;:::-;33889:35;33946:1;33943;33939:9;33934:14;;33769:185;;;;:::o;33960:348::-;34000:7;34023:20;34041:1;34023:20;:::i;:::-;34018:25;;34057:20;34075:1;34057:20;:::i;:::-;34052:25;;34245:1;34177:66;34173:74;34170:1;34167:81;34162:1;34155:9;34148:17;34144:105;34141:131;;;34252:18;;:::i;:::-;34141:131;34300:1;34297;34293:9;34282:20;;33960:348;;;;:::o;34314:191::-;34354:4;34374:20;34392:1;34374:20;:::i;:::-;34369:25;;34408:20;34426:1;34408:20;:::i;:::-;34403:25;;34447:1;34444;34441:8;34438:34;;;34452:18;;:::i;:::-;34438:34;34497:1;34494;34490:9;34482:17;;34314:191;;;;:::o;34511:96::-;34548:7;34577:24;34595:5;34577:24;:::i;:::-;34566:35;;34511:96;;;:::o;34613:90::-;34647:7;34690:5;34683:13;34676:21;34665:32;;34613:90;;;:::o;34709:77::-;34746:7;34775:5;34764:16;;34709:77;;;:::o;34792:149::-;34828:7;34868:66;34861:5;34857:78;34846:89;;34792:149;;;:::o;34947:126::-;34984:7;35024:42;35017:5;35013:54;35002:65;;34947:126;;;:::o;35079:77::-;35116:7;35145:5;35134:16;;35079:77;;;:::o;35162:86::-;35197:7;35237:4;35230:5;35226:16;35215:27;;35162:86;;;:::o;35254:154::-;35338:6;35333:3;35328;35315:30;35400:1;35391:6;35386:3;35382:16;35375:27;35254:154;;;:::o;35414:307::-;35482:1;35492:113;35506:6;35503:1;35500:13;35492:113;;;35591:1;35586:3;35582:11;35576:18;35572:1;35567:3;35563:11;35556:39;35528:2;35525:1;35521:10;35516:15;;35492:113;;;35623:6;35620:1;35617:13;35614:101;;;35703:1;35694:6;35689:3;35685:16;35678:27;35614:101;35463:258;35414:307;;;:::o;35727:320::-;35771:6;35808:1;35802:4;35798:12;35788:22;;35855:1;35849:4;35845:12;35876:18;35866:81;;35932:4;35924:6;35920:17;35910:27;;35866:81;35994:2;35986:6;35983:14;35963:18;35960:38;35957:84;;;36013:18;;:::i;:::-;35957:84;35778:269;35727:320;;;:::o;36053:281::-;36136:27;36158:4;36136:27;:::i;:::-;36128:6;36124:40;36266:6;36254:10;36251:22;36230:18;36218:10;36215:34;36212:62;36209:88;;;36277:18;;:::i;:::-;36209:88;36317:10;36313:2;36306:22;36096:238;36053:281;;:::o;36340:233::-;36379:3;36402:24;36420:5;36402:24;:::i;:::-;36393:33;;36448:66;36441:5;36438:77;36435:103;;;36518:18;;:::i;:::-;36435:103;36565:1;36558:5;36554:13;36547:20;;36340:233;;;:::o;36579:100::-;36618:7;36647:26;36667:5;36647:26;:::i;:::-;36636:37;;36579:100;;;:::o;36685:94::-;36724:7;36753:20;36767:5;36753:20;:::i;:::-;36742:31;;36685:94;;;:::o;36785:176::-;36817:1;36834:20;36852:1;36834:20;:::i;:::-;36829:25;;36868:20;36886:1;36868:20;:::i;:::-;36863:25;;36907:1;36897:35;;36912:18;;:::i;:::-;36897:35;36953:1;36950;36946:9;36941:14;;36785:176;;;;:::o;36967:180::-;37015:77;37012:1;37005:88;37112:4;37109:1;37102:15;37136:4;37133:1;37126:15;37153:180;37201:77;37198:1;37191:88;37298:4;37295:1;37288:15;37322:4;37319:1;37312:15;37339:180;37387:77;37384:1;37377:88;37484:4;37481:1;37474:15;37508:4;37505:1;37498:15;37525:180;37573:77;37570:1;37563:88;37670:4;37667:1;37660:15;37694:4;37691:1;37684:15;37711:180;37759:77;37756:1;37749:88;37856:4;37853:1;37846:15;37880:4;37877:1;37870:15;37897:117;38006:1;38003;37996:12;38020:117;38129:1;38126;38119:12;38143:117;38252:1;38249;38242:12;38266:117;38375:1;38372;38365:12;38389:102;38430:6;38481:2;38477:7;38472:2;38465:5;38461:14;38457:28;38447:38;;38389:102;;;:::o;38497:94::-;38530:8;38578:5;38574:2;38570:14;38549:35;;38497:94;;;:::o;38597:232::-;38737:34;38733:1;38725:6;38721:14;38714:58;38806:15;38801:2;38793:6;38789:15;38782:40;38597:232;:::o;38835:225::-;38975:34;38971:1;38963:6;38959:14;38952:58;39044:8;39039:2;39031:6;39027:15;39020:33;38835:225;:::o;39066:181::-;39206:33;39202:1;39194:6;39190:14;39183:57;39066:181;:::o;39253:180::-;39393:32;39389:1;39381:6;39377:14;39370:56;39253:180;:::o;39439:176::-;39579:28;39575:1;39567:6;39563:14;39556:52;39439:176;:::o;39621:182::-;39761:34;39757:1;39749:6;39745:14;39738:58;39621:182;:::o;39809:173::-;39949:25;39945:1;39937:6;39933:14;39926:49;39809:173;:::o;39988:244::-;40128:34;40124:1;40116:6;40112:14;40105:58;40197:27;40192:2;40184:6;40180:15;40173:52;39988:244;:::o;40238:225::-;40378:34;40374:1;40366:6;40362:14;40355:58;40447:8;40442:2;40434:6;40430:15;40423:33;40238:225;:::o;40469:114::-;;:::o;40589:221::-;40729:34;40725:1;40717:6;40713:14;40706:58;40798:4;40793:2;40785:6;40781:15;40774:29;40589:221;:::o;40816:238::-;40956:34;40952:1;40944:6;40940:14;40933:58;41025:21;41020:2;41012:6;41008:15;41001:46;40816:238;:::o;41060:248::-;41200:34;41196:1;41188:6;41184:14;41177:58;41269:31;41264:2;41256:6;41252:15;41245:56;41060:248;:::o;41314:181::-;41454:33;41450:1;41442:6;41438:14;41431:57;41314:181;:::o;41501:235::-;41641:34;41637:1;41629:6;41625:14;41618:58;41710:18;41705:2;41697:6;41693:15;41686:43;41501:235;:::o;41742:169::-;41882:21;41878:1;41870:6;41866:14;41859:45;41742:169;:::o;41917:122::-;41990:24;42008:5;41990:24;:::i;:::-;41983:5;41980:35;41970:63;;42029:1;42026;42019:12;41970:63;41917:122;:::o;42045:116::-;42115:21;42130:5;42115:21;:::i;:::-;42108:5;42105:32;42095:60;;42151:1;42148;42141:12;42095:60;42045:116;:::o;42167:122::-;42240:24;42258:5;42240:24;:::i;:::-;42233:5;42230:35;42220:63;;42279:1;42276;42269:12;42220:63;42167:122;:::o;42295:120::-;42367:23;42384:5;42367:23;:::i;:::-;42360:5;42357:34;42347:62;;42405:1;42402;42395:12;42347:62;42295:120;:::o;42421:122::-;42494:24;42512:5;42494:24;:::i;:::-;42487:5;42484:35;42474:63;;42533:1;42530;42523:12;42474:63;42421:122;:::o
Swarm Source
ipfs://4e7ef1f4ed2ffd0cb9b536cf5b51507176b7d080f92e609c87452bbe1703fa74
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.