Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
889 SLOTH
Holders
461
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SLOTHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Sloth
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ /** *Submitted for verification at Etherscan.io on 2022-01-18 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; //import "../utils/Context.sol"; /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; //import "./IERC165.sol"; /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; //import "../../utils/introspection/IERC165.sol"; /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; //import "../IERC721.sol"; /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; //import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; //import "./IERC721.sol"; //import "./IERC721Receiver.sol"; //import "./extensions/IERC721Metadata.sol"; //import "../../utils/Address.sol"; //import "../../utils/Context.sol"; //import "../../utils/Strings.sol"; //import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; //import "../ERC721.sol"; //import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; //import '@openzeppelin/contracts/access/Ownable.sol'; //import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; //import '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol'; contract Sloth is ERC721, ERC721Enumerable, Ownable { using Strings for uint256; bool public _isWhiteListSaleActive = false; bool public _isSaleActive = false; // Constants uint256 constant public MAX_SUPPLY = 2022; uint256 public mintPrice = 0.08 ether; uint256 public whiteListPrice = 0.06 ether; uint256 public maxwhitelistBalance = 2; uint256 public revealTimeStamp = block.timestamp+86400*14 ; string private _baseURIExtended; string private _preRevealURI; mapping(address => uint256) public whiteList; event TokenMinted(uint256 supply); constructor() ERC721('Swag Sloth', 'SLOTH') {} //ok function flipWhiteListSaleActive() public onlyOwner { _isWhiteListSaleActive = !_isWhiteListSaleActive; } //ok function filpSaleActive() public onlyOwner { _isSaleActive = !_isSaleActive; } //ok function setMintPrice(uint256 _mintPrice) public onlyOwner { mintPrice = _mintPrice; } function setWhiteListPrice(uint256 _whiteListPrice) public onlyOwner { whiteListPrice = _whiteListPrice; } //ok function setWhiteList(address[] calldata _whiteList) external onlyOwner { for(uint i = 0; i < _whiteList.length; i++) { whiteList[_whiteList[i]] = maxwhitelistBalance; } } //ok function withdraw(address to) public onlyOwner { uint256 balance = address(this).balance; payable(to).transfer(balance); } //ok function preserveMint(uint numSloths, address to) public onlyOwner { require(totalSupply() + numSloths <= MAX_SUPPLY, 'Preserve mint would exceed max supply'); _mintSloth(numSloths, to); emit TokenMinted(totalSupply()); } //ok function getTotalSupply() public view returns (uint256) { return totalSupply(); } //ok function getSlothByOwner(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } //ok function mintSloths(uint numSloths) public payable { require(_isSaleActive, 'Sale must be active to mint Sloths'); require(totalSupply() + numSloths <= MAX_SUPPLY, 'Sale would exceed max supply'); require(numSloths * mintPrice <= msg.value, 'Not enough ether sent'); _mintSloth(numSloths, msg.sender); emit TokenMinted(totalSupply()); } //ok function setRevealTimestamp(uint256 newRevealTimeStamp) external onlyOwner { revealTimeStamp = newRevealTimeStamp; } function whiteListMintSloths(uint numSloths) public payable { require(_isWhiteListSaleActive, 'Sale must be active to mint Sloths'); require(totalSupply() + numSloths <= MAX_SUPPLY, 'Sale would exceed max supply'); require(balanceOf(msg.sender) + numSloths <= maxwhitelistBalance, 'Sale would exceed max Whitelist balance'); uint256 price = whiteListPrice; require(numSloths * price <= msg.value, 'Not enough ether sent'); if (whiteList[msg.sender] == 2) { price = whiteListPrice; whiteList[msg.sender] = maxwhitelistBalance-numSloths; } else if(whiteList[msg.sender] == 1){ require(numSloths == 1,'Something Wrong'); price = whiteListPrice; whiteList[msg.sender] = 0; } else if(whiteList[msg.sender] == 0){ revert('You have no more whitelist'); } else { revert('Not in white list'); } _mintSloth(numSloths, msg.sender); emit TokenMinted(totalSupply()); } //ok function _mintSloth(uint256 numSloths, address recipient) internal { uint256 supply = totalSupply(); for (uint256 i = 0; i < numSloths; i++) { _safeMint(recipient, supply + i); } } //ok function setBaseURI(string memory baseURI_) external onlyOwner { _baseURIExtended = baseURI_; } //ok function _baseURI() internal view virtual override returns (string memory) { return _baseURIExtended; } //ok function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); if (totalSupply() >= MAX_SUPPLY || block.timestamp >= revealTimeStamp) { if (tokenId < MAX_SUPPLY) { return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } } else if(totalSupply() >= 1500){ if (tokenId < 1500) { return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } } else if(totalSupply() >= 1020){ if (tokenId < 1020) { return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } } else if(totalSupply() >= 666){ if (tokenId < 666) { return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } } { return _preRevealURI; } } //ok function setPreRevealURI(string memory preRevealURI) external onlyOwner { _preRevealURI = preRevealURI; } //ok function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } //ok function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isWhiteListSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"filpSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhiteListSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getSlothByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxwhitelistBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numSloths","type":"uint256"}],"name":"mintSloths","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numSloths","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"preserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"preRevealURI","type":"string"}],"name":"setPreRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRevealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whiteList","type":"address[]"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListPrice","type":"uint256"}],"name":"setWhiteListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numSloths","type":"uint256"}],"name":"whiteListMintSloths","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whiteListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff02191690831515021790555067011c37937e080000600b5566d529ae9e860000600c556002600d556212750042620000679190620002bc565b600e553480156200007757600080fd5b506040518060400160405280600a81526020017f5377616720536c6f7468000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f534c4f54480000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fc9291906200020c565b508060019080519060200190620001159291906200020c565b505050620001386200012c6200013e60201b60201c565b6200014660201b60201c565b620003b7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021a9062000323565b90600052602060002090601f0160209004810192826200023e57600085556200028a565b82601f106200025957805160ff19168380011785556200028a565b828001600101855582156200028a579182015b82811115620002895782518255916020019190600101906200026c565b5b5090506200029991906200029d565b5090565b5b80821115620002b85760008160009055506001016200029e565b5090565b6000620002c98262000319565b9150620002d68362000319565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200030e576200030d62000359565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200033c57607f821691505b6020821081141562000353576200035262000388565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614fb180620003c76000396000f3fe6080604052600436106102465760003560e01c80636817c76c11610139578063a22cb465116100b6578063d04cf9eb1161007a578063d04cf9eb1461084a578063e985e9c514610887578063f11207d8146108c4578063f14c07f8146108ef578063f2fde38b1461091a578063f4a0a5281461094357610246565b8063a22cb46514610767578063b88d4fde14610790578063beafc89b146107b9578063c4e41b22146107e2578063c87b56dd1461080d57610246565b806371f9c534116100fd57806371f9c534146106a1578063775b9c13146106cc57806382563afc146106f55780638da5cb5b1461071157806395d89b411461073c57610246565b80636817c76c146105cc57806368575685146105f75780637080d6fc1461062257806370a082311461064d578063715018a61461068a57610246565b80632f745c59116101c75780634f6ccce71161018b5780634f6ccce7146104d757806351cff8d91461051457806355f804b31461053d5780635edd95f9146105665780636352211e1461058f57610246565b80632f745c59146103ed57806332cb6b0c1461042a578063372c12b11461045557806342842e0e146104925780634e401c79146104bb57610246565b806312675f361161020e57806312675f361461034257806318160ddd146103595780631ca62dbc1461038457806323b872dd1461039b5780632a85db55146103c457610246565b8063018a2c371461024b57806301ffc9a71461027457806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061398f565b61096c565b005b34801561028057600080fd5b5061029b600480360381019061029691906138ec565b6109f2565b6040516102a89190613fba565b60405180910390f35b3480156102bd57600080fd5b506102c6610a04565b6040516102d39190613fd5565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe919061398f565b610a96565b6040516103109190613f31565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061385f565b610b1b565b005b34801561034e57600080fd5b50610357610c33565b005b34801561036557600080fd5b5061036e610cdb565b60405161037b9190614337565b60405180910390f35b34801561039057600080fd5b50610399610ce8565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190613749565b610d90565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190613946565b610df0565b005b3480156103f957600080fd5b50610414600480360381019061040f919061385f565b610e86565b6040516104219190614337565b60405180910390f35b34801561043657600080fd5b5061043f610f2b565b60405161044c9190614337565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906136dc565b610f31565b6040516104899190614337565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613749565b610f49565b005b6104d560048036038101906104d0919061398f565b610f69565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061398f565b6110aa565b60405161050b9190614337565b60405180910390f35b34801561052057600080fd5b5061053b600480360381019061053691906136dc565b61111b565b005b34801561054957600080fd5b50610564600480360381019061055f9190613946565b6111e7565b005b34801561057257600080fd5b5061058d600480360381019061058891906139bc565b61127d565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061398f565b61139c565b6040516105c39190613f31565b60405180910390f35b3480156105d857600080fd5b506105e161144e565b6040516105ee9190614337565b60405180910390f35b34801561060357600080fd5b5061060c611454565b6040516106199190614337565b60405180910390f35b34801561062e57600080fd5b5061063761145a565b6040516106449190613fba565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906136dc565b61146d565b6040516106819190614337565b60405180910390f35b34801561069657600080fd5b5061069f611525565b005b3480156106ad57600080fd5b506106b66115ad565b6040516106c39190614337565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061389f565b6115b3565b005b61070f600480360381019061070a919061398f565b6116c2565b005b34801561071d57600080fd5b50610726611a9d565b6040516107339190613f31565b60405180910390f35b34801561074857600080fd5b50610751611ac7565b60405161075e9190613fd5565b60405180910390f35b34801561077357600080fd5b5061078e6004803603810190610789919061381f565b611b59565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061379c565b611b6f565b005b3480156107c557600080fd5b506107e060048036038101906107db919061398f565b611bd1565b005b3480156107ee57600080fd5b506107f7611c57565b6040516108049190614337565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f919061398f565b611c66565b6040516108419190613fd5565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906136dc565b611ead565b60405161087e9190613f98565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613709565b611f5b565b6040516108bb9190613fba565b60405180910390f35b3480156108d057600080fd5b506108d9611fef565b6040516108e69190613fba565b60405180910390f35b3480156108fb57600080fd5b50610904612002565b6040516109119190614337565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c91906136dc565b612008565b005b34801561094f57600080fd5b5061096a6004803603810190610965919061398f565b612100565b005b610974612186565b73ffffffffffffffffffffffffffffffffffffffff16610992611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906141f7565b60405180910390fd5b80600e8190555050565b60006109fd8261218e565b9050919050565b606060008054610a1390614620565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f90614620565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612208565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906141d7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b268261139c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614297565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612186565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612186565b611f5b565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90614157565b60405180910390fd5b610c2e8383612274565b505050565b610c3b612186565b73ffffffffffffffffffffffffffffffffffffffff16610c59611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906141f7565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b6000600880549050905090565b610cf0612186565b73ffffffffffffffffffffffffffffffffffffffff16610d0e611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b906141f7565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610da1610d9b612186565b8261232d565b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd7906142b7565b60405180910390fd5b610deb83838361240b565b505050565b610df8612186565b73ffffffffffffffffffffffffffffffffffffffff16610e16611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906141f7565b60405180910390fd5b8060109080519060200190610e8292919061349a565b5050565b6000610e918361146d565b8210610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613ff7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6107e681565b60116020528060005260406000206000915090505481565b610f6483838360405180602001604052806000815250611b6f565b505050565b600a60159054906101000a900460ff16610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf90614317565b60405180910390fd5b6107e681610fc4610cdb565b610fce9190614455565b111561100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614077565b60405180910390fd5b34600b548261101e91906144dc565b111561105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906142f7565b60405180910390fd5b6110698133612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611092610cdb565b60405161109f9190614337565b60405180910390a150565b60006110b4610cdb565b82106110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec906142d7565b60405180910390fd5b60088281548110611109576111086147b9565b5b90600052602060002001549050919050565b611123612186565b73ffffffffffffffffffffffffffffffffffffffff16611141611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906141f7565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e2573d6000803e3d6000fd5b505050565b6111ef612186565b73ffffffffffffffffffffffffffffffffffffffff1661120d611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906141f7565b60405180910390fd5b80600f908051906020019061127992919061349a565b5050565b611285612186565b73ffffffffffffffffffffffffffffffffffffffff166112a3611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f0906141f7565b60405180910390fd5b6107e682611305610cdb565b61130f9190614455565b1115611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790614257565b60405180910390fd5b61135a8282612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611383610cdb565b6040516113909190614337565b60405180910390a15050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614197565b60405180910390fd5b80915050919050565b600b5481565b600c5481565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614177565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152d612186565b73ffffffffffffffffffffffffffffffffffffffff1661154b611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611598906141f7565b60405180910390fd5b6115ab60006126ac565b565b600e5481565b6115bb612186565b73ffffffffffffffffffffffffffffffffffffffff166115d9611a9d565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906141f7565b60405180910390fd5b60005b828290508110156116bd57600d5460116000858585818110611657576116566147b9565b5b905060200201602081019061166c91906136dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116b590614683565b915050611632565b505050565b600a60149054906101000a900460ff16611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890614317565b60405180910390fd5b6107e68161171d610cdb565b6117279190614455565b1115611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614077565b60405180910390fd5b600d54816117753361146d565b61177f9190614455565b11156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614097565b60405180910390fd5b6000600c5490503481836117d491906144dc565b1115611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906142f7565b60405180910390fd5b6002601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156118b857600c54905081600d546118709190614536565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a51565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119925760018214611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a906140b7565b60405180910390fd5b600c5490506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a50565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90614117565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614217565b60405180910390fd5b5b611a5b8233612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611a84610cdb565b604051611a919190614337565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ad690614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0290614620565b8015611b4f5780601f10611b2457610100808354040283529160200191611b4f565b820191906000526020600020905b815481529060010190602001808311611b3257829003601f168201915b5050505050905090565b611b6b611b64612186565b8383612772565b5050565b611b80611b7a612186565b8361232d565b611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906142b7565b60405180910390fd5b611bcb848484846128df565b50505050565b611bd9612186565b73ffffffffffffffffffffffffffffffffffffffff16611bf7611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906141f7565b60405180910390fd5b80600c8190555050565b6000611c61610cdb565b905090565b6060611c7182612208565b611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790614277565b60405180910390fd5b6107e6611cbb610cdb565b101580611cca5750600e544210155b15611d16576107e6821015611d1157611ce161293b565b611cea836129cd565b604051602001611cfb929190613f02565b6040516020818303038152906040529050611ea8565b611e1a565b6105dc611d21610cdb565b10611d6d576105dc821015611d6857611d3861293b565b611d41836129cd565b604051602001611d52929190613f02565b6040516020818303038152906040529050611ea8565b611e19565b6103fc611d78610cdb565b10611dc4576103fc821015611dbf57611d8f61293b565b611d98836129cd565b604051602001611da9929190613f02565b6040516020818303038152906040529050611ea8565b611e18565b61029a611dcf610cdb565b10611e175761029a821015611e1657611de661293b565b611def836129cd565b604051602001611e00929190613f02565b6040516020818303038152906040529050611ea8565b5b5b5b5b60108054611e2790614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390614620565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505090505b919050565b60606000611eba8361146d565b905060008167ffffffffffffffff811115611ed857611ed76147e8565b5b604051908082528060200260200182016040528015611f065781602001602082028036833780820191505090505b50905060005b82811015611f5057611f1e8582610e86565b828281518110611f3157611f306147b9565b5b6020026020010181815250508080611f4890614683565b915050611f0c565b508092505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b600d5481565b612010612186565b73ffffffffffffffffffffffffffffffffffffffff1661202e611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b906141f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614037565b60405180910390fd5b6120fd816126ac565b50565b612108612186565b73ffffffffffffffffffffffffffffffffffffffff16612126611a9d565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906141f7565b60405180910390fd5b80600b8190555050565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612201575061220082612b2e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122e78361139c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061233882612208565b612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614137565b60405180910390fd5b60006123828361139c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f157508373ffffffffffffffffffffffffffffffffffffffff166123d984610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240257506124018185611f5b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242b8261139c565b73ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247890614237565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e8906140d7565b60405180910390fd5b6124fc838383612c10565b612507600082612274565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125579190614536565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ae9190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612671610cdb565b905060005b838110156126a65761269383828461268e9190614455565b612c20565b808061269e90614683565b915050612676565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906140f7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128d29190613fba565b60405180910390a3505050565b6128ea84848461240b565b6128f684848484612c3e565b612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90614017565b60405180910390fd5b50505050565b6060600f805461294a90614620565b80601f016020809104026020016040519081016040528092919081815260200182805461297690614620565b80156129c35780601f10612998576101008083540402835291602001916129c3565b820191906000526020600020905b8154815290600101906020018083116129a657829003601f168201915b5050505050905090565b60606000821415612a15576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b29565b600082905060005b60008214612a47578080612a3090614683565b915050600a82612a4091906144ab565b9150612a1d565b60008167ffffffffffffffff811115612a6357612a626147e8565b5b6040519080825280601f01601f191660200182016040528015612a955781602001600182028036833780820191505090505b5090505b60008514612b2257600182612aae9190614536565b9150600a85612abd91906146cc565b6030612ac99190614455565b60f81b818381518110612adf57612ade6147b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b1b91906144ab565b9450612a99565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bf957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c095750612c0882612dd5565b5b9050919050565b612c1b838383612e3f565b505050565b612c3a828260405180602001604052806000815250612f53565b5050565b6000612c5f8473ffffffffffffffffffffffffffffffffffffffff16612fae565b15612dc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c88612186565b8786866040518563ffffffff1660e01b8152600401612caa9493929190613f4c565b602060405180830381600087803b158015612cc457600080fd5b505af1925050508015612cf557506040513d601f19601f82011682018060405250810190612cf29190613919565b60015b612d78573d8060008114612d25576040519150601f19603f3d011682016040523d82523d6000602084013e612d2a565b606091505b50600081511415612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614017565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dcd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e4a838383612fc1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8d57612e8881612fc6565b612ecc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ecb57612eca838261300f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f0f57612f0a8161317c565b612f4e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f4d57612f4c828261324d565b5b5b505050565b612f5d83836132cc565b612f6a6000848484612c3e565b612fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa090614017565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161301c8461146d565b6130269190614536565b905060006007600084815260200190815260200160002054905081811461310b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131909190614536565b90506000600960008481526020019081526020016000205490506000600883815481106131c0576131bf6147b9565b5b9060005260206000200154905080600883815481106131e2576131e16147b9565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132315761323061478a565b5b6001900381819060005260206000200160009055905550505050565b60006132588361146d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613333906141b7565b60405180910390fd5b61334581612208565b15613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90614057565b60405180910390fd5b61339160008383612c10565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133e19190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134a690614620565b90600052602060002090601f0160209004810192826134c8576000855561350f565b82601f106134e157805160ff191683800117855561350f565b8280016001018555821561350f579182015b8281111561350e5782518255916020019190600101906134f3565b5b50905061351c9190613520565b5090565b5b80821115613539576000816000905550600101613521565b5090565b600061355061354b84614377565b614352565b90508281526020810184848401111561356c5761356b614826565b5b6135778482856145de565b509392505050565b600061359261358d846143a8565b614352565b9050828152602081018484840111156135ae576135ad614826565b5b6135b98482856145de565b509392505050565b6000813590506135d081614f1f565b92915050565b60008083601f8401126135ec576135eb61481c565b5b8235905067ffffffffffffffff81111561360957613608614817565b5b60208301915083602082028301111561362557613624614821565b5b9250929050565b60008135905061363b81614f36565b92915050565b60008135905061365081614f4d565b92915050565b60008151905061366581614f4d565b92915050565b600082601f8301126136805761367f61481c565b5b813561369084826020860161353d565b91505092915050565b600082601f8301126136ae576136ad61481c565b5b81356136be84826020860161357f565b91505092915050565b6000813590506136d681614f64565b92915050565b6000602082840312156136f2576136f1614830565b5b6000613700848285016135c1565b91505092915050565b600080604083850312156137205761371f614830565b5b600061372e858286016135c1565b925050602061373f858286016135c1565b9150509250929050565b60008060006060848603121561376257613761614830565b5b6000613770868287016135c1565b9350506020613781868287016135c1565b9250506040613792868287016136c7565b9150509250925092565b600080600080608085870312156137b6576137b5614830565b5b60006137c4878288016135c1565b94505060206137d5878288016135c1565b93505060406137e6878288016136c7565b925050606085013567ffffffffffffffff8111156138075761380661482b565b5b6138138782880161366b565b91505092959194509250565b6000806040838503121561383657613835614830565b5b6000613844858286016135c1565b92505060206138558582860161362c565b9150509250929050565b6000806040838503121561387657613875614830565b5b6000613884858286016135c1565b9250506020613895858286016136c7565b9150509250929050565b600080602083850312156138b6576138b5614830565b5b600083013567ffffffffffffffff8111156138d4576138d361482b565b5b6138e0858286016135d6565b92509250509250929050565b60006020828403121561390257613901614830565b5b600061391084828501613641565b91505092915050565b60006020828403121561392f5761392e614830565b5b600061393d84828501613656565b91505092915050565b60006020828403121561395c5761395b614830565b5b600082013567ffffffffffffffff81111561397a5761397961482b565b5b61398684828501613699565b91505092915050565b6000602082840312156139a5576139a4614830565b5b60006139b3848285016136c7565b91505092915050565b600080604083850312156139d3576139d2614830565b5b60006139e1858286016136c7565b92505060206139f2858286016135c1565b9150509250929050565b6000613a088383613ee4565b60208301905092915050565b613a1d8161456a565b82525050565b6000613a2e826143e9565b613a388185614417565b9350613a43836143d9565b8060005b83811015613a74578151613a5b88826139fc565b9750613a668361440a565b925050600181019050613a47565b5085935050505092915050565b613a8a8161457c565b82525050565b6000613a9b826143f4565b613aa58185614428565b9350613ab58185602086016145ed565b613abe81614835565b840191505092915050565b6000613ad4826143ff565b613ade8185614439565b9350613aee8185602086016145ed565b613af781614835565b840191505092915050565b6000613b0d826143ff565b613b17818561444a565b9350613b278185602086016145ed565b80840191505092915050565b6000613b40602b83614439565b9150613b4b82614846565b604082019050919050565b6000613b63603283614439565b9150613b6e82614895565b604082019050919050565b6000613b86602683614439565b9150613b91826148e4565b604082019050919050565b6000613ba9601c83614439565b9150613bb482614933565b602082019050919050565b6000613bcc601c83614439565b9150613bd78261495c565b602082019050919050565b6000613bef602783614439565b9150613bfa82614985565b604082019050919050565b6000613c12600f83614439565b9150613c1d826149d4565b602082019050919050565b6000613c35602483614439565b9150613c40826149fd565b604082019050919050565b6000613c58601983614439565b9150613c6382614a4c565b602082019050919050565b6000613c7b601a83614439565b9150613c8682614a75565b602082019050919050565b6000613c9e602c83614439565b9150613ca982614a9e565b604082019050919050565b6000613cc1603883614439565b9150613ccc82614aed565b604082019050919050565b6000613ce4602a83614439565b9150613cef82614b3c565b604082019050919050565b6000613d07602983614439565b9150613d1282614b8b565b604082019050919050565b6000613d2a602083614439565b9150613d3582614bda565b602082019050919050565b6000613d4d602c83614439565b9150613d5882614c03565b604082019050919050565b6000613d7060058361444a565b9150613d7b82614c52565b600582019050919050565b6000613d93602083614439565b9150613d9e82614c7b565b602082019050919050565b6000613db6601183614439565b9150613dc182614ca4565b602082019050919050565b6000613dd9602983614439565b9150613de482614ccd565b604082019050919050565b6000613dfc602583614439565b9150613e0782614d1c565b604082019050919050565b6000613e1f602f83614439565b9150613e2a82614d6b565b604082019050919050565b6000613e42602183614439565b9150613e4d82614dba565b604082019050919050565b6000613e65603183614439565b9150613e7082614e09565b604082019050919050565b6000613e88602c83614439565b9150613e9382614e58565b604082019050919050565b6000613eab601583614439565b9150613eb682614ea7565b602082019050919050565b6000613ece602283614439565b9150613ed982614ed0565b604082019050919050565b613eed816145d4565b82525050565b613efc816145d4565b82525050565b6000613f0e8285613b02565b9150613f1a8284613b02565b9150613f2582613d63565b91508190509392505050565b6000602082019050613f466000830184613a14565b92915050565b6000608082019050613f616000830187613a14565b613f6e6020830186613a14565b613f7b6040830185613ef3565b8181036060830152613f8d8184613a90565b905095945050505050565b60006020820190508181036000830152613fb28184613a23565b905092915050565b6000602082019050613fcf6000830184613a81565b92915050565b60006020820190508181036000830152613fef8184613ac9565b905092915050565b6000602082019050818103600083015261401081613b33565b9050919050565b6000602082019050818103600083015261403081613b56565b9050919050565b6000602082019050818103600083015261405081613b79565b9050919050565b6000602082019050818103600083015261407081613b9c565b9050919050565b6000602082019050818103600083015261409081613bbf565b9050919050565b600060208201905081810360008301526140b081613be2565b9050919050565b600060208201905081810360008301526140d081613c05565b9050919050565b600060208201905081810360008301526140f081613c28565b9050919050565b6000602082019050818103600083015261411081613c4b565b9050919050565b6000602082019050818103600083015261413081613c6e565b9050919050565b6000602082019050818103600083015261415081613c91565b9050919050565b6000602082019050818103600083015261417081613cb4565b9050919050565b6000602082019050818103600083015261419081613cd7565b9050919050565b600060208201905081810360008301526141b081613cfa565b9050919050565b600060208201905081810360008301526141d081613d1d565b9050919050565b600060208201905081810360008301526141f081613d40565b9050919050565b6000602082019050818103600083015261421081613d86565b9050919050565b6000602082019050818103600083015261423081613da9565b9050919050565b6000602082019050818103600083015261425081613dcc565b9050919050565b6000602082019050818103600083015261427081613def565b9050919050565b6000602082019050818103600083015261429081613e12565b9050919050565b600060208201905081810360008301526142b081613e35565b9050919050565b600060208201905081810360008301526142d081613e58565b9050919050565b600060208201905081810360008301526142f081613e7b565b9050919050565b6000602082019050818103600083015261431081613e9e565b9050919050565b6000602082019050818103600083015261433081613ec1565b9050919050565b600060208201905061434c6000830184613ef3565b92915050565b600061435c61436d565b90506143688282614652565b919050565b6000604051905090565b600067ffffffffffffffff821115614392576143916147e8565b5b61439b82614835565b9050602081019050919050565b600067ffffffffffffffff8211156143c3576143c26147e8565b5b6143cc82614835565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614460826145d4565b915061446b836145d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a05761449f6146fd565b5b828201905092915050565b60006144b6826145d4565b91506144c1836145d4565b9250826144d1576144d061472c565b5b828204905092915050565b60006144e7826145d4565b91506144f2836145d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6146fd565b5b828202905092915050565b6000614541826145d4565b915061454c836145d4565b92508282101561455f5761455e6146fd565b5b828203905092915050565b6000614575826145b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561460b5780820151818401526020810190506145f0565b8381111561461a576000848401525b50505050565b6000600282049050600182168061463857607f821691505b6020821081141561464c5761464b61475b565b5b50919050565b61465b82614835565b810181811067ffffffffffffffff8211171561467a576146796147e8565b5b80604052505050565b600061468e826145d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146c1576146c06146fd565b5b600182019050919050565b60006146d7826145d4565b91506146e2836145d4565b9250826146f2576146f161472c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672057726f6e670000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752068617665206e6f206d6f72652077686974656c697374000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420696e207768697465206c697374000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072657365727665206d696e7420776f756c6420657863656564206d6178207360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420536c6f7460008201527f6873000000000000000000000000000000000000000000000000000000000000602082015250565b614f288161456a565b8114614f3357600080fd5b50565b614f3f8161457c565b8114614f4a57600080fd5b50565b614f5681614588565b8114614f6157600080fd5b50565b614f6d816145d4565b8114614f7857600080fd5b5056fea264697066735822122043860c4ca6d8f617947646feab52cdf1ce03456e7f932344608ca9d3e8b4110964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102465760003560e01c80636817c76c11610139578063a22cb465116100b6578063d04cf9eb1161007a578063d04cf9eb1461084a578063e985e9c514610887578063f11207d8146108c4578063f14c07f8146108ef578063f2fde38b1461091a578063f4a0a5281461094357610246565b8063a22cb46514610767578063b88d4fde14610790578063beafc89b146107b9578063c4e41b22146107e2578063c87b56dd1461080d57610246565b806371f9c534116100fd57806371f9c534146106a1578063775b9c13146106cc57806382563afc146106f55780638da5cb5b1461071157806395d89b411461073c57610246565b80636817c76c146105cc57806368575685146105f75780637080d6fc1461062257806370a082311461064d578063715018a61461068a57610246565b80632f745c59116101c75780634f6ccce71161018b5780634f6ccce7146104d757806351cff8d91461051457806355f804b31461053d5780635edd95f9146105665780636352211e1461058f57610246565b80632f745c59146103ed57806332cb6b0c1461042a578063372c12b11461045557806342842e0e146104925780634e401c79146104bb57610246565b806312675f361161020e57806312675f361461034257806318160ddd146103595780631ca62dbc1461038457806323b872dd1461039b5780632a85db55146103c457610246565b8063018a2c371461024b57806301ffc9a71461027457806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061398f565b61096c565b005b34801561028057600080fd5b5061029b600480360381019061029691906138ec565b6109f2565b6040516102a89190613fba565b60405180910390f35b3480156102bd57600080fd5b506102c6610a04565b6040516102d39190613fd5565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe919061398f565b610a96565b6040516103109190613f31565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061385f565b610b1b565b005b34801561034e57600080fd5b50610357610c33565b005b34801561036557600080fd5b5061036e610cdb565b60405161037b9190614337565b60405180910390f35b34801561039057600080fd5b50610399610ce8565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190613749565b610d90565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190613946565b610df0565b005b3480156103f957600080fd5b50610414600480360381019061040f919061385f565b610e86565b6040516104219190614337565b60405180910390f35b34801561043657600080fd5b5061043f610f2b565b60405161044c9190614337565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906136dc565b610f31565b6040516104899190614337565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613749565b610f49565b005b6104d560048036038101906104d0919061398f565b610f69565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061398f565b6110aa565b60405161050b9190614337565b60405180910390f35b34801561052057600080fd5b5061053b600480360381019061053691906136dc565b61111b565b005b34801561054957600080fd5b50610564600480360381019061055f9190613946565b6111e7565b005b34801561057257600080fd5b5061058d600480360381019061058891906139bc565b61127d565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061398f565b61139c565b6040516105c39190613f31565b60405180910390f35b3480156105d857600080fd5b506105e161144e565b6040516105ee9190614337565b60405180910390f35b34801561060357600080fd5b5061060c611454565b6040516106199190614337565b60405180910390f35b34801561062e57600080fd5b5061063761145a565b6040516106449190613fba565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906136dc565b61146d565b6040516106819190614337565b60405180910390f35b34801561069657600080fd5b5061069f611525565b005b3480156106ad57600080fd5b506106b66115ad565b6040516106c39190614337565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061389f565b6115b3565b005b61070f600480360381019061070a919061398f565b6116c2565b005b34801561071d57600080fd5b50610726611a9d565b6040516107339190613f31565b60405180910390f35b34801561074857600080fd5b50610751611ac7565b60405161075e9190613fd5565b60405180910390f35b34801561077357600080fd5b5061078e6004803603810190610789919061381f565b611b59565b005b34801561079c57600080fd5b506107b760048036038101906107b2919061379c565b611b6f565b005b3480156107c557600080fd5b506107e060048036038101906107db919061398f565b611bd1565b005b3480156107ee57600080fd5b506107f7611c57565b6040516108049190614337565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f919061398f565b611c66565b6040516108419190613fd5565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906136dc565b611ead565b60405161087e9190613f98565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613709565b611f5b565b6040516108bb9190613fba565b60405180910390f35b3480156108d057600080fd5b506108d9611fef565b6040516108e69190613fba565b60405180910390f35b3480156108fb57600080fd5b50610904612002565b6040516109119190614337565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c91906136dc565b612008565b005b34801561094f57600080fd5b5061096a6004803603810190610965919061398f565b612100565b005b610974612186565b73ffffffffffffffffffffffffffffffffffffffff16610992611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906141f7565b60405180910390fd5b80600e8190555050565b60006109fd8261218e565b9050919050565b606060008054610a1390614620565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f90614620565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612208565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906141d7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b268261139c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614297565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612186565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612186565b611f5b565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90614157565b60405180910390fd5b610c2e8383612274565b505050565b610c3b612186565b73ffffffffffffffffffffffffffffffffffffffff16610c59611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906141f7565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b6000600880549050905090565b610cf0612186565b73ffffffffffffffffffffffffffffffffffffffff16610d0e611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b906141f7565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610da1610d9b612186565b8261232d565b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd7906142b7565b60405180910390fd5b610deb83838361240b565b505050565b610df8612186565b73ffffffffffffffffffffffffffffffffffffffff16610e16611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906141f7565b60405180910390fd5b8060109080519060200190610e8292919061349a565b5050565b6000610e918361146d565b8210610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613ff7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6107e681565b60116020528060005260406000206000915090505481565b610f6483838360405180602001604052806000815250611b6f565b505050565b600a60159054906101000a900460ff16610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf90614317565b60405180910390fd5b6107e681610fc4610cdb565b610fce9190614455565b111561100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614077565b60405180910390fd5b34600b548261101e91906144dc565b111561105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906142f7565b60405180910390fd5b6110698133612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611092610cdb565b60405161109f9190614337565b60405180910390a150565b60006110b4610cdb565b82106110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec906142d7565b60405180910390fd5b60088281548110611109576111086147b9565b5b90600052602060002001549050919050565b611123612186565b73ffffffffffffffffffffffffffffffffffffffff16611141611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906141f7565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e2573d6000803e3d6000fd5b505050565b6111ef612186565b73ffffffffffffffffffffffffffffffffffffffff1661120d611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906141f7565b60405180910390fd5b80600f908051906020019061127992919061349a565b5050565b611285612186565b73ffffffffffffffffffffffffffffffffffffffff166112a3611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f0906141f7565b60405180910390fd5b6107e682611305610cdb565b61130f9190614455565b1115611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790614257565b60405180910390fd5b61135a8282612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611383610cdb565b6040516113909190614337565b60405180910390a15050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614197565b60405180910390fd5b80915050919050565b600b5481565b600c5481565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614177565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152d612186565b73ffffffffffffffffffffffffffffffffffffffff1661154b611a9d565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611598906141f7565b60405180910390fd5b6115ab60006126ac565b565b600e5481565b6115bb612186565b73ffffffffffffffffffffffffffffffffffffffff166115d9611a9d565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906141f7565b60405180910390fd5b60005b828290508110156116bd57600d5460116000858585818110611657576116566147b9565b5b905060200201602081019061166c91906136dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116b590614683565b915050611632565b505050565b600a60149054906101000a900460ff16611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890614317565b60405180910390fd5b6107e68161171d610cdb565b6117279190614455565b1115611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614077565b60405180910390fd5b600d54816117753361146d565b61177f9190614455565b11156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614097565b60405180910390fd5b6000600c5490503481836117d491906144dc565b1115611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906142f7565b60405180910390fd5b6002601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156118b857600c54905081600d546118709190614536565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a51565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119925760018214611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a906140b7565b60405180910390fd5b600c5490506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a50565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90614117565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614217565b60405180910390fd5b5b611a5b8233612667565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611a84610cdb565b604051611a919190614337565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ad690614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0290614620565b8015611b4f5780601f10611b2457610100808354040283529160200191611b4f565b820191906000526020600020905b815481529060010190602001808311611b3257829003601f168201915b5050505050905090565b611b6b611b64612186565b8383612772565b5050565b611b80611b7a612186565b8361232d565b611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906142b7565b60405180910390fd5b611bcb848484846128df565b50505050565b611bd9612186565b73ffffffffffffffffffffffffffffffffffffffff16611bf7611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906141f7565b60405180910390fd5b80600c8190555050565b6000611c61610cdb565b905090565b6060611c7182612208565b611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790614277565b60405180910390fd5b6107e6611cbb610cdb565b101580611cca5750600e544210155b15611d16576107e6821015611d1157611ce161293b565b611cea836129cd565b604051602001611cfb929190613f02565b6040516020818303038152906040529050611ea8565b611e1a565b6105dc611d21610cdb565b10611d6d576105dc821015611d6857611d3861293b565b611d41836129cd565b604051602001611d52929190613f02565b6040516020818303038152906040529050611ea8565b611e19565b6103fc611d78610cdb565b10611dc4576103fc821015611dbf57611d8f61293b565b611d98836129cd565b604051602001611da9929190613f02565b6040516020818303038152906040529050611ea8565b611e18565b61029a611dcf610cdb565b10611e175761029a821015611e1657611de661293b565b611def836129cd565b604051602001611e00929190613f02565b6040516020818303038152906040529050611ea8565b5b5b5b5b60108054611e2790614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390614620565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505090505b919050565b60606000611eba8361146d565b905060008167ffffffffffffffff811115611ed857611ed76147e8565b5b604051908082528060200260200182016040528015611f065781602001602082028036833780820191505090505b50905060005b82811015611f5057611f1e8582610e86565b828281518110611f3157611f306147b9565b5b6020026020010181815250508080611f4890614683565b915050611f0c565b508092505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b600d5481565b612010612186565b73ffffffffffffffffffffffffffffffffffffffff1661202e611a9d565b73ffffffffffffffffffffffffffffffffffffffff1614612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b906141f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614037565b60405180910390fd5b6120fd816126ac565b50565b612108612186565b73ffffffffffffffffffffffffffffffffffffffff16612126611a9d565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906141f7565b60405180910390fd5b80600b8190555050565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612201575061220082612b2e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122e78361139c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061233882612208565b612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614137565b60405180910390fd5b60006123828361139c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f157508373ffffffffffffffffffffffffffffffffffffffff166123d984610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240257506124018185611f5b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242b8261139c565b73ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247890614237565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e8906140d7565b60405180910390fd5b6124fc838383612c10565b612507600082612274565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125579190614536565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ae9190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612671610cdb565b905060005b838110156126a65761269383828461268e9190614455565b612c20565b808061269e90614683565b915050612676565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906140f7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128d29190613fba565b60405180910390a3505050565b6128ea84848461240b565b6128f684848484612c3e565b612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90614017565b60405180910390fd5b50505050565b6060600f805461294a90614620565b80601f016020809104026020016040519081016040528092919081815260200182805461297690614620565b80156129c35780601f10612998576101008083540402835291602001916129c3565b820191906000526020600020905b8154815290600101906020018083116129a657829003601f168201915b5050505050905090565b60606000821415612a15576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b29565b600082905060005b60008214612a47578080612a3090614683565b915050600a82612a4091906144ab565b9150612a1d565b60008167ffffffffffffffff811115612a6357612a626147e8565b5b6040519080825280601f01601f191660200182016040528015612a955781602001600182028036833780820191505090505b5090505b60008514612b2257600182612aae9190614536565b9150600a85612abd91906146cc565b6030612ac99190614455565b60f81b818381518110612adf57612ade6147b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b1b91906144ab565b9450612a99565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bf957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c095750612c0882612dd5565b5b9050919050565b612c1b838383612e3f565b505050565b612c3a828260405180602001604052806000815250612f53565b5050565b6000612c5f8473ffffffffffffffffffffffffffffffffffffffff16612fae565b15612dc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c88612186565b8786866040518563ffffffff1660e01b8152600401612caa9493929190613f4c565b602060405180830381600087803b158015612cc457600080fd5b505af1925050508015612cf557506040513d601f19601f82011682018060405250810190612cf29190613919565b60015b612d78573d8060008114612d25576040519150601f19603f3d011682016040523d82523d6000602084013e612d2a565b606091505b50600081511415612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614017565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dcd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e4a838383612fc1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8d57612e8881612fc6565b612ecc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ecb57612eca838261300f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f0f57612f0a8161317c565b612f4e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f4d57612f4c828261324d565b5b5b505050565b612f5d83836132cc565b612f6a6000848484612c3e565b612fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa090614017565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161301c8461146d565b6130269190614536565b905060006007600084815260200190815260200160002054905081811461310b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131909190614536565b90506000600960008481526020019081526020016000205490506000600883815481106131c0576131bf6147b9565b5b9060005260206000200154905080600883815481106131e2576131e16147b9565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132315761323061478a565b5b6001900381819060005260206000200160009055905550505050565b60006132588361146d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613333906141b7565b60405180910390fd5b61334581612208565b15613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90614057565b60405180910390fd5b61339160008383612c10565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133e19190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134a690614620565b90600052602060002090601f0160209004810192826134c8576000855561350f565b82601f106134e157805160ff191683800117855561350f565b8280016001018555821561350f579182015b8281111561350e5782518255916020019190600101906134f3565b5b50905061351c9190613520565b5090565b5b80821115613539576000816000905550600101613521565b5090565b600061355061354b84614377565b614352565b90508281526020810184848401111561356c5761356b614826565b5b6135778482856145de565b509392505050565b600061359261358d846143a8565b614352565b9050828152602081018484840111156135ae576135ad614826565b5b6135b98482856145de565b509392505050565b6000813590506135d081614f1f565b92915050565b60008083601f8401126135ec576135eb61481c565b5b8235905067ffffffffffffffff81111561360957613608614817565b5b60208301915083602082028301111561362557613624614821565b5b9250929050565b60008135905061363b81614f36565b92915050565b60008135905061365081614f4d565b92915050565b60008151905061366581614f4d565b92915050565b600082601f8301126136805761367f61481c565b5b813561369084826020860161353d565b91505092915050565b600082601f8301126136ae576136ad61481c565b5b81356136be84826020860161357f565b91505092915050565b6000813590506136d681614f64565b92915050565b6000602082840312156136f2576136f1614830565b5b6000613700848285016135c1565b91505092915050565b600080604083850312156137205761371f614830565b5b600061372e858286016135c1565b925050602061373f858286016135c1565b9150509250929050565b60008060006060848603121561376257613761614830565b5b6000613770868287016135c1565b9350506020613781868287016135c1565b9250506040613792868287016136c7565b9150509250925092565b600080600080608085870312156137b6576137b5614830565b5b60006137c4878288016135c1565b94505060206137d5878288016135c1565b93505060406137e6878288016136c7565b925050606085013567ffffffffffffffff8111156138075761380661482b565b5b6138138782880161366b565b91505092959194509250565b6000806040838503121561383657613835614830565b5b6000613844858286016135c1565b92505060206138558582860161362c565b9150509250929050565b6000806040838503121561387657613875614830565b5b6000613884858286016135c1565b9250506020613895858286016136c7565b9150509250929050565b600080602083850312156138b6576138b5614830565b5b600083013567ffffffffffffffff8111156138d4576138d361482b565b5b6138e0858286016135d6565b92509250509250929050565b60006020828403121561390257613901614830565b5b600061391084828501613641565b91505092915050565b60006020828403121561392f5761392e614830565b5b600061393d84828501613656565b91505092915050565b60006020828403121561395c5761395b614830565b5b600082013567ffffffffffffffff81111561397a5761397961482b565b5b61398684828501613699565b91505092915050565b6000602082840312156139a5576139a4614830565b5b60006139b3848285016136c7565b91505092915050565b600080604083850312156139d3576139d2614830565b5b60006139e1858286016136c7565b92505060206139f2858286016135c1565b9150509250929050565b6000613a088383613ee4565b60208301905092915050565b613a1d8161456a565b82525050565b6000613a2e826143e9565b613a388185614417565b9350613a43836143d9565b8060005b83811015613a74578151613a5b88826139fc565b9750613a668361440a565b925050600181019050613a47565b5085935050505092915050565b613a8a8161457c565b82525050565b6000613a9b826143f4565b613aa58185614428565b9350613ab58185602086016145ed565b613abe81614835565b840191505092915050565b6000613ad4826143ff565b613ade8185614439565b9350613aee8185602086016145ed565b613af781614835565b840191505092915050565b6000613b0d826143ff565b613b17818561444a565b9350613b278185602086016145ed565b80840191505092915050565b6000613b40602b83614439565b9150613b4b82614846565b604082019050919050565b6000613b63603283614439565b9150613b6e82614895565b604082019050919050565b6000613b86602683614439565b9150613b91826148e4565b604082019050919050565b6000613ba9601c83614439565b9150613bb482614933565b602082019050919050565b6000613bcc601c83614439565b9150613bd78261495c565b602082019050919050565b6000613bef602783614439565b9150613bfa82614985565b604082019050919050565b6000613c12600f83614439565b9150613c1d826149d4565b602082019050919050565b6000613c35602483614439565b9150613c40826149fd565b604082019050919050565b6000613c58601983614439565b9150613c6382614a4c565b602082019050919050565b6000613c7b601a83614439565b9150613c8682614a75565b602082019050919050565b6000613c9e602c83614439565b9150613ca982614a9e565b604082019050919050565b6000613cc1603883614439565b9150613ccc82614aed565b604082019050919050565b6000613ce4602a83614439565b9150613cef82614b3c565b604082019050919050565b6000613d07602983614439565b9150613d1282614b8b565b604082019050919050565b6000613d2a602083614439565b9150613d3582614bda565b602082019050919050565b6000613d4d602c83614439565b9150613d5882614c03565b604082019050919050565b6000613d7060058361444a565b9150613d7b82614c52565b600582019050919050565b6000613d93602083614439565b9150613d9e82614c7b565b602082019050919050565b6000613db6601183614439565b9150613dc182614ca4565b602082019050919050565b6000613dd9602983614439565b9150613de482614ccd565b604082019050919050565b6000613dfc602583614439565b9150613e0782614d1c565b604082019050919050565b6000613e1f602f83614439565b9150613e2a82614d6b565b604082019050919050565b6000613e42602183614439565b9150613e4d82614dba565b604082019050919050565b6000613e65603183614439565b9150613e7082614e09565b604082019050919050565b6000613e88602c83614439565b9150613e9382614e58565b604082019050919050565b6000613eab601583614439565b9150613eb682614ea7565b602082019050919050565b6000613ece602283614439565b9150613ed982614ed0565b604082019050919050565b613eed816145d4565b82525050565b613efc816145d4565b82525050565b6000613f0e8285613b02565b9150613f1a8284613b02565b9150613f2582613d63565b91508190509392505050565b6000602082019050613f466000830184613a14565b92915050565b6000608082019050613f616000830187613a14565b613f6e6020830186613a14565b613f7b6040830185613ef3565b8181036060830152613f8d8184613a90565b905095945050505050565b60006020820190508181036000830152613fb28184613a23565b905092915050565b6000602082019050613fcf6000830184613a81565b92915050565b60006020820190508181036000830152613fef8184613ac9565b905092915050565b6000602082019050818103600083015261401081613b33565b9050919050565b6000602082019050818103600083015261403081613b56565b9050919050565b6000602082019050818103600083015261405081613b79565b9050919050565b6000602082019050818103600083015261407081613b9c565b9050919050565b6000602082019050818103600083015261409081613bbf565b9050919050565b600060208201905081810360008301526140b081613be2565b9050919050565b600060208201905081810360008301526140d081613c05565b9050919050565b600060208201905081810360008301526140f081613c28565b9050919050565b6000602082019050818103600083015261411081613c4b565b9050919050565b6000602082019050818103600083015261413081613c6e565b9050919050565b6000602082019050818103600083015261415081613c91565b9050919050565b6000602082019050818103600083015261417081613cb4565b9050919050565b6000602082019050818103600083015261419081613cd7565b9050919050565b600060208201905081810360008301526141b081613cfa565b9050919050565b600060208201905081810360008301526141d081613d1d565b9050919050565b600060208201905081810360008301526141f081613d40565b9050919050565b6000602082019050818103600083015261421081613d86565b9050919050565b6000602082019050818103600083015261423081613da9565b9050919050565b6000602082019050818103600083015261425081613dcc565b9050919050565b6000602082019050818103600083015261427081613def565b9050919050565b6000602082019050818103600083015261429081613e12565b9050919050565b600060208201905081810360008301526142b081613e35565b9050919050565b600060208201905081810360008301526142d081613e58565b9050919050565b600060208201905081810360008301526142f081613e7b565b9050919050565b6000602082019050818103600083015261431081613e9e565b9050919050565b6000602082019050818103600083015261433081613ec1565b9050919050565b600060208201905061434c6000830184613ef3565b92915050565b600061435c61436d565b90506143688282614652565b919050565b6000604051905090565b600067ffffffffffffffff821115614392576143916147e8565b5b61439b82614835565b9050602081019050919050565b600067ffffffffffffffff8211156143c3576143c26147e8565b5b6143cc82614835565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614460826145d4565b915061446b836145d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a05761449f6146fd565b5b828201905092915050565b60006144b6826145d4565b91506144c1836145d4565b9250826144d1576144d061472c565b5b828204905092915050565b60006144e7826145d4565b91506144f2836145d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6146fd565b5b828202905092915050565b6000614541826145d4565b915061454c836145d4565b92508282101561455f5761455e6146fd565b5b828203905092915050565b6000614575826145b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561460b5780820151818401526020810190506145f0565b8381111561461a576000848401525b50505050565b6000600282049050600182168061463857607f821691505b6020821081141561464c5761464b61475b565b5b50919050565b61465b82614835565b810181811067ffffffffffffffff8211171561467a576146796147e8565b5b80604052505050565b600061468e826145d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146c1576146c06146fd565b5b600182019050919050565b60006146d7826145d4565b91506146e2836145d4565b9250826146f2576146f161472c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672057726f6e670000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752068617665206e6f206d6f72652077686974656c697374000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420696e207768697465206c697374000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072657365727665206d696e7420776f756c6420657863656564206d6178207360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420536c6f7460008201527f6873000000000000000000000000000000000000000000000000000000000000602082015250565b614f288161456a565b8114614f3357600080fd5b50565b614f3f8161457c565b8114614f4a57600080fd5b50565b614f5681614588565b8114614f6157600080fd5b50565b614f6d816145d4565b8114614f7857600080fd5b5056fea264697066735822122043860c4ca6d8f617947646feab52cdf1ce03456e7f932344608ca9d3e8b4110964736f6c63430008070033
Deployed Bytecode Sourcemap
44388:5547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46896:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49744:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25604:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27163:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26686:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45169:86;;;;;;;;;;;;;:::i;:::-;;38646:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45046;;;;;;;;;;;;;:::i;:::-;;27913:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49414:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38314:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44578:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44895:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28323:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46520:364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38836:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45698:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48241:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45843:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44624:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44666:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44522:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25028:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2629:103;;;;;;;;;;;;;:::i;:::-;;44756:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45495:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47026:988;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1978:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25773:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27456:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28579:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45367:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46092:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48475:929;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46191:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27682:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44475:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44713:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2887:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45267:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46896:124;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46996:18:::1;46978:15;:36;;;;46896:124:::0;:::o;49744:188::-;49867:4;49890:36;49914:11;49890:23;:36::i;:::-;49883:43;;49744:188;;;:::o;25604:100::-;25658:13;25691:5;25684:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25604:100;:::o;27163:221::-;27239:7;27267:16;27275:7;27267;:16::i;:::-;27259:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27352:15;:24;27368:7;27352:24;;;;;;;;;;;;;;;;;;;;;27345:31;;27163:221;;;:::o;26686:411::-;26767:13;26783:23;26798:7;26783:14;:23::i;:::-;26767:39;;26831:5;26825:11;;:2;:11;;;;26817:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26925:5;26909:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26934:37;26951:5;26958:12;:10;:12::i;:::-;26934:16;:37::i;:::-;26909:62;26887:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27068:21;27077:2;27081:7;27068:8;:21::i;:::-;26756:341;26686:411;;:::o;45169:86::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45236:13:::1;;;;;;;;;;;45235:14;45219:13;;:30;;;;;;;;;;;;;;;;;;45169:86::o:0;38646:113::-;38707:7;38734:10;:17;;;;38727:24;;38646:113;:::o;45046:::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45131:22:::1;;;;;;;;;;;45130:23;45105:22;;:48;;;;;;;;;;;;;;;;;;45046:113::o:0;27913:339::-;28108:41;28127:12;:10;:12::i;:::-;28141:7;28108:18;:41::i;:::-;28100:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28216:28;28226:4;28232:2;28236:7;28216:9;:28::i;:::-;27913:339;;;:::o;49414:113::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49509:12:::1;49493:13;:28;;;;;;;;;;;;:::i;:::-;;49414:113:::0;:::o;38314:256::-;38411:7;38447:23;38464:5;38447:16;:23::i;:::-;38439:5;:31;38431:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38536:12;:19;38549:5;38536:19;;;;;;;;;;;;;;;:26;38556:5;38536:26;;;;;;;;;;;;38529:33;;38314:256;;;;:::o;44578:41::-;44615:4;44578:41;:::o;44895:44::-;;;;;;;;;;;;;;;;;:::o;28323:185::-;28461:39;28478:4;28484:2;28488:7;28461:39;;;;;;;;;;;;:16;:39::i;:::-;28323:185;;;:::o;46520:364::-;46586:13;;;;;;;;;;;46578:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:4;46669:9;46653:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;46645:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46765:9;46752;;46740;:21;;;;:::i;:::-;:34;;46732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46807:33;46818:9;46829:10;46807;:33::i;:::-;46852:26;46864:13;:11;:13::i;:::-;46852:26;;;;;;:::i;:::-;;;;;;;;46520:364;:::o;38836:233::-;38911:7;38947:30;:28;:30::i;:::-;38939:5;:38;38931:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39044:10;39055:5;39044:17;;;;;;;;:::i;:::-;;;;;;;;;;39037:24;;38836:233;;;:::o;45698:135::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45752:15:::1;45770:21;45752:39;;45806:2;45798:20;;:29;45819:7;45798:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45745:88;45698:135:::0;:::o;48241:103::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48330:8:::1;48311:16;:27;;;;;;;;;;;;:::i;:::-;;48241:103:::0;:::o;45843:239::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:4:::1;45941:9;45925:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;45917:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;46013:25;46024:9;46035:2;46013:10;:25::i;:::-;46050:26;46062:13;:11;:13::i;:::-;46050:26;;;;;;:::i;:::-;;;;;;;;45843:239:::0;;:::o;25298:::-;25370:7;25390:13;25406:7;:16;25414:7;25406:16;;;;;;;;;;;;;;;;;;;;;25390:32;;25458:1;25441:19;;:5;:19;;;;25433:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25524:5;25517:12;;;25298:239;;;:::o;44624:37::-;;;;:::o;44666:42::-;;;;:::o;44522:33::-;;;;;;;;;;;;;:::o;25028:208::-;25100:7;25145:1;25128:19;;:5;:19;;;;25120:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25212:9;:16;25222:5;25212:16;;;;;;;;;;;;;;;;25205:23;;25028:208;;;:::o;2629:103::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2694:30:::1;2721:1;2694:18;:30::i;:::-;2629:103::o:0;44756:57::-;;;;:::o;45495:191::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:6:::1;45574:107;45594:10;;:17;;45590:1;:21;45574:107;;;45654:19;;45627:9;:24;45637:10;;45648:1;45637:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45627:24;;;;;;;;;;;;;;;:46;;;;45613:3;;;;;:::i;:::-;;;;45574:107;;;;45495:191:::0;;:::o;47026:988::-;47101:22;;;;;;;;;;;47093:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:4;47193:9;47177:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;47169:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47301:19;;47288:9;47264:21;47274:10;47264:9;:21::i;:::-;:33;;;;:::i;:::-;:56;;47256:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;47371:13;47387:14;;47371:30;;47437:9;47428:5;47416:9;:17;;;;:::i;:::-;:30;;47408:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47508:1;47483:9;:21;47493:10;47483:21;;;;;;;;;;;;;;;;:26;47479:440;;;47526:14;;47518:22;;47591:9;47571:19;;:29;;;;:::i;:::-;47547:9;:21;47557:10;47547:21;;;;;;;;;;;;;;;:53;;;;47479:440;;;47648:1;47623:9;:21;47633:10;47623:21;;;;;;;;;;;;;;;;:26;47620:299;;;47680:1;47667:9;:14;47659:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;47717:14;;47709:22;;47762:1;47738:9;:21;47748:10;47738:21;;;;;;;;;;;;;;;:25;;;;47620:299;;;47810:1;47785:9;:21;47795:10;47785:21;;;;;;;;;;;;;;;;:26;47782:137;;;47821:36;;;;;;;;;;:::i;:::-;;;;;;;;47782:137;47884:27;;;;;;;;;;:::i;:::-;;;;;;;;47620:299;47479:440;47937:33;47948:9;47959:10;47937;:33::i;:::-;47982:26;47994:13;:11;:13::i;:::-;47982:26;;;;;;:::i;:::-;;;;;;;;47086:928;47026:988;:::o;1978:87::-;2024:7;2051:6;;;;;;;;;;;2044:13;;1978:87;:::o;25773:104::-;25829:13;25862:7;25855:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25773:104;:::o;27456:155::-;27551:52;27570:12;:10;:12::i;:::-;27584:8;27594;27551:18;:52::i;:::-;27456:155;;:::o;28579:328::-;28754:41;28773:12;:10;:12::i;:::-;28787:7;28754:18;:41::i;:::-;28746:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28860:39;28874:4;28880:2;28884:7;28893:5;28860:13;:39::i;:::-;28579:328;;;;:::o;45367:114::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45460:15:::1;45443:14;:32;;;;45367:114:::0;:::o;46092:89::-;46139:7;46162:13;:11;:13::i;:::-;46155:20;;46092:89;:::o;48475:929::-;48548:13;48578:16;48586:7;48578;:16::i;:::-;48570:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:4;48657:13;:11;:13::i;:::-;:27;;:65;;;;48707:15;;48688;:34;;48657:65;48653:703;;;44615:4;48737:7;:20;48733:119;;;48801:10;:8;:10::i;:::-;48813:18;:7;:16;:18::i;:::-;48784:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48770:72;;;;48733:119;48653:703;;;48891:4;48874:13;:11;:13::i;:::-;:21;48871:485;;48919:4;48909:7;:14;48905:113;;;48967:10;:8;:10::i;:::-;48979:18;:7;:16;:18::i;:::-;48950:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48936:72;;;;48905:113;48871:485;;;49057:4;49040:13;:11;:13::i;:::-;:21;49037:319;;49085:4;49075:7;:14;49071:113;;;49133:10;:8;:10::i;:::-;49145:18;:7;:16;:18::i;:::-;49116:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49102:72;;;;49071:113;49037:319;;;49223:3;49206:13;:11;:13::i;:::-;:20;49203:153;;49250:3;49240:7;:13;49236:112;;;49297:10;:8;:10::i;:::-;49309:18;:7;:16;:18::i;:::-;49280:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49266:72;;;;49236:112;49203:153;49037:319;48871:485;48653:703;49378:13;49371:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48475:929;;;;:::o;46191:317::-;46253:16;46278:18;46299:17;46309:6;46299:9;:17::i;:::-;46278:38;;46323:25;46365:10;46351:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46323:53;;46388:9;46383:98;46403:10;46399:1;:14;46383:98;;;46443:30;46463:6;46471:1;46443:19;:30::i;:::-;46429:8;46438:1;46429:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46415:3;;;;;:::i;:::-;;;;46383:98;;;;46494:8;46487:15;;;;46191:317;;;:::o;27682:164::-;27779:4;27803:18;:25;27822:5;27803:25;;;;;;;;;;;;;;;:35;27829:8;27803:35;;;;;;;;;;;;;;;;;;;;;;;;;27796:42;;27682:164;;;;:::o;44475:42::-;;;;;;;;;;;;;:::o;44713:38::-;;;;:::o;2887:201::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2996:1:::1;2976:22;;:8;:22;;;;2968:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3052:28;3071:8;3052:18;:28::i;:::-;2887:201:::0;:::o;45267:94::-;2209:12;:10;:12::i;:::-;2198:23;;:7;:5;:7::i;:::-;:23;;;2190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45345:10:::1;45333:9;:22;;;;45267:94:::0;:::o;727:98::-;780:7;807:10;800:17;;727:98;:::o;38006:224::-;38108:4;38147:35;38132:50;;;:11;:50;;;;:90;;;;38186:36;38210:11;38186:23;:36::i;:::-;38132:90;38125:97;;38006:224;;;:::o;30417:127::-;30482:4;30534:1;30506:30;;:7;:16;30514:7;30506:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30499:37;;30417:127;;;:::o;34399:174::-;34501:2;34474:15;:24;34490:7;34474:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34557:7;34553:2;34519:46;;34528:23;34543:7;34528:14;:23::i;:::-;34519:46;;;;;;;;;;;;34399:174;;:::o;30711:348::-;30804:4;30829:16;30837:7;30829;:16::i;:::-;30821:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30905:13;30921:23;30936:7;30921:14;:23::i;:::-;30905:39;;30974:5;30963:16;;:7;:16;;;:51;;;;31007:7;30983:31;;:20;30995:7;30983:11;:20::i;:::-;:31;;;30963:51;:87;;;;31018:32;31035:5;31042:7;31018:16;:32::i;:::-;30963:87;30955:96;;;30711:348;;;;:::o;33703:578::-;33862:4;33835:31;;:23;33850:7;33835:14;:23::i;:::-;:31;;;33827:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33945:1;33931:16;;:2;:16;;;;33923:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:39;34022:4;34028:2;34032:7;34001:20;:39::i;:::-;34105:29;34122:1;34126:7;34105:8;:29::i;:::-;34166:1;34147:9;:15;34157:4;34147:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34195:1;34178:9;:13;34188:2;34178:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34226:2;34207:7;:16;34215:7;34207:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34265:7;34261:2;34246:27;;34255:4;34246:27;;;;;;;;;;;;33703:578;;;:::o;48026:205::-;48100:14;48117:13;:11;:13::i;:::-;48100:30;;48142:9;48137:89;48161:9;48157:1;:13;48137:89;;;48186:32;48196:9;48216:1;48207:6;:10;;;;:::i;:::-;48186:9;:32::i;:::-;48172:3;;;;;:::i;:::-;;;;48137:89;;;;48093:138;48026:205;;:::o;3248:191::-;3322:16;3341:6;;;;;;;;;;;3322:25;;3367:8;3358:6;;:17;;;;;;;;;;;;;;;;;;3422:8;3391:40;;3412:8;3391:40;;;;;;;;;;;;3311:128;3248:191;:::o;34715:315::-;34870:8;34861:17;;:5;:17;;;;34853:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34957:8;34919:18;:25;34938:5;34919:25;;;;;;;;;;;;;;;:35;34945:8;34919:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35003:8;34981:41;;34996:5;34981:41;;;35013:8;34981:41;;;;;;:::i;:::-;;;;;;;;34715:315;;;:::o;29789:::-;29946:28;29956:4;29962:2;29966:7;29946:9;:28::i;:::-;29993:48;30016:4;30022:2;30026:7;30035:5;29993:22;:48::i;:::-;29985:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29789:315;;;;:::o;48354:111::-;48414:13;48443:16;48436:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48354:111;:::o;14654:723::-;14710:13;14940:1;14931:5;:10;14927:53;;;14958:10;;;;;;;;;;;;;;;;;;;;;14927:53;14990:12;15005:5;14990:20;;15021:14;15046:78;15061:1;15053:4;:9;15046:78;;15079:8;;;;;:::i;:::-;;;;15110:2;15102:10;;;;;:::i;:::-;;;15046:78;;;15134:19;15166:6;15156:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15134:39;;15184:154;15200:1;15191:5;:10;15184:154;;15228:1;15218:11;;;;;:::i;:::-;;;15295:2;15287:5;:10;;;;:::i;:::-;15274:2;:24;;;;:::i;:::-;15261:39;;15244:6;15251;15244:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15324:2;15315:11;;;;;:::i;:::-;;;15184:154;;;15362:6;15348:21;;;;;14654:723;;;;:::o;24659:305::-;24761:4;24813:25;24798:40;;;:11;:40;;;;:105;;;;24870:33;24855:48;;;:11;:48;;;;24798:105;:158;;;;24920:36;24944:11;24920:23;:36::i;:::-;24798:158;24778:178;;24659:305;;;:::o;49539:195::-;49683:45;49710:4;49716:2;49720:7;49683:26;:45::i;:::-;49539:195;;;:::o;31401:110::-;31477:26;31487:2;31491:7;31477:26;;;;;;;;;;;;:9;:26::i;:::-;31401:110;;:::o;35595:799::-;35750:4;35771:15;:2;:13;;;:15::i;:::-;35767:620;;;35823:2;35807:36;;;35844:12;:10;:12::i;:::-;35858:4;35864:7;35873:5;35807:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35803:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36066:1;36049:6;:13;:18;36045:272;;;36092:60;;;;;;;;;;:::i;:::-;;;;;;;;36045:272;36267:6;36261:13;36252:6;36248:2;36244:15;36237:38;35803:529;35940:41;;;35930:51;;;:6;:51;;;;35923:58;;;;;35767:620;36371:4;36364:11;;35595:799;;;;;;;:::o;14179:157::-;14264:4;14303:25;14288:40;;;:11;:40;;;;14281:47;;14179:157;;;:::o;39682:589::-;39826:45;39853:4;39859:2;39863:7;39826:26;:45::i;:::-;39904:1;39888:18;;:4;:18;;;39884:187;;;39923:40;39955:7;39923:31;:40::i;:::-;39884:187;;;39993:2;39985:10;;:4;:10;;;39981:90;;40012:47;40045:4;40051:7;40012:32;:47::i;:::-;39981:90;39884:187;40099:1;40085:16;;:2;:16;;;40081:183;;;40118:45;40155:7;40118:36;:45::i;:::-;40081:183;;;40191:4;40185:10;;:2;:10;;;40181:83;;40212:40;40240:2;40244:7;40212:27;:40::i;:::-;40181:83;40081:183;39682:589;;;:::o;31738:321::-;31868:18;31874:2;31878:7;31868:5;:18::i;:::-;31919:54;31950:1;31954:2;31958:7;31967:5;31919:22;:54::i;:::-;31897:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31738:321;;;:::o;4212:387::-;4272:4;4480:12;4547:7;4535:20;4527:28;;4590:1;4583:4;:8;4576:15;;;4212:387;;;:::o;36966:126::-;;;;:::o;40994:164::-;41098:10;:17;;;;41071:15;:24;41087:7;41071:24;;;;;;;;;;;:44;;;;41126:10;41142:7;41126:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40994:164;:::o;41785:988::-;42051:22;42101:1;42076:22;42093:4;42076:16;:22::i;:::-;:26;;;;:::i;:::-;42051:51;;42113:18;42134:17;:26;42152:7;42134:26;;;;;;;;;;;;42113:47;;42281:14;42267:10;:28;42263:328;;42312:19;42334:12;:18;42347:4;42334:18;;;;;;;;;;;;;;;:34;42353:14;42334:34;;;;;;;;;;;;42312:56;;42418:11;42385:12;:18;42398:4;42385:18;;;;;;;;;;;;;;;:30;42404:10;42385:30;;;;;;;;;;;:44;;;;42535:10;42502:17;:30;42520:11;42502:30;;;;;;;;;;;:43;;;;42297:294;42263:328;42687:17;:26;42705:7;42687:26;;;;;;;;;;;42680:33;;;42731:12;:18;42744:4;42731:18;;;;;;;;;;;;;;;:34;42750:14;42731:34;;;;;;;;;;;42724:41;;;41866:907;;41785:988;;:::o;43068:1079::-;43321:22;43366:1;43346:10;:17;;;;:21;;;;:::i;:::-;43321:46;;43378:18;43399:15;:24;43415:7;43399:24;;;;;;;;;;;;43378:45;;43750:19;43772:10;43783:14;43772:26;;;;;;;;:::i;:::-;;;;;;;;;;43750:48;;43836:11;43811:10;43822;43811:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43947:10;43916:15;:28;43932:11;43916:28;;;;;;;;;;;:41;;;;44088:15;:24;44104:7;44088:24;;;;;;;;;;;44081:31;;;44123:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43139:1008;;;43068:1079;:::o;40572:221::-;40657:14;40674:20;40691:2;40674:16;:20::i;:::-;40657:37;;40732:7;40705:12;:16;40718:2;40705:16;;;;;;;;;;;;;;;:24;40722:6;40705:24;;;;;;;;;;;:34;;;;40779:6;40750:17;:26;40768:7;40750:26;;;;;;;;;;;:35;;;;40646:147;40572:221;;:::o;32395:382::-;32489:1;32475:16;;:2;:16;;;;32467:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32548:16;32556:7;32548;:16::i;:::-;32547:17;32539:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32610:45;32639:1;32643:2;32647:7;32610:20;:45::i;:::-;32685:1;32668:9;:13;32678:2;32668:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32716:2;32697:7;:16;32705:7;32697:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32761:7;32757:2;32736:33;;32753:1;32736:33;;;;;;;;;;;;32395:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:474::-;8382:6;8390;8439:2;8427:9;8418:7;8414:23;8410:32;8407:119;;;8445:79;;:::i;:::-;8407:119;8565:1;8590:53;8635:7;8626:6;8615:9;8611:22;8590:53;:::i;:::-;8580:63;;8536:117;8692:2;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8663:118;8314:474;;;;;:::o;8794:179::-;8863:10;8884:46;8926:3;8918:6;8884:46;:::i;:::-;8962:4;8957:3;8953:14;8939:28;;8794:179;;;;:::o;8979:118::-;9066:24;9084:5;9066:24;:::i;:::-;9061:3;9054:37;8979:118;;:::o;9133:732::-;9252:3;9281:54;9329:5;9281:54;:::i;:::-;9351:86;9430:6;9425:3;9351:86;:::i;:::-;9344:93;;9461:56;9511:5;9461:56;:::i;:::-;9540:7;9571:1;9556:284;9581:6;9578:1;9575:13;9556:284;;;9657:6;9651:13;9684:63;9743:3;9728:13;9684:63;:::i;:::-;9677:70;;9770:60;9823:6;9770:60;:::i;:::-;9760:70;;9616:224;9603:1;9600;9596:9;9591:14;;9556:284;;;9560:14;9856:3;9849:10;;9257:608;;;9133:732;;;;:::o;9871:109::-;9952:21;9967:5;9952:21;:::i;:::-;9947:3;9940:34;9871:109;;:::o;9986:360::-;10072:3;10100:38;10132:5;10100:38;:::i;:::-;10154:70;10217:6;10212:3;10154:70;:::i;:::-;10147:77;;10233:52;10278:6;10273:3;10266:4;10259:5;10255:16;10233:52;:::i;:::-;10310:29;10332:6;10310:29;:::i;:::-;10305:3;10301:39;10294:46;;10076:270;9986:360;;;;:::o;10352:364::-;10440:3;10468:39;10501:5;10468:39;:::i;:::-;10523:71;10587:6;10582:3;10523:71;:::i;:::-;10516:78;;10603:52;10648:6;10643:3;10636:4;10629:5;10625:16;10603:52;:::i;:::-;10680:29;10702:6;10680:29;:::i;:::-;10675:3;10671:39;10664:46;;10444:272;10352:364;;;;:::o;10722:377::-;10828:3;10856:39;10889:5;10856:39;:::i;:::-;10911:89;10993:6;10988:3;10911:89;:::i;:::-;10904:96;;11009:52;11054:6;11049:3;11042:4;11035:5;11031:16;11009:52;:::i;:::-;11086:6;11081:3;11077:16;11070:23;;10832:267;10722:377;;;;:::o;11105:366::-;11247:3;11268:67;11332:2;11327:3;11268:67;:::i;:::-;11261:74;;11344:93;11433:3;11344:93;:::i;:::-;11462:2;11457:3;11453:12;11446:19;;11105:366;;;:::o;11477:::-;11619:3;11640:67;11704:2;11699:3;11640:67;:::i;:::-;11633:74;;11716:93;11805:3;11716:93;:::i;:::-;11834:2;11829:3;11825:12;11818:19;;11477:366;;;:::o;11849:::-;11991:3;12012:67;12076:2;12071:3;12012:67;:::i;:::-;12005:74;;12088:93;12177:3;12088:93;:::i;:::-;12206:2;12201:3;12197:12;12190:19;;11849:366;;;:::o;12221:::-;12363:3;12384:67;12448:2;12443:3;12384:67;:::i;:::-;12377:74;;12460:93;12549:3;12460:93;:::i;:::-;12578:2;12573:3;12569:12;12562:19;;12221:366;;;:::o;12593:::-;12735:3;12756:67;12820:2;12815:3;12756:67;:::i;:::-;12749:74;;12832:93;12921:3;12832:93;:::i;:::-;12950:2;12945:3;12941:12;12934:19;;12593:366;;;:::o;12965:::-;13107:3;13128:67;13192:2;13187:3;13128:67;:::i;:::-;13121:74;;13204:93;13293:3;13204:93;:::i;:::-;13322:2;13317:3;13313:12;13306:19;;12965:366;;;:::o;13337:::-;13479:3;13500:67;13564:2;13559:3;13500:67;:::i;:::-;13493:74;;13576:93;13665:3;13576:93;:::i;:::-;13694:2;13689:3;13685:12;13678:19;;13337:366;;;:::o;13709:::-;13851:3;13872:67;13936:2;13931:3;13872:67;:::i;:::-;13865:74;;13948:93;14037:3;13948:93;:::i;:::-;14066:2;14061:3;14057:12;14050:19;;13709:366;;;:::o;14081:::-;14223:3;14244:67;14308:2;14303:3;14244:67;:::i;:::-;14237:74;;14320:93;14409:3;14320:93;:::i;:::-;14438:2;14433:3;14429:12;14422:19;;14081:366;;;:::o;14453:::-;14595:3;14616:67;14680:2;14675:3;14616:67;:::i;:::-;14609:74;;14692:93;14781:3;14692:93;:::i;:::-;14810:2;14805:3;14801:12;14794:19;;14453:366;;;:::o;14825:::-;14967:3;14988:67;15052:2;15047:3;14988:67;:::i;:::-;14981:74;;15064:93;15153:3;15064:93;:::i;:::-;15182:2;15177:3;15173:12;15166:19;;14825:366;;;:::o;15197:::-;15339:3;15360:67;15424:2;15419:3;15360:67;:::i;:::-;15353:74;;15436:93;15525:3;15436:93;:::i;:::-;15554:2;15549:3;15545:12;15538:19;;15197:366;;;:::o;15569:::-;15711:3;15732:67;15796:2;15791:3;15732:67;:::i;:::-;15725:74;;15808:93;15897:3;15808:93;:::i;:::-;15926:2;15921:3;15917:12;15910:19;;15569:366;;;:::o;15941:::-;16083:3;16104:67;16168:2;16163:3;16104:67;:::i;:::-;16097:74;;16180:93;16269:3;16180:93;:::i;:::-;16298:2;16293:3;16289:12;16282:19;;15941:366;;;:::o;16313:::-;16455:3;16476:67;16540:2;16535:3;16476:67;:::i;:::-;16469:74;;16552:93;16641:3;16552:93;:::i;:::-;16670:2;16665:3;16661:12;16654:19;;16313:366;;;:::o;16685:::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:400::-;17217:3;17238:84;17320:1;17315:3;17238:84;:::i;:::-;17231:91;;17331:93;17420:3;17331:93;:::i;:::-;17449:1;17444:3;17440:11;17433:18;;17057:400;;;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:::-;17977:3;17998:67;18062:2;18057:3;17998:67;:::i;:::-;17991:74;;18074:93;18163:3;18074:93;:::i;:::-;18192:2;18187:3;18183:12;18176:19;;17835:366;;;:::o;18207:::-;18349:3;18370:67;18434:2;18429:3;18370:67;:::i;:::-;18363:74;;18446:93;18535:3;18446:93;:::i;:::-;18564:2;18559:3;18555:12;18548:19;;18207:366;;;:::o;18579:::-;18721:3;18742:67;18806:2;18801:3;18742:67;:::i;:::-;18735:74;;18818:93;18907:3;18818:93;:::i;:::-;18936:2;18931:3;18927:12;18920:19;;18579:366;;;:::o;18951:::-;19093:3;19114:67;19178:2;19173:3;19114:67;:::i;:::-;19107:74;;19190:93;19279:3;19190:93;:::i;:::-;19308:2;19303:3;19299:12;19292:19;;18951:366;;;:::o;19323:::-;19465:3;19486:67;19550:2;19545:3;19486:67;:::i;:::-;19479:74;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19323:366;;;:::o;19695:::-;19837:3;19858:67;19922:2;19917:3;19858:67;:::i;:::-;19851:74;;19934:93;20023:3;19934:93;:::i;:::-;20052:2;20047:3;20043:12;20036:19;;19695:366;;;:::o;20067:::-;20209:3;20230:67;20294:2;20289:3;20230:67;:::i;:::-;20223:74;;20306:93;20395:3;20306:93;:::i;:::-;20424:2;20419:3;20415:12;20408:19;;20067:366;;;:::o;20439:::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:::-;20953:3;20974:67;21038:2;21033:3;20974:67;:::i;:::-;20967:74;;21050:93;21139:3;21050:93;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;20811:366;;;:::o;21183:108::-;21260:24;21278:5;21260:24;:::i;:::-;21255:3;21248:37;21183:108;;:::o;21297:118::-;21384:24;21402:5;21384:24;:::i;:::-;21379:3;21372:37;21297:118;;:::o;21421:701::-;21702:3;21724:95;21815:3;21806:6;21724:95;:::i;:::-;21717:102;;21836:95;21927:3;21918:6;21836:95;:::i;:::-;21829:102;;21948:148;22092:3;21948:148;:::i;:::-;21941:155;;22113:3;22106:10;;21421:701;;;;;:::o;22128:222::-;22221:4;22259:2;22248:9;22244:18;22236:26;;22272:71;22340:1;22329:9;22325:17;22316:6;22272:71;:::i;:::-;22128:222;;;;:::o;22356:640::-;22551:4;22589:3;22578:9;22574:19;22566:27;;22603:71;22671:1;22660:9;22656:17;22647:6;22603:71;:::i;:::-;22684:72;22752:2;22741:9;22737:18;22728:6;22684:72;:::i;:::-;22766;22834:2;22823:9;22819:18;22810:6;22766:72;:::i;:::-;22885:9;22879:4;22875:20;22870:2;22859:9;22855:18;22848:48;22913:76;22984:4;22975:6;22913:76;:::i;:::-;22905:84;;22356:640;;;;;;;:::o;23002:373::-;23145:4;23183:2;23172:9;23168:18;23160:26;;23232:9;23226:4;23222:20;23218:1;23207:9;23203:17;23196:47;23260:108;23363:4;23354:6;23260:108;:::i;:::-;23252:116;;23002:373;;;;:::o;23381:210::-;23468:4;23506:2;23495:9;23491:18;23483:26;;23519:65;23581:1;23570:9;23566:17;23557:6;23519:65;:::i;:::-;23381:210;;;;:::o;23597:313::-;23710:4;23748:2;23737:9;23733:18;23725:26;;23797:9;23791:4;23787:20;23783:1;23772:9;23768:17;23761:47;23825:78;23898:4;23889:6;23825:78;:::i;:::-;23817:86;;23597:313;;;;:::o;23916:419::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:131;24323:4;24197:131;:::i;:::-;24189:139;;23916:419;;;:::o;24341:::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:::-;24932:4;24970:2;24959:9;24955:18;24947:26;;25019:9;25013:4;25009:20;25005:1;24994:9;24990:17;24983:47;25047:131;25173:4;25047:131;:::i;:::-;25039:139;;24766:419;;;:::o;25191:::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:131;26023:4;25897:131;:::i;:::-;25889:139;;25616:419;;;:::o;26041:::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:::-;26632:4;26670:2;26659:9;26655:18;26647:26;;26719:9;26713:4;26709:20;26705:1;26694:9;26690:17;26683:47;26747:131;26873:4;26747:131;:::i;:::-;26739:139;;26466:419;;;:::o;26891:::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:::-;27482:4;27520:2;27509:9;27505:18;27497:26;;27569:9;27563:4;27559:20;27555:1;27544:9;27540:17;27533:47;27597:131;27723:4;27597:131;:::i;:::-;27589:139;;27316:419;;;:::o;27741:::-;27907:4;27945:2;27934:9;27930:18;27922:26;;27994:9;27988:4;27984:20;27980:1;27969:9;27965:17;27958:47;28022:131;28148:4;28022:131;:::i;:::-;28014:139;;27741:419;;;:::o;28166:::-;28332:4;28370:2;28359:9;28355:18;28347:26;;28419:9;28413:4;28409:20;28405:1;28394:9;28390:17;28383:47;28447:131;28573:4;28447:131;:::i;:::-;28439:139;;28166:419;;;:::o;28591:::-;28757:4;28795:2;28784:9;28780:18;28772:26;;28844:9;28838:4;28834:20;28830:1;28819:9;28815:17;28808:47;28872:131;28998:4;28872:131;:::i;:::-;28864:139;;28591:419;;;:::o;29016:::-;29182:4;29220:2;29209:9;29205:18;29197:26;;29269:9;29263:4;29259:20;29255:1;29244:9;29240:17;29233:47;29297:131;29423:4;29297:131;:::i;:::-;29289:139;;29016:419;;;:::o;29441:::-;29607:4;29645:2;29634:9;29630:18;29622:26;;29694:9;29688:4;29684:20;29680:1;29669:9;29665:17;29658:47;29722:131;29848:4;29722:131;:::i;:::-;29714:139;;29441:419;;;:::o;29866:::-;30032:4;30070:2;30059:9;30055:18;30047:26;;30119:9;30113:4;30109:20;30105:1;30094:9;30090:17;30083:47;30147:131;30273:4;30147:131;:::i;:::-;30139:139;;29866:419;;;:::o;30291:::-;30457:4;30495:2;30484:9;30480:18;30472:26;;30544:9;30538:4;30534:20;30530:1;30519:9;30515:17;30508:47;30572:131;30698:4;30572:131;:::i;:::-;30564:139;;30291:419;;;:::o;30716:::-;30882:4;30920:2;30909:9;30905:18;30897:26;;30969:9;30963:4;30959:20;30955:1;30944:9;30940:17;30933:47;30997:131;31123:4;30997:131;:::i;:::-;30989:139;;30716:419;;;:::o;31141:::-;31307:4;31345:2;31334:9;31330:18;31322:26;;31394:9;31388:4;31384:20;31380:1;31369:9;31365:17;31358:47;31422:131;31548:4;31422:131;:::i;:::-;31414:139;;31141:419;;;:::o;31566:::-;31732:4;31770:2;31759:9;31755:18;31747:26;;31819:9;31813:4;31809:20;31805:1;31794:9;31790:17;31783:47;31847:131;31973:4;31847:131;:::i;:::-;31839:139;;31566:419;;;:::o;31991:::-;32157:4;32195:2;32184:9;32180:18;32172:26;;32244:9;32238:4;32234:20;32230:1;32219:9;32215:17;32208:47;32272:131;32398:4;32272:131;:::i;:::-;32264:139;;31991:419;;;:::o;32416:::-;32582:4;32620:2;32609:9;32605:18;32597:26;;32669:9;32663:4;32659:20;32655:1;32644:9;32640:17;32633:47;32697:131;32823:4;32697:131;:::i;:::-;32689:139;;32416:419;;;:::o;32841:::-;33007:4;33045:2;33034:9;33030:18;33022:26;;33094:9;33088:4;33084:20;33080:1;33069:9;33065:17;33058:47;33122:131;33248:4;33122:131;:::i;:::-;33114:139;;32841:419;;;:::o;33266:::-;33432:4;33470:2;33459:9;33455:18;33447:26;;33519:9;33513:4;33509:20;33505:1;33494:9;33490:17;33483:47;33547:131;33673:4;33547:131;:::i;:::-;33539:139;;33266:419;;;:::o;33691:::-;33857:4;33895:2;33884:9;33880:18;33872:26;;33944:9;33938:4;33934:20;33930:1;33919:9;33915:17;33908:47;33972:131;34098:4;33972:131;:::i;:::-;33964:139;;33691:419;;;:::o;34116:::-;34282:4;34320:2;34309:9;34305:18;34297:26;;34369:9;34363:4;34359:20;34355:1;34344:9;34340:17;34333:47;34397:131;34523:4;34397:131;:::i;:::-;34389:139;;34116:419;;;:::o;34541:::-;34707:4;34745:2;34734:9;34730:18;34722:26;;34794:9;34788:4;34784:20;34780:1;34769:9;34765:17;34758:47;34822:131;34948:4;34822:131;:::i;:::-;34814:139;;34541:419;;;:::o;34966:222::-;35059:4;35097:2;35086:9;35082:18;35074:26;;35110:71;35178:1;35167:9;35163:17;35154:6;35110:71;:::i;:::-;34966:222;;;;:::o;35194:129::-;35228:6;35255:20;;:::i;:::-;35245:30;;35284:33;35312:4;35304:6;35284:33;:::i;:::-;35194:129;;;:::o;35329:75::-;35362:6;35395:2;35389:9;35379:19;;35329:75;:::o;35410:307::-;35471:4;35561:18;35553:6;35550:30;35547:56;;;35583:18;;:::i;:::-;35547:56;35621:29;35643:6;35621:29;:::i;:::-;35613:37;;35705:4;35699;35695:15;35687:23;;35410:307;;;:::o;35723:308::-;35785:4;35875:18;35867:6;35864:30;35861:56;;;35897:18;;:::i;:::-;35861:56;35935:29;35957:6;35935:29;:::i;:::-;35927:37;;36019:4;36013;36009:15;36001:23;;35723:308;;;:::o;36037:132::-;36104:4;36127:3;36119:11;;36157:4;36152:3;36148:14;36140:22;;36037:132;;;:::o;36175:114::-;36242:6;36276:5;36270:12;36260:22;;36175:114;;;:::o;36295:98::-;36346:6;36380:5;36374:12;36364:22;;36295:98;;;:::o;36399:99::-;36451:6;36485:5;36479:12;36469:22;;36399:99;;;:::o;36504:113::-;36574:4;36606;36601:3;36597:14;36589:22;;36504:113;;;:::o;36623:184::-;36722:11;36756:6;36751:3;36744:19;36796:4;36791:3;36787:14;36772:29;;36623:184;;;;:::o;36813:168::-;36896:11;36930:6;36925:3;36918:19;36970:4;36965:3;36961:14;36946:29;;36813:168;;;;:::o;36987:169::-;37071:11;37105:6;37100:3;37093:19;37145:4;37140:3;37136:14;37121:29;;36987:169;;;;:::o;37162:148::-;37264:11;37301:3;37286:18;;37162:148;;;;:::o;37316:305::-;37356:3;37375:20;37393:1;37375:20;:::i;:::-;37370:25;;37409:20;37427:1;37409:20;:::i;:::-;37404:25;;37563:1;37495:66;37491:74;37488:1;37485:81;37482:107;;;37569:18;;:::i;:::-;37482:107;37613:1;37610;37606:9;37599:16;;37316:305;;;;:::o;37627:185::-;37667:1;37684:20;37702:1;37684:20;:::i;:::-;37679:25;;37718:20;37736:1;37718:20;:::i;:::-;37713:25;;37757:1;37747:35;;37762:18;;:::i;:::-;37747:35;37804:1;37801;37797:9;37792:14;;37627:185;;;;:::o;37818:348::-;37858:7;37881:20;37899:1;37881:20;:::i;:::-;37876:25;;37915:20;37933:1;37915:20;:::i;:::-;37910:25;;38103:1;38035:66;38031:74;38028:1;38025:81;38020:1;38013:9;38006:17;38002:105;37999:131;;;38110:18;;:::i;:::-;37999:131;38158:1;38155;38151:9;38140:20;;37818:348;;;;:::o;38172:191::-;38212:4;38232:20;38250:1;38232:20;:::i;:::-;38227:25;;38266:20;38284:1;38266:20;:::i;:::-;38261:25;;38305:1;38302;38299:8;38296:34;;;38310:18;;:::i;:::-;38296:34;38355:1;38352;38348:9;38340:17;;38172:191;;;;:::o;38369:96::-;38406:7;38435:24;38453:5;38435:24;:::i;:::-;38424:35;;38369:96;;;:::o;38471:90::-;38505:7;38548:5;38541:13;38534:21;38523:32;;38471:90;;;:::o;38567:149::-;38603:7;38643:66;38636:5;38632:78;38621:89;;38567:149;;;:::o;38722:126::-;38759:7;38799:42;38792:5;38788:54;38777:65;;38722:126;;;:::o;38854:77::-;38891:7;38920:5;38909:16;;38854:77;;;:::o;38937:154::-;39021:6;39016:3;39011;38998:30;39083:1;39074:6;39069:3;39065:16;39058:27;38937:154;;;:::o;39097:307::-;39165:1;39175:113;39189:6;39186:1;39183:13;39175:113;;;39274:1;39269:3;39265:11;39259:18;39255:1;39250:3;39246:11;39239:39;39211:2;39208:1;39204:10;39199:15;;39175:113;;;39306:6;39303:1;39300:13;39297:101;;;39386:1;39377:6;39372:3;39368:16;39361:27;39297:101;39146:258;39097:307;;;:::o;39410:320::-;39454:6;39491:1;39485:4;39481:12;39471:22;;39538:1;39532:4;39528:12;39559:18;39549:81;;39615:4;39607:6;39603:17;39593:27;;39549:81;39677:2;39669:6;39666:14;39646:18;39643:38;39640:84;;;39696:18;;:::i;:::-;39640:84;39461:269;39410:320;;;:::o;39736:281::-;39819:27;39841:4;39819:27;:::i;:::-;39811:6;39807:40;39949:6;39937:10;39934:22;39913:18;39901:10;39898:34;39895:62;39892:88;;;39960:18;;:::i;:::-;39892:88;40000:10;39996:2;39989:22;39779:238;39736:281;;:::o;40023:233::-;40062:3;40085:24;40103:5;40085:24;:::i;:::-;40076:33;;40131:66;40124:5;40121:77;40118:103;;;40201:18;;:::i;:::-;40118:103;40248:1;40241:5;40237:13;40230:20;;40023:233;;;:::o;40262:176::-;40294:1;40311:20;40329:1;40311:20;:::i;:::-;40306:25;;40345:20;40363:1;40345:20;:::i;:::-;40340:25;;40384:1;40374:35;;40389:18;;:::i;:::-;40374:35;40430:1;40427;40423:9;40418:14;;40262:176;;;;:::o;40444:180::-;40492:77;40489:1;40482:88;40589:4;40586:1;40579:15;40613:4;40610:1;40603:15;40630:180;40678:77;40675:1;40668:88;40775:4;40772:1;40765:15;40799:4;40796:1;40789:15;40816:180;40864:77;40861:1;40854:88;40961:4;40958:1;40951:15;40985:4;40982:1;40975:15;41002:180;41050:77;41047:1;41040:88;41147:4;41144:1;41137:15;41171:4;41168:1;41161:15;41188:180;41236:77;41233:1;41226:88;41333:4;41330:1;41323:15;41357:4;41354:1;41347:15;41374:180;41422:77;41419:1;41412:88;41519:4;41516:1;41509:15;41543:4;41540:1;41533:15;41560:117;41669:1;41666;41659:12;41683:117;41792:1;41789;41782:12;41806:117;41915:1;41912;41905:12;41929:117;42038:1;42035;42028:12;42052:117;42161:1;42158;42151:12;42175:117;42284:1;42281;42274:12;42298:102;42339:6;42390:2;42386:7;42381:2;42374:5;42370:14;42366:28;42356:38;;42298:102;;;:::o;42406:230::-;42546:34;42542:1;42534:6;42530:14;42523:58;42615:13;42610:2;42602:6;42598:15;42591:38;42406:230;:::o;42642:237::-;42782:34;42778:1;42770:6;42766:14;42759:58;42851:20;42846:2;42838:6;42834:15;42827:45;42642:237;:::o;42885:225::-;43025:34;43021:1;43013:6;43009:14;43002:58;43094:8;43089:2;43081:6;43077:15;43070:33;42885:225;:::o;43116:178::-;43256:30;43252:1;43244:6;43240:14;43233:54;43116:178;:::o;43300:::-;43440:30;43436:1;43428:6;43424:14;43417:54;43300:178;:::o;43484:226::-;43624:34;43620:1;43612:6;43608:14;43601:58;43693:9;43688:2;43680:6;43676:15;43669:34;43484:226;:::o;43716:165::-;43856:17;43852:1;43844:6;43840:14;43833:41;43716:165;:::o;43887:223::-;44027:34;44023:1;44015:6;44011:14;44004:58;44096:6;44091:2;44083:6;44079:15;44072:31;43887:223;:::o;44116:175::-;44256:27;44252:1;44244:6;44240:14;44233:51;44116:175;:::o;44297:176::-;44437:28;44433:1;44425:6;44421:14;44414:52;44297:176;:::o;44479:231::-;44619:34;44615:1;44607:6;44603:14;44596:58;44688:14;44683:2;44675:6;44671:15;44664:39;44479:231;:::o;44716:243::-;44856:34;44852:1;44844:6;44840:14;44833:58;44925:26;44920:2;44912:6;44908:15;44901:51;44716:243;:::o;44965:229::-;45105:34;45101:1;45093:6;45089:14;45082:58;45174:12;45169:2;45161:6;45157:15;45150:37;44965:229;:::o;45200:228::-;45340:34;45336:1;45328:6;45324:14;45317:58;45409:11;45404:2;45396:6;45392:15;45385:36;45200:228;:::o;45434:182::-;45574:34;45570:1;45562:6;45558:14;45551:58;45434:182;:::o;45622:231::-;45762:34;45758:1;45750:6;45746:14;45739:58;45831:14;45826:2;45818:6;45814:15;45807:39;45622:231;:::o;45859:155::-;45999:7;45995:1;45987:6;45983:14;45976:31;45859:155;:::o;46020:182::-;46160:34;46156:1;46148:6;46144:14;46137:58;46020:182;:::o;46208:167::-;46348:19;46344:1;46336:6;46332:14;46325:43;46208:167;:::o;46381:228::-;46521:34;46517:1;46509:6;46505:14;46498:58;46590:11;46585:2;46577:6;46573:15;46566:36;46381:228;:::o;46615:224::-;46755:34;46751:1;46743:6;46739:14;46732:58;46824:7;46819:2;46811:6;46807:15;46800:32;46615:224;:::o;46845:234::-;46985:34;46981:1;46973:6;46969:14;46962:58;47054:17;47049:2;47041:6;47037:15;47030:42;46845:234;:::o;47085:220::-;47225:34;47221:1;47213:6;47209:14;47202:58;47294:3;47289:2;47281:6;47277:15;47270:28;47085:220;:::o;47311:236::-;47451:34;47447:1;47439:6;47435:14;47428:58;47520:19;47515:2;47507:6;47503:15;47496:44;47311:236;:::o;47553:231::-;47693:34;47689:1;47681:6;47677:14;47670:58;47762:14;47757:2;47749:6;47745:15;47738:39;47553:231;:::o;47790:171::-;47930:23;47926:1;47918:6;47914:14;47907:47;47790:171;:::o;47967:221::-;48107:34;48103:1;48095:6;48091:14;48084:58;48176:4;48171:2;48163:6;48159:15;48152:29;47967:221;:::o;48194:122::-;48267:24;48285:5;48267:24;:::i;:::-;48260:5;48257:35;48247:63;;48306:1;48303;48296:12;48247:63;48194:122;:::o;48322:116::-;48392:21;48407:5;48392:21;:::i;:::-;48385:5;48382:32;48372:60;;48428:1;48425;48418:12;48372:60;48322:116;:::o;48444:120::-;48516:23;48533:5;48516:23;:::i;:::-;48509:5;48506:34;48496:62;;48554:1;48551;48544:12;48496:62;48444:120;:::o;48570:122::-;48643:24;48661:5;48643:24;:::i;:::-;48636:5;48633:35;48623:63;;48682:1;48679;48672:12;48623:63;48570:122;:::o
Swarm Source
ipfs://43860c4ca6d8f617947646feab52cdf1ce03456e7f932344608ca9d3e8b41109
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.