ERC-721
Overview
Max Total Supply
486 GGE
Holders
187
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 GGELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GamersGuild
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-23 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity ^0.8.0; contract GamersGuild is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 public immutable amountForDevs; uint256 public immutable amountForAuctionAndDev; struct SaleConfig { uint32 auctionSaleStartTime; uint32 publicSaleStartTime; uint64 mintlistPrice; uint64 publicPrice; uint32 publicSaleKey; } SaleConfig public saleConfig; mapping(address => uint256) public allowlist; constructor( uint256 maxBatchSize_, uint256 collectionSize_, uint256 amountForAuctionAndDev_, uint256 amountForDevs_ ) ERC721A("GamersGuild", "GGE", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; amountForAuctionAndDev = amountForAuctionAndDev_; amountForDevs = amountForDevs_; require( amountForAuctionAndDev_ <= collectionSize_, "larger collection size needed" ); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function allowlistMint() external payable callerIsUser { uint256 price = uint256(saleConfig.mintlistPrice); require(price != 0, "allowlist sale has not begun yet"); require(allowlist[msg.sender] > 0, "not eligible for allowlist mint"); require(totalSupply() + 1 <= collectionSize, "reached max supply"); allowlist[msg.sender]--; _safeMint(msg.sender, 1); refundIfOver(price); } function setSaleInfo( uint64 mintlistPriceWei, uint64 publicPriceWei, uint32 publicSaleStartTime ) external onlyOwner { saleConfig = SaleConfig( 0, publicSaleStartTime, mintlistPriceWei, publicPriceWei, saleConfig.publicSaleKey );} function publicSaleMint(uint256 quantity, uint256 callerPublicSaleKey) external payable callerIsUser { SaleConfig memory config = saleConfig; uint256 publicSaleKey = uint256(config.publicSaleKey); uint256 publicPrice = uint256(config.publicPrice); uint256 publicSaleStartTime = uint256(config.publicSaleStartTime); require( publicSaleKey == callerPublicSaleKey, "called with incorrect public sale key" ); require( isPublicSaleOn(publicPrice, publicSaleKey, publicSaleStartTime), "public sale has not begun yet" ); require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); _safeMint(msg.sender, quantity); refundIfOver(publicPrice * quantity); } function refundIfOver(uint256 price) private { require(msg.value >= price, "Need to send more ETH."); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function isPublicSaleOn( uint256 publicPriceWei, uint256 publicSaleKey, uint256 publicSaleStartTime ) public view returns (bool) { return publicPriceWei != 0 && publicSaleKey != 0 && block.timestamp >= publicSaleStartTime; } function setPublicSaleKey(uint32 key) external onlyOwner { saleConfig.publicSaleKey = key; } function seedAllowlist(address[] memory addresses, uint256[] memory numSlots) external onlyOwner { require( addresses.length == numSlots.length, "addresses does not match numSlots length" ); for (uint256 i = 0; i < addresses.length; i++) { allowlist[addresses[i]] = numSlots[i]; } } // For marketing etc. function devMint(uint256 quantity) external onlyOwner { require( totalSupply() + quantity <= amountForDevs, "too many already minted before dev mint" ); require( quantity % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForAuctionAndDev_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"amountForAuctionAndDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","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":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicPriceWei","type":"uint256"},{"internalType":"uint256","name":"publicSaleKey","type":"uint256"},{"internalType":"uint256","name":"publicSaleStartTime","type":"uint256"}],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"callerPublicSaleKey","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"auctionSaleStartTime","type":"uint32"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"},{"internalType":"uint64","name":"mintlistPrice","type":"uint64"},{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"uint32","name":"publicSaleKey","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"key","type":"uint32"}],"name":"setPublicSaleKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"mintlistPriceWei","type":"uint64"},{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"}],"name":"setSaleInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610120604052600060015560006008553480156200001c57600080fd5b5060405162006516380380620065168339818101604052810190620000429190620003a6565b6040518060400160405280600b81526020017f47616d6572734775696c640000000000000000000000000000000000000000008152506040518060400160405280600381526020017f47474500000000000000000000000000000000000000000000000000000000008152508585620000d0620000c46200021360201b60201c565b6200021b60201b60201c565b6000811162000116576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010d90620004d1565b60405180910390fd5b600082116200015c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000153906200048d565b60405180910390fd5b836002908051906020019062000174929190620002df565b5082600390805190602001906200018d929190620002df565b508160a0818152505080608081815250505050505060016009819055508360c081815250508161010081815250508060e081815250508282111562000209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200020090620004af565b60405180910390fd5b5050505062000659565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ed906200050e565b90600052602060002090601f0160209004810192826200031157600085556200035d565b82601f106200032c57805160ff19168380011785556200035d565b828001600101855582156200035d579182015b828111156200035c5782518255916020019190600101906200033f565b5b5090506200036c919062000370565b5090565b5b808211156200038b57600081600090555060010162000371565b5090565b600081519050620003a0816200063f565b92915050565b60008060008060808587031215620003c357620003c262000573565b5b6000620003d3878288016200038f565b9450506020620003e6878288016200038f565b9350506040620003f9878288016200038f565b92505060606200040c878288016200038f565b91505092959194509250565b600062000427602783620004f3565b9150620004348262000578565b604082019050919050565b60006200044e601d83620004f3565b91506200045b82620005c7565b602082019050919050565b600062000475602e83620004f3565b91506200048282620005f0565b604082019050919050565b60006020820190508181036000830152620004a88162000418565b9050919050565b60006020820190508181036000830152620004ca816200043f565b9050919050565b60006020820190508181036000830152620004ec8162000466565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200052757607f821691505b602082108114156200053e576200053d62000544565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f6c617267657220636f6c6c656374696f6e2073697a65206e6565646564000000600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200064a8162000504565b81146200065657600080fd5b50565b60805160a05160c05160e05161010051615e32620006e46000396000611637015260008181610fb001526124380152600081816117e201526121f801526000818161102701528181611095015281816110d201528181612ee601528181612f0f015261369a0152600081816114280152818161218301528181612baf0152612be30152615e326000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063ac446002116100ab578063d7224ba01161006f578063d7224ba0146107c9578063dc33e681146107f4578063e985e9c514610831578063f2fde38b1461086e578063fbe1aa51146108975761021a565b8063ac44600214610707578063b05863d51461071e578063b88d4fde14610747578063c87b56dd14610770578063cb91d8b3146107ad5761021a565b806390aa0b0f116100f257806390aa0b0f1461060a5780639231ab2a1461063957806395d89b4114610676578063a22cb465146106a1578063a7cd52cb146106ca5761021a565b8063715018a6146105745780638bc35c2f1461058b5780638da5cb5b146105b657806390028083146105e15761021a565b80634122ed3a116101a65780634f6ccce7116101755780634f6ccce71461046957806355f804b3146104a65780635666c880146104cf5780636352211e146104fa57806370a08231146105375761021a565b80634122ed3a146103d057806341fbddbd146103f9578063422030ba1461040357806342842e0e146104405761021a565b806318160ddd116101ed57806318160ddd146102ed57806323b872dd146103185780632d20fb60146103415780632f745c591461036a578063375a069a146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190614088565b6108c2565b6040516102539190614959565b60405180910390f35b34801561026857600080fd5b50610271610a0c565b60405161027e9190614974565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a9919061412f565b610a9e565b6040516102bb91906148f2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613fd0565b610b23565b005b3480156102f957600080fd5b50610302610c3c565b60405161030f9190614e31565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613eba565b610c46565b005b34801561034d57600080fd5b506103686004803603810190610363919061412f565b610c56565b005b34801561037657600080fd5b50610391600480360381019061038c9190613fd0565b610d34565b60405161039e9190614e31565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c9919061412f565b610f32565b005b3480156103dc57600080fd5b506103f760048036038101906103f2919061421c565b61110e565b005b6104016112ca565b005b34801561040f57600080fd5b5061042a6004803603810190610425919061419c565b611508565b6040516104379190614959565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613eba565b611530565b005b34801561047557600080fd5b50610490600480360381019061048b919061412f565b611550565b60405161049d9190614e31565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906140e2565b6115a3565b005b3480156104db57600080fd5b506104e4611635565b6040516104f19190614e31565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c919061412f565b611659565b60405161052e91906148f2565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e4d565b61166f565b60405161056b9190614e31565b60405180910390f35b34801561058057600080fd5b50610589611758565b005b34801561059757600080fd5b506105a06117e0565b6040516105ad9190614e31565b60405180910390f35b3480156105c257600080fd5b506105cb611804565b6040516105d891906148f2565b60405180910390f35b3480156105ed57600080fd5b50610608600480360381019061060391906141ef565b61182d565b005b34801561061657600080fd5b5061061f6118d0565b604051610630959493929190614e4c565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b919061412f565b61194c565b60405161066d9190614e16565b60405180910390f35b34801561068257600080fd5b5061068b611964565b6040516106989190614974565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190613f90565b6119f6565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190613e4d565b611b77565b6040516106fe9190614e31565b60405180910390f35b34801561071357600080fd5b5061071c611b8f565b005b34801561072a57600080fd5b5061074560048036038101906107409190614010565b611d10565b005b34801561075357600080fd5b5061076e60048036038101906107699190613f0d565b611e6c565b005b34801561077c57600080fd5b506107976004803603810190610792919061412f565b611ec8565b6040516107a49190614974565b60405180910390f35b6107c760048036038101906107c2919061415c565b611f6f565b005b3480156107d557600080fd5b506107de612292565b6040516107eb9190614e31565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190613e4d565b612298565b6040516108289190614e31565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613e7a565b6122aa565b6040516108659190614959565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613e4d565b61233e565b005b3480156108a357600080fd5b506108ac612436565b6040516108b99190614e31565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a055750610a048261245a565b5b9050919050565b606060028054610a1b9061524a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a479061524a565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b6000610aa9826124c4565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf90614db6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2e82611659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614c36565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbe6124d2565b73ffffffffffffffffffffffffffffffffffffffff161480610bed5750610bec81610be76124d2565b6122aa565b5b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390614ab6565b60405180910390fd5b610c378383836124da565b505050565b6000600154905090565b610c5183838361258c565b505050565b610c5e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16610c7c611804565b73ffffffffffffffffffffffffffffffffffffffff1614610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990614b76565b60405180910390fd5b60026009541415610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90614d76565b60405180910390fd5b6002600981905550610d2981612b45565b600160098190555050565b6000610d3f8361166f565b8210610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790614996565b60405180910390fd5b6000610d8a610c3c565b905060008060005b83811015610ef0576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e8457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610edc5786841415610ecd578195505050505050610f2c565b8380610ed8906152ad565b9450505b508080610ee8906152ad565b915050610d92565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614d36565b60405180910390fd5b92915050565b610f3a6124d2565b73ffffffffffffffffffffffffffffffffffffffff16610f58611804565b73ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590614b76565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610fd8610c3c565b610fe29190614fe1565b1115611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614d16565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261105191906152f6565b14611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906149f6565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826110bf9190615037565b905060005b81811015611109576110f6337f0000000000000000000000000000000000000000000000000000000000000000612dd3565b8080611101906152ad565b9150506110c4565b505050565b6111166124d2565b73ffffffffffffffffffffffffffffffffffffffff16611134611804565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614b76565b60405180910390fd5b6040518060a00160405280600063ffffffff1681526020018263ffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff168152602001600a60000160189054906101000a900463ffffffff1663ffffffff16815250600a60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550905050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90614a96565b60405180910390fd5b6000600a60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16905060008114156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90614bf6565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614b36565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001611451610c3c565b61145b9190614fe1565b111561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390614b16565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114ec90615220565b91905055506114fc336001612dd3565b61150581612df1565b50565b600080841415801561151b575060008314155b80156115275750814210155b90509392505050565b61154b83838360405180602001604052806000815250611e6c565b505050565b600061155a610c3c565b821061159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614a16565b60405180910390fd5b819050919050565b6115ab6124d2565b73ffffffffffffffffffffffffffffffffffffffff166115c9611804565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614b76565b60405180910390fd5b8181600c9190611630929190613adb565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061166482612e92565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614af6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117606124d2565b73ffffffffffffffffffffffffffffffffffffffff1661177e611804565b73ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90614b76565b60405180910390fd5b6117de6000613095565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118356124d2565b73ffffffffffffffffffffffffffffffffffffffff16611853611804565b73ffffffffffffffffffffffffffffffffffffffff16146118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090614b76565b60405180910390fd5b80600a60000160186101000a81548163ffffffff021916908363ffffffff16021790555050565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900463ffffffff16905085565b611954613b61565b61195d82612e92565b9050919050565b6060600380546119739061524a565b80601f016020809104026020016040519081016040528092919081815260200182805461199f9061524a565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b6119fe6124d2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390614bb6565b60405180910390fd5b8060076000611a796124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b266124d2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6b9190614959565b60405180910390a35050565b600b6020528060005260406000206000915090505481565b611b976124d2565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611804565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614b76565b60405180910390fd5b60026009541415611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614d76565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c7f906148dd565b60006040518083038185875af1925050503d8060008114611cbc576040519150601f19603f3d011682016040523d82523d6000602084013e611cc1565b606091505b5050905080611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90614c56565b60405180910390fd5b506001600981905550565b611d186124d2565b73ffffffffffffffffffffffffffffffffffffffff16611d36611804565b73ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614b76565b60405180910390fd5b8051825114611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614df6565b60405180910390fd5b60005b8251811015611e6757818181518110611def57611dee6153b4565b5b6020026020010151600b6000858481518110611e0e57611e0d6153b4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611e5f906152ad565b915050611dd3565b505050565b611e7784848461258c565b611e8384848484613159565b611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614c76565b60405180910390fd5b50505050565b6060611ed3826124c4565b611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990614b96565b60405180910390fd5b6000611f1c6132f0565b90506000815111611f3c5760405180602001604052806000815250611f67565b80611f4684613382565b604051602001611f579291906148b9565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614a96565b60405180910390fd5b6000600a6040518060a00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816080015163ffffffff1690506000826060015167ffffffffffffffff1690506000836020015163ffffffff169050848314612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90614a76565b60405180910390fd5b612142828483611508565b612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614c16565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000866121ab610c3c565b6121b59190614fe1565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614b16565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008661222133612298565b61222b9190614fe1565b111561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614cf6565b60405180910390fd5b6122763387612dd3565b61228a86836122859190615068565b612df1565b505050505050565b60085481565b60006122a3826134e3565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123466124d2565b73ffffffffffffffffffffffffffffffffffffffff16612364611804565b73ffffffffffffffffffffffffffffffffffffffff16146123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190614b76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612421906149b6565b60405180910390fd5b61243381613095565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061259782612e92565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125be6124d2565b73ffffffffffffffffffffffffffffffffffffffff16148061261a57506125e36124d2565b73ffffffffffffffffffffffffffffffffffffffff1661260284610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612636575061263582600001516126306124d2565b6122aa565b5b905080612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614bd6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e190614b56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190614a36565b60405180910390fd5b61276785858560016135cc565b61277760008484600001516124da565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127e591906150c2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128899190614f9b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461298f9190614fe1565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ad557612a05816124c4565b15612ad4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b3d86868660016135d2565b505050505050565b6000600854905060008211612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690614ad6565b60405180910390fd5b600060018383612b9f9190614fe1565b612ba991906150f6565b905060017f0000000000000000000000000000000000000000000000000000000000000000612bd891906150f6565b811115612c0f5760017f0000000000000000000000000000000000000000000000000000000000000000612c0c91906150f6565b90505b612c18816124c4565b612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90614d56565b60405180910390fd5b60008290505b818111612dba57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612da7576000612cda82612e92565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612db2906152ad565b915050612c5d565b50600181612dc89190614fe1565b600881905550505050565b612ded8282604051806020016040528060008152506135d8565b5050565b80341015612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90614c96565b60405180910390fd5b80341115612e8f573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e6291906150f6565b9081150290604051600060405180830381858888f19350505050158015612e8d573d6000803e3d6000fd5b505b50565b612e9a613b61565b612ea3826124c4565b612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906149d6565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612f465760017f000000000000000000000000000000000000000000000000000000000000000084612f3991906150f6565b612f439190614fe1565b90505b60008390505b818110613054576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461304057809350505050613090565b50808061304c90615220565b915050612f4c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308790614d96565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061317a8473ffffffffffffffffffffffffffffffffffffffff16613ab8565b156132e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131a36124d2565b8786866040518563ffffffff1660e01b81526004016131c5949392919061490d565b602060405180830381600087803b1580156131df57600080fd5b505af192505050801561321057506040513d601f19601f8201168201806040525081019061320d91906140b5565b60015b613293573d8060008114613240576040519150601f19603f3d011682016040523d82523d6000602084013e613245565b606091505b5060008151141561328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290614c76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132e8565b600190505b949350505050565b6060600c80546132ff9061524a565b80601f016020809104026020016040519081016040528092919081815260200182805461332b9061524a565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050905090565b606060008214156133ca576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134de565b600082905060005b600082146133fc5780806133e5906152ad565b915050600a826133f59190615037565b91506133d2565b60008167ffffffffffffffff811115613418576134176153e3565b5b6040519080825280601f01601f19166020018201604052801561344a5781602001600182028036833780820191505090505b5090505b600085146134d75760018261346391906150f6565b9150600a8561347291906152f6565b603061347e9190614fe1565b60f81b818381518110613494576134936153b4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134d09190615037565b945061344e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b90614a56565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561364f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364690614cd6565b60405180910390fd5b613658816124c4565b15613698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368f90614cb6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290614dd6565b60405180910390fd5b61370860008583866135cc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516138059190614f9b565b6fffffffffffffffffffffffffffffffff16815260200185836020015161382c9190614f9b565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a9b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a3b6000888488613159565b613a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7190614c76565b60405180910390fd5b8180613a85906152ad565b9250508080613a93906152ad565b9150506139ca565b5080600181905550613ab060008785886135d2565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613ae79061524a565b90600052602060002090601f016020900481019282613b095760008555613b50565b82601f10613b2257803560ff1916838001178555613b50565b82800160010185558215613b50579182015b82811115613b4f578235825591602001919060010190613b34565b5b509050613b5d9190613b9b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613bb4576000816000905550600101613b9c565b5090565b6000613bcb613bc684614ec4565b614e9f565b90508083825260208201905082856020860282011115613bee57613bed61541c565b5b60005b85811015613c1e5781613c048882613cda565b845260208401935060208301925050600181019050613bf1565b5050509392505050565b6000613c3b613c3684614ef0565b614e9f565b90508083825260208201905082856020860282011115613c5e57613c5d61541c565b5b60005b85811015613c8e5781613c748882613e0e565b845260208401935060208301925050600181019050613c61565b5050509392505050565b6000613cab613ca684614f1c565b614e9f565b905082815260208101848484011115613cc757613cc6615421565b5b613cd28482856151de565b509392505050565b600081359050613ce981615d72565b92915050565b600082601f830112613d0457613d03615417565b5b8135613d14848260208601613bb8565b91505092915050565b600082601f830112613d3257613d31615417565b5b8135613d42848260208601613c28565b91505092915050565b600081359050613d5a81615d89565b92915050565b600081359050613d6f81615da0565b92915050565b600081519050613d8481615da0565b92915050565b600082601f830112613d9f57613d9e615417565b5b8135613daf848260208601613c98565b91505092915050565b60008083601f840112613dce57613dcd615417565b5b8235905067ffffffffffffffff811115613deb57613dea615412565b5b602083019150836001820283011115613e0757613e0661541c565b5b9250929050565b600081359050613e1d81615db7565b92915050565b600081359050613e3281615dce565b92915050565b600081359050613e4781615de5565b92915050565b600060208284031215613e6357613e6261542b565b5b6000613e7184828501613cda565b91505092915050565b60008060408385031215613e9157613e9061542b565b5b6000613e9f85828601613cda565b9250506020613eb085828601613cda565b9150509250929050565b600080600060608486031215613ed357613ed261542b565b5b6000613ee186828701613cda565b9350506020613ef286828701613cda565b9250506040613f0386828701613e0e565b9150509250925092565b60008060008060808587031215613f2757613f2661542b565b5b6000613f3587828801613cda565b9450506020613f4687828801613cda565b9350506040613f5787828801613e0e565b925050606085013567ffffffffffffffff811115613f7857613f77615426565b5b613f8487828801613d8a565b91505092959194509250565b60008060408385031215613fa757613fa661542b565b5b6000613fb585828601613cda565b9250506020613fc685828601613d4b565b9150509250929050565b60008060408385031215613fe757613fe661542b565b5b6000613ff585828601613cda565b925050602061400685828601613e0e565b9150509250929050565b600080604083850312156140275761402661542b565b5b600083013567ffffffffffffffff81111561404557614044615426565b5b61405185828601613cef565b925050602083013567ffffffffffffffff81111561407257614071615426565b5b61407e85828601613d1d565b9150509250929050565b60006020828403121561409e5761409d61542b565b5b60006140ac84828501613d60565b91505092915050565b6000602082840312156140cb576140ca61542b565b5b60006140d984828501613d75565b91505092915050565b600080602083850312156140f9576140f861542b565b5b600083013567ffffffffffffffff81111561411757614116615426565b5b61412385828601613db8565b92509250509250929050565b6000602082840312156141455761414461542b565b5b600061415384828501613e0e565b91505092915050565b600080604083850312156141735761417261542b565b5b600061418185828601613e0e565b925050602061419285828601613e0e565b9150509250929050565b6000806000606084860312156141b5576141b461542b565b5b60006141c386828701613e0e565b93505060206141d486828701613e0e565b92505060406141e586828701613e0e565b9150509250925092565b6000602082840312156142055761420461542b565b5b600061421384828501613e23565b91505092915050565b6000806000606084860312156142355761423461542b565b5b600061424386828701613e38565b935050602061425486828701613e38565b925050604061426586828701613e23565b9150509250925092565b6142788161512a565b82525050565b6142878161512a565b82525050565b6142968161513c565b82525050565b60006142a782614f4d565b6142b18185614f63565b93506142c18185602086016151ed565b6142ca81615430565b840191505092915050565b60006142e082614f58565b6142ea8185614f7f565b93506142fa8185602086016151ed565b61430381615430565b840191505092915050565b600061431982614f58565b6143238185614f90565b93506143338185602086016151ed565b80840191505092915050565b600061434c602283614f7f565b915061435782615441565b604082019050919050565b600061436f602683614f7f565b915061437a82615490565b604082019050919050565b6000614392602a83614f7f565b915061439d826154df565b604082019050919050565b60006143b5602c83614f7f565b91506143c08261552e565b604082019050919050565b60006143d8602383614f7f565b91506143e38261557d565b604082019050919050565b60006143fb602583614f7f565b9150614406826155cc565b604082019050919050565b600061441e603183614f7f565b91506144298261561b565b604082019050919050565b6000614441602583614f7f565b915061444c8261566a565b604082019050919050565b6000614464601e83614f7f565b915061446f826156b9565b602082019050919050565b6000614487603983614f7f565b9150614492826156e2565b604082019050919050565b60006144aa601883614f7f565b91506144b582615731565b602082019050919050565b60006144cd602b83614f7f565b91506144d88261575a565b604082019050919050565b60006144f0601283614f7f565b91506144fb826157a9565b602082019050919050565b6000614513601f83614f7f565b915061451e826157d2565b602082019050919050565b6000614536602683614f7f565b9150614541826157fb565b604082019050919050565b6000614559602083614f7f565b91506145648261584a565b602082019050919050565b600061457c602f83614f7f565b915061458782615873565b604082019050919050565b600061459f601a83614f7f565b91506145aa826158c2565b602082019050919050565b60006145c2603283614f7f565b91506145cd826158eb565b604082019050919050565b60006145e5602083614f7f565b91506145f08261593a565b602082019050919050565b6000614608601d83614f7f565b915061461382615963565b602082019050919050565b600061462b602283614f7f565b91506146368261598c565b604082019050919050565b600061464e600083614f74565b9150614659826159db565b600082019050919050565b6000614671601083614f7f565b915061467c826159de565b602082019050919050565b6000614694603383614f7f565b915061469f82615a07565b604082019050919050565b60006146b7601683614f7f565b91506146c282615a56565b602082019050919050565b60006146da601d83614f7f565b91506146e582615a7f565b602082019050919050565b60006146fd602183614f7f565b915061470882615aa8565b604082019050919050565b6000614720601683614f7f565b915061472b82615af7565b602082019050919050565b6000614743602783614f7f565b915061474e82615b20565b604082019050919050565b6000614766602e83614f7f565b915061477182615b6f565b604082019050919050565b6000614789602683614f7f565b915061479482615bbe565b604082019050919050565b60006147ac601f83614f7f565b91506147b782615c0d565b602082019050919050565b60006147cf602f83614f7f565b91506147da82615c36565b604082019050919050565b60006147f2602d83614f7f565b91506147fd82615c85565b604082019050919050565b6000614815602283614f7f565b915061482082615cd4565b604082019050919050565b6000614838602883614f7f565b915061484382615d23565b604082019050919050565b604082016000820151614864600085018261426f565b506020820151614877602085018261489b565b50505050565b614886816151b0565b82525050565b614895816151ba565b82525050565b6148a4816151ca565b82525050565b6148b3816151ca565b82525050565b60006148c5828561430e565b91506148d1828461430e565b91508190509392505050565b60006148e882614641565b9150819050919050565b6000602082019050614907600083018461427e565b92915050565b6000608082019050614922600083018761427e565b61492f602083018661427e565b61493c604083018561487d565b818103606083015261494e818461429c565b905095945050505050565b600060208201905061496e600083018461428d565b92915050565b6000602082019050818103600083015261498e81846142d5565b905092915050565b600060208201905081810360008301526149af8161433f565b9050919050565b600060208201905081810360008301526149cf81614362565b9050919050565b600060208201905081810360008301526149ef81614385565b9050919050565b60006020820190508181036000830152614a0f816143a8565b9050919050565b60006020820190508181036000830152614a2f816143cb565b9050919050565b60006020820190508181036000830152614a4f816143ee565b9050919050565b60006020820190508181036000830152614a6f81614411565b9050919050565b60006020820190508181036000830152614a8f81614434565b9050919050565b60006020820190508181036000830152614aaf81614457565b9050919050565b60006020820190508181036000830152614acf8161447a565b9050919050565b60006020820190508181036000830152614aef8161449d565b9050919050565b60006020820190508181036000830152614b0f816144c0565b9050919050565b60006020820190508181036000830152614b2f816144e3565b9050919050565b60006020820190508181036000830152614b4f81614506565b9050919050565b60006020820190508181036000830152614b6f81614529565b9050919050565b60006020820190508181036000830152614b8f8161454c565b9050919050565b60006020820190508181036000830152614baf8161456f565b9050919050565b60006020820190508181036000830152614bcf81614592565b9050919050565b60006020820190508181036000830152614bef816145b5565b9050919050565b60006020820190508181036000830152614c0f816145d8565b9050919050565b60006020820190508181036000830152614c2f816145fb565b9050919050565b60006020820190508181036000830152614c4f8161461e565b9050919050565b60006020820190508181036000830152614c6f81614664565b9050919050565b60006020820190508181036000830152614c8f81614687565b9050919050565b60006020820190508181036000830152614caf816146aa565b9050919050565b60006020820190508181036000830152614ccf816146cd565b9050919050565b60006020820190508181036000830152614cef816146f0565b9050919050565b60006020820190508181036000830152614d0f81614713565b9050919050565b60006020820190508181036000830152614d2f81614736565b9050919050565b60006020820190508181036000830152614d4f81614759565b9050919050565b60006020820190508181036000830152614d6f8161477c565b9050919050565b60006020820190508181036000830152614d8f8161479f565b9050919050565b60006020820190508181036000830152614daf816147c2565b9050919050565b60006020820190508181036000830152614dcf816147e5565b9050919050565b60006020820190508181036000830152614def81614808565b9050919050565b60006020820190508181036000830152614e0f8161482b565b9050919050565b6000604082019050614e2b600083018461484e565b92915050565b6000602082019050614e46600083018461487d565b92915050565b600060a082019050614e61600083018861488c565b614e6e602083018761488c565b614e7b60408301866148aa565b614e8860608301856148aa565b614e95608083018461488c565b9695505050505050565b6000614ea9614eba565b9050614eb5828261527c565b919050565b6000604051905090565b600067ffffffffffffffff821115614edf57614ede6153e3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0b57614f0a6153e3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f3757614f366153e3565b5b614f4082615430565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fa682615174565b9150614fb183615174565b9250826fffffffffffffffffffffffffffffffff03821115614fd657614fd5615327565b5b828201905092915050565b6000614fec826151b0565b9150614ff7836151b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561502c5761502b615327565b5b828201905092915050565b6000615042826151b0565b915061504d836151b0565b92508261505d5761505c615356565b5b828204905092915050565b6000615073826151b0565b915061507e836151b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150b7576150b6615327565b5b828202905092915050565b60006150cd82615174565b91506150d883615174565b9250828210156150eb576150ea615327565b5b828203905092915050565b6000615101826151b0565b915061510c836151b0565b92508282101561511f5761511e615327565b5b828203905092915050565b600061513582615190565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561520b5780820151818401526020810190506151f0565b8381111561521a576000848401525b50505050565b600061522b826151b0565b9150600082141561523f5761523e615327565b5b600182039050919050565b6000600282049050600182168061526257607f821691505b6020821081141561527657615275615385565b5b50919050565b61528582615430565b810181811067ffffffffffffffff821117156152a4576152a36153e3565b5b80604052505050565b60006152b8826151b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152eb576152ea615327565b5b600182019050919050565b6000615301826151b0565b915061530c836151b0565b92508261531c5761531b615356565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f616c6c6f776c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615d7b8161512a565b8114615d8657600080fd5b50565b615d928161513c565b8114615d9d57600080fd5b50565b615da981615148565b8114615db457600080fd5b50565b615dc0816151b0565b8114615dcb57600080fd5b50565b615dd7816151ba565b8114615de257600080fd5b50565b615dee816151ca565b8114615df957600080fd5b5056fea2646970667358221220db90e4bc5d9574d9bef65097e6657de452460aab31019f73d8b5eb80efe2bf6d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c8063715018a611610123578063ac446002116100ab578063d7224ba01161006f578063d7224ba0146107c9578063dc33e681146107f4578063e985e9c514610831578063f2fde38b1461086e578063fbe1aa51146108975761021a565b8063ac44600214610707578063b05863d51461071e578063b88d4fde14610747578063c87b56dd14610770578063cb91d8b3146107ad5761021a565b806390aa0b0f116100f257806390aa0b0f1461060a5780639231ab2a1461063957806395d89b4114610676578063a22cb465146106a1578063a7cd52cb146106ca5761021a565b8063715018a6146105745780638bc35c2f1461058b5780638da5cb5b146105b657806390028083146105e15761021a565b80634122ed3a116101a65780634f6ccce7116101755780634f6ccce71461046957806355f804b3146104a65780635666c880146104cf5780636352211e146104fa57806370a08231146105375761021a565b80634122ed3a146103d057806341fbddbd146103f9578063422030ba1461040357806342842e0e146104405761021a565b806318160ddd116101ed57806318160ddd146102ed57806323b872dd146103185780632d20fb60146103415780632f745c591461036a578063375a069a146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190614088565b6108c2565b6040516102539190614959565b60405180910390f35b34801561026857600080fd5b50610271610a0c565b60405161027e9190614974565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a9919061412f565b610a9e565b6040516102bb91906148f2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613fd0565b610b23565b005b3480156102f957600080fd5b50610302610c3c565b60405161030f9190614e31565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613eba565b610c46565b005b34801561034d57600080fd5b506103686004803603810190610363919061412f565b610c56565b005b34801561037657600080fd5b50610391600480360381019061038c9190613fd0565b610d34565b60405161039e9190614e31565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c9919061412f565b610f32565b005b3480156103dc57600080fd5b506103f760048036038101906103f2919061421c565b61110e565b005b6104016112ca565b005b34801561040f57600080fd5b5061042a6004803603810190610425919061419c565b611508565b6040516104379190614959565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613eba565b611530565b005b34801561047557600080fd5b50610490600480360381019061048b919061412f565b611550565b60405161049d9190614e31565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906140e2565b6115a3565b005b3480156104db57600080fd5b506104e4611635565b6040516104f19190614e31565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c919061412f565b611659565b60405161052e91906148f2565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e4d565b61166f565b60405161056b9190614e31565b60405180910390f35b34801561058057600080fd5b50610589611758565b005b34801561059757600080fd5b506105a06117e0565b6040516105ad9190614e31565b60405180910390f35b3480156105c257600080fd5b506105cb611804565b6040516105d891906148f2565b60405180910390f35b3480156105ed57600080fd5b50610608600480360381019061060391906141ef565b61182d565b005b34801561061657600080fd5b5061061f6118d0565b604051610630959493929190614e4c565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b919061412f565b61194c565b60405161066d9190614e16565b60405180910390f35b34801561068257600080fd5b5061068b611964565b6040516106989190614974565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190613f90565b6119f6565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190613e4d565b611b77565b6040516106fe9190614e31565b60405180910390f35b34801561071357600080fd5b5061071c611b8f565b005b34801561072a57600080fd5b5061074560048036038101906107409190614010565b611d10565b005b34801561075357600080fd5b5061076e60048036038101906107699190613f0d565b611e6c565b005b34801561077c57600080fd5b506107976004803603810190610792919061412f565b611ec8565b6040516107a49190614974565b60405180910390f35b6107c760048036038101906107c2919061415c565b611f6f565b005b3480156107d557600080fd5b506107de612292565b6040516107eb9190614e31565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190613e4d565b612298565b6040516108289190614e31565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613e7a565b6122aa565b6040516108659190614959565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613e4d565b61233e565b005b3480156108a357600080fd5b506108ac612436565b6040516108b99190614e31565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a055750610a048261245a565b5b9050919050565b606060028054610a1b9061524a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a479061524a565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b6000610aa9826124c4565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf90614db6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2e82611659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614c36565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbe6124d2565b73ffffffffffffffffffffffffffffffffffffffff161480610bed5750610bec81610be76124d2565b6122aa565b5b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390614ab6565b60405180910390fd5b610c378383836124da565b505050565b6000600154905090565b610c5183838361258c565b505050565b610c5e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16610c7c611804565b73ffffffffffffffffffffffffffffffffffffffff1614610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990614b76565b60405180910390fd5b60026009541415610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90614d76565b60405180910390fd5b6002600981905550610d2981612b45565b600160098190555050565b6000610d3f8361166f565b8210610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790614996565b60405180910390fd5b6000610d8a610c3c565b905060008060005b83811015610ef0576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e8457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610edc5786841415610ecd578195505050505050610f2c565b8380610ed8906152ad565b9450505b508080610ee8906152ad565b915050610d92565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614d36565b60405180910390fd5b92915050565b610f3a6124d2565b73ffffffffffffffffffffffffffffffffffffffff16610f58611804565b73ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590614b76565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610fd8610c3c565b610fe29190614fe1565b1115611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614d16565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148261105191906152f6565b14611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906149f6565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000014826110bf9190615037565b905060005b81811015611109576110f6337f0000000000000000000000000000000000000000000000000000000000000014612dd3565b8080611101906152ad565b9150506110c4565b505050565b6111166124d2565b73ffffffffffffffffffffffffffffffffffffffff16611134611804565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614b76565b60405180910390fd5b6040518060a00160405280600063ffffffff1681526020018263ffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff168152602001600a60000160189054906101000a900463ffffffff1663ffffffff16815250600a60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550905050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90614a96565b60405180910390fd5b6000600a60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16905060008114156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90614bf6565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614b36565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027106001611451610c3c565b61145b9190614fe1565b111561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390614b16565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114ec90615220565b91905055506114fc336001612dd3565b61150581612df1565b50565b600080841415801561151b575060008314155b80156115275750814210155b90509392505050565b61154b83838360405180602001604052806000815250611e6c565b505050565b600061155a610c3c565b821061159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614a16565b60405180910390fd5b819050919050565b6115ab6124d2565b73ffffffffffffffffffffffffffffffffffffffff166115c9611804565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614b76565b60405180910390fd5b8181600c9190611630929190613adb565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061166482612e92565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614af6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117606124d2565b73ffffffffffffffffffffffffffffffffffffffff1661177e611804565b73ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90614b76565b60405180910390fd5b6117de6000613095565b565b7f000000000000000000000000000000000000000000000000000000000000001481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118356124d2565b73ffffffffffffffffffffffffffffffffffffffff16611853611804565b73ffffffffffffffffffffffffffffffffffffffff16146118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090614b76565b60405180910390fd5b80600a60000160186101000a81548163ffffffff021916908363ffffffff16021790555050565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900463ffffffff16905085565b611954613b61565b61195d82612e92565b9050919050565b6060600380546119739061524a565b80601f016020809104026020016040519081016040528092919081815260200182805461199f9061524a565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b6119fe6124d2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390614bb6565b60405180910390fd5b8060076000611a796124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b266124d2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b6b9190614959565b60405180910390a35050565b600b6020528060005260406000206000915090505481565b611b976124d2565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611804565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614b76565b60405180910390fd5b60026009541415611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614d76565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c7f906148dd565b60006040518083038185875af1925050503d8060008114611cbc576040519150601f19603f3d011682016040523d82523d6000602084013e611cc1565b606091505b5050905080611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90614c56565b60405180910390fd5b506001600981905550565b611d186124d2565b73ffffffffffffffffffffffffffffffffffffffff16611d36611804565b73ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614b76565b60405180910390fd5b8051825114611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614df6565b60405180910390fd5b60005b8251811015611e6757818181518110611def57611dee6153b4565b5b6020026020010151600b6000858481518110611e0e57611e0d6153b4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611e5f906152ad565b915050611dd3565b505050565b611e7784848461258c565b611e8384848484613159565b611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614c76565b60405180910390fd5b50505050565b6060611ed3826124c4565b611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990614b96565b60405180910390fd5b6000611f1c6132f0565b90506000815111611f3c5760405180602001604052806000815250611f67565b80611f4684613382565b604051602001611f579291906148b9565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614a96565b60405180910390fd5b6000600a6040518060a00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816080015163ffffffff1690506000826060015167ffffffffffffffff1690506000836020015163ffffffff169050848314612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90614a76565b60405180910390fd5b612142828483611508565b612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614c16565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710866121ab610c3c565b6121b59190614fe1565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614b16565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000148661222133612298565b61222b9190614fe1565b111561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614cf6565b60405180910390fd5b6122763387612dd3565b61228a86836122859190615068565b612df1565b505050505050565b60085481565b60006122a3826134e3565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123466124d2565b73ffffffffffffffffffffffffffffffffffffffff16612364611804565b73ffffffffffffffffffffffffffffffffffffffff16146123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190614b76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612421906149b6565b60405180910390fd5b61243381613095565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061259782612e92565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125be6124d2565b73ffffffffffffffffffffffffffffffffffffffff16148061261a57506125e36124d2565b73ffffffffffffffffffffffffffffffffffffffff1661260284610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612636575061263582600001516126306124d2565b6122aa565b5b905080612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614bd6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e190614b56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190614a36565b60405180910390fd5b61276785858560016135cc565b61277760008484600001516124da565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127e591906150c2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128899190614f9b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461298f9190614fe1565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ad557612a05816124c4565b15612ad4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b3d86868660016135d2565b505050505050565b6000600854905060008211612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690614ad6565b60405180910390fd5b600060018383612b9f9190614fe1565b612ba991906150f6565b905060017f0000000000000000000000000000000000000000000000000000000000002710612bd891906150f6565b811115612c0f5760017f0000000000000000000000000000000000000000000000000000000000002710612c0c91906150f6565b90505b612c18816124c4565b612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90614d56565b60405180910390fd5b60008290505b818111612dba57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612da7576000612cda82612e92565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612db2906152ad565b915050612c5d565b50600181612dc89190614fe1565b600881905550505050565b612ded8282604051806020016040528060008152506135d8565b5050565b80341015612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90614c96565b60405180910390fd5b80341115612e8f573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e6291906150f6565b9081150290604051600060405180830381858888f19350505050158015612e8d573d6000803e3d6000fd5b505b50565b612e9a613b61565b612ea3826124c4565b612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906149d6565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612f465760017f000000000000000000000000000000000000000000000000000000000000001484612f3991906150f6565b612f439190614fe1565b90505b60008390505b818110613054576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461304057809350505050613090565b50808061304c90615220565b915050612f4c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308790614d96565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061317a8473ffffffffffffffffffffffffffffffffffffffff16613ab8565b156132e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131a36124d2565b8786866040518563ffffffff1660e01b81526004016131c5949392919061490d565b602060405180830381600087803b1580156131df57600080fd5b505af192505050801561321057506040513d601f19601f8201168201806040525081019061320d91906140b5565b60015b613293573d8060008114613240576040519150601f19603f3d011682016040523d82523d6000602084013e613245565b606091505b5060008151141561328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290614c76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132e8565b600190505b949350505050565b6060600c80546132ff9061524a565b80601f016020809104026020016040519081016040528092919081815260200182805461332b9061524a565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050905090565b606060008214156133ca576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134de565b600082905060005b600082146133fc5780806133e5906152ad565b915050600a826133f59190615037565b91506133d2565b60008167ffffffffffffffff811115613418576134176153e3565b5b6040519080825280601f01601f19166020018201604052801561344a5781602001600182028036833780820191505090505b5090505b600085146134d75760018261346391906150f6565b9150600a8561347291906152f6565b603061347e9190614fe1565b60f81b818381518110613494576134936153b4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134d09190615037565b945061344e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b90614a56565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561364f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364690614cd6565b60405180910390fd5b613658816124c4565b15613698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368f90614cb6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000148311156136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290614dd6565b60405180910390fd5b61370860008583866135cc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516138059190614f9b565b6fffffffffffffffffffffffffffffffff16815260200185836020015161382c9190614f9b565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a9b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a3b6000888488613159565b613a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7190614c76565b60405180910390fd5b8180613a85906152ad565b9250508080613a93906152ad565b9150506139ca565b5080600181905550613ab060008785886135d2565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613ae79061524a565b90600052602060002090601f016020900481019282613b095760008555613b50565b82601f10613b2257803560ff1916838001178555613b50565b82800160010185558215613b50579182015b82811115613b4f578235825591602001919060010190613b34565b5b509050613b5d9190613b9b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613bb4576000816000905550600101613b9c565b5090565b6000613bcb613bc684614ec4565b614e9f565b90508083825260208201905082856020860282011115613bee57613bed61541c565b5b60005b85811015613c1e5781613c048882613cda565b845260208401935060208301925050600181019050613bf1565b5050509392505050565b6000613c3b613c3684614ef0565b614e9f565b90508083825260208201905082856020860282011115613c5e57613c5d61541c565b5b60005b85811015613c8e5781613c748882613e0e565b845260208401935060208301925050600181019050613c61565b5050509392505050565b6000613cab613ca684614f1c565b614e9f565b905082815260208101848484011115613cc757613cc6615421565b5b613cd28482856151de565b509392505050565b600081359050613ce981615d72565b92915050565b600082601f830112613d0457613d03615417565b5b8135613d14848260208601613bb8565b91505092915050565b600082601f830112613d3257613d31615417565b5b8135613d42848260208601613c28565b91505092915050565b600081359050613d5a81615d89565b92915050565b600081359050613d6f81615da0565b92915050565b600081519050613d8481615da0565b92915050565b600082601f830112613d9f57613d9e615417565b5b8135613daf848260208601613c98565b91505092915050565b60008083601f840112613dce57613dcd615417565b5b8235905067ffffffffffffffff811115613deb57613dea615412565b5b602083019150836001820283011115613e0757613e0661541c565b5b9250929050565b600081359050613e1d81615db7565b92915050565b600081359050613e3281615dce565b92915050565b600081359050613e4781615de5565b92915050565b600060208284031215613e6357613e6261542b565b5b6000613e7184828501613cda565b91505092915050565b60008060408385031215613e9157613e9061542b565b5b6000613e9f85828601613cda565b9250506020613eb085828601613cda565b9150509250929050565b600080600060608486031215613ed357613ed261542b565b5b6000613ee186828701613cda565b9350506020613ef286828701613cda565b9250506040613f0386828701613e0e565b9150509250925092565b60008060008060808587031215613f2757613f2661542b565b5b6000613f3587828801613cda565b9450506020613f4687828801613cda565b9350506040613f5787828801613e0e565b925050606085013567ffffffffffffffff811115613f7857613f77615426565b5b613f8487828801613d8a565b91505092959194509250565b60008060408385031215613fa757613fa661542b565b5b6000613fb585828601613cda565b9250506020613fc685828601613d4b565b9150509250929050565b60008060408385031215613fe757613fe661542b565b5b6000613ff585828601613cda565b925050602061400685828601613e0e565b9150509250929050565b600080604083850312156140275761402661542b565b5b600083013567ffffffffffffffff81111561404557614044615426565b5b61405185828601613cef565b925050602083013567ffffffffffffffff81111561407257614071615426565b5b61407e85828601613d1d565b9150509250929050565b60006020828403121561409e5761409d61542b565b5b60006140ac84828501613d60565b91505092915050565b6000602082840312156140cb576140ca61542b565b5b60006140d984828501613d75565b91505092915050565b600080602083850312156140f9576140f861542b565b5b600083013567ffffffffffffffff81111561411757614116615426565b5b61412385828601613db8565b92509250509250929050565b6000602082840312156141455761414461542b565b5b600061415384828501613e0e565b91505092915050565b600080604083850312156141735761417261542b565b5b600061418185828601613e0e565b925050602061419285828601613e0e565b9150509250929050565b6000806000606084860312156141b5576141b461542b565b5b60006141c386828701613e0e565b93505060206141d486828701613e0e565b92505060406141e586828701613e0e565b9150509250925092565b6000602082840312156142055761420461542b565b5b600061421384828501613e23565b91505092915050565b6000806000606084860312156142355761423461542b565b5b600061424386828701613e38565b935050602061425486828701613e38565b925050604061426586828701613e23565b9150509250925092565b6142788161512a565b82525050565b6142878161512a565b82525050565b6142968161513c565b82525050565b60006142a782614f4d565b6142b18185614f63565b93506142c18185602086016151ed565b6142ca81615430565b840191505092915050565b60006142e082614f58565b6142ea8185614f7f565b93506142fa8185602086016151ed565b61430381615430565b840191505092915050565b600061431982614f58565b6143238185614f90565b93506143338185602086016151ed565b80840191505092915050565b600061434c602283614f7f565b915061435782615441565b604082019050919050565b600061436f602683614f7f565b915061437a82615490565b604082019050919050565b6000614392602a83614f7f565b915061439d826154df565b604082019050919050565b60006143b5602c83614f7f565b91506143c08261552e565b604082019050919050565b60006143d8602383614f7f565b91506143e38261557d565b604082019050919050565b60006143fb602583614f7f565b9150614406826155cc565b604082019050919050565b600061441e603183614f7f565b91506144298261561b565b604082019050919050565b6000614441602583614f7f565b915061444c8261566a565b604082019050919050565b6000614464601e83614f7f565b915061446f826156b9565b602082019050919050565b6000614487603983614f7f565b9150614492826156e2565b604082019050919050565b60006144aa601883614f7f565b91506144b582615731565b602082019050919050565b60006144cd602b83614f7f565b91506144d88261575a565b604082019050919050565b60006144f0601283614f7f565b91506144fb826157a9565b602082019050919050565b6000614513601f83614f7f565b915061451e826157d2565b602082019050919050565b6000614536602683614f7f565b9150614541826157fb565b604082019050919050565b6000614559602083614f7f565b91506145648261584a565b602082019050919050565b600061457c602f83614f7f565b915061458782615873565b604082019050919050565b600061459f601a83614f7f565b91506145aa826158c2565b602082019050919050565b60006145c2603283614f7f565b91506145cd826158eb565b604082019050919050565b60006145e5602083614f7f565b91506145f08261593a565b602082019050919050565b6000614608601d83614f7f565b915061461382615963565b602082019050919050565b600061462b602283614f7f565b91506146368261598c565b604082019050919050565b600061464e600083614f74565b9150614659826159db565b600082019050919050565b6000614671601083614f7f565b915061467c826159de565b602082019050919050565b6000614694603383614f7f565b915061469f82615a07565b604082019050919050565b60006146b7601683614f7f565b91506146c282615a56565b602082019050919050565b60006146da601d83614f7f565b91506146e582615a7f565b602082019050919050565b60006146fd602183614f7f565b915061470882615aa8565b604082019050919050565b6000614720601683614f7f565b915061472b82615af7565b602082019050919050565b6000614743602783614f7f565b915061474e82615b20565b604082019050919050565b6000614766602e83614f7f565b915061477182615b6f565b604082019050919050565b6000614789602683614f7f565b915061479482615bbe565b604082019050919050565b60006147ac601f83614f7f565b91506147b782615c0d565b602082019050919050565b60006147cf602f83614f7f565b91506147da82615c36565b604082019050919050565b60006147f2602d83614f7f565b91506147fd82615c85565b604082019050919050565b6000614815602283614f7f565b915061482082615cd4565b604082019050919050565b6000614838602883614f7f565b915061484382615d23565b604082019050919050565b604082016000820151614864600085018261426f565b506020820151614877602085018261489b565b50505050565b614886816151b0565b82525050565b614895816151ba565b82525050565b6148a4816151ca565b82525050565b6148b3816151ca565b82525050565b60006148c5828561430e565b91506148d1828461430e565b91508190509392505050565b60006148e882614641565b9150819050919050565b6000602082019050614907600083018461427e565b92915050565b6000608082019050614922600083018761427e565b61492f602083018661427e565b61493c604083018561487d565b818103606083015261494e818461429c565b905095945050505050565b600060208201905061496e600083018461428d565b92915050565b6000602082019050818103600083015261498e81846142d5565b905092915050565b600060208201905081810360008301526149af8161433f565b9050919050565b600060208201905081810360008301526149cf81614362565b9050919050565b600060208201905081810360008301526149ef81614385565b9050919050565b60006020820190508181036000830152614a0f816143a8565b9050919050565b60006020820190508181036000830152614a2f816143cb565b9050919050565b60006020820190508181036000830152614a4f816143ee565b9050919050565b60006020820190508181036000830152614a6f81614411565b9050919050565b60006020820190508181036000830152614a8f81614434565b9050919050565b60006020820190508181036000830152614aaf81614457565b9050919050565b60006020820190508181036000830152614acf8161447a565b9050919050565b60006020820190508181036000830152614aef8161449d565b9050919050565b60006020820190508181036000830152614b0f816144c0565b9050919050565b60006020820190508181036000830152614b2f816144e3565b9050919050565b60006020820190508181036000830152614b4f81614506565b9050919050565b60006020820190508181036000830152614b6f81614529565b9050919050565b60006020820190508181036000830152614b8f8161454c565b9050919050565b60006020820190508181036000830152614baf8161456f565b9050919050565b60006020820190508181036000830152614bcf81614592565b9050919050565b60006020820190508181036000830152614bef816145b5565b9050919050565b60006020820190508181036000830152614c0f816145d8565b9050919050565b60006020820190508181036000830152614c2f816145fb565b9050919050565b60006020820190508181036000830152614c4f8161461e565b9050919050565b60006020820190508181036000830152614c6f81614664565b9050919050565b60006020820190508181036000830152614c8f81614687565b9050919050565b60006020820190508181036000830152614caf816146aa565b9050919050565b60006020820190508181036000830152614ccf816146cd565b9050919050565b60006020820190508181036000830152614cef816146f0565b9050919050565b60006020820190508181036000830152614d0f81614713565b9050919050565b60006020820190508181036000830152614d2f81614736565b9050919050565b60006020820190508181036000830152614d4f81614759565b9050919050565b60006020820190508181036000830152614d6f8161477c565b9050919050565b60006020820190508181036000830152614d8f8161479f565b9050919050565b60006020820190508181036000830152614daf816147c2565b9050919050565b60006020820190508181036000830152614dcf816147e5565b9050919050565b60006020820190508181036000830152614def81614808565b9050919050565b60006020820190508181036000830152614e0f8161482b565b9050919050565b6000604082019050614e2b600083018461484e565b92915050565b6000602082019050614e46600083018461487d565b92915050565b600060a082019050614e61600083018861488c565b614e6e602083018761488c565b614e7b60408301866148aa565b614e8860608301856148aa565b614e95608083018461488c565b9695505050505050565b6000614ea9614eba565b9050614eb5828261527c565b919050565b6000604051905090565b600067ffffffffffffffff821115614edf57614ede6153e3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0b57614f0a6153e3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f3757614f366153e3565b5b614f4082615430565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fa682615174565b9150614fb183615174565b9250826fffffffffffffffffffffffffffffffff03821115614fd657614fd5615327565b5b828201905092915050565b6000614fec826151b0565b9150614ff7836151b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561502c5761502b615327565b5b828201905092915050565b6000615042826151b0565b915061504d836151b0565b92508261505d5761505c615356565b5b828204905092915050565b6000615073826151b0565b915061507e836151b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150b7576150b6615327565b5b828202905092915050565b60006150cd82615174565b91506150d883615174565b9250828210156150eb576150ea615327565b5b828203905092915050565b6000615101826151b0565b915061510c836151b0565b92508282101561511f5761511e615327565b5b828203905092915050565b600061513582615190565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561520b5780820151818401526020810190506151f0565b8381111561521a576000848401525b50505050565b600061522b826151b0565b9150600082141561523f5761523e615327565b5b600182039050919050565b6000600282049050600182168061526257607f821691505b6020821081141561527657615275615385565b5b50919050565b61528582615430565b810181811067ffffffffffffffff821117156152a4576152a36153e3565b5b80604052505050565b60006152b8826151b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152eb576152ea615327565b5b600182019050919050565b6000615301826151b0565b915061530c836151b0565b92508261531c5761531b615356565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f616c6c6f776c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615d7b8161512a565b8114615d8657600080fd5b50565b615d928161513c565b8114615d9d57600080fd5b50565b615da981615148565b8114615db457600080fd5b50565b615dc0816151b0565b8114615dcb57600080fd5b50565b615dd7816151ba565b8114615de257600080fd5b50565b615dee816151ca565b8114615df957600080fd5b5056fea2646970667358221220db90e4bc5d9574d9bef65097e6657de452460aab31019f73d8b5eb80efe2bf6d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : collectionSize_ (uint256): 10000
Arg [2] : amountForAuctionAndDev_ (uint256): 0
Arg [3] : amountForDevs_ (uint256): 0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41114:4944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28775:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30501:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32026:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31589:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27336:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32876:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45671:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27967:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44759:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42596:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42174:415;;;:::i;:::-;;44004:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33081:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27499:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45378:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41273:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30324:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29201:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2413:103;;;;;;;;;;;;;:::i;:::-;;41177:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1762:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44283:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41503:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;45908:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30656:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32294:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41538:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45484:181;;;;;;;;;;;;;:::i;:::-;;44389:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33301:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30817:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42896:892;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37716:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45795:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32631:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2671:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41230:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28775:370;28902:4;28947:25;28932:40;;;:11;:40;;;;:99;;;;28998:33;28983:48;;;:11;:48;;;;28932:99;:160;;;;29057:35;29042:50;;;:11;:50;;;;28932:160;:207;;;;29103:36;29127:11;29103:23;:36::i;:::-;28932:207;28918:221;;28775:370;;;:::o;30501:94::-;30555:13;30584:5;30577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30501:94;:::o;32026:204::-;32094:7;32118:16;32126:7;32118;:16::i;:::-;32110:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32200:15;:24;32216:7;32200:24;;;;;;;;;;;;;;;;;;;;;32193:31;;32026:204;;;:::o;31589:379::-;31658:13;31674:24;31690:7;31674:15;:24::i;:::-;31658:40;;31719:5;31713:11;;:2;:11;;;;31705:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31804:5;31788:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31813:37;31830:5;31837:12;:10;:12::i;:::-;31813:16;:37::i;:::-;31788:62;31772:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;31934:28;31943:2;31947:7;31956:5;31934:8;:28::i;:::-;31651:317;31589:379;;:::o;27336:94::-;27389:7;27412:12;;27405:19;;27336:94;:::o;32876:142::-;32984:28;32994:4;33000:2;33004:7;32984:9;:28::i;:::-;32876:142;;;:::o;45671:118::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:1:::1;5506:7;;:19;;5498:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:1;5639:7;:18;;;;45755:28:::2;45774:8;45755:18;:28::i;:::-;4864:1:::1;5818:7;:22;;;;45671:118:::0;:::o;27967:744::-;28076:7;28111:16;28121:5;28111:9;:16::i;:::-;28103:5;:24;28095:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28173:22;28198:13;:11;:13::i;:::-;28173:38;;28218:19;28248:25;28298:9;28293:350;28317:14;28313:1;:18;28293:350;;;28347:31;28381:11;:14;28393:1;28381:14;;;;;;;;;;;28347:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28434:1;28408:28;;:9;:14;;;:28;;;28404:89;;28469:9;:14;;;28449:34;;28404:89;28526:5;28505:26;;:17;:26;;;28501:135;;;28563:5;28548:11;:20;28544:59;;;28590:1;28583:8;;;;;;;;;28544:59;28613:13;;;;;:::i;:::-;;;;28501:135;28338:305;28333:3;;;;;:::i;:::-;;;;28293:350;;;;28649:56;;;;;;;;;;:::i;:::-;;;;;;;;27967:744;;;;;:::o;44759:442::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:13:::1;44852:8;44836:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;44820:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44984:1;44968:12;44957:8;:23;;;;:::i;:::-;:28;44941:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45054:17;45085:12;45074:8;:23;;;;:::i;:::-;45054:43;;45109:9;45104:92;45128:9;45124:1;:13;45104:92;;;45153:35;45163:10;45175:12;45153:9;:35::i;:::-;45139:3;;;;;:::i;:::-;;;;45104:92;;;;44813:388;44759:442:::0;:::o;42596:294::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42752:136:::1;;;;;;;;42771:1;42752:136;;;;;;42781:19;42752:136;;;;;;42809:16;42752:136;;;;;;42834:14;42752:136;;;;;;42857:10;:24;;;;;;;;;;;;42752:136;;;;::::0;42739:10:::1;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42596:294:::0;;;:::o;42174:415::-;42107:10;42094:23;;:9;:23;;;42086:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42236:13:::1;42260:10;:24;;;;;;;;;;;;42252:33;;42236:49;;42309:1;42300:5;:10;;42292:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42386:1;42362:9;:21;42372:10;42362:21;;;;;;;;;;;;;;;;:25;42354:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42459:14;42454:1;42438:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;42430:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42503:9;:21;42513:10;42503:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;42533:24;42543:10;42555:1;42533:9;:24::i;:::-;42564:19;42577:5;42564:12;:19::i;:::-;42229:360;42174:415::o:0;44004:271::-;44145:4;44190:1;44172:14;:19;;:48;;;;;44219:1;44202:13;:18;;44172:48;:97;;;;;44250:19;44231:15;:38;;44172:97;44158:111;;44004:271;;;;;:::o;33081:157::-;33193:39;33210:4;33216:2;33220:7;33193:39;;;;;;;;;;;;:16;:39::i;:::-;33081:157;;;:::o;27499:177::-;27566:7;27598:13;:11;:13::i;:::-;27590:5;:21;27582:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27665:5;27658:12;;27499:177;;;:::o;45378:100::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45465:7:::1;;45449:13;:23;;;;;;;:::i;:::-;;45378:100:::0;;:::o;41273:47::-;;;:::o;30324:118::-;30388:7;30411:20;30423:7;30411:11;:20::i;:::-;:25;;;30404:32;;30324:118;;;:::o;29201:211::-;29265:7;29306:1;29289:19;;:5;:19;;;;29281:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29378:12;:19;29391:5;29378:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29370:36;;29363:43;;29201:211;;;:::o;2413:103::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2478:30:::1;2505:1;2478:18;:30::i;:::-;2413:103::o:0;41177:48::-;;;:::o;1762:87::-;1808:7;1835:6;;;;;;;;;;;1828:13;;1762:87;:::o;44283:100::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44374:3:::1;44347:10;:24;;;:30;;;;;;;;;;;;;;;;;;44283:100:::0;:::o;41503:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45908:147::-;45989:21;;:::i;:::-;46029:20;46041:7;46029:11;:20::i;:::-;46022:27;;45908:147;;;:::o;30656:98::-;30712:13;30741:7;30734:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30656:98;:::o;32294:274::-;32397:12;:10;:12::i;:::-;32385:24;;:8;:24;;;;32377:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32494:8;32449:18;:32;32468:12;:10;:12::i;:::-;32449:32;;;;;;;;;;;;;;;:42;32482:8;32449:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32543:8;32514:48;;32529:12;:10;:12::i;:::-;32514:48;;;32553:8;32514:48;;;;;;:::i;:::-;;;;;;;;32294:274;;:::o;41538:44::-;;;;;;;;;;;;;;;;;:::o;45484:181::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:1:::1;5506:7;;:19;;5498:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:1;5639:7;:18;;;;45549:12:::2;45567:10;:15;;45590:21;45567:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45548:68;;;45631:7;45623:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45541:124;4864:1:::1;5818:7;:22;;;;45484:181::o:0;44389:339::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44542:8:::1;:15;44522:9;:16;:35;44506:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44627:9;44622:101;44646:9;:16;44642:1;:20;44622:101;;;44704:8;44713:1;44704:11;;;;;;;;:::i;:::-;;;;;;;;44678:9;:23;44688:9;44698:1;44688:12;;;;;;;;:::i;:::-;;;;;;;;44678:23;;;;;;;;;;;;;;;:37;;;;44664:3;;;;;:::i;:::-;;;;44622:101;;;;44389:339:::0;;:::o;33301:311::-;33438:28;33448:4;33454:2;33458:7;33438:9;:28::i;:::-;33489:48;33512:4;33518:2;33522:7;33531:5;33489:22;:48::i;:::-;33473:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;33301:311;;;;:::o;30817:394::-;30915:13;30956:16;30964:7;30956;:16::i;:::-;30940:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31046:21;31070:10;:8;:10::i;:::-;31046:34;;31125:1;31107:7;31101:21;:25;:104;;;;;;;;;;;;;;;;;31162:7;31171:18;:7;:16;:18::i;:::-;31145:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31101:104;31087:118;;;30817:394;;;:::o;42896:892::-;42107:10;42094:23;;:9;:23;;;42086:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43022:24:::1;43049:10;43022:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;43066:21;43098:6;:20;;;43090:29;;43066:53;;43126:19;43156:6;:18;;;43148:27;;43126:49;;43182:27;43220:6;:26;;;43212:35;;43182:65;;43287:19;43270:13;:36;43254:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;43386:63;43401:11;43414:13;43429:19;43386:14;:63::i;:::-;43370:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;43539:14;43527:8;43511:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;43503:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43638:23;43626:8;43599:24;43612:10;43599:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43583:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43708:31;43718:10;43730:8;43708:9;:31::i;:::-;43746:36;43773:8;43759:11;:22;;;;:::i;:::-;43746:12;:36::i;:::-;43015:773;;;;42896:892:::0;;:::o;37716:43::-;;;;:::o;45795:107::-;45853:7;45876:20;45890:5;45876:13;:20::i;:::-;45869:27;;45795:107;;;:::o;32631:186::-;32753:4;32776:18;:25;32795:5;32776:25;;;;;;;;;;;;;;;:35;32802:8;32776:35;;;;;;;;;;;;;;;;;;;;;;;;;32769:42;;32631:186;;;;:::o;2671:201::-;1993:12;:10;:12::i;:::-;1982:23;;:7;:5;:7::i;:::-;:23;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2780:1:::1;2760:22;;:8;:22;;;;2752:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2836:28;2855:8;2836:18;:28::i;:::-;2671:201:::0;:::o;41230:38::-;;;:::o;24910:157::-;24995:4;25034:25;25019:40;;;:11;:40;;;;25012:47;;24910:157;;;:::o;33851:105::-;33908:4;33938:12;;33928:7;:22;33921:29;;33851:105;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;37538:172::-;37662:2;37635:15;:24;37651:7;37635:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37696:7;37692:2;37676:28;;37685:5;37676:28;;;;;;;;;;;;37538:172;;;:::o;35903:1529::-;36000:35;36038:20;36050:7;36038:11;:20::i;:::-;36000:58;;36067:22;36109:13;:18;;;36093:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;36162:12;:10;:12::i;:::-;36138:36;;:20;36150:7;36138:11;:20::i;:::-;:36;;;36093:81;:142;;;;36185:50;36202:13;:18;;;36222:12;:10;:12::i;:::-;36185:16;:50::i;:::-;36093:142;36067:169;;36261:17;36245:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36393:4;36371:26;;:13;:18;;;:26;;;36355:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;36482:1;36468:16;;:2;:16;;;;36460:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36535:43;36557:4;36563:2;36567:7;36576:1;36535:21;:43::i;:::-;36635:49;36652:1;36656:7;36665:13;:18;;;36635:8;:49::i;:::-;36723:1;36693:12;:18;36706:4;36693:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36759:1;36731:12;:16;36744:2;36731:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36790:43;;;;;;;;36805:2;36790:43;;;;;;36816:15;36790:43;;;;;36767:11;:20;36779:7;36767:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37061:19;37093:1;37083:7;:11;;;;:::i;:::-;37061:33;;37146:1;37105:43;;:11;:24;37117:11;37105:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37101:236;;;37163:20;37171:11;37163:7;:20::i;:::-;37159:171;;;37223:97;;;;;;;;37250:13;:18;;;37223:97;;;;;;37281:13;:28;;;37223:97;;;;;37196:11;:24;37208:11;37196:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37159:171;37101:236;37369:7;37365:2;37350:27;;37359:4;37350:27;;;;;;;;;;;;37384:42;37405:4;37411:2;37415:7;37424:1;37384:20;:42::i;:::-;35993:1439;;;35903:1529;;;:::o;37864:846::-;37926:25;37954:24;;37926:52;;38004:1;37993:8;:12;37985:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38041:16;38091:1;38080:8;38060:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;38041:51;;38131:1;38114:14;:18;;;;:::i;:::-;38103:8;:29;38099:81;;;38171:1;38154:14;:18;;;;:::i;:::-;38143:29;;38099:81;38295:17;38303:8;38295:7;:17::i;:::-;38287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38367:9;38379:17;38367:29;;38362:297;38403:8;38398:1;:13;38362:297;;38462:1;38431:33;;:11;:14;38443:1;38431:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;38427:225;;;38477:31;38511:14;38523:1;38511:11;:14::i;:::-;38477:48;;38553:89;;;;;;;;38580:9;:14;;;38553:89;;;;;;38607:9;:24;;;38553:89;;;;;38536:11;:14;38548:1;38536:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38466:186;38427:225;38413:3;;;;;:::i;:::-;;;;38362:297;;;;38703:1;38692:8;:12;;;;:::i;:::-;38665:24;:39;;;;37919:791;;37864:846;:::o;33962:98::-;34027:27;34037:2;34041:8;34027:27;;;;;;;;;;;;:9;:27::i;:::-;33962:98;;:::o;43794:204::-;43867:5;43854:9;:18;;43846:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43922:5;43910:9;:17;43906:87;;;43946:10;43938:28;;:47;43979:5;43967:9;:17;;;;:::i;:::-;43938:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43906:87;43794:204;:::o;29664:606::-;29740:21;;:::i;:::-;29781:16;29789:7;29781;:16::i;:::-;29773:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29853:26;29901:12;29890:7;:23;29886:93;;29970:1;29955:12;29945:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;29924:47;;29886:93;29992:12;30007:7;29992:22;;29987:212;30024:18;30016:4;:26;29987:212;;30061:31;30095:11;:17;30107:4;30095:17;;;;;;;;;;;30061:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:1;30125:28;;:9;:14;;;:28;;;30121:71;;30173:9;30166:16;;;;;;;30121:71;30052:147;30044:6;;;;;:::i;:::-;;;;29987:212;;;;30207:57;;;;;;;;;;:::i;:::-;;;;;;;;29664:606;;;;:::o;3032:191::-;3106:16;3125:6;;;;;;;;;;;3106:25;;3151:8;3142:6;;:17;;;;;;;;;;;;;;;;;;3206:8;3175:40;;3196:8;3175:40;;;;;;;;;;;;3095:128;3032:191;:::o;39253:690::-;39390:4;39407:15;:2;:13;;;:15::i;:::-;39403:535;;;39462:2;39446:36;;;39483:12;:10;:12::i;:::-;39497:4;39503:7;39512:5;39446:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39433:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39694:1;39677:6;:13;:18;39673:215;;;39710:61;;;;;;;;;;:::i;:::-;;;;;;;;39673:215;39856:6;39850:13;39841:6;39837:2;39833:15;39826:38;39433:464;39578:45;;;39568:55;;;:6;:55;;;;39561:62;;;;;39403:535;39926:4;39919:11;;39253:690;;;;;;;:::o;45264:108::-;45324:13;45353;45346:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45264:108;:::o;6108:723::-;6164:13;6394:1;6385:5;:10;6381:53;;;6412:10;;;;;;;;;;;;;;;;;;;;;6381:53;6444:12;6459:5;6444:20;;6475:14;6500:78;6515:1;6507:4;:9;6500:78;;6533:8;;;;;:::i;:::-;;;;6564:2;6556:10;;;;;:::i;:::-;;;6500:78;;;6588:19;6620:6;6610:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:39;;6638:154;6654:1;6645:5;:10;6638:154;;6682:1;6672:11;;;;;:::i;:::-;;;6749:2;6741:5;:10;;;;:::i;:::-;6728:2;:24;;;;:::i;:::-;6715:39;;6698:6;6705;6698:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6778:2;6769:11;;;;;:::i;:::-;;;6638:154;;;6816:6;6802:21;;;;;6108:723;;;;:::o;29418:240::-;29479:7;29528:1;29511:19;;:5;:19;;;;29495:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;29619:12;:19;29632:5;29619:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;29611:41;;29604:48;;29418:240;;;:::o;40405:141::-;;;;;:::o;40932:140::-;;;;;:::o;34399:1272::-;34504:20;34527:12;;34504:35;;34568:1;34554:16;;:2;:16;;;;34546:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34745:21;34753:12;34745:7;:21::i;:::-;34744:22;34736:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34827:12;34815:8;:24;;34807:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34887:61;34917:1;34921:2;34925:12;34939:8;34887:21;:61::i;:::-;34957:30;34990:12;:16;35003:2;34990:16;;;;;;;;;;;;;;;34957:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35032:119;;;;;;;;35082:8;35052:11;:19;;;:39;;;;:::i;:::-;35032:119;;;;;;35135:8;35100:11;:24;;;:44;;;;:::i;:::-;35032:119;;;;;35013:12;:16;35026:2;35013:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35186:43;;;;;;;;35201:2;35186:43;;;;;;35212:15;35186:43;;;;;35158:11;:25;35170:12;35158:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35238:20;35261:12;35238:35;;35287:9;35282:281;35306:8;35302:1;:12;35282:281;;;35360:12;35356:2;35335:38;;35352:1;35335:38;;;;;;;;;;;;35400:59;35431:1;35435:2;35439:12;35453:5;35400:22;:59::i;:::-;35382:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;35541:14;;;;;:::i;:::-;;;;35316:3;;;;;:::i;:::-;;;;35282:281;;;;35586:12;35571;:27;;;;35605:60;35634:1;35638:2;35642:12;35656:8;35605:20;:60::i;:::-;34497:1174;;;34399:1272;;;:::o;8973:326::-;9033:4;9290:1;9268:7;:19;;;:23;9261:30;;8973:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:137::-;4393:5;4431:6;4418:20;4409:29;;4447:32;4473:5;4447:32;:::i;:::-;4348:137;;;;:::o;4491:::-;4536:5;4574:6;4561:20;4552:29;;4590:32;4616:5;4590:32;:::i;:::-;4491:137;;;;:::o;4634:329::-;4693:6;4742:2;4730:9;4721:7;4717:23;4713:32;4710:119;;;4748:79;;:::i;:::-;4710:119;4868:1;4893:53;4938:7;4929:6;4918:9;4914:22;4893:53;:::i;:::-;4883:63;;4839:117;4634:329;;;;:::o;4969:474::-;5037:6;5045;5094:2;5082:9;5073:7;5069:23;5065:32;5062:119;;;5100:79;;:::i;:::-;5062:119;5220:1;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5191:117;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4969:474;;;;;:::o;5449:619::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5449:619;;;;;:::o;6074:943::-;6169:6;6177;6185;6193;6242:3;6230:9;6221:7;6217:23;6213:33;6210:120;;;6249:79;;:::i;:::-;6210:120;6369:1;6394:53;6439:7;6430:6;6419:9;6415:22;6394:53;:::i;:::-;6384:63;;6340:117;6496:2;6522:53;6567:7;6558:6;6547:9;6543:22;6522:53;:::i;:::-;6512:63;;6467:118;6624:2;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6595:118;6780:2;6769:9;6765:18;6752:32;6811:18;6803:6;6800:30;6797:117;;;6833:79;;:::i;:::-;6797:117;6938:62;6992:7;6983:6;6972:9;6968:22;6938:62;:::i;:::-;6928:72;;6723:287;6074:943;;;;;;;:::o;7023:468::-;7088:6;7096;7145:2;7133:9;7124:7;7120:23;7116:32;7113:119;;;7151:79;;:::i;:::-;7113:119;7271:1;7296:53;7341:7;7332:6;7321:9;7317:22;7296:53;:::i;:::-;7286:63;;7242:117;7398:2;7424:50;7466:7;7457:6;7446:9;7442:22;7424:50;:::i;:::-;7414:60;;7369:115;7023:468;;;;;:::o;7497:474::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7875:2;7901:53;7946:7;7937:6;7926:9;7922:22;7901:53;:::i;:::-;7891:63;;7846:118;7497:474;;;;;:::o;7977:894::-;8095:6;8103;8152:2;8140:9;8131:7;8127:23;8123:32;8120:119;;;8158:79;;:::i;:::-;8120:119;8306:1;8295:9;8291:17;8278:31;8336:18;8328:6;8325:30;8322:117;;;8358:79;;:::i;:::-;8322:117;8463:78;8533:7;8524:6;8513:9;8509:22;8463:78;:::i;:::-;8453:88;;8249:302;8618:2;8607:9;8603:18;8590:32;8649:18;8641:6;8638:30;8635:117;;;8671:79;;:::i;:::-;8635:117;8776:78;8846:7;8837:6;8826:9;8822:22;8776:78;:::i;:::-;8766:88;;8561:303;7977:894;;;;;:::o;8877:327::-;8935:6;8984:2;8972:9;8963:7;8959:23;8955:32;8952:119;;;8990:79;;:::i;:::-;8952:119;9110:1;9135:52;9179:7;9170:6;9159:9;9155:22;9135:52;:::i;:::-;9125:62;;9081:116;8877:327;;;;:::o;9210:349::-;9279:6;9328:2;9316:9;9307:7;9303:23;9299:32;9296:119;;;9334:79;;:::i;:::-;9296:119;9454:1;9479:63;9534:7;9525:6;9514:9;9510:22;9479:63;:::i;:::-;9469:73;;9425:127;9210:349;;;;:::o;9565:529::-;9636:6;9644;9693:2;9681:9;9672:7;9668:23;9664:32;9661:119;;;9699:79;;:::i;:::-;9661:119;9847:1;9836:9;9832:17;9819:31;9877:18;9869:6;9866:30;9863:117;;;9899:79;;:::i;:::-;9863:117;10012:65;10069:7;10060:6;10049:9;10045:22;10012:65;:::i;:::-;9994:83;;;;9790:297;9565:529;;;;;:::o;10100:329::-;10159:6;10208:2;10196:9;10187:7;10183:23;10179:32;10176:119;;;10214:79;;:::i;:::-;10176:119;10334:1;10359:53;10404:7;10395:6;10384:9;10380:22;10359:53;:::i;:::-;10349:63;;10305:117;10100:329;;;;:::o;10435:474::-;10503:6;10511;10560:2;10548:9;10539:7;10535:23;10531:32;10528:119;;;10566:79;;:::i;:::-;10528:119;10686:1;10711:53;10756:7;10747:6;10736:9;10732:22;10711:53;:::i;:::-;10701:63;;10657:117;10813:2;10839:53;10884:7;10875:6;10864:9;10860:22;10839:53;:::i;:::-;10829:63;;10784:118;10435:474;;;;;:::o;10915:619::-;10992:6;11000;11008;11057:2;11045:9;11036:7;11032:23;11028:32;11025:119;;;11063:79;;:::i;:::-;11025:119;11183:1;11208:53;11253:7;11244:6;11233:9;11229:22;11208:53;:::i;:::-;11198:63;;11154:117;11310:2;11336:53;11381:7;11372:6;11361:9;11357:22;11336:53;:::i;:::-;11326:63;;11281:118;11438:2;11464:53;11509:7;11500:6;11489:9;11485:22;11464:53;:::i;:::-;11454:63;;11409:118;10915:619;;;;;:::o;11540:327::-;11598:6;11647:2;11635:9;11626:7;11622:23;11618:32;11615:119;;;11653:79;;:::i;:::-;11615:119;11773:1;11798:52;11842:7;11833:6;11822:9;11818:22;11798:52;:::i;:::-;11788:62;;11744:116;11540:327;;;;:::o;11873:613::-;11947:6;11955;11963;12012:2;12000:9;11991:7;11987:23;11983:32;11980:119;;;12018:79;;:::i;:::-;11980:119;12138:1;12163:52;12207:7;12198:6;12187:9;12183:22;12163:52;:::i;:::-;12153:62;;12109:116;12264:2;12290:52;12334:7;12325:6;12314:9;12310:22;12290:52;:::i;:::-;12280:62;;12235:117;12391:2;12417:52;12461:7;12452:6;12441:9;12437:22;12417:52;:::i;:::-;12407:62;;12362:117;11873:613;;;;;:::o;12492:108::-;12569:24;12587:5;12569:24;:::i;:::-;12564:3;12557:37;12492:108;;:::o;12606:118::-;12693:24;12711:5;12693:24;:::i;:::-;12688:3;12681:37;12606:118;;:::o;12730:109::-;12811:21;12826:5;12811:21;:::i;:::-;12806:3;12799:34;12730:109;;:::o;12845:360::-;12931:3;12959:38;12991:5;12959:38;:::i;:::-;13013:70;13076:6;13071:3;13013:70;:::i;:::-;13006:77;;13092:52;13137:6;13132:3;13125:4;13118:5;13114:16;13092:52;:::i;:::-;13169:29;13191:6;13169:29;:::i;:::-;13164:3;13160:39;13153:46;;12935:270;12845:360;;;;:::o;13211:364::-;13299:3;13327:39;13360:5;13327:39;:::i;:::-;13382:71;13446:6;13441:3;13382:71;:::i;:::-;13375:78;;13462:52;13507:6;13502:3;13495:4;13488:5;13484:16;13462:52;:::i;:::-;13539:29;13561:6;13539:29;:::i;:::-;13534:3;13530:39;13523:46;;13303:272;13211:364;;;;:::o;13581:377::-;13687:3;13715:39;13748:5;13715:39;:::i;:::-;13770:89;13852:6;13847:3;13770:89;:::i;:::-;13763:96;;13868:52;13913:6;13908:3;13901:4;13894:5;13890:16;13868:52;:::i;:::-;13945:6;13940:3;13936:16;13929:23;;13691:267;13581:377;;;;:::o;13964:366::-;14106:3;14127:67;14191:2;14186:3;14127:67;:::i;:::-;14120:74;;14203:93;14292:3;14203:93;:::i;:::-;14321:2;14316:3;14312:12;14305:19;;13964:366;;;:::o;14336:::-;14478:3;14499:67;14563:2;14558:3;14499:67;:::i;:::-;14492:74;;14575:93;14664:3;14575:93;:::i;:::-;14693:2;14688:3;14684:12;14677:19;;14336:366;;;:::o;14708:::-;14850:3;14871:67;14935:2;14930:3;14871:67;:::i;:::-;14864:74;;14947:93;15036:3;14947:93;:::i;:::-;15065:2;15060:3;15056:12;15049:19;;14708:366;;;:::o;15080:::-;15222:3;15243:67;15307:2;15302:3;15243:67;:::i;:::-;15236:74;;15319:93;15408:3;15319:93;:::i;:::-;15437:2;15432:3;15428:12;15421:19;;15080:366;;;:::o;15452:::-;15594:3;15615:67;15679:2;15674:3;15615:67;:::i;:::-;15608:74;;15691:93;15780:3;15691:93;:::i;:::-;15809:2;15804:3;15800:12;15793:19;;15452:366;;;:::o;15824:::-;15966:3;15987:67;16051:2;16046:3;15987:67;:::i;:::-;15980:74;;16063:93;16152:3;16063:93;:::i;:::-;16181:2;16176:3;16172:12;16165:19;;15824:366;;;:::o;16196:::-;16338:3;16359:67;16423:2;16418:3;16359:67;:::i;:::-;16352:74;;16435:93;16524:3;16435:93;:::i;:::-;16553:2;16548:3;16544:12;16537:19;;16196:366;;;:::o;16568:::-;16710:3;16731:67;16795:2;16790:3;16731:67;:::i;:::-;16724:74;;16807:93;16896:3;16807:93;:::i;:::-;16925:2;16920:3;16916:12;16909:19;;16568:366;;;:::o;16940:::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:::-;17454:3;17475:67;17539:2;17534:3;17475:67;:::i;:::-;17468:74;;17551:93;17640:3;17551:93;:::i;:::-;17669:2;17664:3;17660:12;17653:19;;17312:366;;;:::o;17684:::-;17826:3;17847:67;17911:2;17906:3;17847:67;:::i;:::-;17840:74;;17923:93;18012:3;17923:93;:::i;:::-;18041:2;18036:3;18032:12;18025:19;;17684:366;;;:::o;18056:::-;18198:3;18219:67;18283:2;18278:3;18219:67;:::i;:::-;18212:74;;18295:93;18384:3;18295:93;:::i;:::-;18413:2;18408:3;18404:12;18397:19;;18056:366;;;:::o;18428:::-;18570:3;18591:67;18655:2;18650:3;18591:67;:::i;:::-;18584:74;;18667:93;18756:3;18667:93;:::i;:::-;18785:2;18780:3;18776:12;18769:19;;18428:366;;;:::o;18800:::-;18942:3;18963:67;19027:2;19022:3;18963:67;:::i;:::-;18956:74;;19039:93;19128:3;19039:93;:::i;:::-;19157:2;19152:3;19148:12;19141:19;;18800:366;;;:::o;19172:::-;19314:3;19335:67;19399:2;19394:3;19335:67;:::i;:::-;19328:74;;19411:93;19500:3;19411:93;:::i;:::-;19529:2;19524:3;19520:12;19513:19;;19172:366;;;:::o;19544:::-;19686:3;19707:67;19771:2;19766:3;19707:67;:::i;:::-;19700:74;;19783:93;19872:3;19783:93;:::i;:::-;19901:2;19896:3;19892:12;19885:19;;19544:366;;;:::o;19916:::-;20058:3;20079:67;20143:2;20138:3;20079:67;:::i;:::-;20072:74;;20155:93;20244:3;20155:93;:::i;:::-;20273:2;20268:3;20264:12;20257:19;;19916:366;;;:::o;20288:::-;20430:3;20451:67;20515:2;20510:3;20451:67;:::i;:::-;20444:74;;20527:93;20616:3;20527:93;:::i;:::-;20645:2;20640:3;20636:12;20629:19;;20288:366;;;:::o;20660:::-;20802:3;20823:67;20887:2;20882:3;20823:67;:::i;:::-;20816:74;;20899:93;20988:3;20899:93;:::i;:::-;21017:2;21012:3;21008:12;21001:19;;20660:366;;;:::o;21032:::-;21174:3;21195:67;21259:2;21254:3;21195:67;:::i;:::-;21188:74;;21271:93;21360:3;21271:93;:::i;:::-;21389:2;21384:3;21380:12;21373:19;;21032:366;;;:::o;21404:::-;21546:3;21567:67;21631:2;21626:3;21567:67;:::i;:::-;21560:74;;21643:93;21732:3;21643:93;:::i;:::-;21761:2;21756:3;21752:12;21745:19;;21404:366;;;:::o;21776:::-;21918:3;21939:67;22003:2;21998:3;21939:67;:::i;:::-;21932:74;;22015:93;22104:3;22015:93;:::i;:::-;22133:2;22128:3;22124:12;22117:19;;21776:366;;;:::o;22148:398::-;22307:3;22328:83;22409:1;22404:3;22328:83;:::i;:::-;22321:90;;22420:93;22509:3;22420:93;:::i;:::-;22538:1;22533:3;22529:11;22522:18;;22148:398;;;:::o;22552:366::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:::-;23438:3;23459:67;23523:2;23518:3;23459:67;:::i;:::-;23452:74;;23535:93;23624:3;23535:93;:::i;:::-;23653:2;23648:3;23644:12;23637:19;;23296:366;;;:::o;23668:::-;23810:3;23831:67;23895:2;23890:3;23831:67;:::i;:::-;23824:74;;23907:93;23996:3;23907:93;:::i;:::-;24025:2;24020:3;24016:12;24009:19;;23668:366;;;:::o;24040:::-;24182:3;24203:67;24267:2;24262:3;24203:67;:::i;:::-;24196:74;;24279:93;24368:3;24279:93;:::i;:::-;24397:2;24392:3;24388:12;24381:19;;24040:366;;;:::o;24412:::-;24554:3;24575:67;24639:2;24634:3;24575:67;:::i;:::-;24568:74;;24651:93;24740:3;24651:93;:::i;:::-;24769:2;24764:3;24760:12;24753:19;;24412:366;;;:::o;24784:::-;24926:3;24947:67;25011:2;25006:3;24947:67;:::i;:::-;24940:74;;25023:93;25112:3;25023:93;:::i;:::-;25141:2;25136:3;25132:12;25125:19;;24784:366;;;:::o;25156:::-;25298:3;25319:67;25383:2;25378:3;25319:67;:::i;:::-;25312:74;;25395:93;25484:3;25395:93;:::i;:::-;25513:2;25508:3;25504:12;25497:19;;25156:366;;;:::o;25528:::-;25670:3;25691:67;25755:2;25750:3;25691:67;:::i;:::-;25684:74;;25767:93;25856:3;25767:93;:::i;:::-;25885:2;25880:3;25876:12;25869:19;;25528:366;;;:::o;25900:::-;26042:3;26063:67;26127:2;26122:3;26063:67;:::i;:::-;26056:74;;26139:93;26228:3;26139:93;:::i;:::-;26257:2;26252:3;26248:12;26241:19;;25900:366;;;:::o;26272:::-;26414:3;26435:67;26499:2;26494:3;26435:67;:::i;:::-;26428:74;;26511:93;26600:3;26511:93;:::i;:::-;26629:2;26624:3;26620:12;26613:19;;26272:366;;;:::o;26644:::-;26786:3;26807:67;26871:2;26866:3;26807:67;:::i;:::-;26800:74;;26883:93;26972:3;26883:93;:::i;:::-;27001:2;26996:3;26992:12;26985:19;;26644:366;;;:::o;27016:::-;27158:3;27179:67;27243:2;27238:3;27179:67;:::i;:::-;27172:74;;27255:93;27344:3;27255:93;:::i;:::-;27373:2;27368:3;27364:12;27357:19;;27016:366;;;:::o;27388:::-;27530:3;27551:67;27615:2;27610:3;27551:67;:::i;:::-;27544:74;;27627:93;27716:3;27627:93;:::i;:::-;27745:2;27740:3;27736:12;27729:19;;27388:366;;;:::o;27830:527::-;27989:4;27984:3;27980:14;28076:4;28069:5;28065:16;28059:23;28095:63;28152:4;28147:3;28143:14;28129:12;28095:63;:::i;:::-;28004:164;28260:4;28253:5;28249:16;28243:23;28279:61;28334:4;28329:3;28325:14;28311:12;28279:61;:::i;:::-;28178:172;27958:399;27830:527;;:::o;28363:118::-;28450:24;28468:5;28450:24;:::i;:::-;28445:3;28438:37;28363:118;;:::o;28487:115::-;28572:23;28589:5;28572:23;:::i;:::-;28567:3;28560:36;28487:115;;:::o;28608:105::-;28683:23;28700:5;28683:23;:::i;:::-;28678:3;28671:36;28608:105;;:::o;28719:115::-;28804:23;28821:5;28804:23;:::i;:::-;28799:3;28792:36;28719:115;;:::o;28840:435::-;29020:3;29042:95;29133:3;29124:6;29042:95;:::i;:::-;29035:102;;29154:95;29245:3;29236:6;29154:95;:::i;:::-;29147:102;;29266:3;29259:10;;28840:435;;;;;:::o;29281:379::-;29465:3;29487:147;29630:3;29487:147;:::i;:::-;29480:154;;29651:3;29644:10;;29281:379;;;:::o;29666:222::-;29759:4;29797:2;29786:9;29782:18;29774:26;;29810:71;29878:1;29867:9;29863:17;29854:6;29810:71;:::i;:::-;29666:222;;;;:::o;29894:640::-;30089:4;30127:3;30116:9;30112:19;30104:27;;30141:71;30209:1;30198:9;30194:17;30185:6;30141:71;:::i;:::-;30222:72;30290:2;30279:9;30275:18;30266:6;30222:72;:::i;:::-;30304;30372:2;30361:9;30357:18;30348:6;30304:72;:::i;:::-;30423:9;30417:4;30413:20;30408:2;30397:9;30393:18;30386:48;30451:76;30522:4;30513:6;30451:76;:::i;:::-;30443:84;;29894:640;;;;;;;:::o;30540:210::-;30627:4;30665:2;30654:9;30650:18;30642:26;;30678:65;30740:1;30729:9;30725:17;30716:6;30678:65;:::i;:::-;30540:210;;;;:::o;30756:313::-;30869:4;30907:2;30896:9;30892:18;30884:26;;30956:9;30950:4;30946:20;30942:1;30931:9;30927:17;30920:47;30984:78;31057:4;31048:6;30984:78;:::i;:::-;30976:86;;30756:313;;;;:::o;31075:419::-;31241:4;31279:2;31268:9;31264:18;31256:26;;31328:9;31322:4;31318:20;31314:1;31303:9;31299:17;31292:47;31356:131;31482:4;31356:131;:::i;:::-;31348:139;;31075:419;;;:::o;31500:::-;31666:4;31704:2;31693:9;31689:18;31681:26;;31753:9;31747:4;31743:20;31739:1;31728:9;31724:17;31717:47;31781:131;31907:4;31781:131;:::i;:::-;31773:139;;31500:419;;;:::o;31925:::-;32091:4;32129:2;32118:9;32114:18;32106:26;;32178:9;32172:4;32168:20;32164:1;32153:9;32149:17;32142:47;32206:131;32332:4;32206:131;:::i;:::-;32198:139;;31925:419;;;:::o;32350:::-;32516:4;32554:2;32543:9;32539:18;32531:26;;32603:9;32597:4;32593:20;32589:1;32578:9;32574:17;32567:47;32631:131;32757:4;32631:131;:::i;:::-;32623:139;;32350:419;;;:::o;32775:::-;32941:4;32979:2;32968:9;32964:18;32956:26;;33028:9;33022:4;33018:20;33014:1;33003:9;32999:17;32992:47;33056:131;33182:4;33056:131;:::i;:::-;33048:139;;32775:419;;;:::o;33200:::-;33366:4;33404:2;33393:9;33389:18;33381:26;;33453:9;33447:4;33443:20;33439:1;33428:9;33424:17;33417:47;33481:131;33607:4;33481:131;:::i;:::-;33473:139;;33200:419;;;:::o;33625:::-;33791:4;33829:2;33818:9;33814:18;33806:26;;33878:9;33872:4;33868:20;33864:1;33853:9;33849:17;33842:47;33906:131;34032:4;33906:131;:::i;:::-;33898:139;;33625:419;;;:::o;34050:::-;34216:4;34254:2;34243:9;34239:18;34231:26;;34303:9;34297:4;34293:20;34289:1;34278:9;34274:17;34267:47;34331:131;34457:4;34331:131;:::i;:::-;34323:139;;34050:419;;;:::o;34475:::-;34641:4;34679:2;34668:9;34664:18;34656:26;;34728:9;34722:4;34718:20;34714:1;34703:9;34699:17;34692:47;34756:131;34882:4;34756:131;:::i;:::-;34748:139;;34475:419;;;:::o;34900:::-;35066:4;35104:2;35093:9;35089:18;35081:26;;35153:9;35147:4;35143:20;35139:1;35128:9;35124:17;35117:47;35181:131;35307:4;35181:131;:::i;:::-;35173:139;;34900:419;;;:::o;35325:::-;35491:4;35529:2;35518:9;35514:18;35506:26;;35578:9;35572:4;35568:20;35564:1;35553:9;35549:17;35542:47;35606:131;35732:4;35606:131;:::i;:::-;35598:139;;35325:419;;;:::o;35750:::-;35916:4;35954:2;35943:9;35939:18;35931:26;;36003:9;35997:4;35993:20;35989:1;35978:9;35974:17;35967:47;36031:131;36157:4;36031:131;:::i;:::-;36023:139;;35750:419;;;:::o;36175:::-;36341:4;36379:2;36368:9;36364:18;36356:26;;36428:9;36422:4;36418:20;36414:1;36403:9;36399:17;36392:47;36456:131;36582:4;36456:131;:::i;:::-;36448:139;;36175:419;;;:::o;36600:::-;36766:4;36804:2;36793:9;36789:18;36781:26;;36853:9;36847:4;36843:20;36839:1;36828:9;36824:17;36817:47;36881:131;37007:4;36881:131;:::i;:::-;36873:139;;36600:419;;;:::o;37025:::-;37191:4;37229:2;37218:9;37214:18;37206:26;;37278:9;37272:4;37268:20;37264:1;37253:9;37249:17;37242:47;37306:131;37432:4;37306:131;:::i;:::-;37298:139;;37025:419;;;:::o;37450:::-;37616:4;37654:2;37643:9;37639:18;37631:26;;37703:9;37697:4;37693:20;37689:1;37678:9;37674:17;37667:47;37731:131;37857:4;37731:131;:::i;:::-;37723:139;;37450:419;;;:::o;37875:::-;38041:4;38079:2;38068:9;38064:18;38056:26;;38128:9;38122:4;38118:20;38114:1;38103:9;38099:17;38092:47;38156:131;38282:4;38156:131;:::i;:::-;38148:139;;37875:419;;;:::o;38300:::-;38466:4;38504:2;38493:9;38489:18;38481:26;;38553:9;38547:4;38543:20;38539:1;38528:9;38524:17;38517:47;38581:131;38707:4;38581:131;:::i;:::-;38573:139;;38300:419;;;:::o;38725:::-;38891:4;38929:2;38918:9;38914:18;38906:26;;38978:9;38972:4;38968:20;38964:1;38953:9;38949:17;38942:47;39006:131;39132:4;39006:131;:::i;:::-;38998:139;;38725:419;;;:::o;39150:::-;39316:4;39354:2;39343:9;39339:18;39331:26;;39403:9;39397:4;39393:20;39389:1;39378:9;39374:17;39367:47;39431:131;39557:4;39431:131;:::i;:::-;39423:139;;39150:419;;;:::o;39575:::-;39741:4;39779:2;39768:9;39764:18;39756:26;;39828:9;39822:4;39818:20;39814:1;39803:9;39799:17;39792:47;39856:131;39982:4;39856:131;:::i;:::-;39848:139;;39575:419;;;:::o;40000:::-;40166:4;40204:2;40193:9;40189:18;40181:26;;40253:9;40247:4;40243:20;40239:1;40228:9;40224:17;40217:47;40281:131;40407:4;40281:131;:::i;:::-;40273:139;;40000:419;;;:::o;40425:::-;40591:4;40629:2;40618:9;40614:18;40606:26;;40678:9;40672:4;40668:20;40664:1;40653:9;40649:17;40642:47;40706:131;40832:4;40706:131;:::i;:::-;40698:139;;40425:419;;;:::o;40850:::-;41016:4;41054:2;41043:9;41039:18;41031:26;;41103:9;41097:4;41093:20;41089:1;41078:9;41074:17;41067:47;41131:131;41257:4;41131:131;:::i;:::-;41123:139;;40850:419;;;:::o;41275:::-;41441:4;41479:2;41468:9;41464:18;41456:26;;41528:9;41522:4;41518:20;41514:1;41503:9;41499:17;41492:47;41556:131;41682:4;41556:131;:::i;:::-;41548:139;;41275:419;;;:::o;41700:::-;41866:4;41904:2;41893:9;41889:18;41881:26;;41953:9;41947:4;41943:20;41939:1;41928:9;41924:17;41917:47;41981:131;42107:4;41981:131;:::i;:::-;41973:139;;41700:419;;;:::o;42125:::-;42291:4;42329:2;42318:9;42314:18;42306:26;;42378:9;42372:4;42368:20;42364:1;42353:9;42349:17;42342:47;42406:131;42532:4;42406:131;:::i;:::-;42398:139;;42125:419;;;:::o;42550:::-;42716:4;42754:2;42743:9;42739:18;42731:26;;42803:9;42797:4;42793:20;42789:1;42778:9;42774:17;42767:47;42831:131;42957:4;42831:131;:::i;:::-;42823:139;;42550:419;;;:::o;42975:::-;43141:4;43179:2;43168:9;43164:18;43156:26;;43228:9;43222:4;43218:20;43214:1;43203:9;43199:17;43192:47;43256:131;43382:4;43256:131;:::i;:::-;43248:139;;42975:419;;;:::o;43400:::-;43566:4;43604:2;43593:9;43589:18;43581:26;;43653:9;43647:4;43643:20;43639:1;43628:9;43624:17;43617:47;43681:131;43807:4;43681:131;:::i;:::-;43673:139;;43400:419;;;:::o;43825:::-;43991:4;44029:2;44018:9;44014:18;44006:26;;44078:9;44072:4;44068:20;44064:1;44053:9;44049:17;44042:47;44106:131;44232:4;44106:131;:::i;:::-;44098:139;;43825:419;;;:::o;44250:::-;44416:4;44454:2;44443:9;44439:18;44431:26;;44503:9;44497:4;44493:20;44489:1;44478:9;44474:17;44467:47;44531:131;44657:4;44531:131;:::i;:::-;44523:139;;44250:419;;;:::o;44675:::-;44841:4;44879:2;44868:9;44864:18;44856:26;;44928:9;44922:4;44918:20;44914:1;44903:9;44899:17;44892:47;44956:131;45082:4;44956:131;:::i;:::-;44948:139;;44675:419;;;:::o;45100:::-;45266:4;45304:2;45293:9;45289:18;45281:26;;45353:9;45347:4;45343:20;45339:1;45328:9;45324:17;45317:47;45381:131;45507:4;45381:131;:::i;:::-;45373:139;;45100:419;;;:::o;45525:::-;45691:4;45729:2;45718:9;45714:18;45706:26;;45778:9;45772:4;45768:20;45764:1;45753:9;45749:17;45742:47;45806:131;45932:4;45806:131;:::i;:::-;45798:139;;45525:419;;;:::o;45950:::-;46116:4;46154:2;46143:9;46139:18;46131:26;;46203:9;46197:4;46193:20;46189:1;46178:9;46174:17;46167:47;46231:131;46357:4;46231:131;:::i;:::-;46223:139;;45950:419;;;:::o;46375:346::-;46530:4;46568:2;46557:9;46553:18;46545:26;;46581:133;46711:1;46700:9;46696:17;46687:6;46581:133;:::i;:::-;46375:346;;;;:::o;46727:222::-;46820:4;46858:2;46847:9;46843:18;46835:26;;46871:71;46939:1;46928:9;46924:17;46915:6;46871:71;:::i;:::-;46727:222;;;;:::o;46955:644::-;47150:4;47188:3;47177:9;47173:19;47165:27;;47202:69;47268:1;47257:9;47253:17;47244:6;47202:69;:::i;:::-;47281:70;47347:2;47336:9;47332:18;47323:6;47281:70;:::i;:::-;47361;47427:2;47416:9;47412:18;47403:6;47361:70;:::i;:::-;47441;47507:2;47496:9;47492:18;47483:6;47441:70;:::i;:::-;47521:71;47587:3;47576:9;47572:19;47563:6;47521:71;:::i;:::-;46955:644;;;;;;;;:::o;47605:129::-;47639:6;47666:20;;:::i;:::-;47656:30;;47695:33;47723:4;47715:6;47695:33;:::i;:::-;47605:129;;;:::o;47740:75::-;47773:6;47806:2;47800:9;47790:19;;47740:75;:::o;47821:311::-;47898:4;47988:18;47980:6;47977:30;47974:56;;;48010:18;;:::i;:::-;47974:56;48060:4;48052:6;48048:17;48040:25;;48120:4;48114;48110:15;48102:23;;47821:311;;;:::o;48138:::-;48215:4;48305:18;48297:6;48294:30;48291:56;;;48327:18;;:::i;:::-;48291:56;48377:4;48369:6;48365:17;48357:25;;48437:4;48431;48427:15;48419:23;;48138:311;;;:::o;48455:307::-;48516:4;48606:18;48598:6;48595:30;48592:56;;;48628:18;;:::i;:::-;48592:56;48666:29;48688:6;48666:29;:::i;:::-;48658:37;;48750:4;48744;48740:15;48732:23;;48455:307;;;:::o;48768:98::-;48819:6;48853:5;48847:12;48837:22;;48768:98;;;:::o;48872:99::-;48924:6;48958:5;48952:12;48942:22;;48872:99;;;:::o;48977:168::-;49060:11;49094:6;49089:3;49082:19;49134:4;49129:3;49125:14;49110:29;;48977:168;;;;:::o;49151:147::-;49252:11;49289:3;49274:18;;49151:147;;;;:::o;49304:169::-;49388:11;49422:6;49417:3;49410:19;49462:4;49457:3;49453:14;49438:29;;49304:169;;;;:::o;49479:148::-;49581:11;49618:3;49603:18;;49479:148;;;;:::o;49633:273::-;49673:3;49692:20;49710:1;49692:20;:::i;:::-;49687:25;;49726:20;49744:1;49726:20;:::i;:::-;49721:25;;49848:1;49812:34;49808:42;49805:1;49802:49;49799:75;;;49854:18;;:::i;:::-;49799:75;49898:1;49895;49891:9;49884:16;;49633:273;;;;:::o;49912:305::-;49952:3;49971:20;49989:1;49971:20;:::i;:::-;49966:25;;50005:20;50023:1;50005:20;:::i;:::-;50000:25;;50159:1;50091:66;50087:74;50084:1;50081:81;50078:107;;;50165:18;;:::i;:::-;50078:107;50209:1;50206;50202:9;50195:16;;49912:305;;;;:::o;50223:185::-;50263:1;50280:20;50298:1;50280:20;:::i;:::-;50275:25;;50314:20;50332:1;50314:20;:::i;:::-;50309:25;;50353:1;50343:35;;50358:18;;:::i;:::-;50343:35;50400:1;50397;50393:9;50388:14;;50223:185;;;;:::o;50414:348::-;50454:7;50477:20;50495:1;50477:20;:::i;:::-;50472:25;;50511:20;50529:1;50511:20;:::i;:::-;50506:25;;50699:1;50631:66;50627:74;50624:1;50621:81;50616:1;50609:9;50602:17;50598:105;50595:131;;;50706:18;;:::i;:::-;50595:131;50754:1;50751;50747:9;50736:20;;50414:348;;;;:::o;50768:191::-;50808:4;50828:20;50846:1;50828:20;:::i;:::-;50823:25;;50862:20;50880:1;50862:20;:::i;:::-;50857:25;;50901:1;50898;50895:8;50892:34;;;50906:18;;:::i;:::-;50892:34;50951:1;50948;50944:9;50936:17;;50768:191;;;;:::o;50965:::-;51005:4;51025:20;51043:1;51025:20;:::i;:::-;51020:25;;51059:20;51077:1;51059:20;:::i;:::-;51054:25;;51098:1;51095;51092:8;51089:34;;;51103:18;;:::i;:::-;51089:34;51148:1;51145;51141:9;51133:17;;50965:191;;;;:::o;51162:96::-;51199:7;51228:24;51246:5;51228:24;:::i;:::-;51217:35;;51162:96;;;:::o;51264:90::-;51298:7;51341:5;51334:13;51327:21;51316:32;;51264:90;;;:::o;51360:149::-;51396:7;51436:66;51429:5;51425:78;51414:89;;51360:149;;;:::o;51515:118::-;51552:7;51592:34;51585:5;51581:46;51570:57;;51515:118;;;:::o;51639:126::-;51676:7;51716:42;51709:5;51705:54;51694:65;;51639:126;;;:::o;51771:77::-;51808:7;51837:5;51826:16;;51771:77;;;:::o;51854:93::-;51890:7;51930:10;51923:5;51919:22;51908:33;;51854:93;;;:::o;51953:101::-;51989:7;52029:18;52022:5;52018:30;52007:41;;51953:101;;;:::o;52060:154::-;52144:6;52139:3;52134;52121:30;52206:1;52197:6;52192:3;52188:16;52181:27;52060:154;;;:::o;52220:307::-;52288:1;52298:113;52312:6;52309:1;52306:13;52298:113;;;52397:1;52392:3;52388:11;52382:18;52378:1;52373:3;52369:11;52362:39;52334:2;52331:1;52327:10;52322:15;;52298:113;;;52429:6;52426:1;52423:13;52420:101;;;52509:1;52500:6;52495:3;52491:16;52484:27;52420:101;52269:258;52220:307;;;:::o;52533:171::-;52572:3;52595:24;52613:5;52595:24;:::i;:::-;52586:33;;52641:4;52634:5;52631:15;52628:41;;;52649:18;;:::i;:::-;52628:41;52696:1;52689:5;52685:13;52678:20;;52533:171;;;:::o;52710:320::-;52754:6;52791:1;52785:4;52781:12;52771:22;;52838:1;52832:4;52828:12;52859:18;52849:81;;52915:4;52907:6;52903:17;52893:27;;52849:81;52977:2;52969:6;52966:14;52946:18;52943:38;52940:84;;;52996:18;;:::i;:::-;52940:84;52761:269;52710:320;;;:::o;53036:281::-;53119:27;53141:4;53119:27;:::i;:::-;53111:6;53107:40;53249:6;53237:10;53234:22;53213:18;53201:10;53198:34;53195:62;53192:88;;;53260:18;;:::i;:::-;53192:88;53300:10;53296:2;53289:22;53079:238;53036:281;;:::o;53323:233::-;53362:3;53385:24;53403:5;53385:24;:::i;:::-;53376:33;;53431:66;53424:5;53421:77;53418:103;;;53501:18;;:::i;:::-;53418:103;53548:1;53541:5;53537:13;53530:20;;53323:233;;;:::o;53562:176::-;53594:1;53611:20;53629:1;53611:20;:::i;:::-;53606:25;;53645:20;53663:1;53645:20;:::i;:::-;53640:25;;53684:1;53674:35;;53689:18;;:::i;:::-;53674:35;53730:1;53727;53723:9;53718:14;;53562:176;;;;:::o;53744:180::-;53792:77;53789:1;53782:88;53889:4;53886:1;53879:15;53913:4;53910:1;53903:15;53930:180;53978:77;53975:1;53968:88;54075:4;54072:1;54065:15;54099:4;54096:1;54089:15;54116:180;54164:77;54161:1;54154:88;54261:4;54258:1;54251:15;54285:4;54282:1;54275:15;54302:180;54350:77;54347:1;54340:88;54447:4;54444:1;54437:15;54471:4;54468:1;54461:15;54488:180;54536:77;54533:1;54526:88;54633:4;54630:1;54623:15;54657:4;54654:1;54647:15;54674:117;54783:1;54780;54773:12;54797:117;54906:1;54903;54896:12;54920:117;55029:1;55026;55019:12;55043:117;55152:1;55149;55142:12;55166:117;55275:1;55272;55265:12;55289:117;55398:1;55395;55388:12;55412:102;55453:6;55504:2;55500:7;55495:2;55488:5;55484:14;55480:28;55470:38;;55412:102;;;:::o;55520:221::-;55660:34;55656:1;55648:6;55644:14;55637:58;55729:4;55724:2;55716:6;55712:15;55705:29;55520:221;:::o;55747:225::-;55887:34;55883:1;55875:6;55871:14;55864:58;55956:8;55951:2;55943:6;55939:15;55932:33;55747:225;:::o;55978:229::-;56118:34;56114:1;56106:6;56102:14;56095:58;56187:12;56182:2;56174:6;56170:15;56163:37;55978:229;:::o;56213:231::-;56353:34;56349:1;56341:6;56337:14;56330:58;56422:14;56417:2;56409:6;56405:15;56398:39;56213:231;:::o;56450:222::-;56590:34;56586:1;56578:6;56574:14;56567:58;56659:5;56654:2;56646:6;56642:15;56635:30;56450:222;:::o;56678:224::-;56818:34;56814:1;56806:6;56802:14;56795:58;56887:7;56882:2;56874:6;56870:15;56863:32;56678:224;:::o;56908:236::-;57048:34;57044:1;57036:6;57032:14;57025:58;57117:19;57112:2;57104:6;57100:15;57093:44;56908:236;:::o;57150:224::-;57290:34;57286:1;57278:6;57274:14;57267:58;57359:7;57354:2;57346:6;57342:15;57335:32;57150:224;:::o;57380:180::-;57520:32;57516:1;57508:6;57504:14;57497:56;57380:180;:::o;57566:244::-;57706:34;57702:1;57694:6;57690:14;57683:58;57775:27;57770:2;57762:6;57758:15;57751:52;57566:244;:::o;57816:174::-;57956:26;57952:1;57944:6;57940:14;57933:50;57816:174;:::o;57996:230::-;58136:34;58132:1;58124:6;58120:14;58113:58;58205:13;58200:2;58192:6;58188:15;58181:38;57996:230;:::o;58232:168::-;58372:20;58368:1;58360:6;58356:14;58349:44;58232:168;:::o;58406:181::-;58546:33;58542:1;58534:6;58530:14;58523:57;58406:181;:::o;58593:225::-;58733:34;58729:1;58721:6;58717:14;58710:58;58802:8;58797:2;58789:6;58785:15;58778:33;58593:225;:::o;58824:182::-;58964:34;58960:1;58952:6;58948:14;58941:58;58824:182;:::o;59012:234::-;59152:34;59148:1;59140:6;59136:14;59129:58;59221:17;59216:2;59208:6;59204:15;59197:42;59012:234;:::o;59252:176::-;59392:28;59388:1;59380:6;59376:14;59369:52;59252:176;:::o;59434:237::-;59574:34;59570:1;59562:6;59558:14;59551:58;59643:20;59638:2;59630:6;59626:15;59619:45;59434:237;:::o;59677:182::-;59817:34;59813:1;59805:6;59801:14;59794:58;59677:182;:::o;59865:179::-;60005:31;60001:1;59993:6;59989:14;59982:55;59865:179;:::o;60050:221::-;60190:34;60186:1;60178:6;60174:14;60167:58;60259:4;60254:2;60246:6;60242:15;60235:29;60050:221;:::o;60277:114::-;;:::o;60397:166::-;60537:18;60533:1;60525:6;60521:14;60514:42;60397:166;:::o;60569:238::-;60709:34;60705:1;60697:6;60693:14;60686:58;60778:21;60773:2;60765:6;60761:15;60754:46;60569:238;:::o;60813:172::-;60953:24;60949:1;60941:6;60937:14;60930:48;60813:172;:::o;60991:179::-;61131:31;61127:1;61119:6;61115:14;61108:55;60991:179;:::o;61176:220::-;61316:34;61312:1;61304:6;61300:14;61293:58;61385:3;61380:2;61372:6;61368:15;61361:28;61176:220;:::o;61402:172::-;61542:24;61538:1;61530:6;61526:14;61519:48;61402:172;:::o;61580:226::-;61720:34;61716:1;61708:6;61704:14;61697:58;61789:9;61784:2;61776:6;61772:15;61765:34;61580:226;:::o;61812:233::-;61952:34;61948:1;61940:6;61936:14;61929:58;62021:16;62016:2;62008:6;62004:15;61997:41;61812:233;:::o;62051:225::-;62191:34;62187:1;62179:6;62175:14;62168:58;62260:8;62255:2;62247:6;62243:15;62236:33;62051:225;:::o;62282:181::-;62422:33;62418:1;62410:6;62406:14;62399:57;62282:181;:::o;62469:234::-;62609:34;62605:1;62597:6;62593:14;62586:58;62678:17;62673:2;62665:6;62661:15;62654:42;62469:234;:::o;62709:232::-;62849:34;62845:1;62837:6;62833:14;62826:58;62918:15;62913:2;62905:6;62901:15;62894:40;62709:232;:::o;62947:221::-;63087:34;63083:1;63075:6;63071:14;63064:58;63156:4;63151:2;63143:6;63139:15;63132:29;62947:221;:::o;63174:227::-;63314:34;63310:1;63302:6;63298:14;63291:58;63383:10;63378:2;63370:6;63366:15;63359:35;63174:227;:::o;63407:122::-;63480:24;63498:5;63480:24;:::i;:::-;63473:5;63470:35;63460:63;;63519:1;63516;63509:12;63460:63;63407:122;:::o;63535:116::-;63605:21;63620:5;63605:21;:::i;:::-;63598:5;63595:32;63585:60;;63641:1;63638;63631:12;63585:60;63535:116;:::o;63657:120::-;63729:23;63746:5;63729:23;:::i;:::-;63722:5;63719:34;63709:62;;63767:1;63764;63757:12;63709:62;63657:120;:::o;63783:122::-;63856:24;63874:5;63856:24;:::i;:::-;63849:5;63846:35;63836:63;;63895:1;63892;63885:12;63836:63;63783:122;:::o;63911:120::-;63983:23;64000:5;63983:23;:::i;:::-;63976:5;63973:34;63963:62;;64021:1;64018;64011:12;63963:62;63911:120;:::o;64037:::-;64109:23;64126:5;64109:23;:::i;:::-;64102:5;64099:34;64089:62;;64147:1;64144;64137:12;64089:62;64037:120;:::o
Swarm Source
ipfs://db90e4bc5d9574d9bef65097e6657de452460aab31019f73d8b5eb80efe2bf6d
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.